{
  "exports": [
    "Affix",
    "Popup",
    "Alert",
    "Calendar",
    "Kanban",
    "ListPanel",
    "AutoComplete",
    "Anchor",
    "AnchorLink",
    "Avatar",
    "AvatarGroup",
    "Breadcrumb",
    "BreadcrumbItem",
    "BackTop",
    "Badge",
    "Button",
    "ButtonGroup",
    "Card",
    "CardMeta",
    "Carousel",
    "CarouselItem",
    "Checkbox",
    "CheckboxGroup",
    "CheckCard",
    "CheckCardGroup",
    "Collapse",
    "CollapsePanel",
    "ColorPicker",
    "ColorPickerPanel",
    "DatePicker",
    "DatePickerPanel",
    "Descriptions",
    "DescriptionsItem",
    "Drawer",
    "Dropdown",
    "DropdownButton",
    "Divider",
    "Empty",
    "Form",
    "FormItem",
    "Flex",
    "FeatureCard",
    "FlameWrap",
    "FeedbackPanel",
    "Grid",
    "GridItem",
    "ImageGroup",
    "KImage",
    "Icon",
    "Input",
    "InputGroup",
    "TextArea",
    "InputTag",
    "InputNumber",
    "InputOTP",
    "Content",
    "Footer",
    "Header",
    "Layout",
    "Sider",
    "loading",
    "Menu",
    "MenuDivider",
    "MenuGroup",
    "MenuItem",
    "SubMenu",
    "message",
    "Mentions",
    "MessagePanel",
    "modal",
    "Modal",
    "ModalPanel",
    "notice",
    "NoticePanel",
    "Page",
    "PageHeader",
    "Poptip",
    "PoptipPanel",
    "Popconfirm",
    "PopconfirmPanel",
    "Progress",
    "Ripple",
    "QRCode",
    "Radio",
    "RadioButton",
    "RadioGroup",
    "Segmented",
    "Rate",
    "Result",
    "Option",
    "Select",
    "ConfigProvider",
    "Skeleton",
    "SkeletonAvatar",
    "SkeletonButton",
    "SkeletonImage",
    "SkeletonText",
    "StatCard",
    "StatNumber",
    "Slider",
    "Space",
    "Spin",
    "Step",
    "Steps",
    "Switch",
    "Splitter",
    "SplitterPanel",
    "Table",
    "TableColumnSetting",
    "Tooltip",
    "TooltipPanel",
    "Tour",
    "TabPanel",
    "Tabs",
    "TimeLine",
    "TimeLineItem",
    "Tree",
    "TreeSelect",
    "Cascader",
    "Tag",
    "Col",
    "Row",
    "Upload",
    "Watermark",
    "theme",
    "VirtualList",
    "getVirtualRange",
    "Transfer",
    "Typography",
    "TypographyParagraph",
    "TypographyText",
    "TypographyTitle",
    "version",
    "components",
    "default"
  ],
  "library": "react-kui",
  "version": "3.2.0",
  "framework": "react",
  "components": [
    {
      "name": "Affix",
      "import": "import { Affix } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/affix",
      "props": [
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "需要随滚动固定在指定位置的内容。",
          "descriptionEn": "Content to pin at the configured position while scrolling."
        },
        {
          "name": "offsetTop",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "距离目标顶部达到指定偏移量后触发",
          "descriptionEn": "Affix after reaching the specified offset from the target top"
        },
        {
          "name": "offsetBottom",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "距离目标底部达到指定偏移量后触发；设置后优先于 `offsetTop`",
          "descriptionEn": "Affix after reaching the specified offset from the target bottom; takes priority over `offsetTop`"
        },
        {
          "name": "target",
          "type": "(() => HTMLElement | Window | null) | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "defaultTarget",
          "descriptionZh": "设置 Affix 监听的滚动目标",
          "descriptionEn": "Scroll target observed by Affix"
        },
        {
          "name": "onChange",
          "type": "((affixed: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "固定状态改变时触发",
          "descriptionEn": "Called when the affixed state changes"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((affixed: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "固定状态改变时触发",
          "descriptionEn": "Called when the affixed state changes"
        }
      ],
      "renderProps": [
        "children",
        "target"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/affix/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Button, Affix } from \"react-kui\";\nexport default function App() {\n  const [top, setTop] = useState(100);\n  return (\n    <Affix offsetTop={top}>\n      <Button type=\"primary\" onClick={() => setTop((x) => x + 10)}>\n        Affix top ({top}px)\n      </Button>\n    </Affix>\n  );\n}"
        },
        {
          "id": "components/affix/demo/callbacks.tsx",
          "title": "固定状态改变的回调",
          "source": "import { useState } from \"react\";\nimport { Button, Affix } from \"react-kui\";\nexport default function App() {\n  const [fixed, setFixed] = useState(false);\n  return (\n    <>\n      <p>Status: {fixed ? \"fixed\" : \"reset\"}</p>\n      <Affix onChange={setFixed} offsetTop={200}>\n        <Button type=\"primary\">200px to affix top</Button>\n      </Affix>\n    </>\n  );\n}"
        },
        {
          "id": "components/affix/demo/container.tsx",
          "title": "滚动容器",
          "source": "import { useCallback, useRef } from \"react\";\nimport { Affix, Button } from \"react-kui\";\nexport default function App() {\n  const ref = useRef<HTMLDivElement>(null);\n  const target = useCallback(() => ref.current, []);\n  return (\n    <div\n      ref={ref}\n      style={{\n        height: 300,\n        overflowY: \"scroll\",\n        backgroundImage:\n          \"linear-gradient(-45deg, #cdcdcd 25%, #eeeeee50 0),linear-gradient(45deg, #cdcdcd 25%, #eeeeee50 0),    linear-gradient(-45deg, #eeeeee50 75%, #cdcdcd 0),    linear-gradient(45deg, #eeeeee50 75%, #cdcdcd 0)\",\n        backgroundSize: \"40px 40px\",\n        backgroundPosition: \"0 0,0 -20px,-20px 20px,20px 0\",\n      }}\n    >\n      <div style={{ height: 800, paddingTop: 50 }}>\n        <Affix target={target} offsetTop={50}>\n          <Button type=\"primary\">Affix at container top</Button>\n        </Affix>\n        <div style={{ height: 500 }} />\n        <Affix target={target} offsetBottom={50}>\n          <Button type=\"primary\">Affix at container bottom</Button>\n        </Affix>\n      </div>\n    </div>\n  );\n}"
        },
        {
          "id": "components/affix/demo/bottom.tsx",
          "title": "固定在底部",
          "source": "import { useState } from \"react\";\nimport { Button, Affix } from \"react-kui\";\nexport default function App() {\n  const [bottom, setBottom] = useState(120);\n  return (\n    <Affix offsetBottom={bottom}>\n      <Button type=\"primary\" onClick={() => setBottom((x) => x + 10)}>\n        {bottom}px to affix bottom\n      </Button>\n    </Affix>\n  );\n}"
        }
      ]
    },
    {
      "name": "Popup",
      "import": "import { Popup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/popup",
      "props": [
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "初始显示状态，后续属性变化会同步内部状态，配合 onOpenChange 同步",
          "descriptionEn": "Initial visibility; subsequent changes synchronize the state; synchronize through onOpenChange"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "禁止交互打开并取消待执行的打开操作，不强制覆盖 open",
          "descriptionEn": "Prevents opening and cancels delayed opening; does not override open"
        },
        {
          "name": "placement",
          "type": "PlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right",
            "left",
            "left-bottom",
            "left-top",
            "right",
            "right-top",
            "right-bottom"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "弹层方位，支持 12 个方向",
          "descriptionEn": "Popup placement; supports 12 positions"
        },
        {
          "name": "trigger",
          "type": "PopupTrigger | undefined",
          "required": false,
          "enumValues": [
            "manual",
            "hover",
            "click",
            "focus",
            "contextmenu"
          ],
          "boolean": false,
          "defaultExpression": "\"click\"",
          "descriptionZh": "触发方式；manual 仅由 open 或实例方法控制",
          "descriptionEn": "Trigger mode; manual uses open or instance methods"
        },
        {
          "name": "arrow",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "显示箭头",
          "descriptionEn": "Show arrow"
        },
        {
          "name": "offset",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "3",
          "descriptionZh": "定位间距（像素）",
          "descriptionEn": "Position offset in pixels"
        },
        {
          "name": "openDelay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "hover 打开延时（毫秒）",
          "descriptionEn": "Hover opening delay in milliseconds"
        },
        {
          "name": "closeDelay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "300",
          "descriptionZh": "hover / focus 关闭延时（毫秒）",
          "descriptionEn": "Hover / focus closing delay in milliseconds"
        },
        {
          "name": "closeOnOutsideClick",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "外部点击关闭，包含嵌套 Popup 的内容边界",
          "descriptionEn": "Close on outside click; nested Popup content counts as inside"
        },
        {
          "name": "closeOnEscape",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "Escape 关闭最上层 Popup 并还原触发器焦点",
          "descriptionEn": "Escape closes the top Popup and restores trigger focus"
        },
        {
          "name": "matchTriggerWidth",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "弹层最小宽度不小于触发器",
          "descriptionEn": "Use trigger width as the minimum popup width"
        },
        {
          "name": "getPopupContainer",
          "type": "(() => HTMLElement | null | undefined) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "挂载容器，默认使用 Config 配置或 body",
          "descriptionEn": "Container; falls back to Config or body"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "退出动画结束后销毁内容；默认保留表单状态",
          "descriptionEn": "Destroy after exit; preserves form state by default"
        },
        {
          "name": "target",
          "type": "React.RefObject<HTMLElement | null> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可选外部定位锚点；不自动绑定事件，配合 manual 和 open 使用",
          "descriptionEn": "Optional external positioning anchor; no event binding, use with manual and open"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean, detail: PopupOpenChangeDetail) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "请求改变显示状态，参数包含原因和原生事件",
          "descriptionEn": "Visibility change request with reason and native event"
        },
        {
          "name": "onAfterOpen",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "进入动画结束",
          "descriptionEn": "Called after entering"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "退出动画结束",
          "descriptionEn": "Called after leaving"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "触发元素；自定义组件需要转发 DOM ref 和事件",
          "descriptionEn": "Trigger; custom components must forward DOM ref and events"
        },
        {
          "name": "overlay",
          "type": "React.ReactNode | ((popup: PopupRef) => React.ReactNode)",
          "required": false,
          "boolean": false,
          "descriptionZh": "弹层内容或返回内容的渲染函数",
          "descriptionEn": "Overlay content or a render function"
        },
        {
          "name": "raw",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "复用唯一弹层根节点及其 DOM 引用，不增加包装元素",
          "descriptionEn": "Reuse the single overlay root and preserve its DOM ref; no extra wrapper"
        },
        {
          "name": "outsideEvent",
          "type": "\"click\" | \"mousedown\" | undefined",
          "required": false,
          "enumValues": [
            "click",
            "mousedown"
          ],
          "boolean": false,
          "defaultExpression": "\"click\"",
          "descriptionZh": "外部点击事件，适配选择器原有的关闭时机",
          "descriptionEn": "Outside pointer event used by legacy selector adapters"
        },
        {
          "name": "transitionDuration",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "300",
          "descriptionZh": "过渡时长（毫秒）",
          "descriptionEn": "Transition duration in milliseconds"
        },
        {
          "name": "getAnchorPosition",
          "type": "(() => { x: number; y: number; } | null) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可选视口坐标解析函数，用于 Mentions 光标定位",
          "descriptionEn": "Optional viewport point resolver, for caret-anchored Mentions"
        },
        {
          "name": "prefixCls",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"k-popup\"",
          "descriptionZh": "根样式前缀",
          "descriptionEn": "Root CSS prefix"
        },
        {
          "name": "transitionName",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "prefixCls",
          "descriptionZh": "动画类名前缀",
          "descriptionEn": "Transition CSS prefix"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只渲染内联内容，无定位、触发器或全局事件",
          "descriptionEn": "Inline content only; no positioning, trigger, or global listeners"
        },
        {
          "name": "triggerProps",
          "type": "React.HTMLAttributes<HTMLElement> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "触发器附加属性",
          "descriptionEn": "Additional trigger attributes"
        },
        {
          "name": "respectDefaultPrevented",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "遵循触发器 click 的 preventDefault",
          "descriptionEn": "Honor preventDefault on trigger click"
        },
        {
          "name": "contentStyle",
          "type": "React.CSSProperties | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "内容容器样式",
          "descriptionEn": "Content container styles"
        },
        {
          "name": "arrowContent",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义箭头内容",
          "descriptionEn": "Custom arrow content"
        },
        {
          "name": "hideWhenDetached",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "锚点不在视口时隐藏",
          "descriptionEn": "Hide when the anchor is outside the viewport"
        },
        {
          "name": "onTriggerKeyDown",
          "type": "((event: React.KeyboardEvent<HTMLElement>, popup: PopupRef) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "业务键盘处理",
          "descriptionEn": "Business keyboard handler"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onOpenChange",
          "type": "((open: boolean, detail: PopupOpenChangeDetail) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "请求改变显示状态，参数包含原因和原生事件",
          "descriptionEn": "Visibility change request with reason and native event"
        },
        {
          "name": "onAfterOpen",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "进入动画结束",
          "descriptionEn": "Called after entering"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "退出动画结束",
          "descriptionEn": "Called after leaving"
        },
        {
          "name": "onTriggerKeyDown",
          "type": "((event: React.KeyboardEvent<HTMLElement>, popup: PopupRef) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "业务键盘处理",
          "descriptionEn": "Business keyboard handler"
        }
      ],
      "renderProps": [
        "getPopupContainer",
        "children",
        "overlay",
        "getAnchorPosition",
        "arrowContent"
      ],
      "behavior": {
        "rules": [
          "Use children for the trigger and overlay for the popup content. open/onOpenChange synchronizes visibility; query the callback detail type for dismissal reasons.",
          "The shared Popup manages nested layers; do not implement an extra document-click closer that can close parent pickers during nested selections."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/popup/demo/basic.tsx",
          "title": "基础用法与自定义内容",
          "source": "import { Button, Input, Popup, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Popup\n      arrow\n      overlay={({ close }) => (\n        <Space vertical>\n          <strong>Quick note</strong>\n          <Input aria-label=\"Note\" placeholder=\"Write a note…\" />\n          <Button type=\"primary\" onClick={close}>\n            Done\n          </Button>\n        </Space>\n      )}\n    >\n      <Button>Open popup</Button>\n    </Popup>\n  );\n}"
        },
        {
          "id": "components/popup/demo/trigger.tsx",
          "title": "触发方式",
          "source": "import { Button, Popup, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap>\n      {([\"click\", \"hover\", \"focus\", \"contextmenu\"] as const).map((trigger) => (\n        <Popup\n          key={trigger}\n          trigger={trigger}\n          arrow\n          openDelay={150}\n          closeDelay={300}\n          overlay={<span>Opened by {trigger}</span>}\n        >\n          <Button>{trigger}</Button>\n        </Popup>\n      ))}\n      <Popup disabled overlay=\"Unavailable\">\n        <Button disabled>Disabled</Button>\n      </Popup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/popup/demo/placement.tsx",
          "title": "方位与箭头",
          "source": "import { useState } from \"react\";\nimport { Button, Checkbox, Popup, Space } from \"react-kui\";\nexport default function App() {\n  const [arrow, setArrow] = useState(true);\n  const placements = [\n    \"top-left\",\n    \"top\",\n    \"top-right\",\n    \"bottom-left\",\n    \"bottom\",\n    \"bottom-right\",\n    \"left-top\",\n    \"left\",\n    \"left-bottom\",\n    \"right-top\",\n    \"right\",\n    \"right-bottom\",\n  ] as const;\n  return (\n    <Space vertical>\n      <Checkbox checked={arrow} onChange={(event) => setArrow(event.checked)}>\n        Show arrow\n      </Checkbox>\n      <div\n        style={{\n          display: \"grid\",\n          gridTemplateColumns: \"repeat(3, minmax(0, 1fr))\",\n          gap: 8,\n          maxWidth: 420,\n        }}\n      >\n        {placements.map((placement) => (\n          <Popup\n            key={placement}\n            placement={placement}\n            arrow={arrow}\n            offset={10}\n            overlay={<span>{placement}</span>}\n          >\n            <Button>{placement}</Button>\n          </Popup>\n        ))}\n      </div>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/popup/demo/controlled.tsx",
          "title": "受控开关与实例方法",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Popup, Space, type PopupOpenReason, type PopupRef } from \"react-kui\";\nexport default function App() {\n  const [open, setOpen] = useState(false);\n  const [reason, setReason] = useState<PopupOpenReason>(\"programmatic\");\n  const popup = useRef<PopupRef>(null);\n  return (\n    <Space vertical>\n      <Space>\n        <Button\n          onClick={(event) => {\n            // This button is outside the anchor; do not treat this opening click as an outside click.\n            event.stopPropagation();\n            popup.current?.open();\n          }}\n        >\n          Open via ref\n        </Button>\n        <Popup\n          ref={popup}\n          trigger=\"manual\"\n          open={open}\n          onOpenChange={(next, detail) => {\n            setOpen(next);\n            setReason(detail.reason);\n          }}\n          overlay={({ close }) => (\n            <Space vertical>\n              <span>Click outside or press Escape.</span>\n              <Button onClick={close}>Close from inside</Button>\n            </Space>\n          )}\n        >\n          <Button onClick={() => setOpen(!open)}>Toggle controlled popup</Button>\n        </Popup>\n      </Space>\n      <span role=\"status\">\n        Open: {String(open)} · Reason: {reason}\n      </span>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/popup/demo/container.tsx",
          "title": "自定义挂载容器",
          "source": "import { useRef } from \"react\";\nimport { Button, Popup } from \"react-kui\";\nexport default function App() {\n  const container = useRef<HTMLDivElement>(null);\n  return (\n    <div\n      ref={container}\n      style={{\n        position: \"relative\",\n        minHeight: 200,\n        padding: 24,\n        border: \"1px dashed var(--kui-color-border)\",\n      }}\n    >\n      <Popup\n        getPopupContainer={() => container.current}\n        matchTriggerWidth\n        overlay={<span>Mounted inside this container.</span>}\n      >\n        <Button style={{ width: 240, maxWidth: \"100%\" }}>Custom container</Button>\n      </Popup>\n    </div>\n  );\n}"
        },
        {
          "id": "components/popup/demo/nested.tsx",
          "title": "嵌套弹层与选择器",
          "source": "import { useState } from \"react\";\nimport { Button, Popup, Select, Space } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState<string | number>(\"all\");\n  return (\n    <Popup\n      arrow\n      overlay={({ close }) => (\n        <Space vertical>\n          <strong>Filter results</strong>\n          <Select\n            style={{ width: 220 }}\n            value={value}\n            clearable={false}\n            options={[\n              { label: \"All\", value: \"all\" },\n              { label: \"Active\", value: \"active\" },\n            ]}\n            onChange={(next) => {\n              if (typeof next === \"string\" || typeof next === \"number\") setValue(next);\n            }}\n          />\n          <Popup placement=\"right\" overlay=\"This is a nested popup.\">\n            <Button>More details</Button>\n          </Popup>\n          <Button type=\"primary\" onClick={close}>\n            Apply\n          </Button>\n        </Space>\n      )}\n    >\n      <Button>Open filters</Button>\n    </Popup>\n  );\n}"
        }
      ]
    },
    {
      "name": "Alert",
      "import": "import { Alert } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/alert",
      "props": [
        {
          "name": "type",
          "type": "\"info\" | \"success\" | \"warning\" | \"error\" | undefined",
          "required": false,
          "enumValues": [
            "info",
            "success",
            "warning",
            "error"
          ],
          "boolean": false,
          "defaultExpression": "\"warning\"",
          "descriptionZh": "警告类型，可选值为 `success`、`info`、`warning`、`error`，不设置时是 `warning`",
          "descriptionEn": "Alert type, optional values are `success`, `info`, `warning`, `error` or not set"
        },
        {
          "name": "closable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示关闭按钮",
          "descriptionEn": "Whether to show the close button"
        },
        {
          "name": "showIcon",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示图标",
          "descriptionEn": "Whether to show the icon"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义的图标",
          "descriptionEn": "Custom icon"
        },
        {
          "name": "message",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "警告提示内容",
          "descriptionEn": "Alert content"
        },
        {
          "name": "description",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "警告提示的辅助性文字介绍",
          "descriptionEn": "Auxiliary text introduction for the alert"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示边框",
          "descriptionEn": "Whether to display the border"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"fill\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Surface theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "onClose",
          "type": "((e: React.MouseEvent<HTMLElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击关闭按钮时触发",
          "descriptionEn": "Triggered when the close button is clicked"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "退出动画结束后触发",
          "descriptionEn": "Triggered after the exit animation"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未提供有效 message 时展示的提示正文。",
          "descriptionEn": "Alert message content used when message is falsy."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onClose",
          "type": "((e: React.MouseEvent<HTMLElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击关闭按钮时触发",
          "descriptionEn": "Triggered when the close button is clicked"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "退出动画结束后触发",
          "descriptionEn": "Triggered after the exit animation"
        }
      ],
      "renderProps": [
        "message",
        "description",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/alert/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Space, Alert } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Alert showIcon={false} type=\"success\">\n        Success Text\n      </Alert>\n      <Alert showIcon={false} type=\"info\">\n        Info Text\n      </Alert>\n      <Alert showIcon={false} type=\"warning\">\n        Warning Text\n      </Alert>\n      <Alert showIcon={false} type=\"error\">\n        Error Text\n      </Alert>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/alert/demo/icon.tsx",
          "title": "图标",
          "source": "import { useState } from \"react\";\nimport { Checkbox, Space, Alert } from \"react-kui\";\n\nexport default function App() {\n  const [bordered, setBordered] = useState(true);\n  return (\n    <Space vertical block>\n      <Checkbox checked={bordered} onChange={({ checked }) => setBordered(checked)}>\n        Show border\n      </Checkbox>\n      <Alert type=\"success\" bordered={bordered}>\n        Success Text\n      </Alert>\n      <Alert type=\"info\" bordered={bordered}>\n        Info Text\n      </Alert>\n      <Alert type=\"warning\" bordered={bordered}>\n        Warning Text\n      </Alert>\n      <Alert type=\"error\" bordered={bordered}>\n        Error Text\n      </Alert>\n      <Alert\n        bordered={bordered}\n        type=\"success\"\n        message=\"Success Tip\"\n        description=\"Congratulations, the operation is successful.\"\n      />\n      <Alert\n        bordered={bordered}\n        type=\"info\"\n        message=\"Informational Notes\"\n        description=\"Congratulations, the operation is successful.\"\n      />\n      <Alert\n        bordered={bordered}\n        type=\"warning\"\n        message=\"Warning\"\n        description=\"Nuclear bomb launching base, please do not approach!\"\n      />\n      <Alert\n        bordered={bordered}\n        type=\"error\"\n        message=\"Error\"\n        description=\"Encountered an error, please press any key to continue.\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/alert/demo/close.tsx",
          "title": "可关闭",
          "source": "import { Space, Alert, Button } from \"react-kui\";\nimport { useState } from \"react\";\n\nexport default function App() {\n  const [visible, setVisible] = useState(true);\n  return (\n    <Space vertical block>\n      {visible ? (\n        <Alert type=\"success\" closable onAfterClose={() => setVisible(false)}>\n          Success Text\n        </Alert>\n      ) : (\n        <Button onClick={() => setVisible(true)}>Show Alert</Button>\n      )}\n      <Alert type=\"info\" closable>\n        Info Text\n      </Alert>\n      <Alert type=\"warning\" closable>\n        Warning Text\n      </Alert>\n      <Alert type=\"error\" closable>\n        Error Text\n      </Alert>\n      <Alert\n        type=\"success\"\n        closable\n        message=\"Success Tip\"\n        description=\"Congratulations, the operation is successful.\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/alert/demo/custom-icon.tsx",
          "title": "自定义图标",
          "source": "import { LogoAlipay, LogoApple, LogoGoogle, LogoWechat } from \"kui-icons\";\nimport { Space, Alert } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Alert type=\"success\" icon={LogoAlipay}>\n        Success Text\n      </Alert>\n      <Alert type=\"info\" icon={LogoWechat}>\n        Info Text\n      </Alert>\n      <Alert type=\"warning\" icon={LogoApple}>\n        Warning Text\n      </Alert>\n      <Alert type=\"error\" icon={LogoGoogle}>\n        Error Text\n      </Alert>\n      <Alert\n        type=\"success\"\n        icon={LogoAlipay}\n        message=\"Success Tip\"\n        description=\"Congratulations, the operation is successful.\"\n      />\n      <Alert\n        type=\"info\"\n        icon={LogoWechat}\n        message=\"Informational Notes\"\n        description=\"Congratulations, the operation is successful.\"\n      />\n      <Alert\n        type=\"warning\"\n        icon={LogoApple}\n        message=\"Warning\"\n        description=\"Nuclear bomb launching base, please do not approach!\"\n      />\n      <Alert\n        type=\"error\"\n        icon={LogoGoogle}\n        message=\"Error\"\n        description=\"Encountered an error, please press any key to continue.\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/alert/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Alert, Space, type SurfaceThemeType } from \"react-kui\";\n\n// The alert's colour comes from `type` and the tier only decides how much of it is shown, so the five rows\n// below keep one `type` and change nothing else: `fill` — the alert's own look — is that colour as a pale\n// plate, `solid` spreads the same colour over the whole bar and inverts its text, icon and close button,\n// `outline` and `plain` drop the plate and keep the border, `dashed` swaps that border for a dashed one.\n// An `error` alert stays red under `solid`; the primary is not involved.\nconst tiers: SurfaceThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <Space vertical block>\n      {tiers.map((tier) => (\n        <Alert key={tier} type=\"info\" theme={tier}>\n          theme: {tier}\n        </Alert>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Calendar",
      "import": "import { Calendar } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/calendar",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "日期",
          "descriptionEn": "date"
        },
        {
          "name": "events",
          "type": "CalendarEventData[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "日程事件",
          "descriptionEn": "Schedule events"
        },
        {
          "name": "firstDayOfWeek",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "每周起始日，0 为周日",
          "descriptionEn": "First day of week, where 0 is Sunday"
        },
        {
          "name": "maxEvents",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "3",
          "descriptionZh": "每个日期最多显示的事件数",
          "descriptionEn": "Maximum events per date"
        },
        {
          "name": "showToolbar",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示工具栏",
          "descriptionEn": "Whether to show the toolbar"
        },
        {
          "name": "todayText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "todayText ?? locale.k.datePicker.today ?? \"Today\"",
          "descriptionZh": "“今天”按钮的文本",
          "descriptionEn": "Text of the \"Today\" button"
        },
        {
          "name": "weekdays",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义星期名称，按周日至周六排列",
          "descriptionEn": "Custom labels ordered Sunday through Saturday"
        },
        {
          "name": "onChange",
          "type": "((date: string, cell: CalendarDateCell) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "日期变化回调",
          "descriptionEn": "Called when the date changes"
        },
        {
          "name": "onMonthChange",
          "type": "((value: { year: number; month: number; }) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "月份变化回调",
          "descriptionEn": "Called when the month changes"
        },
        {
          "name": "onEventClick",
          "type": "((event: CalendarEventData, cell: CalendarDateCell) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "事件点击回调",
          "descriptionEn": "Called when an event is clicked"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义标题内容",
          "descriptionEn": "Custom title content"
        },
        {
          "name": "extra",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "工具栏右侧额外内容",
          "descriptionEn": "Extra content on the right of the toolbar"
        },
        {
          "name": "dateCell",
          "type": "((cell: CalendarDateCell) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义日期单元格渲染",
          "descriptionEn": "Custom date cell renderer"
        },
        {
          "name": "event",
          "type": "((event: CalendarEventData, cell: CalendarDateCell) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义事件渲染",
          "descriptionEn": "Custom event renderer"
        },
        {
          "name": "more",
          "type": "((count: number, cell: CalendarDateCell) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义“更多”文本渲染",
          "descriptionEn": "Custom \"more\" text renderer"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((date: string, cell: CalendarDateCell) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "日期变化回调",
          "descriptionEn": "Called when the date changes"
        },
        {
          "name": "onMonthChange",
          "type": "((value: { year: number; month: number; }) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "月份变化回调",
          "descriptionEn": "Called when the month changes"
        },
        {
          "name": "onEventClick",
          "type": "((event: CalendarEventData, cell: CalendarDateCell) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "事件点击回调",
          "descriptionEn": "Called when an event is clicked"
        }
      ],
      "renderProps": [
        "title",
        "extra",
        "dateCell",
        "event",
        "more"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/calendar/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Calendar, message, type CalendarEventData } from \"react-kui\";\nconst events: CalendarEventData[] = [\n  { key: 1, date: \"2026-08-23\", time: \"10:00\", title: \"Product review\", color: \"#3a95ff\" },\n  { key: 2, date: \"2026-08-25\", title: \"Release\", color: \"#22a06b\" },\n];\nexport default function App() {\n  const [date, setDate] = useState(\"2026-08-23\");\n  return (\n    <Calendar\n      value={date}\n      events={events}\n      onChange={setDate}\n      onEventClick={(event) => message.info(event.title)}\n    />\n  );\n}"
        },
        {
          "id": "components/calendar/demo/custom.tsx",
          "title": "自定义内容",
          "source": "import { useState } from \"react\";\nimport { Calendar, Tag, type CalendarEventData } from \"react-kui\";\nconst events: CalendarEventData[] = [\n  { key: 1, date: \"2026-08-23\", title: \"需求评审\", color: \"#3a95ff\" },\n  { key: 2, date: \"2026-08-23\", title: \"设计同步\", color: \"#7b61ff\" },\n  { key: 3, date: \"2026-08-23\", title: \"版本发布\", color: \"#22a06b\" },\n];\nexport default function App() {\n  const [date, setDate] = useState(\"2026-08-23\");\n  return (\n    <Calendar\n      value={date}\n      onChange={setDate}\n      events={events}\n      maxEvents={2}\n      extra={<Tag color=\"blue\">Team calendar</Tag>}\n      event={(item) => (\n        <button\n          type=\"button\"\n          className=\"k-calendar-event\"\n          style={{ \"--k-calendar-event-color\": item.color } as React.CSSProperties}\n        >\n          <i />\n          {item.title}\n        </button>\n      )}\n      more={(count) => <span style={{ color: \"var(--kui-color-primary)\" }}>还有 {count} 项</span>}\n    />\n  );\n}"
        },
        {
          "id": "components/calendar/demo/locale.tsx",
          "title": "国际化",
          "source": "import { useState } from \"react\";\nimport en from \"react-kui/locale/en\";\nimport zhCN from \"react-kui/locale/zh-CN\";\nimport { Calendar, ConfigProvider, RadioGroup, Space } from \"react-kui\";\nexport default function App() {\n  const [language, setLanguage] = useState(\"zh\");\n  const [date, setDate] = useState(\"2026-08-23\");\n  return (\n    <Space vertical style={{ width: \"100%\" }}>\n      <RadioGroup\n        type=\"button\"\n        options={[\n          { label: \"中文\", value: \"zh\" },\n          { label: \"English\", value: \"en\" },\n        ]}\n        value={language}\n        onChange={(value) => setLanguage(String(value))}\n      />\n      <ConfigProvider locale={language === \"en\" ? en : zhCN}>\n        <Calendar value={date} onChange={setDate} />\n      </ConfigProvider>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Kanban",
      "import": "import { Kanban } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/kanban",
      "props": [
        {
          "name": "columns",
          "type": "KanbanColumnData[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "看板列",
          "descriptionEn": "Kanban columns"
        },
        {
          "name": "data",
          "type": "KanbanItemData[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "卡片数据",
          "descriptionEn": "Card data"
        },
        {
          "name": "rowKey",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"id\"",
          "descriptionZh": "数据唯一标识字段",
          "descriptionEn": "Unique data field"
        },
        {
          "name": "statusKey",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"status\"",
          "descriptionZh": "状态字段",
          "descriptionEn": "Status field"
        },
        {
          "name": "draggable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否允许拖拽",
          "descriptionEn": "Whether dragging is enabled"
        },
        {
          "name": "emptyText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "空列提示，默认使用全局语言配置",
          "descriptionEn": "Empty column text; defaults to the global locale"
        },
        {
          "name": "minColumnWidth",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "250",
          "descriptionZh": "最小列宽",
          "descriptionEn": "Minimum column width"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"fill\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Surface theme"
        },
        {
          "name": "onMove",
          "type": "((event: KanbanMoveEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片移动回调",
          "descriptionEn": "Called when a card moves"
        },
        {
          "name": "onItemClick",
          "type": "((item: KanbanItemData, column: KanbanColumnData) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片点击回调",
          "descriptionEn": "Called when a card is clicked"
        },
        {
          "name": "columnTitle",
          "type": "((column: KanbanColumnData, items: KanbanItemData[]) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义列标题渲染",
          "descriptionEn": "Custom column title renderer"
        },
        {
          "name": "item",
          "type": "((item: KanbanItemData, column: KanbanColumnData, index: number) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义卡片渲染",
          "descriptionEn": "Custom card renderer"
        },
        {
          "name": "empty",
          "type": "((column: KanbanColumnData) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义空列渲染",
          "descriptionEn": "Custom empty column renderer"
        },
        {
          "name": "footer",
          "type": "((column: KanbanColumnData, items: KanbanItemData[]) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义列底部渲染",
          "descriptionEn": "Custom column footer renderer"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onMove",
          "type": "((event: KanbanMoveEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片移动回调",
          "descriptionEn": "Called when a card moves"
        },
        {
          "name": "onItemClick",
          "type": "((item: KanbanItemData, column: KanbanColumnData) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片点击回调",
          "descriptionEn": "Called when a card is clicked"
        }
      ],
      "renderProps": [
        "columnTitle",
        "item",
        "empty",
        "footer"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/kanban/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Card, Kanban, type KanbanItemData, type KanbanMoveEvent } from \"react-kui\";\nconst columns = [\n  { key: \"todo\", title: \"Todo\", color: \"#87909c\" },\n  { key: \"doing\", title: \"Doing\", color: \"#3a95ff\" },\n  { key: \"done\", title: \"Done\", color: \"#22a06b\" },\n];\nexport default function App() {\n  const [tasks, setTasks] = useState<KanbanItemData[]>([\n    { id: 1, status: \"todo\", title: \"Define requirements\" },\n    { id: 2, status: \"doing\", title: \"Build component\" },\n  ]);\n  const move = ({ item, to }: KanbanMoveEvent) =>\n    setTasks((items) => items.map((entry) => (entry === item ? { ...entry, status: to } : entry)));\n  return (\n    <Kanban\n      columns={columns}\n      data={tasks}\n      onMove={move}\n      item={(item) => (\n        <Card size=\"small\" bordered>\n          {String(item.title)}\n        </Card>\n      )}\n    />\n  );\n}"
        },
        {
          "id": "components/kanban/demo/custom.tsx",
          "title": "自定义内容",
          "source": "import { Badge, Button, Card, Empty, Kanban, Space } from \"react-kui\";\nconst columns = [\n  { key: \"todo\", title: \"待处理\", color: \"#87909c\" },\n  { key: \"doing\", title: \"进行中\", color: \"#3a95ff\" },\n  { key: \"done\", title: \"已完成\", color: \"#22a06b\" },\n];\nconst tasks = [\n  { id: 1, status: \"todo\", title: \"整理需求\", owner: \"Mia\" },\n  { id: 2, status: \"doing\", title: \"开发看板\", owner: \"Alex\" },\n];\nexport default function App() {\n  return (\n    <Kanban\n      columns={columns}\n      data={tasks}\n      draggable={false}\n      columnTitle={(column, items) => (\n        <Space>\n          <Badge color={column.color} />\n          {column.title} ({items.length})\n        </Space>\n      )}\n      item={(item) => (\n        <Card size=\"small\">\n          <strong>{String(item.title)}</strong>\n          <p>{String(item.owner)}</p>\n        </Card>\n      )}\n      empty={() => <Empty description=\"当前没有任务\" />}\n      footer={(column) => <Button block>添加到 {column.title}</Button>}\n    />\n  );\n}"
        },
        {
          "id": "components/kanban/demo/fields.tsx",
          "title": "自定义字段",
          "source": "import { Card, Kanban, message } from \"react-kui\";\nconst columns = [\n  { key: 0, title: \"New\" },\n  { key: 1, title: \"Resolved\" },\n];\nconst tickets = [\n  { key: \"K-101\", stage: 0, summary: \"Login page feedback\" },\n  { key: \"K-102\", stage: 1, summary: \"Update dependencies\" },\n];\nexport default function App() {\n  return (\n    <Kanban\n      columns={columns}\n      data={tickets}\n      rowKey=\"key\"\n      statusKey=\"stage\"\n      minColumnWidth=\"220px\"\n      onItemClick={(item) => message.info(String(item.key))}\n      item={(item) => <Card size=\"small\">{String(item.summary)}</Card>}\n    />\n  );\n}"
        },
        {
          "id": "components/kanban/demo/theme.tsx",
          "title": "主题",
          "source": "import { useState } from \"react\";\nimport { Card, Kanban, RadioGroup, Space } from \"react-kui\";\nconst columns = [\n  { key: \"todo\", title: \"Todo\", color: \"#87909c\" },\n  { key: \"doing\", title: \"Doing\", color: \"#3a95ff\" },\n  { key: \"done\", title: \"Done\", color: \"#22a06b\" },\n];\nconst tasks = [\n  { id: 1, status: \"todo\", title: \"Define requirements\" },\n  { id: 2, status: \"doing\", title: \"Build component\" },\n];\nexport default function App() {\n  // The board offers the five tiers it paints; `underlined` is a control tier and would land back on `fill`.\n  const [theme, setTheme] = useState<\"fill\" | \"outline\" | \"plain\" | \"solid\" | \"dashed\">(\"fill\");\n  return (\n    <Space vertical block>\n      <RadioGroup\n        type=\"button\"\n        options={[\n          { label: \"Fill\", value: \"fill\" },\n          { label: \"Outline\", value: \"outline\" },\n          { label: \"Plain\", value: \"plain\" },\n          { label: \"Solid\", value: \"solid\" },\n          { label: \"Dashed\", value: \"dashed\" },\n        ]}\n        value={theme}\n        onChange={(value) => setTheme(value as typeof theme)}\n      />\n      <Kanban\n        columns={columns}\n        data={tasks}\n        theme={theme}\n        item={(item) => (\n          <Card size=\"small\" theme={theme}>\n            {String(item.title)}\n          </Card>\n        )}\n      />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "ListPanel",
      "import": "import { ListPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/list-panel",
      "props": [
        {
          "name": "summary",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "摘要内容",
          "descriptionEn": "Summary content"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示边框",
          "descriptionEn": "Whether to show a border"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"outline\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "selectedCount",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "已选数量",
          "descriptionEn": "Selected item count"
        },
        {
          "name": "filters",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "筛选区域",
          "descriptionEn": "Filter area"
        },
        {
          "name": "actions",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "操作区域",
          "descriptionEn": "Action area"
        },
        {
          "name": "selection",
          "type": "ReactNode | ((count: number) => ReactNode)",
          "required": false,
          "boolean": false,
          "descriptionZh": "批量操作栏",
          "descriptionEn": "Bulk action toolbar"
        },
        {
          "name": "footer",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "底部区域",
          "descriptionEn": "Footer area"
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "列表面板主体，位于工具栏之后、底部区域之前。",
          "descriptionEn": "Main list-panel content between its toolbar and footer."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "summary",
        "filters",
        "actions",
        "selection",
        "footer",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/list-panel/demo/basic.tsx",
          "title": "查询列表",
          "source": "import { Search } from \"kui-icons\";\nimport { Input, ListPanel, Select, Table } from \"react-kui\";\nimport { useState } from \"react\";\nconst columns = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Status\", key: \"status\" },\n];\nconst data = [\n  { key: 1, name: \"Alex\", status: \"Active\" },\n  { key: 2, name: \"Mia\", status: \"Disabled\" },\n];\nexport default function App() {\n  const [keyword, setKeyword] = useState(\"\");\n  const [status, setStatus] = useState<string | number>();\n  const filtered = data.filter(\n    (item) => (!keyword || item.name.includes(keyword)) && (!status || item.status === status),\n  );\n  return (\n    <ListPanel\n      summary={`${filtered.length} records`}\n      filters={\n        <>\n          <Input\n            value={keyword}\n            onChange={(next) => setKeyword(String(next))}\n            icon={Search}\n            placeholder=\"Search users\"\n            style={{ width: 200 }}\n          />\n          <Select\n            value={status}\n            onChange={(next) =>\n              setStatus(typeof next === \"string\" || typeof next === \"number\" ? next : undefined)\n            }\n            clearable\n            placeholder=\"All statuses\"\n            options={[\n              { label: \"Active\", value: \"Active\" },\n              { label: \"Disabled\", value: \"Disabled\" },\n            ]}\n          />\n        </>\n      }\n    >\n      <Table data={filtered} columns={columns} />\n    </ListPanel>\n  );\n}"
        },
        {
          "id": "components/list-panel/demo/actions.tsx",
          "title": "工具操作",
          "source": "import { Plus, RotateCcw, Search } from \"kui-icons\";\nimport { Button, Empty, Input, ListPanel } from \"react-kui\";\nexport default function App() {\n  return (\n    <ListPanel\n      summary=\"Updated just now\"\n      filters={<Input icon={Search} placeholder=\"Search projects\" style={{ width: 200 }} />}\n      actions={\n        <>\n          <Button icon={RotateCcw}>Reset</Button>\n          <Button type=\"primary\" icon={Plus}>\n            Create\n          </Button>\n        </>\n      }\n    >\n      <Empty description=\"No matching projects\" />\n    </ListPanel>\n  );\n}"
        },
        {
          "id": "components/list-panel/demo/footer.tsx",
          "title": "分页与外观",
          "source": "import { ListPanel, Page, Table } from \"react-kui\";\nconst columns = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Email\", key: \"email\" },\n];\nconst data = [{ key: 1, name: \"Alex\", email: \"alex@example.com\" }];\nexport default function App() {\n  return (\n    <ListPanel\n      summary=\"Total 128 users\"\n      size=\"small\"\n      shape=\"square\"\n      footer={<Page total={128} pageSize={10} showTotal />}\n    >\n      <Table data={data} columns={columns} size=\"small\" />\n    </ListPanel>\n  );\n}"
        },
        {
          "id": "components/list-panel/demo/selection.tsx",
          "title": "批量操作",
          "source": "import { Search } from \"kui-icons\";\nimport { Button, Input, ListPanel, Table } from \"react-kui\";\nimport { useState } from \"react\";\nconst columns = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Role\", key: \"role\" },\n];\nconst data = [\n  { key: 1, name: \"Alex\", role: \"Admin\" },\n  { key: 2, name: \"Mia\", role: \"Editor\" },\n  { key: 3, name: \"Leo\", role: \"Viewer\" },\n];\nexport default function App() {\n  const [selected, setSelected] = useState<(string | number)[]>([]);\n  return (\n    <ListPanel\n      selectedCount={selected.length}\n      selection={(count) => (\n        <>\n          <strong>{count} selected</strong>\n          <Button size=\"small\" theme=\"plain\">\n            Disable\n          </Button>\n          <Button size=\"small\" theme=\"plain\" onClick={() => setSelected([])}>\n            Clear\n          </Button>\n        </>\n      )}\n      filters={<Input icon={Search} placeholder=\"Search users\" style={{ width: 200 }} />}\n    >\n      <Table\n        checkable\n        selectedKeys={selected}\n        onSelectedKeysChange={setSelected}\n        data={data}\n        columns={columns}\n      />\n    </ListPanel>\n  );\n}"
        },
        {
          "id": "components/list-panel/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Button,\n  Input,\n  ListPanel,\n  RadioGroup,\n  Space,\n  Table,\n  type SurfaceThemeType,\n} from \"react-kui\";\n\nconst columns = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Role\", key: \"role\" },\n];\nconst data = [\n  { key: 1, name: \"Alex\", role: \"Admin\" },\n  { key: 2, name: \"Mia\", role: \"Editor\" },\n  { key: 3, name: \"Leo\", role: \"Viewer\" },\n];\n\n// The panel does not plate itself: the tier it is given is painted on the card it renders under the header,\n// so the five options change the plate and frame of the whole panel rather than one part of it. `solid` is\n// the tier that moves content — the result summary turns to light-on-primary text and the bulk-action strip\n// swaps its grey plate for a pale one on the primary. Select a row to make that strip appear.\nconst tiers: SurfaceThemeType[] = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  const [tier, setTier] = useState<SurfaceThemeType>(\"outline\");\n  const [selected, setSelected] = useState<(string | number)[]>([1]);\n  return (\n    <Space vertical block>\n      <RadioGroup\n        type=\"button\"\n        options={tiers.map((value) => ({ label: value, value }))}\n        value={tier}\n        onChange={(value) => setTier(value as SurfaceThemeType)}\n      />\n      <ListPanel\n        theme={tier}\n        summary={`${data.length} users`}\n        selectedCount={selected.length}\n        selection={(count) => (\n          <>\n            <strong>{count} selected</strong>\n            <Button size=\"small\" theme=\"plain\">\n              Disable\n            </Button>\n            <Button size=\"small\" theme=\"plain\" onClick={() => setSelected([])}>\n              Clear\n            </Button>\n          </>\n        )}\n        filters={<Input icon={Search} placeholder=\"Search users\" style={{ width: 200 }} />}\n      >\n        <Table\n          checkable\n          selectedKeys={selected}\n          onSelectedKeysChange={setSelected}\n          data={data}\n          columns={columns}\n        />\n      </ListPanel>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "AutoComplete",
      "import": "import { AutoComplete } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/auto-complete",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入值",
          "descriptionEn": "value"
        },
        {
          "name": "options",
          "type": "(string | AutoCompleteOption)[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_OPTIONS",
          "descriptionZh": "候选项",
          "descriptionEn": "Suggestions"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "展开状态",
          "descriptionEn": "open state"
        },
        {
          "name": "showOnEmpty",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "空输入聚焦时展示建议",
          "descriptionEn": "Show suggestions for an empty focused input"
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "有值且悬停时显示清除按钮",
          "descriptionEn": "Show clear button on hover"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否正在加载",
          "descriptionEn": "Loading state"
        },
        {
          "name": "loadingText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "加载提示文字",
          "descriptionEn": "Loading text"
        },
        {
          "name": "addonBefore",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框外部前置附件",
          "descriptionEn": "Addon before the input"
        },
        {
          "name": "addonAfter",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框外部后置附件",
          "descriptionEn": "Addon after the input"
        },
        {
          "name": "prefix",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框内部前缀",
          "descriptionEn": "Inline prefix"
        },
        {
          "name": "suffix",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框内部后缀",
          "descriptionEn": "Inline suffix"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "defaultExpression": "themeProp ?? inheritedAppearance.theme ?? \"fill\"",
          "descriptionZh": "主题，画在内部输入框上，可用档位与 Input 一致",
          "descriptionEn": "Theme, painted on the inner input box; supports the same tiers as Input"
        },
        {
          "name": "filterOption",
          "type": "boolean | ((input: string, option: AutoCompleteOption) => boolean) | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "true",
          "descriptionZh": "是否过滤或自定义过滤",
          "descriptionEn": "Filter strategy"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入变化",
          "descriptionEn": "Value change"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮",
          "descriptionEn": "Clear callback"
        },
        {
          "name": "onSearch",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索时触发",
          "descriptionEn": "Search callback"
        },
        {
          "name": "onSelect",
          "type": "((value: string, option: AutoCompleteOption) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择候选项",
          "descriptionEn": "Option selection"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开状态变化",
          "descriptionEn": "Open state change"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "form",
        "list",
        "step",
        "disabled",
        "width",
        "multiple",
        "pattern",
        "accept",
        "alt",
        "autoComplete",
        "capture",
        "checked",
        "formAction",
        "formEncType",
        "formMethod",
        "formNoValidate",
        "formTarget",
        "height",
        "max",
        "maxLength",
        "min",
        "minLength",
        "name",
        "placeholder",
        "readOnly",
        "required",
        "src",
        "type"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "form": "string",
        "list": "string",
        "disabled": "boolean",
        "multiple": "boolean",
        "pattern": "string",
        "accept": "string",
        "alt": "string",
        "checked": "boolean",
        "formEncType": "string",
        "formMethod": "string",
        "formNoValidate": "boolean",
        "formTarget": "string",
        "maxLength": "number",
        "minLength": "number",
        "name": "string",
        "placeholder": "string",
        "readOnly": "boolean",
        "required": "boolean",
        "src": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入变化",
          "descriptionEn": "Value change"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮",
          "descriptionEn": "Clear callback"
        },
        {
          "name": "onSearch",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索时触发",
          "descriptionEn": "Search callback"
        },
        {
          "name": "onSelect",
          "type": "((value: string, option: AutoCompleteOption) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择候选项",
          "descriptionEn": "Option selection"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开状态变化",
          "descriptionEn": "Open state change"
        }
      ],
      "renderProps": [
        "addonBefore",
        "addonAfter",
        "prefix",
        "suffix",
        "filterOption"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/auto-complete/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { AutoComplete } from \"react-kui\";\nimport { useState } from \"react\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <AutoComplete\n      value={value}\n      onChange={setValue}\n      clearable\n      placeholder=\"Please input\"\n      options={[\"Vue\", \"React\", \"Solid\", \"Svelte\"]}\n    />\n  );\n}"
        },
        {
          "id": "components/auto-complete/demo/addon.tsx",
          "title": "附件与前后缀",
          "source": "import { useState } from \"react\";\nimport { AutoComplete, Button, Space } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Space vertical block>\n      <AutoComplete\n        value={value}\n        onChange={setValue}\n        addonBefore=\"https://\"\n        addonAfter={<Button>OK</Button>}\n        placeholder=\"Please input domain\"\n        options={[\"kui\", \"kui-pro\", \"kui-admin\", \"kui-docs\"]}\n      />\n      <AutoComplete\n        prefix=\"@\"\n        suffix=\".cn\"\n        placeholder=\"Please input handle\"\n        options={[\"kui\", \"kui-pro\", \"kui-admin\", \"kui-docs\"]}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/auto-complete/demo/controlled.tsx",
          "title": "受控值",
          "source": "import { Button, Space, AutoComplete } from \"react-kui\";\nimport { useState } from \"react\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  const options = [\"Beijing\", \"Shanghai\", \"Guangzhou\", \"Shenzhen\", \"Hangzhou\"];\n  return (\n    <Space vertical>\n      <code>value: {value || \"-\"}</code>\n      <AutoComplete\n        value={value}\n        onChange={setValue}\n        options={options}\n        placeholder=\"Please choose city\"\n      />\n      <Button size=\"small\" onClick={() => setValue(\"Shenzhen\")}>\n        Shenzhen\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/auto-complete/demo/filter.tsx",
          "title": "自定义过滤",
          "source": "import { AutoComplete, type AutoCompleteOption } from \"react-kui\";\nimport { useState } from \"react\";\n\nconst options = [\"Apple\", \"Apricot\", \"Banana\", \"Blueberry\"];\nconst startsWith = (input: string, option: AutoCompleteOption) =>\n  option.value.toLowerCase().startsWith(input.toLowerCase());\n\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <AutoComplete\n      value={value}\n      onChange={setValue}\n      options={options}\n      filterOption={startsWith}\n      placeholder=\"Match names starting with only\"\n    />\n  );\n}"
        },
        {
          "id": "components/auto-complete/demo/appearance.tsx",
          "title": "尺寸、主题与形状",
          "source": "import { AutoComplete, Space } from \"react-kui\";\nconst options = [\"Vue\", \"Vite\", \"Vitest\"];\nexport default function App() {\n  return (\n    <Space vertical>\n      <AutoComplete size=\"small\" theme=\"plain\" options={options} placeholder=\"small / plain\" />\n      <AutoComplete theme=\"dashed\" options={options} placeholder=\"plain\" />\n      <AutoComplete\n        shape=\"square\"\n        theme=\"outline\"\n        options={options}\n        placeholder=\"square / outline\"\n      />\n      <AutoComplete size=\"large\" shape=\"circle\" options={options} placeholder=\"large / circle\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/auto-complete/demo/show-on-empty.tsx",
          "title": "空输入时展示",
          "source": "import { AutoComplete } from \"react-kui\";\nexport default function App() {\n  return (\n    <AutoComplete showOnEmpty options={[\"Vue\", \"React\", \"Angular\"]} placeholder=\"Please input\" />\n  );\n}"
        },
        {
          "id": "components/auto-complete/demo/remote.tsx",
          "title": "远程搜索",
          "source": "import { AutoComplete } from \"react-kui\";\nimport { useEffect, useRef, useState } from \"react\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  const [options, setOptions] = useState<string[]>([]);\n  const [loading, setLoading] = useState(false);\n  const timer = useRef<ReturnType<typeof setTimeout>>(undefined);\n  const controller = useRef<AbortController>(undefined);\n  useEffect(\n    () => () => {\n      clearTimeout(timer.current);\n      controller.current?.abort();\n    },\n    [],\n  );\n  const search = (keyword: string) => {\n    clearTimeout(timer.current);\n    controller.current?.abort();\n    if (!keyword.trim()) {\n      setLoading(false);\n      setOptions([]);\n      return;\n    }\n    setLoading(true);\n    timer.current = setTimeout(async () => {\n      const request = new AbortController();\n      controller.current = request;\n      try {\n        const response = await fetch(\n          `https://dummyjson.com/products/search?q=${encodeURIComponent(keyword)}&limit=8&select=title`,\n          { signal: request.signal },\n        );\n        if (!response.ok) throw new Error(`HTTP ${response.status}`);\n        const data = (await response.json()) as { products: Array<{ title: string }> };\n        setOptions(data.products.map((item) => item.title));\n      } catch (error) {\n        if (!(error instanceof DOMException && error.name === \"AbortError\")) setOptions([]);\n      } finally {\n        if (!request.signal.aborted) setLoading(false);\n      }\n    }, 300);\n  };\n  return (\n    <AutoComplete\n      value={value}\n      onChange={setValue}\n      options={options}\n      loading={loading}\n      placeholder=\"Please input.\"\n      onSearch={search}\n    />\n  );\n}"
        }
      ]
    },
    {
      "name": "Anchor",
      "import": "import { Anchor } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/anchor",
      "props": [
        {
          "name": "affix",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否使用 sticky 固定模式",
          "descriptionEn": "Whether to use sticky positioning"
        },
        {
          "name": "offsetTop",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "固定位置及锚点判定距离容器顶部的偏移",
          "descriptionEn": "Offset from the container top for positioning and activation"
        },
        {
          "name": "bounds",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "5",
          "descriptionZh": "锚点激活区域边界",
          "descriptionEn": "Anchor activation boundary"
        },
        {
          "name": "container",
          "type": "string | HTMLElement | Window | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定滚动容器",
          "descriptionEn": "Scroll container"
        },
        {
          "name": "onChange",
          "type": "((activeLink: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前激活锚点改变时触发",
          "descriptionEn": "Called when the active anchor changes"
        },
        {
          "name": "onClick",
          "type": "((link: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击锚点时触发",
          "descriptionEn": "Called when an anchor is clicked"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((activeLink: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前激活锚点改变时触发",
          "descriptionEn": "Called when the active anchor changes"
        },
        {
          "name": "onClick",
          "type": "((link: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击锚点时触发",
          "descriptionEn": "Called when an anchor is clicked"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/anchor/demo/basic.tsx",
          "title": "基础用法（侧边栏目录）",
          "source": "import { Anchor, AnchorLink } from \"react-kui\";\nexport default function App() {\n  return (\n    <div\n      className=\"anchor-demo-basic\"\n      style={{\n        display: \"grid\",\n        gridTemplateColumns: \"1fr 180px\",\n        gap: 24,\n        maxHeight: 500,\n        overflow: \"auto\",\n        padding: 24,\n      }}\n    >\n      <div>\n        {[\n          [\"part-1\", \"Basic\"],\n          [\"part-2\", \"Guide\"],\n          [\"part-3\", \"FAQ\"],\n        ].map(([id, title]) => (\n          <section\n            id={id}\n            key={id}\n            style={{\n              height: 500,\n              padding: 20,\n              background: \"var(--kui-color-bg-container)\",\n              marginBottom: 20,\n            }}\n          >\n            <h2>{title}</h2>\n            <p>Here is the {title.toLowerCase()} content...</p>\n          </section>\n        ))}\n      </div>\n      <div>\n        <Anchor offsetTop={20} container=\".anchor-demo-basic\">\n          <AnchorLink href=\"#part-1\" title=\"Basic\" />\n          <AnchorLink href=\"#part-2\" title=\"Guide\" />\n          <AnchorLink href=\"#part-3\" title=\"FAQ\" />\n        </Anchor>\n      </div>\n    </div>\n  );\n}"
        },
        {
          "id": "components/anchor/demo/nested-anchors.tsx",
          "title": "嵌套锚点（复杂文档结构）",
          "source": "import { Anchor, AnchorLink } from \"react-kui\";\nexport default function App() {\n  return (\n    <div\n      className=\"anchor-demo-nested\"\n      style={{\n        display: \"grid\",\n        gridTemplateColumns: \"1fr 200px\",\n        maxHeight: 500,\n        overflow: \"auto\",\n      }}\n    >\n      <div style={{ padding: 40 }}>\n        <h1 id=\"api\">API</h1>\n        <div style={{ height: 300 }} />\n        <h2 id=\"props\">Props</h2>\n        <div style={{ height: 260 }} />\n        <h3 id=\"anchor-props\">Anchor Props</h3>\n        <div style={{ height: 260 }} />\n        <h2 id=\"events\">Events</h2>\n        <div style={{ height: 400 }} />\n      </div>\n      <div style={{ paddingTop: 40 }}>\n        <Anchor container=\".anchor-demo-nested\">\n          <AnchorLink href=\"#api\" title=\"API\">\n            <AnchorLink href=\"#props\" title=\"Props\">\n              <AnchorLink href=\"#anchor-props\" title=\"Anchor Props\" />\n            </AnchorLink>\n            <AnchorLink href=\"#events\" title=\"Events\" />\n          </AnchorLink>\n        </Anchor>\n      </div>\n    </div>\n  );\n}"
        },
        {
          "id": "components/anchor/demo/within-container.tsx",
          "title": "指定容器（滚动容器内定位）",
          "source": "import { Anchor, AnchorLink } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"grid\", gridTemplateColumns: \"3fr 1fr\", gap: 10 }}>\n      <div\n        className=\"anchor-demo-scroll\"\n        style={{ height: 300, overflowY: \"auto\", border: \"1px solid var(--kui-color-border)\" }}\n      >\n        <div id=\"item-1\" style={{ height: 400, background: \"#e6f7ff3c\" }}>\n          content 1\n        </div>\n        <div id=\"item-2\" style={{ height: 400, background: \"#fff7e640\" }}>\n          content 2\n        </div>\n      </div>\n      <div>\n        <Anchor container=\".anchor-demo-scroll\">\n          <AnchorLink href=\"#item-1\" title=\"part 1\" />\n          <AnchorLink href=\"#item-2\" title=\"part 2\" />\n        </Anchor>\n      </div>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "AnchorLink",
      "import": "import { AnchorLink } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/anchor",
      "props": [
        {
          "name": "href",
          "type": "string",
          "required": true,
          "boolean": false,
          "descriptionZh": "锚点链接",
          "descriptionEn": "Anchor link"
        },
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "文字内容",
          "descriptionEn": "Text content"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "target",
        "type",
        "download",
        "hrefLang",
        "media",
        "ping",
        "referrerPolicy"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "type": "string",
        "hrefLang": "string",
        "media": "string",
        "ping": "string",
        "referrerPolicy": "string"
      },
      "events": [],
      "renderProps": [
        "title"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/anchor/demo/basic.tsx",
          "title": "基础用法（侧边栏目录）",
          "source": "import { Anchor, AnchorLink } from \"react-kui\";\nexport default function App() {\n  return (\n    <div\n      className=\"anchor-demo-basic\"\n      style={{\n        display: \"grid\",\n        gridTemplateColumns: \"1fr 180px\",\n        gap: 24,\n        maxHeight: 500,\n        overflow: \"auto\",\n        padding: 24,\n      }}\n    >\n      <div>\n        {[\n          [\"part-1\", \"Basic\"],\n          [\"part-2\", \"Guide\"],\n          [\"part-3\", \"FAQ\"],\n        ].map(([id, title]) => (\n          <section\n            id={id}\n            key={id}\n            style={{\n              height: 500,\n              padding: 20,\n              background: \"var(--kui-color-bg-container)\",\n              marginBottom: 20,\n            }}\n          >\n            <h2>{title}</h2>\n            <p>Here is the {title.toLowerCase()} content...</p>\n          </section>\n        ))}\n      </div>\n      <div>\n        <Anchor offsetTop={20} container=\".anchor-demo-basic\">\n          <AnchorLink href=\"#part-1\" title=\"Basic\" />\n          <AnchorLink href=\"#part-2\" title=\"Guide\" />\n          <AnchorLink href=\"#part-3\" title=\"FAQ\" />\n        </Anchor>\n      </div>\n    </div>\n  );\n}"
        },
        {
          "id": "components/anchor/demo/nested-anchors.tsx",
          "title": "嵌套锚点（复杂文档结构）",
          "source": "import { Anchor, AnchorLink } from \"react-kui\";\nexport default function App() {\n  return (\n    <div\n      className=\"anchor-demo-nested\"\n      style={{\n        display: \"grid\",\n        gridTemplateColumns: \"1fr 200px\",\n        maxHeight: 500,\n        overflow: \"auto\",\n      }}\n    >\n      <div style={{ padding: 40 }}>\n        <h1 id=\"api\">API</h1>\n        <div style={{ height: 300 }} />\n        <h2 id=\"props\">Props</h2>\n        <div style={{ height: 260 }} />\n        <h3 id=\"anchor-props\">Anchor Props</h3>\n        <div style={{ height: 260 }} />\n        <h2 id=\"events\">Events</h2>\n        <div style={{ height: 400 }} />\n      </div>\n      <div style={{ paddingTop: 40 }}>\n        <Anchor container=\".anchor-demo-nested\">\n          <AnchorLink href=\"#api\" title=\"API\">\n            <AnchorLink href=\"#props\" title=\"Props\">\n              <AnchorLink href=\"#anchor-props\" title=\"Anchor Props\" />\n            </AnchorLink>\n            <AnchorLink href=\"#events\" title=\"Events\" />\n          </AnchorLink>\n        </Anchor>\n      </div>\n    </div>\n  );\n}"
        },
        {
          "id": "components/anchor/demo/within-container.tsx",
          "title": "指定容器（滚动容器内定位）",
          "source": "import { Anchor, AnchorLink } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"grid\", gridTemplateColumns: \"3fr 1fr\", gap: 10 }}>\n      <div\n        className=\"anchor-demo-scroll\"\n        style={{ height: 300, overflowY: \"auto\", border: \"1px solid var(--kui-color-border)\" }}\n      >\n        <div id=\"item-1\" style={{ height: 400, background: \"#e6f7ff3c\" }}>\n          content 1\n        </div>\n        <div id=\"item-2\" style={{ height: 400, background: \"#fff7e640\" }}>\n          content 2\n        </div>\n      </div>\n      <div>\n        <Anchor container=\".anchor-demo-scroll\">\n          <AnchorLink href=\"#item-1\" title=\"part 1\" />\n          <AnchorLink href=\"#item-2\" title=\"part 2\" />\n        </Anchor>\n      </div>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Avatar",
      "import": "import { Avatar } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/avatar",
      "props": [
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "设置头像图标，也可覆盖图片加载失败时默认的 User 图标",
          "descriptionEn": "Avatar icon; overrides the default User fallback when an image fails"
        },
        {
          "name": "shape",
          "type": "AvatarShape | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "\"circle\"",
          "descriptionZh": "指定头像形状",
          "descriptionEn": "Avatar shape"
        },
        {
          "name": "size",
          "type": "AvatarSize | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"default\"",
          "descriptionZh": "设置头像大小",
          "descriptionEn": "Avatar size"
        },
        {
          "name": "src",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片资源地址",
          "descriptionEn": "Image source"
        },
        {
          "name": "alt",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片无法显示时的替代文本",
          "descriptionEn": "Alternative text when the image cannot be displayed"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "头像内的文本或自定义内容，在图片和图标未显示时使用。",
          "descriptionEn": "Avatar text or custom content used when no image or icon is displayed."
        },
        {
          "name": "onError",
          "type": "((event: React.SyntheticEvent<HTMLImageElement>) => boolean | void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片加载失败回调；返回 `false` 可阻止切换回退内容",
          "descriptionEn": "Image error callback; return `false` to prevent rendering fallback"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onError",
          "type": "((event: React.SyntheticEvent<HTMLImageElement>) => boolean | void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片加载失败回调；返回 `false` 可阻止切换回退内容",
          "descriptionEn": "Image error callback; return `false` to prevent rendering fallback"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/avatar/demo/basic.tsx",
          "title": "基本",
          "source": "import { Space, Avatar } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <>\n      <Space>\n        <Avatar size={64}>U</Avatar>\n        <Avatar size=\"large\">U</Avatar>\n        <Avatar>U</Avatar>\n        <Avatar size=\"small\">U</Avatar>\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <Avatar shape=\"square\" size={64}>\n          U\n        </Avatar>\n        <Avatar shape=\"square\" size=\"large\">\n          U\n        </Avatar>\n        <Avatar shape=\"square\">U</Avatar>\n        <Avatar shape=\"square\" size=\"small\">\n          U\n        </Avatar>\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <Avatar shape=\"round\" size={64}>\n          U\n        </Avatar>\n        <Avatar shape=\"round\" size=\"large\">\n          U\n        </Avatar>\n        <Avatar shape=\"round\">U</Avatar>\n        <Avatar shape=\"round\" size=\"small\">\n          U\n        </Avatar>\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/avatar/demo/types.tsx",
          "title": "类型",
          "source": "import { Heart } from \"kui-icons\";\nimport { Icon, Space, Avatar } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space wrap>\n      <Avatar icon={Heart} />\n      <Avatar>\n        <Icon type={Heart} />\n      </Avatar>\n      <Avatar>U</Avatar>\n      <Avatar>USER</Avatar>\n      <Avatar src=\"https://cdn.chuchur.com/img/icons/apple-icon-57x57.png\" />\n      <Avatar style={{ color: \"#f51212\", backgroundColor: \"#ffc57d\" }}>U</Avatar>\n      <Avatar style={{ backgroundColor: \"#d06868\" }} icon={Heart} />\n      <br />\n      <br />\n      <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" size={50} />\n      <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" shape=\"square\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/avatar/demo/badge-group.tsx",
          "title": "带徽标和分组",
          "source": "import { Heart, User } from \"kui-icons\";\nimport { Badge, Space, Avatar, AvatarGroup } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <>\n      <Space>\n        <Badge count={1}>\n          <Avatar shape=\"square\" icon={User} />\n        </Badge>\n        <Badge dot>\n          <Avatar shape=\"square\" icon={User} />\n        </Badge>\n      </Space>\n      <br />\n      <br />\n      <Space vertical>\n        <AvatarGroup size=\"small\">\n          <Avatar>U</Avatar>\n          <Avatar>UI</Avatar>\n          <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" />\n          <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" />\n        </AvatarGroup>\n        <AvatarGroup>\n          <Avatar>U</Avatar>\n          <Avatar>USER</Avatar>\n          <Avatar src=\"https://cdn.chuchur.com/img/icons/apple-icon-57x57.png\" />\n          <Avatar style={{ color: \"#f51212\", backgroundColor: \"#ffc57d\" }}>U</Avatar>\n          <Avatar style={{ backgroundColor: \"#d06868\" }} icon={Heart} />\n          <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" />\n          <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" />\n        </AvatarGroup>\n        <AvatarGroup size=\"large\" spacing={4} maxCount={4}>\n          <Avatar>U</Avatar>\n          <Avatar>UI</Avatar>\n          <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" />\n          <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" />\n          <Avatar icon={Heart} />\n        </AvatarGroup>\n        <code>large · spacing: 4</code>\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/avatar/demo/change.tsx",
          "title": "自动调整字符大小",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Avatar } from \"react-kui\";\n\nconst userList = [\"K\", \"Zhang\", \"Mr Qiu\", \"Jack cheng\", \"Jone Blue\"];\nconst colorList = [\"#3a95ff\", \"#00bb5d\", \"#ff3300\", \"#ffa500\"];\nconst randomIndex = (length: number) => Math.floor(Math.random() * length);\n\nexport default function App() {\n  const [text, setText] = useState(userList[0]);\n  const [color, setColor] = useState(colorList[0]);\n  const changeValue = () => {\n    setText(userList[randomIndex(userList.length)]);\n    setColor(colorList[randomIndex(colorList.length)]);\n  };\n  return (\n    <Space>\n      <Avatar size=\"large\" style={{ backgroundColor: color, verticalAlign: \"middle\" }}>\n        {text}\n      </Avatar>\n      <Button size=\"small\" onClick={changeValue}>\n        change\n      </Button>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "AvatarGroup",
      "import": "import { AvatarGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/avatar",
      "props": [
        {
          "name": "maxCount",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "最多展示多少个头像",
          "descriptionEn": "Maximum number of avatars to display"
        },
        {
          "name": "spacing",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "子头像的重叠距离，`0` 表示不重叠",
          "descriptionEn": "Child avatar overlap in pixels; `0` disables overlap"
        },
        {
          "name": "shape",
          "type": "AvatarShape | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "\"circle\"",
          "descriptionZh": "统一子头像形状",
          "descriptionEn": "Sets the shape of all child avatars"
        },
        {
          "name": "size",
          "type": "AvatarSize | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"default\"",
          "descriptionZh": "统一子头像尺寸，并按尺寸自动调整头像重叠距离",
          "descriptionEn": "Sets child size and adjusts their overlap proportionally"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "要组合展示的 Avatar 子节点；超出 maxCount 的部分由组处理。",
          "descriptionEn": "Avatar children to group; the group handles items exceeding maxCount."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/avatar/demo/basic.tsx",
          "title": "基本",
          "source": "import { Space, Avatar } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <>\n      <Space>\n        <Avatar size={64}>U</Avatar>\n        <Avatar size=\"large\">U</Avatar>\n        <Avatar>U</Avatar>\n        <Avatar size=\"small\">U</Avatar>\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <Avatar shape=\"square\" size={64}>\n          U\n        </Avatar>\n        <Avatar shape=\"square\" size=\"large\">\n          U\n        </Avatar>\n        <Avatar shape=\"square\">U</Avatar>\n        <Avatar shape=\"square\" size=\"small\">\n          U\n        </Avatar>\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <Avatar shape=\"round\" size={64}>\n          U\n        </Avatar>\n        <Avatar shape=\"round\" size=\"large\">\n          U\n        </Avatar>\n        <Avatar shape=\"round\">U</Avatar>\n        <Avatar shape=\"round\" size=\"small\">\n          U\n        </Avatar>\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/avatar/demo/types.tsx",
          "title": "类型",
          "source": "import { Heart } from \"kui-icons\";\nimport { Icon, Space, Avatar } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space wrap>\n      <Avatar icon={Heart} />\n      <Avatar>\n        <Icon type={Heart} />\n      </Avatar>\n      <Avatar>U</Avatar>\n      <Avatar>USER</Avatar>\n      <Avatar src=\"https://cdn.chuchur.com/img/icons/apple-icon-57x57.png\" />\n      <Avatar style={{ color: \"#f51212\", backgroundColor: \"#ffc57d\" }}>U</Avatar>\n      <Avatar style={{ backgroundColor: \"#d06868\" }} icon={Heart} />\n      <br />\n      <br />\n      <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" size={50} />\n      <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" shape=\"square\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/avatar/demo/badge-group.tsx",
          "title": "带徽标和分组",
          "source": "import { Heart, User } from \"kui-icons\";\nimport { Badge, Space, Avatar, AvatarGroup } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <>\n      <Space>\n        <Badge count={1}>\n          <Avatar shape=\"square\" icon={User} />\n        </Badge>\n        <Badge dot>\n          <Avatar shape=\"square\" icon={User} />\n        </Badge>\n      </Space>\n      <br />\n      <br />\n      <Space vertical>\n        <AvatarGroup size=\"small\">\n          <Avatar>U</Avatar>\n          <Avatar>UI</Avatar>\n          <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" />\n          <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" />\n        </AvatarGroup>\n        <AvatarGroup>\n          <Avatar>U</Avatar>\n          <Avatar>USER</Avatar>\n          <Avatar src=\"https://cdn.chuchur.com/img/icons/apple-icon-57x57.png\" />\n          <Avatar style={{ color: \"#f51212\", backgroundColor: \"#ffc57d\" }}>U</Avatar>\n          <Avatar style={{ backgroundColor: \"#d06868\" }} icon={Heart} />\n          <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" />\n          <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" />\n        </AvatarGroup>\n        <AvatarGroup size=\"large\" spacing={4} maxCount={4}>\n          <Avatar>U</Avatar>\n          <Avatar>UI</Avatar>\n          <Avatar src=\"https://cdn.chuchur.com/img/chick.jpeg\" />\n          <Avatar src=\"https://cdn.chuchur.com/img/monkey.jpeg\" />\n          <Avatar icon={Heart} />\n        </AvatarGroup>\n        <code>large · spacing: 4</code>\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/avatar/demo/change.tsx",
          "title": "自动调整字符大小",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Avatar } from \"react-kui\";\n\nconst userList = [\"K\", \"Zhang\", \"Mr Qiu\", \"Jack cheng\", \"Jone Blue\"];\nconst colorList = [\"#3a95ff\", \"#00bb5d\", \"#ff3300\", \"#ffa500\"];\nconst randomIndex = (length: number) => Math.floor(Math.random() * length);\n\nexport default function App() {\n  const [text, setText] = useState(userList[0]);\n  const [color, setColor] = useState(colorList[0]);\n  const changeValue = () => {\n    setText(userList[randomIndex(userList.length)]);\n    setColor(colorList[randomIndex(colorList.length)]);\n  };\n  return (\n    <Space>\n      <Avatar size=\"large\" style={{ backgroundColor: color, verticalAlign: \"middle\" }}>\n        {text}\n      </Avatar>\n      <Button size=\"small\" onClick={changeValue}>\n        change\n      </Button>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Breadcrumb",
      "import": "import { Breadcrumb } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/breadcrumb",
      "props": [
        {
          "name": "separator",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"/\"",
          "descriptionZh": "自定义分隔符",
          "descriptionEn": "Custom separator"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "面包屑节点",
          "descriptionEn": "Breadcrumb items"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "separator",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/breadcrumb/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Breadcrumb, BreadcrumbItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <p>use href</p>\n      <Breadcrumb>\n        <BreadcrumbItem href=\"/\">Home</BreadcrumbItem>\n        <BreadcrumbItem href=\"/components/breadcrumb\">Breadcrumb</BreadcrumbItem>\n        <BreadcrumbItem>Other</BreadcrumbItem>\n      </Breadcrumb>\n      <p>use anchor child</p>\n      <Breadcrumb>\n        <BreadcrumbItem>\n          <a href=\"/\">Home</a>\n        </BreadcrumbItem>\n        <BreadcrumbItem>\n          <a href=\"/components/breadcrumb\">Breadcrumb</a>\n        </BreadcrumbItem>\n        <BreadcrumbItem>Other</BreadcrumbItem>\n      </Breadcrumb>\n    </>\n  );\n}"
        },
        {
          "id": "components/breadcrumb/demo/icon.tsx",
          "title": "设置图标",
          "source": "import { Cloud, Heart, House } from \"kui-icons\";\nimport { Breadcrumb, BreadcrumbItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <Breadcrumb>\n      <BreadcrumbItem href=\"/\" icon={House}>\n        Home\n      </BreadcrumbItem>\n      <BreadcrumbItem href=\"/components/breadcrumb\" icon={Cloud}>\n        App\n      </BreadcrumbItem>\n      <BreadcrumbItem icon={Heart}>Other</BreadcrumbItem>\n    </Breadcrumb>\n  );\n}"
        },
        {
          "id": "components/breadcrumb/demo/separator.tsx",
          "title": "分隔符",
          "source": "import { Cloud, Heart, House } from \"kui-icons\";\nimport { Space, Breadcrumb, BreadcrumbItem } from \"react-kui\";\nconst Items = () => (\n  <>\n    <BreadcrumbItem href=\"/\" icon={House} />\n    <BreadcrumbItem href=\"/components/breadcrumb\" icon={Cloud}>\n      Breadcrumb\n    </BreadcrumbItem>\n    <BreadcrumbItem icon={Heart}>Other</BreadcrumbItem>\n  </>\n);\nexport default function App() {\n  return (\n    <Space vertical>\n      <Breadcrumb separator=\">\">\n        <Items />\n      </Breadcrumb>\n      <Breadcrumb separator={<span style={{ color: \"red\" }}>›</span>}>\n        <Items />\n      </Breadcrumb>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "BreadcrumbItem",
      "import": "import { BreadcrumbItem } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/breadcrumb",
      "props": [
        {
          "name": "href",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "链接地址",
          "descriptionEn": "Link URL"
        },
        {
          "name": "target",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "链接打开方式",
          "descriptionEn": "Link browsing context"
        },
        {
          "name": "rel",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "链接关系属性",
          "descriptionEn": "Link relationship"
        },
        {
          "name": "icon",
          "type": "React.ReactNode | IconType[]",
          "required": false,
          "boolean": false,
          "descriptionZh": "节点图标",
          "descriptionEn": "Item icon"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "节点内容",
          "descriptionEn": "Breadcrumb item content"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "icon",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/breadcrumb/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Breadcrumb, BreadcrumbItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <p>use href</p>\n      <Breadcrumb>\n        <BreadcrumbItem href=\"/\">Home</BreadcrumbItem>\n        <BreadcrumbItem href=\"/components/breadcrumb\">Breadcrumb</BreadcrumbItem>\n        <BreadcrumbItem>Other</BreadcrumbItem>\n      </Breadcrumb>\n      <p>use anchor child</p>\n      <Breadcrumb>\n        <BreadcrumbItem>\n          <a href=\"/\">Home</a>\n        </BreadcrumbItem>\n        <BreadcrumbItem>\n          <a href=\"/components/breadcrumb\">Breadcrumb</a>\n        </BreadcrumbItem>\n        <BreadcrumbItem>Other</BreadcrumbItem>\n      </Breadcrumb>\n    </>\n  );\n}"
        },
        {
          "id": "components/breadcrumb/demo/icon.tsx",
          "title": "设置图标",
          "source": "import { Cloud, Heart, House } from \"kui-icons\";\nimport { Breadcrumb, BreadcrumbItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <Breadcrumb>\n      <BreadcrumbItem href=\"/\" icon={House}>\n        Home\n      </BreadcrumbItem>\n      <BreadcrumbItem href=\"/components/breadcrumb\" icon={Cloud}>\n        App\n      </BreadcrumbItem>\n      <BreadcrumbItem icon={Heart}>Other</BreadcrumbItem>\n    </Breadcrumb>\n  );\n}"
        },
        {
          "id": "components/breadcrumb/demo/separator.tsx",
          "title": "分隔符",
          "source": "import { Cloud, Heart, House } from \"kui-icons\";\nimport { Space, Breadcrumb, BreadcrumbItem } from \"react-kui\";\nconst Items = () => (\n  <>\n    <BreadcrumbItem href=\"/\" icon={House} />\n    <BreadcrumbItem href=\"/components/breadcrumb\" icon={Cloud}>\n      Breadcrumb\n    </BreadcrumbItem>\n    <BreadcrumbItem icon={Heart}>Other</BreadcrumbItem>\n  </>\n);\nexport default function App() {\n  return (\n    <Space vertical>\n      <Breadcrumb separator=\">\">\n        <Items />\n      </Breadcrumb>\n      <Breadcrumb separator={<span style={{ color: \"red\" }}>›</span>}>\n        <Items />\n      </Breadcrumb>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "BackTop",
      "import": "import { BackTop } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/back-top",
      "props": [
        {
          "name": "height",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "100",
          "descriptionZh": "页面滚动高度达到该值时才显示 `BackTop` 组件",
          "descriptionEn": "The BackTop component is displayed only when the scroll height reaches this value"
        },
        {
          "name": "right",
          "type": "Property.Right<string | number> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件距离右部的距离",
          "descriptionEn": "Distance from the right"
        },
        {
          "name": "bottom",
          "type": "Property.Bottom<string | number> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件距离底部的距离",
          "descriptionEn": "Distance from the bottom"
        },
        {
          "name": "behavior",
          "type": "ScrollBehavior | undefined",
          "required": false,
          "enumValues": [
            "auto",
            "smooth",
            "instant"
          ],
          "boolean": false,
          "defaultExpression": "\"smooth\"",
          "descriptionZh": "滚动行为",
          "descriptionEn": "Scroll behavior"
        },
        {
          "name": "target",
          "type": "(() => HTMLElement | null) | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "defaultTarget",
          "descriptionZh": "需要回顶部的容器",
          "descriptionEn": "Scroll container"
        },
        {
          "name": "onClick",
          "type": "((event: MouseEvent<HTMLDivElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击按钮时触发",
          "descriptionEn": "Triggered when the button is clicked"
        },
        {
          "name": "onVisibleChange",
          "type": "((visible: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Triggered when visibility changes"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onClick",
          "type": "((event: MouseEvent<HTMLDivElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击按钮时触发",
          "descriptionEn": "Triggered when the button is clicked"
        },
        {
          "name": "onVisibleChange",
          "type": "((visible: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Triggered when visibility changes"
        }
      ],
      "renderProps": [
        "target"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/back-top/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { BackTop } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <BackTop />\n      Scroll down the page; the gray button is the default effect.\n    </div>\n  );\n}"
        },
        {
          "id": "components/back-top/demo/custom.tsx",
          "title": "自定义按钮",
          "source": "import { BackTop } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <BackTop bottom={100}>\n        <div\n          style={{\n            background: \"#2d94ff\",\n            height: 40,\n            lineHeight: \"40px\",\n            textAlign: \"center\",\n            color: \"white\",\n            padding: \"0 10px\",\n          }}\n        >\n          UP\n        </div>\n      </BackTop>\n      The custom button is the blue button.\n    </div>\n  );\n}"
        },
        {
          "id": "components/back-top/demo/target.tsx",
          "title": "自定义滚动容器",
          "source": "import { useRef } from \"react\";\nimport { BackTop } from \"react-kui\";\n\nexport default function App() {\n  const container = useRef<HTMLDivElement>(null);\n  return (\n    <div\n      ref={container}\n      style={{ height: 180, overflow: \"auto\", border: \"1px solid var(--kui-control-border, var(--kui-color-border))\" }}\n    >\n      <div style={{ height: 600, padding: 16 }}>Scroll this container</div>\n      <BackTop target={() => container.current} height={80} right={100} />\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Badge",
      "import": "import { Badge } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/badge",
      "props": [
        {
          "name": "count",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的文字",
          "descriptionEn": "The text to display"
        },
        {
          "name": "dot",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "不展示数字，只有一个小红点",
          "descriptionEn": "Do not display the number, only a small red dot"
        },
        {
          "name": "pill",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "使用胶囊形状显示徽标",
          "descriptionEn": "Display the badge with a pill shape"
        },
        {
          "name": "active",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "小红点为激活状态",
          "descriptionEn": "The dot is in the active state."
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "徽标颜色：预设色值名（与 `Tag` 同一套，如 `blue`）或任意可读色值",
          "descriptionEn": "Badge color: a preset name (the same set `Tag` uses, e.g. `blue`) or any readable color value"
        },
        {
          "name": "status",
          "type": "BadgeStatusType | undefined",
          "required": false,
          "enumValues": [
            "default",
            "success",
            "warning",
            "error"
          ],
          "boolean": false,
          "descriptionZh": "将徽章设置为状态点",
          "descriptionEn": "Set Badge as a status dot"
        },
        {
          "name": "text",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "如果设置了状态，文本将设置状态点的显示文本",
          "descriptionEn": "If status is set, text sets the display text of the status dot"
        },
        {
          "name": "maxCount",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "99",
          "descriptionZh": "展示封顶的数字值，高于的部分会以+号显示",
          "descriptionEn": "The maximum numeric value to display. Values above this will be shown with a '+' sign"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "被徽标标记的内容；省略时可独立显示徽标。",
          "descriptionEn": "Content decorated by the badge; omit it for a standalone badge."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "text",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/badge/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Badge, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space size=\"large\" vertical>\n      <Badge count={3}>\n        <div className=\"badge-box\" />\n      </Badge>\n      <Badge count={15} color=\"orange\">\n        <div className=\"badge-box\" />\n      </Badge>\n      <Badge status=\"success\" text=\"Success\" />\n      <Badge status=\"success\" text=\"Success active\" active />\n      <Badge pill status=\"success\" text=\"success\" />\n      <Badge pill status=\"success\" text=\"success active\" active />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/badge/demo/dot.tsx",
          "title": "点",
          "source": "import { Bell } from \"kui-icons\";\nimport { Icon, Space, Badge } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <Badge dot>\n        <div className=\"badge-box\" />\n      </Badge>\n      <Badge dot>\n        <Icon type={Bell} />\n      </Badge>\n      <Badge dot>\n        <a href=\"#\">Link</a>\n      </Badge>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/badge/demo/max.tsx",
          "title": "最大值 / 自定义",
          "source": "import { Space, Badge } from \"react-kui\";\nconst values: Array<{ count: string | number; maxCount?: number }> = [\n  { count: 99 },\n  { count: 100 },\n  { count: 20, maxCount: 10 },\n  { count: 1000, maxCount: 999 },\n  { count: \"hot\" },\n  { count: \"new\" },\n];\nexport default function App() {\n  return (\n    <Space size=\"large\" wrap>\n      {values.map(({ count, maxCount }) => (\n        <Badge key={String(count)} count={count} maxCount={maxCount}>\n          <div className=\"badge-box\" />\n        </Badge>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/badge/demo/mark.tsx",
          "title": "独立使用",
          "source": "import { Space, Badge } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space>\n      <Badge count={3} />\n      <Badge count={15} color=\"orange\" />\n      <Badge count={25} color=\"green\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/badge/demo/dynamic.tsx",
          "title": "可控",
          "source": "import { Bell } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, ButtonGroup, Divider, Icon, Space, Switch, Badge } from \"react-kui\";\nexport default function App() {\n  const [show, setShow] = useState(true);\n  const [count, setCount] = useState(5);\n  return (\n    <>\n      <Space>\n        <Badge dot={show}>\n          <div className=\"badge-box\" />\n        </Badge>\n        <Badge dot={show}>\n          <Icon type={Bell} />\n        </Badge>\n        <Badge dot={show}>\n          <a href=\"#\">Link</a>\n        </Badge>\n        <Switch checked={show} onChange={(value) => setShow(Boolean(value))} />\n      </Space>\n      <Divider />\n      <Space size={20}>\n        <Badge count={count} maxCount={20}>\n          <div className=\"badge-box\" />\n        </Badge>\n        <ButtonGroup>\n          <Button onClick={() => setCount((value) => Math.max(0, value - 1))}>-</Button>\n          <Button onClick={() => setCount((value) => value + 1)}>+</Button>\n        </ButtonGroup>\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/badge/demo/status.tsx",
          "title": "状态点",
          "source": "import { Space, Badge, type BadgeStatusType } from \"react-kui\";\nconst statuses: BadgeStatusType[] = [\"success\", \"error\", \"default\", \"warning\"];\nexport default function App() {\n  return (\n    <>\n      <Space>\n        {statuses.map((status) => (\n          <Badge key={status} status={status} />\n        ))}\n      </Space>\n      <br />\n      <Space vertical>\n        {statuses.map((status) => (\n          <Badge key={status} status={status} text={status[0].toUpperCase() + status.slice(1)} />\n        ))}\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/badge/demo/color.tsx",
          "title": "多彩徽标",
          "source": "import { useState } from \"react\";\nimport { Badge, Space, Switch } from \"react-kui\";\nconst custom = [\"#c20\", \"#39f\", \"#e3f\", \"#6c0\"];\nconst colors = [\n  \"red\",\n  \"orange\",\n  \"yellow\",\n  \"olive\",\n  \"green\",\n  \"teal\",\n  \"blue\",\n  \"volcano\",\n  \"violet\",\n  \"cyan\",\n  \"gold\",\n  \"lime\",\n  \"magenta\",\n  \"purple\",\n  \"pink\",\n  \"brown\",\n  \"gray\",\n];\nexport default function App() {\n  const [active, setActive] = useState(false);\n  return (\n    <Space vertical block>\n      <Space>\n        Active : <Switch checked={active} onChange={(value) => setActive(Boolean(value))} />\n      </Space>\n      <code>Presets</code>\n      <Space wrap>\n        {colors.map((color) => (\n          <Badge key={color} color={color} text={color} active={active} />\n        ))}\n      </Space>\n      <br />\n      <code>Custom</code>\n      {custom.map((color) => (\n        <div key={color}>\n          <Badge color={color} text={color} active={active} />\n        </div>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Button",
      "import": "import { Button } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/button",
      "props": [
        {
          "name": "htmlType",
          "type": "\"button\" | \"reset\" | \"submit\" | undefined",
          "required": false,
          "enumValues": [
            "button",
            "reset",
            "submit"
          ],
          "boolean": false,
          "defaultExpression": "\"button\"",
          "descriptionZh": "设置 button 原生的 type 值",
          "descriptionEn": "Set the native type value of the button"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "从 kui-icons 导入的图标定义（如 Search），不是字符串或已渲染的 Icon 元素",
          "descriptionEn": "Icon definition imported from kui-icons (e.g. Search), not a string or rendered Icon element"
        },
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "使组件宽度适应其父级宽度",
          "descriptionEn": "Option to fit button width to its parent width"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? buttonGroup?.size ?? parentSize ?? size ?? \"default\"",
          "descriptionZh": "按钮尺寸,",
          "descriptionEn": "Button size,"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "按钮颜色：预设色值名（与 `Tag` / `Badge` 同一套，如 `blue`）；写了 `theme` 就在这一档上上色，没写时它自带一张实心面；这套名字之外的颜色不改变按钮外观",
          "descriptionEn": "Button color: a preset name (the same set `Tag` / `Badge` use, e.g. `blue`); with `theme` it paints that tier, without one it brings its own solid surface; a color outside this set does not change the button's look"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "按钮是否进入加载模式",
          "descriptionEn": "Whether the button is in loading mode"
        },
        {
          "name": "type",
          "type": "ButtonType | undefined",
          "required": false,
          "enumValues": [
            "link",
            "text",
            "default",
            "warning",
            "primary",
            "danger"
          ],
          "boolean": false,
          "defaultExpression": "\"default\"",
          "descriptionZh": "设置按钮类型",
          "descriptionEn": "Set the button type"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "按钮失效状态 ˚",
          "descriptionEn": "Disabled state of the button"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "descriptionZh": "按钮主题，可用 `fill` / `outline` / `plain` / `solid` / `dashed`；不写 `theme` 就是按钮自身的外观，`underlined` 是给可输入的控件用的，按钮不会画下划线",
          "descriptionEn": "Button theme; `fill` / `outline` / `plain` / `solid` / `dashed` are drawn. Leaving `theme` unset keeps the button's own look, and `underlined` belongs to controls you type into, so a button never draws an underline"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "按钮的外观",
          "descriptionEn": "When shape=circle, presents a circular button"
        },
        {
          "name": "href",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击跳转的地址，指定此属性 button 的行为和 a 链接一致",
          "descriptionEn": "The address to jump to when clicked. Specifying this property makes the button behave like an a link"
        },
        {
          "name": "target",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "相当于 a 链接的 target 属性，href 存在时生效",
          "descriptionEn": "Equivalent to the target attribute of an a link, takes effect when href exists"
        },
        {
          "name": "onClick",
          "type": "React.MouseEventHandler<HTMLElement> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击按钮时触发",
          "descriptionEn": "Triggered when the button is clicked"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "form",
        "value",
        "formAction",
        "formEncType",
        "formMethod",
        "formNoValidate",
        "formTarget",
        "name",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "form": "string",
        "formEncType": "string",
        "formMethod": "string",
        "formNoValidate": "boolean",
        "formTarget": "string",
        "name": "string"
      },
      "events": [
        {
          "name": "onClick",
          "type": "React.MouseEventHandler<HTMLElement> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击按钮时触发",
          "descriptionEn": "Triggered when the button is clicked"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": [
          "Use htmlType=submit/reset for form actions; type is visual intent, not native button type.",
          "Button.icon takes IconType[] data imported from kui-icons: import { Search } from 'kui-icons'; use <Button icon={Search} />. Never pass a JSX element (<Icon type={Search} />), a component function, or an icon-name string to icon. For custom rendered content, put <Icon type={Search} /> in Button children. Input prefix/suffix are renderable nodes and must not be confused with Button.icon."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/button/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap>\n      <Button>Default</Button>\n      <Button type=\"primary\">Primary</Button>\n      <Button type=\"danger\">Danger</Button>\n      <Button type=\"warning\">Warning</Button>\n      <Button type=\"text\">Text</Button>\n      <Button type=\"link\" href=\"https://react.k-ui.cn\" target=\"_blank\">\n        Link\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/theme.tsx",
          "title": "主题",
          "source": "import { Button, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <code>outline</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" theme=\"outline\">\n          outline\n        </Button>\n        <Button type=\"danger\" theme=\"outline\">\n          outline\n        </Button>\n        <Button type=\"warning\" theme=\"outline\">\n          outline\n        </Button>\n        <Button theme=\"outline\">outline</Button>\n      </Space>\n      <code>dashed</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" theme=\"dashed\">\n          dashed\n        </Button>\n        <Button type=\"danger\" theme=\"dashed\">\n          dashed\n        </Button>\n        <Button type=\"warning\" theme=\"dashed\">\n          dashed\n        </Button>\n        <Button theme=\"dashed\">dashed</Button>\n      </Space>\n      <code>fill</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" theme=\"fill\">\n          primary\n        </Button>\n        <Button type=\"danger\" theme=\"fill\">\n          danger\n        </Button>\n        <Button type=\"warning\" theme=\"fill\">\n          warning\n        </Button>\n        <Button theme=\"fill\">default</Button>\n      </Space>\n      <code>shape</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" shape=\"round\">\n          Round\n        </Button>\n        <Button type=\"danger\" shape=\"circle\">\n          Circle\n        </Button>\n        <Button type=\"warning\" shape=\"square\">\n          Square\n        </Button>\n        <Button theme=\"fill\">default</Button>\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/color.tsx",
          "title": "多彩",
          "source": "import { Button, Space } from \"react-kui\";\nconst colors = [\n  \"red\",\n  \"orange\",\n  \"yellow\",\n  \"olive\",\n  \"green\",\n  \"teal\",\n  \"blue\",\n  \"volcano\",\n  \"violet\",\n  \"cyan\",\n  \"gold\",\n  \"lime\",\n  \"magenta\",\n  \"purple\",\n  \"pink\",\n  \"brown\",\n  \"gray\",\n];\nexport default function App() {\n  return (\n    <Space size=\"small\" wrap>\n      {([undefined, \"solid\", \"fill\", \"outline\", \"dashed\"] as const).map((theme) => (\n        <Space size=\"small\" wrap key={theme ?? \"no-theme\"}>\n          {colors.map((color) => (\n            <Button color={color} key={color} theme={theme}>\n              {theme ?? \"no theme\"}\n            </Button>\n          ))}\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/with-icon.tsx",
          "title": "带图标",
          "source": "import { ChevronDown, Power, Search } from \"kui-icons\";\nimport { Icon, Space, Button } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap>\n      <Button type=\"primary\" icon={Search} shape=\"circle\" />\n      <Button type=\"primary\" icon={Search}>\n        Search\n      </Button>\n      <Button icon={Search} shape=\"circle\" />\n      <Button icon={Search}>Search</Button>\n      <Button type=\"primary\" icon={Power} />\n      <Button icon={Power} />\n      <Button type=\"primary\">\n        Expand\n        <Icon type={ChevronDown} />\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/size.tsx",
          "title": "尺寸",
          "source": "import { Download } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Segmented, type SizeType, Space } from \"react-kui\";\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\");\n  return (\n    <Space vertical align=\"start\">\n      <Segmented value={size} options={[\"large\", \"medium\", \"small\"].map((value) => ({ label: value, value }))} onChange={(value) => setSize(value as SizeType)} />\n      <Space wrap>\n        <Button type=\"primary\" size={size}>\n          Primary\n        </Button>\n        <Button size={size}>Default</Button>\n        <Button type=\"text\" size={size}>\n          Text\n        </Button>\n        <Button type=\"link\" size={size}>\n          Link\n        </Button>\n        <Button type=\"primary\" size={size} icon={Download} />\n        <Button type=\"primary\" shape=\"circle\" size={size} icon={Download} />\n        <Button type=\"primary\" shape=\"circle\" size={size} icon={Download}>\n          Download\n        </Button>\n        <Button type=\"primary\" size={size} icon={Download}>\n          Download\n        </Button>\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/disabled.tsx",
          "title": "禁用",
          "source": "import { Flex, Space, Button } from \"react-kui\";\nconst Buttons = ({ disabled = false }) => (\n  <Space vertical>\n    <Button disabled={disabled} type=\"primary\">\n      Primary{disabled && \" (disabled)\"}\n    </Button>\n    <Button disabled={disabled} type=\"danger\">\n      Danger{disabled && \" (disabled)\"}\n    </Button>\n    <Button disabled={disabled}>Default{disabled && \" (disabled)\"}</Button>\n    <Button disabled={disabled} theme=\"solid\" color=\"green\">\n      Solid\n    </Button>\n    <Button disabled={disabled} theme=\"outline\">\n      Outline\n    </Button>\n    <Button disabled={disabled} theme=\"dashed\">\n      Dashed\n    </Button>\n    <Button disabled={disabled} type=\"text\">\n      Text\n    </Button>\n    <Button disabled={disabled} type=\"link\">\n      Link\n    </Button>\n  </Space>\n);\nexport default function App() {\n  return (\n    <Flex size=\"small\">\n      <Buttons />\n      <Buttons disabled />\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/button/demo/loading.tsx",
          "title": "加载中状态",
          "source": "import { Power, Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Space } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false);\n  const [delayed, setDelayed] = useState(false);\n  return (\n    <Space wrap>\n      <Button type=\"primary\" icon={Search} loading>\n        Loading\n      </Button>\n      <Button type=\"primary\" icon={Search} loading size=\"small\">\n        Loading\n      </Button>\n      <Button type=\"primary\" loading shape=\"circle\" />\n      <Button type=\"primary\" loading={loading} onClick={() => setLoading(true)}>\n        Click me\n      </Button>\n      <Button\n        type=\"primary\"\n        icon={Power}\n        loading={delayed}\n        onClick={() => setTimeout(() => setDelayed(true), 1000)}\n      >\n        1s delay\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/block.tsx",
          "title": "Block 按钮",
          "source": "import { Button, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical style={{ width: \"100%\" }}>\n      <Button type=\"primary\" block>\n        Primary\n      </Button>\n      <Button type=\"danger\" block>\n        Danger\n      </Button>\n      <Button block>Default</Button>\n      <Button type=\"text\" block>\n        Text\n      </Button>\n      <Button type=\"link\" block>\n        Link\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/group.tsx",
          "title": "按钮组合",
          "source": "import { User, UserPlus } from \"kui-icons\";\nimport {\n  Button,\n  ButtonGroup,\n  DropdownButton,\n  Icon,\n  Menu,\n  MenuItem,\n  Space,\n  type MenuSelectEvent,\n} from \"react-kui\";\nexport default function App() {\n  const handleMenuClick = (e: MenuSelectEvent) => {\n    console.log(\"click\", e);\n  };\n  const handleButtonClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n    console.log(\"click left button\", e);\n  };\n  const overlay = (\n    <Menu onSelect={handleMenuClick}>\n      <MenuItem key=\"1\" itemKey=\"1\">\n        <Icon type={UserPlus} />\n        1st menu item\n      </MenuItem>\n      <MenuItem key=\"2\" itemKey=\"2\">\n        <Icon type={UserPlus} />\n        2nd menu item\n      </MenuItem>\n      <MenuItem key=\"3\" itemKey=\"3\">\n        <Icon type={UserPlus} />\n        3rd item\n      </MenuItem>\n    </Menu>\n  );\n  return (\n    <Space vertical>\n      <ButtonGroup>\n        <Button>Address</Button>\n        <Button icon={User} />\n      </ButtonGroup>\n      <DropdownButton onClick={handleButtonClick} overlay={overlay} icon={UserPlus}>\n        Dropdown\n      </DropdownButton>\n      <ButtonGroup>\n        <Button>Left</Button>\n        <Button>Center</Button>\n        <Button>Right</Button>\n      </ButtonGroup>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "ButtonGroup",
      "import": "import { ButtonGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/button",
      "props": [
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "按钮尺寸,",
          "descriptionEn": "Button size,"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "按钮的外观",
          "descriptionEn": "When shape=circle, presents a circular button"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "组合展示的按钮内容，继承组提供的尺寸与形状。",
          "descriptionEn": "Grouped button content that inherits the group's size and shape."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/button/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap>\n      <Button>Default</Button>\n      <Button type=\"primary\">Primary</Button>\n      <Button type=\"danger\">Danger</Button>\n      <Button type=\"warning\">Warning</Button>\n      <Button type=\"text\">Text</Button>\n      <Button type=\"link\" href=\"https://react.k-ui.cn\" target=\"_blank\">\n        Link\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/theme.tsx",
          "title": "主题",
          "source": "import { Button, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <code>outline</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" theme=\"outline\">\n          outline\n        </Button>\n        <Button type=\"danger\" theme=\"outline\">\n          outline\n        </Button>\n        <Button type=\"warning\" theme=\"outline\">\n          outline\n        </Button>\n        <Button theme=\"outline\">outline</Button>\n      </Space>\n      <code>dashed</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" theme=\"dashed\">\n          dashed\n        </Button>\n        <Button type=\"danger\" theme=\"dashed\">\n          dashed\n        </Button>\n        <Button type=\"warning\" theme=\"dashed\">\n          dashed\n        </Button>\n        <Button theme=\"dashed\">dashed</Button>\n      </Space>\n      <code>fill</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" theme=\"fill\">\n          primary\n        </Button>\n        <Button type=\"danger\" theme=\"fill\">\n          danger\n        </Button>\n        <Button type=\"warning\" theme=\"fill\">\n          warning\n        </Button>\n        <Button theme=\"fill\">default</Button>\n      </Space>\n      <code>shape</code>\n      <Space size=\"small\">\n        <Button type=\"primary\" shape=\"round\">\n          Round\n        </Button>\n        <Button type=\"danger\" shape=\"circle\">\n          Circle\n        </Button>\n        <Button type=\"warning\" shape=\"square\">\n          Square\n        </Button>\n        <Button theme=\"fill\">default</Button>\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/color.tsx",
          "title": "多彩",
          "source": "import { Button, Space } from \"react-kui\";\nconst colors = [\n  \"red\",\n  \"orange\",\n  \"yellow\",\n  \"olive\",\n  \"green\",\n  \"teal\",\n  \"blue\",\n  \"volcano\",\n  \"violet\",\n  \"cyan\",\n  \"gold\",\n  \"lime\",\n  \"magenta\",\n  \"purple\",\n  \"pink\",\n  \"brown\",\n  \"gray\",\n];\nexport default function App() {\n  return (\n    <Space size=\"small\" wrap>\n      {([undefined, \"solid\", \"fill\", \"outline\", \"dashed\"] as const).map((theme) => (\n        <Space size=\"small\" wrap key={theme ?? \"no-theme\"}>\n          {colors.map((color) => (\n            <Button color={color} key={color} theme={theme}>\n              {theme ?? \"no theme\"}\n            </Button>\n          ))}\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/with-icon.tsx",
          "title": "带图标",
          "source": "import { ChevronDown, Power, Search } from \"kui-icons\";\nimport { Icon, Space, Button } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap>\n      <Button type=\"primary\" icon={Search} shape=\"circle\" />\n      <Button type=\"primary\" icon={Search}>\n        Search\n      </Button>\n      <Button icon={Search} shape=\"circle\" />\n      <Button icon={Search}>Search</Button>\n      <Button type=\"primary\" icon={Power} />\n      <Button icon={Power} />\n      <Button type=\"primary\">\n        Expand\n        <Icon type={ChevronDown} />\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/size.tsx",
          "title": "尺寸",
          "source": "import { Download } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Segmented, type SizeType, Space } from \"react-kui\";\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\");\n  return (\n    <Space vertical align=\"start\">\n      <Segmented value={size} options={[\"large\", \"medium\", \"small\"].map((value) => ({ label: value, value }))} onChange={(value) => setSize(value as SizeType)} />\n      <Space wrap>\n        <Button type=\"primary\" size={size}>\n          Primary\n        </Button>\n        <Button size={size}>Default</Button>\n        <Button type=\"text\" size={size}>\n          Text\n        </Button>\n        <Button type=\"link\" size={size}>\n          Link\n        </Button>\n        <Button type=\"primary\" size={size} icon={Download} />\n        <Button type=\"primary\" shape=\"circle\" size={size} icon={Download} />\n        <Button type=\"primary\" shape=\"circle\" size={size} icon={Download}>\n          Download\n        </Button>\n        <Button type=\"primary\" size={size} icon={Download}>\n          Download\n        </Button>\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/disabled.tsx",
          "title": "禁用",
          "source": "import { Flex, Space, Button } from \"react-kui\";\nconst Buttons = ({ disabled = false }) => (\n  <Space vertical>\n    <Button disabled={disabled} type=\"primary\">\n      Primary{disabled && \" (disabled)\"}\n    </Button>\n    <Button disabled={disabled} type=\"danger\">\n      Danger{disabled && \" (disabled)\"}\n    </Button>\n    <Button disabled={disabled}>Default{disabled && \" (disabled)\"}</Button>\n    <Button disabled={disabled} theme=\"solid\" color=\"green\">\n      Solid\n    </Button>\n    <Button disabled={disabled} theme=\"outline\">\n      Outline\n    </Button>\n    <Button disabled={disabled} theme=\"dashed\">\n      Dashed\n    </Button>\n    <Button disabled={disabled} type=\"text\">\n      Text\n    </Button>\n    <Button disabled={disabled} type=\"link\">\n      Link\n    </Button>\n  </Space>\n);\nexport default function App() {\n  return (\n    <Flex size=\"small\">\n      <Buttons />\n      <Buttons disabled />\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/button/demo/loading.tsx",
          "title": "加载中状态",
          "source": "import { Power, Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Space } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false);\n  const [delayed, setDelayed] = useState(false);\n  return (\n    <Space wrap>\n      <Button type=\"primary\" icon={Search} loading>\n        Loading\n      </Button>\n      <Button type=\"primary\" icon={Search} loading size=\"small\">\n        Loading\n      </Button>\n      <Button type=\"primary\" loading shape=\"circle\" />\n      <Button type=\"primary\" loading={loading} onClick={() => setLoading(true)}>\n        Click me\n      </Button>\n      <Button\n        type=\"primary\"\n        icon={Power}\n        loading={delayed}\n        onClick={() => setTimeout(() => setDelayed(true), 1000)}\n      >\n        1s delay\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/block.tsx",
          "title": "Block 按钮",
          "source": "import { Button, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical style={{ width: \"100%\" }}>\n      <Button type=\"primary\" block>\n        Primary\n      </Button>\n      <Button type=\"danger\" block>\n        Danger\n      </Button>\n      <Button block>Default</Button>\n      <Button type=\"text\" block>\n        Text\n      </Button>\n      <Button type=\"link\" block>\n        Link\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/button/demo/group.tsx",
          "title": "按钮组合",
          "source": "import { User, UserPlus } from \"kui-icons\";\nimport {\n  Button,\n  ButtonGroup,\n  DropdownButton,\n  Icon,\n  Menu,\n  MenuItem,\n  Space,\n  type MenuSelectEvent,\n} from \"react-kui\";\nexport default function App() {\n  const handleMenuClick = (e: MenuSelectEvent) => {\n    console.log(\"click\", e);\n  };\n  const handleButtonClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n    console.log(\"click left button\", e);\n  };\n  const overlay = (\n    <Menu onSelect={handleMenuClick}>\n      <MenuItem key=\"1\" itemKey=\"1\">\n        <Icon type={UserPlus} />\n        1st menu item\n      </MenuItem>\n      <MenuItem key=\"2\" itemKey=\"2\">\n        <Icon type={UserPlus} />\n        2nd menu item\n      </MenuItem>\n      <MenuItem key=\"3\" itemKey=\"3\">\n        <Icon type={UserPlus} />\n        3rd item\n      </MenuItem>\n    </Menu>\n  );\n  return (\n    <Space vertical>\n      <ButtonGroup>\n        <Button>Address</Button>\n        <Button icon={User} />\n      </ButtonGroup>\n      <DropdownButton onClick={handleButtonClick} overlay={overlay} icon={UserPlus}>\n        Dropdown\n      </DropdownButton>\n      <ButtonGroup>\n        <Button>Left</Button>\n        <Button>Center</Button>\n        <Button>Right</Button>\n      </ButtonGroup>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Card",
      "import": "import { Card } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/card",
      "props": [
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "卡片是否显示边框",
          "descriptionEn": "Whether the card displays a border"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"fill\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Surface theme"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "外框形状",
          "descriptionEn": "Surface shape"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "卡片尺寸",
          "descriptionEn": "Card size"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题",
          "descriptionEn": "Title"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片标题的图标",
          "descriptionEn": "Icon for the card title"
        },
        {
          "name": "extra",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片标题扩展",
          "descriptionEn": "Card title extension"
        },
        {
          "name": "cover",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片封面",
          "descriptionEn": "Card cover"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片主体内容，与头部和封面分开。",
          "descriptionEn": "Card body content, separate from the header and cover."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "title",
        "extra",
        "cover",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/card/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Heart } from \"kui-icons\";\nimport { Card } from \"react-kui\";\nexport default function App() {\n  return (\n    <Card title=\"Title\" icon={Heart} extra={<a href=\"#\">more</a>}>\n      <div>card content</div>\n      <div>card content</div>\n      <div>card content</div>\n    </Card>\n  );\n}"
        },
        {
          "id": "components/card/demo/size.tsx",
          "title": "卡片尺寸",
          "source": "import type { SizeType } from \"react-kui\";\nimport { Card, Space } from \"react-kui\";\n\nconst sizes: SizeType[] = [\"small\", \"medium\", \"large\"];\n\nexport default function Demo() {\n  return (\n    <Space vertical block>\n      {sizes.map((size) => (\n        <Card key={size} size={size} title={`${size} card`} bordered>\n          Card content\n        </Card>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/card/demo/border.tsx",
          "title": "边框",
          "source": "import { Heart } from \"kui-icons\";\nimport { Card } from \"react-kui\";\nexport default function App() {\n  return (\n    <div className=\"demo-view-fill\">\n      <Card title=\"Title\" icon={Heart} bordered extra={<a href=\"#\">more</a>}>\n        <p>card content</p>\n        <p>card content</p>\n        <p>card content</p>\n      </Card>\n    </div>\n  );\n}"
        },
        {
          "id": "components/card/demo/notitle.tsx",
          "title": "边框和标题",
          "source": "import { Card, Space } from \"react-kui\";\nconst Content = () => (\n  <>\n    <div>card content</div>\n    <div>card content</div>\n    <div>card content</div>\n  </>\n);\nexport default function App() {\n  return (\n    <Space vertical block className=\"demo-view-fill\">\n      <Card>\n        <Content />\n      </Card>\n      <Card bordered>\n        <Content />\n      </Card>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/card/demo/cover.tsx",
          "title": "封面卡片",
          "source": "import { Card, CardMeta, Space } from \"react-kui\";\n\nconst cover =\n  \"https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?auto=format&fit=crop&w=960&q=80\";\nconst avatar = \"https://cdn.chuchur.com/img/monkey.jpeg\";\n\nexport default function App() {\n  const meta = (\n    <CardMeta\n      avatar={avatar}\n      title=\"山间旅居\"\n      description=\"远离城市喧嚣，在自然中度过一个安静的周末。\"\n    />\n  );\n  return (\n    <Space wrap>\n      <Card cover={cover} style={{ maxWidth: 360 }}>\n        {meta}\n      </Card>\n      <Card cover={cover} theme=\"outline\" style={{ maxWidth: 360 }}>\n        {meta}\n      </Card>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/card/demo/appearance.tsx",
          "title": "外观与形状",
          "source": "import type { SurfaceShapeType, SurfaceThemeType } from \"react-kui\";\nimport { Card, Space } from \"react-kui\";\n\nconst shapes: SurfaceShapeType[] = [\"round\", \"square\"];\nconst themes: SurfaceThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function Demo() {\n  return (\n    <Space vertical block>\n      <Space>\n        {shapes.map((shape) => (\n          <Card key={shape} shape={shape} style={{ width: 180 }}>\n            shape: {shape}\n          </Card>\n        ))}\n      </Space>\n      <Space>\n        {themes.map((theme) => (\n          <Card key={theme} theme={theme} shape=\"square\" style={{ width: 180 }}>\n            theme: {theme}\n          </Card>\n        ))}\n      </Space>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "CardMeta",
      "import": "import { CardMeta } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/card",
      "props": [
        {
          "name": "avatar",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "头像",
          "descriptionEn": "Avatar"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题",
          "descriptionEn": "Title"
        },
        {
          "name": "description",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "描述",
          "descriptionEn": "Description"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "avatar",
        "title",
        "description"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/card/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Heart } from \"kui-icons\";\nimport { Card } from \"react-kui\";\nexport default function App() {\n  return (\n    <Card title=\"Title\" icon={Heart} extra={<a href=\"#\">more</a>}>\n      <div>card content</div>\n      <div>card content</div>\n      <div>card content</div>\n    </Card>\n  );\n}"
        },
        {
          "id": "components/card/demo/size.tsx",
          "title": "卡片尺寸",
          "source": "import type { SizeType } from \"react-kui\";\nimport { Card, Space } from \"react-kui\";\n\nconst sizes: SizeType[] = [\"small\", \"medium\", \"large\"];\n\nexport default function Demo() {\n  return (\n    <Space vertical block>\n      {sizes.map((size) => (\n        <Card key={size} size={size} title={`${size} card`} bordered>\n          Card content\n        </Card>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/card/demo/border.tsx",
          "title": "边框",
          "source": "import { Heart } from \"kui-icons\";\nimport { Card } from \"react-kui\";\nexport default function App() {\n  return (\n    <div className=\"demo-view-fill\">\n      <Card title=\"Title\" icon={Heart} bordered extra={<a href=\"#\">more</a>}>\n        <p>card content</p>\n        <p>card content</p>\n        <p>card content</p>\n      </Card>\n    </div>\n  );\n}"
        },
        {
          "id": "components/card/demo/notitle.tsx",
          "title": "边框和标题",
          "source": "import { Card, Space } from \"react-kui\";\nconst Content = () => (\n  <>\n    <div>card content</div>\n    <div>card content</div>\n    <div>card content</div>\n  </>\n);\nexport default function App() {\n  return (\n    <Space vertical block className=\"demo-view-fill\">\n      <Card>\n        <Content />\n      </Card>\n      <Card bordered>\n        <Content />\n      </Card>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/card/demo/cover.tsx",
          "title": "封面卡片",
          "source": "import { Card, CardMeta, Space } from \"react-kui\";\n\nconst cover =\n  \"https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?auto=format&fit=crop&w=960&q=80\";\nconst avatar = \"https://cdn.chuchur.com/img/monkey.jpeg\";\n\nexport default function App() {\n  const meta = (\n    <CardMeta\n      avatar={avatar}\n      title=\"山间旅居\"\n      description=\"远离城市喧嚣，在自然中度过一个安静的周末。\"\n    />\n  );\n  return (\n    <Space wrap>\n      <Card cover={cover} style={{ maxWidth: 360 }}>\n        {meta}\n      </Card>\n      <Card cover={cover} theme=\"outline\" style={{ maxWidth: 360 }}>\n        {meta}\n      </Card>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/card/demo/appearance.tsx",
          "title": "外观与形状",
          "source": "import type { SurfaceShapeType, SurfaceThemeType } from \"react-kui\";\nimport { Card, Space } from \"react-kui\";\n\nconst shapes: SurfaceShapeType[] = [\"round\", \"square\"];\nconst themes: SurfaceThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function Demo() {\n  return (\n    <Space vertical block>\n      <Space>\n        {shapes.map((shape) => (\n          <Card key={shape} shape={shape} style={{ width: 180 }}>\n            shape: {shape}\n          </Card>\n        ))}\n      </Space>\n      <Space>\n        {themes.map((theme) => (\n          <Card key={theme} theme={theme} shape=\"square\" style={{ width: 180 }}>\n            theme: {theme}\n          </Card>\n        ))}\n      </Space>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Carousel",
      "import": "import { Carousel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/carousel",
      "props": [
        {
          "name": "value",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前幻灯片索引，从 0 开始",
          "descriptionEn": "slide index, starting from 0"
        },
        {
          "name": "loop",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否开启循环",
          "descriptionEn": "Whether to enable loop"
        },
        {
          "name": "autoplay",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否自动切换",
          "descriptionEn": "Whether to auto-switch"
        },
        {
          "name": "delay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "3000",
          "descriptionZh": "自动切换的时间间隔，单位为毫秒",
          "descriptionEn": "The time interval for auto-switching, in milliseconds"
        },
        {
          "name": "height",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "256",
          "descriptionZh": "幻灯片的高度",
          "descriptionEn": "The height of the slide"
        },
        {
          "name": "vertical",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否垂直模式显示",
          "descriptionEn": "Whether to display in vertical mode"
        },
        {
          "name": "dots",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否在图库底部显示圆点",
          "descriptionEn": "Whether to show the dots at the bottom of the gallery"
        },
        {
          "name": "swipeable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否开启触摸滑动和鼠标跟手拖拽",
          "descriptionEn": "Enable touch swiping and mouse dragging with pointer-following movement"
        },
        {
          "name": "onChange",
          "type": "((index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前幻灯片变化时触发",
          "descriptionEn": "Called when the active slide changes"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前幻灯片变化时触发",
          "descriptionEn": "Called when the active slide changes"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/carousel/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Carousel, CarouselItem } from \"react-kui\";\nconst itemStyle = {\n  color: \"#fff\",\n  background: \"var(--kui-color-primary)\",\n  justifyContent: \"center\",\n  alignItems: \"center\",\n  fontSize: 30,\n  fontWeight: 700,\n  display: \"flex\",\n} as const;\nexport default function App() {\n  return (\n    <Carousel value={2} loop height={300}>\n      {[1, 2, 3].map((value) => (\n        <CarouselItem key={value} style={itemStyle}>\n          {value}\n        </CarouselItem>\n      ))}\n    </Carousel>\n  );\n}"
        },
        {
          "id": "components/carousel/demo/vertical.tsx",
          "title": "垂直",
          "source": "import { Carousel, CarouselItem } from \"react-kui\";\nconst itemStyle = {\n  color: \"#fff\",\n  background: \"var(--kui-color-primary)\",\n  justifyContent: \"center\",\n  alignItems: \"center\",\n  fontSize: 30,\n  fontWeight: 700,\n  display: \"flex\",\n} as const;\nexport default function App() {\n  return (\n    <Carousel vertical>\n      {[1, 2, 3, 4].map((value) => (\n        <CarouselItem key={value} style={itemStyle}>\n          {value}\n        </CarouselItem>\n      ))}\n    </Carousel>\n  );\n}"
        },
        {
          "id": "components/carousel/demo/autoplay.tsx",
          "title": "自动播放",
          "source": "import { useRef } from \"react\";\nimport { Button, Space, Carousel, CarouselItem, type CarouselRef } from \"react-kui\";\nconst itemStyle = {\n  color: \"#fff\",\n  background: \"var(--kui-color-primary)\",\n  justifyContent: \"center\",\n  alignItems: \"center\",\n  fontSize: 30,\n  fontWeight: 700,\n  display: \"flex\",\n} as const;\nexport default function App() {\n  const carouselRef = useRef<CarouselRef>(null);\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => carouselRef.current?.goTo(2)}>goTo 2</Button>\n        <Button onClick={() => carouselRef.current?.prev()}>Prev</Button>\n        <Button onClick={() => carouselRef.current?.next()}>Next</Button>\n      </Space>\n      <br />\n      <br />\n      <Carousel autoplay loop ref={carouselRef}>\n        {[1, 2, 3, 4].map((value) => (\n          <CarouselItem key={value} style={itemStyle}>\n            {value}\n          </CarouselItem>\n        ))}\n      </Carousel>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "CarouselItem",
      "import": "import { CarouselItem } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/carousel",
      "props": [],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/carousel/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Carousel, CarouselItem } from \"react-kui\";\nconst itemStyle = {\n  color: \"#fff\",\n  background: \"var(--kui-color-primary)\",\n  justifyContent: \"center\",\n  alignItems: \"center\",\n  fontSize: 30,\n  fontWeight: 700,\n  display: \"flex\",\n} as const;\nexport default function App() {\n  return (\n    <Carousel value={2} loop height={300}>\n      {[1, 2, 3].map((value) => (\n        <CarouselItem key={value} style={itemStyle}>\n          {value}\n        </CarouselItem>\n      ))}\n    </Carousel>\n  );\n}"
        },
        {
          "id": "components/carousel/demo/vertical.tsx",
          "title": "垂直",
          "source": "import { Carousel, CarouselItem } from \"react-kui\";\nconst itemStyle = {\n  color: \"#fff\",\n  background: \"var(--kui-color-primary)\",\n  justifyContent: \"center\",\n  alignItems: \"center\",\n  fontSize: 30,\n  fontWeight: 700,\n  display: \"flex\",\n} as const;\nexport default function App() {\n  return (\n    <Carousel vertical>\n      {[1, 2, 3, 4].map((value) => (\n        <CarouselItem key={value} style={itemStyle}>\n          {value}\n        </CarouselItem>\n      ))}\n    </Carousel>\n  );\n}"
        },
        {
          "id": "components/carousel/demo/autoplay.tsx",
          "title": "自动播放",
          "source": "import { useRef } from \"react\";\nimport { Button, Space, Carousel, CarouselItem, type CarouselRef } from \"react-kui\";\nconst itemStyle = {\n  color: \"#fff\",\n  background: \"var(--kui-color-primary)\",\n  justifyContent: \"center\",\n  alignItems: \"center\",\n  fontSize: 30,\n  fontWeight: 700,\n  display: \"flex\",\n} as const;\nexport default function App() {\n  const carouselRef = useRef<CarouselRef>(null);\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => carouselRef.current?.goTo(2)}>goTo 2</Button>\n        <Button onClick={() => carouselRef.current?.prev()}>Prev</Button>\n        <Button onClick={() => carouselRef.current?.next()}>Next</Button>\n      </Space>\n      <br />\n      <br />\n      <Carousel autoplay loop ref={carouselRef}>\n        {[1, 2, 3, 4].map((value) => (\n          <CarouselItem key={value} style={itemStyle}>\n            {value}\n          </CarouselItem>\n        ))}\n      </Carousel>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Checkbox",
      "import": "import { Checkbox } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/checkbox",
      "props": [
        {
          "name": "checked",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "选中状态",
          "descriptionEn": "checked state"
        },
        {
          "name": "valueType",
          "type": "ValueType | undefined",
          "required": false,
          "enumValues": [
            "string",
            "number",
            "boolean"
          ],
          "boolean": false,
          "defaultExpression": "\"boolean\"",
          "descriptionZh": "独立使用时的输出值类型",
          "descriptionEn": "Standalone output value type"
        },
        {
          "name": "value",
          "type": "unknown",
          "required": false,
          "boolean": false,
          "descriptionZh": "结合使用时表示的值",
          "descriptionEn": "Value represented in a group"
        },
        {
          "name": "label",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的内容",
          "descriptionEn": "Content to display"
        },
        {
          "name": "theme",
          "type": "MarkThemeType | undefined",
          "required": false,
          "enumValues": [
            "fill",
            "outline"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? group?.theme ?? inheritedAppearance.theme, PAINTED_THEMES) ??\n    \"fill\"",
          "descriptionZh": "组件呈现主题",
          "descriptionEn": "Component theme"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用当前项",
          "descriptionEn": "Whether the current item is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读当前项",
          "descriptionEn": "Whether the current item is read-only"
        },
        {
          "name": "indeterminate",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "组合辅助选项控制半选状态",
          "descriptionEn": "Combined auxiliary option controls the indeterminate state"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "设置复选框的大小",
          "descriptionEn": "Checkbox size"
        },
        {
          "name": "onChange",
          "type": "((e: ChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时回调",
          "descriptionEn": "Callback when the option state changes"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未设置 label 时的复选框标签内容。",
          "descriptionEn": "Checkbox label content used when label is null or undefined."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((e: ChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时回调",
          "descriptionEn": "Callback when the option state changes"
        }
      ],
      "renderProps": [
        "label",
        "children"
      ],
      "behavior": {
        "rules": [
          "Use checked for the checked state; value identifies an item in a CheckboxGroup. onChange receives an object with checked and optional value/label, not the Switch scalar callback."
        ]
      },
      "children": [],
      "parent": "CheckboxGroup",
      "examples": [
        {
          "id": "components/checkbox/demo/basic.tsx",
          "title": "单选",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Checkbox } from \"react-kui\";\nexport default function App() {\n  const [checked, setChecked] = useState(true),\n    [value1, setValue1] = useState(true),\n    [value2, setValue2] = useState(true),\n    [value3, setValue3] = useState(true);\n  return (\n    <Space vertical>\n      <code>value(boolean): {String(value1)}</code>\n      <Checkbox checked={value1} onChange={({ checked }) => setValue1(checked)}>\n        Checkbox\n      </Checkbox>\n      <code>value(string): {String(value2 ? \"1\" : \"0\")}</code>\n      <Checkbox checked={value2} valueType=\"string\" onChange={({ checked }) => setValue2(checked)}>\n        Checkbox\n      </Checkbox>\n      <code>value(number): {value3 ? 1 : 0}</code>\n      <Checkbox checked={value3} valueType=\"number\" onChange={({ checked }) => setValue3(checked)}>\n        Checkbox\n      </Checkbox>\n      <Button onClick={() => setChecked((value) => !value)} size=\"small\">\n        {checked ? \"Checked\" : \"Unchecked\"}\n      </Button>\n      <Checkbox\n        label=\"Checkbox\"\n        checked={checked}\n        onChange={({ checked }) => setChecked(checked)}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/group.tsx",
          "title": "多选",
          "source": "import { useEffect, useState } from \"react\";\nimport { Space, Checkbox, CheckboxGroup, type CheckboxOption } from \"react-kui\";\nconst initial: CheckboxOption[] = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [value, setValue] = useState([\"apple\", \"grape\"]),\n    [options, setOptions] = useState(initial);\n  useEffect(() => {\n    const timer = window.setTimeout(\n      () => setOptions(initial.map((item) => ({ ...item, label: `${item.label}1` }))),\n      1000,\n    );\n    return () => clearTimeout(timer);\n  }, []);\n  return (\n    <Space vertical>\n      use options<code>value: {value.join(\", \")}</code>\n      <CheckboxGroup options={options} value={value} onChange={setValue} />\n      <br />\n      use children\n      <CheckboxGroup value={value} onChange={setValue}>\n        {options.map((item) => (\n          <Checkbox key={item.value} label={item.label} value={item.value} />\n        ))}\n      </CheckboxGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/group-layout.tsx",
          "title": "组合布局",
          "source": "import { useState } from \"react\";\nimport { Segmented, Space, CheckboxGroup } from \"react-kui\";\nconst types = [\n  { label: \"Vertical\", value: \"vertical\" },\n  { label: \"Horizontal\", value: \"horizontal\" },\n];\nconst options = [\"Beijing\", \"Shanghai\", \"Guangzhou\", \"Wuhan\", \"Other\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [direction, setDirection] = useState<\"horizontal\" | \"vertical\">(\"horizontal\"),\n    [cities, setCities] = useState([\"wuhan\"]);\n  return (\n    <Space vertical>\n      <Segmented\n        options={types}\n        value={direction}\n        onChange={(value) => setDirection(value as typeof direction)}\n      />\n      <code>direction: {direction}</code>\n      <code>value: {cities.join(\", \")}</code>\n      <CheckboxGroup options={options} value={cities} onChange={setCities} direction={direction} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/disabled.tsx",
          "title": "可不用 / 可控",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Checkbox, CheckboxGroup } from \"react-kui\";\nconst options = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [checked, setChecked] = useState(false);\n  return (\n    <Space vertical>\n      <Checkbox disabled>disabled</Checkbox>\n      <Checkbox disabled checked>\n        disabled\n      </Checkbox>\n      <Checkbox indeterminate disabled>\n        indeterminate\n      </Checkbox>\n      <br />\n      <CheckboxGroup disabled options={options} />\n      <CheckboxGroup>\n        <Checkbox value=\"Apple\" label=\"apple\" />\n        <Checkbox value=\"Orange\" label=\"orange\" disabled />\n        <Checkbox value=\"Banana\" label=\"banana\" />\n        <Checkbox value=\"Pear\" label=\"pear\" disabled />\n        <Checkbox value=\"Grape\" label=\"grape\" />\n      </CheckboxGroup>\n      <br />\n      <Checkbox\n        disabled={disabled}\n        checked={checked}\n        onChange={({ checked }) => setChecked(checked)}\n      >\n        Checkbox\n      </Checkbox>\n      <Button onClick={() => setChecked((value) => !value)} size=\"small\">\n        {checked ? \"Checked\" : \"Uncheck\"}\n      </Button>\n      <Button onClick={() => setDisabled((value) => !value)} size=\"small\">\n        {disabled ? \"Enable\" : \"Disabled\"}\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/check-all.tsx",
          "title": "全选",
          "source": "import { useState } from \"react\";\nimport { Space, Checkbox, CheckboxGroup } from \"react-kui\";\nconst options = [\"Beijing\", \"Shenzhen\", \"Shanghai\", \"Guangzhou\", \"Wuhan\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [cities, setCities] = useState<string[]>([]);\n  const checked = cities.length === options.length,\n    indeterminate = cities.length > 0 && !checked;\n  return (\n    <Space vertical>\n      <code>value: {cities.join(\", \")}</code>\n      <Checkbox\n        checked={checked}\n        indeterminate={indeterminate}\n        onChange={({ checked }) => setCities(checked ? options.map(({ value }) => value) : [])}\n      >\n        Check all\n      </Checkbox>\n      <CheckboxGroup options={options} value={cities} onChange={setCities} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/theme.tsx",
          "title": "外观档位",
          "source": "import { useState } from \"react\";\nimport { Checkbox, CheckboxGroup, Space, type CheckboxOption, type MarkThemeType } from \"react-kui\";\n\n// A check box paints two tiers, and both land on the square rather than on the label: `fill` — what it does\n// when nobody writes a theme — gives the box a pale plate, `outline` puts a border on it instead. Whatever the\n// tier, a checked box is still primary and a disabled one still reads as disabled, and a group hands its own\n// tier to every item that did not write one.\nconst tiers: MarkThemeType[] = [\"fill\", \"outline\"];\nconst options: CheckboxOption[] = [\"Apple\", \"Orange\", \"Banana\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\n\nexport default function App() {\n  const [grouped, setGrouped] = useState<(string | number)[]>([\"apple\", \"banana\"]);\n  const [single, setSingle] = useState(true);\n  return (\n    <Space vertical block>\n      {tiers.map((tier) => (\n        <Space key={tier} vertical>\n          <code>theme: {tier}</code>\n          <CheckboxGroup options={options} value={grouped} onChange={setGrouped} theme={tier} />\n          <Space>\n            <Checkbox\n              label=\"Checked\"\n              checked={single}\n              onChange={({ checked }) => setSingle(checked)}\n              theme={tier}\n            />\n            <Checkbox label=\"Disabled\" disabled theme={tier} />\n          </Space>\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "CheckboxGroup",
      "import": "import { CheckboxGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/checkbox",
      "props": [
        {
          "name": "value",
          "type": "T[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "的当前选中值",
          "descriptionEn": "selected values"
        },
        {
          "name": "theme",
          "type": "MarkThemeType | undefined",
          "required": false,
          "enumValues": [
            "fill",
            "outline"
          ],
          "boolean": false,
          "defaultExpression": "themeProp ?? inheritedAppearance.theme ?? \"fill\"",
          "descriptionZh": "组件呈现主题",
          "descriptionEn": "Component theme"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用组件",
          "descriptionEn": "Whether the component is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读组件",
          "descriptionEn": "Whether the component is read-only"
        },
        {
          "name": "options",
          "type": "CheckboxOption<string | number>[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可以指定子项 `checkbox`",
          "descriptionEn": "Can specify child `checkbox` items"
        },
        {
          "name": "direction",
          "type": "DirectionType | undefined",
          "required": false,
          "enumValues": [
            "inline",
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "布局方向",
          "descriptionEn": "Layout direction"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "设置复选框的大小",
          "descriptionEn": "Checkbox size"
        },
        {
          "name": "onChange",
          "type": "((value: T[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回当前选中的项和状态",
          "descriptionEn": "Triggered when the option state changes, returns the currently selected values"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义 Checkbox 子节点，与组的选中值共享上下文。",
          "descriptionEn": "Custom Checkbox children sharing the group's selection context."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: T[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回当前选中的项和状态",
          "descriptionEn": "Triggered when the option state changes, returns the currently selected values"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [
        "Checkbox"
      ],
      "examples": [
        {
          "id": "components/checkbox/demo/basic.tsx",
          "title": "单选",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Checkbox } from \"react-kui\";\nexport default function App() {\n  const [checked, setChecked] = useState(true),\n    [value1, setValue1] = useState(true),\n    [value2, setValue2] = useState(true),\n    [value3, setValue3] = useState(true);\n  return (\n    <Space vertical>\n      <code>value(boolean): {String(value1)}</code>\n      <Checkbox checked={value1} onChange={({ checked }) => setValue1(checked)}>\n        Checkbox\n      </Checkbox>\n      <code>value(string): {String(value2 ? \"1\" : \"0\")}</code>\n      <Checkbox checked={value2} valueType=\"string\" onChange={({ checked }) => setValue2(checked)}>\n        Checkbox\n      </Checkbox>\n      <code>value(number): {value3 ? 1 : 0}</code>\n      <Checkbox checked={value3} valueType=\"number\" onChange={({ checked }) => setValue3(checked)}>\n        Checkbox\n      </Checkbox>\n      <Button onClick={() => setChecked((value) => !value)} size=\"small\">\n        {checked ? \"Checked\" : \"Unchecked\"}\n      </Button>\n      <Checkbox\n        label=\"Checkbox\"\n        checked={checked}\n        onChange={({ checked }) => setChecked(checked)}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/group.tsx",
          "title": "多选",
          "source": "import { useEffect, useState } from \"react\";\nimport { Space, Checkbox, CheckboxGroup, type CheckboxOption } from \"react-kui\";\nconst initial: CheckboxOption[] = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [value, setValue] = useState([\"apple\", \"grape\"]),\n    [options, setOptions] = useState(initial);\n  useEffect(() => {\n    const timer = window.setTimeout(\n      () => setOptions(initial.map((item) => ({ ...item, label: `${item.label}1` }))),\n      1000,\n    );\n    return () => clearTimeout(timer);\n  }, []);\n  return (\n    <Space vertical>\n      use options<code>value: {value.join(\", \")}</code>\n      <CheckboxGroup options={options} value={value} onChange={setValue} />\n      <br />\n      use children\n      <CheckboxGroup value={value} onChange={setValue}>\n        {options.map((item) => (\n          <Checkbox key={item.value} label={item.label} value={item.value} />\n        ))}\n      </CheckboxGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/group-layout.tsx",
          "title": "组合布局",
          "source": "import { useState } from \"react\";\nimport { Segmented, Space, CheckboxGroup } from \"react-kui\";\nconst types = [\n  { label: \"Vertical\", value: \"vertical\" },\n  { label: \"Horizontal\", value: \"horizontal\" },\n];\nconst options = [\"Beijing\", \"Shanghai\", \"Guangzhou\", \"Wuhan\", \"Other\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [direction, setDirection] = useState<\"horizontal\" | \"vertical\">(\"horizontal\"),\n    [cities, setCities] = useState([\"wuhan\"]);\n  return (\n    <Space vertical>\n      <Segmented\n        options={types}\n        value={direction}\n        onChange={(value) => setDirection(value as typeof direction)}\n      />\n      <code>direction: {direction}</code>\n      <code>value: {cities.join(\", \")}</code>\n      <CheckboxGroup options={options} value={cities} onChange={setCities} direction={direction} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/disabled.tsx",
          "title": "可不用 / 可控",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Checkbox, CheckboxGroup } from \"react-kui\";\nconst options = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [checked, setChecked] = useState(false);\n  return (\n    <Space vertical>\n      <Checkbox disabled>disabled</Checkbox>\n      <Checkbox disabled checked>\n        disabled\n      </Checkbox>\n      <Checkbox indeterminate disabled>\n        indeterminate\n      </Checkbox>\n      <br />\n      <CheckboxGroup disabled options={options} />\n      <CheckboxGroup>\n        <Checkbox value=\"Apple\" label=\"apple\" />\n        <Checkbox value=\"Orange\" label=\"orange\" disabled />\n        <Checkbox value=\"Banana\" label=\"banana\" />\n        <Checkbox value=\"Pear\" label=\"pear\" disabled />\n        <Checkbox value=\"Grape\" label=\"grape\" />\n      </CheckboxGroup>\n      <br />\n      <Checkbox\n        disabled={disabled}\n        checked={checked}\n        onChange={({ checked }) => setChecked(checked)}\n      >\n        Checkbox\n      </Checkbox>\n      <Button onClick={() => setChecked((value) => !value)} size=\"small\">\n        {checked ? \"Checked\" : \"Uncheck\"}\n      </Button>\n      <Button onClick={() => setDisabled((value) => !value)} size=\"small\">\n        {disabled ? \"Enable\" : \"Disabled\"}\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/check-all.tsx",
          "title": "全选",
          "source": "import { useState } from \"react\";\nimport { Space, Checkbox, CheckboxGroup } from \"react-kui\";\nconst options = [\"Beijing\", \"Shenzhen\", \"Shanghai\", \"Guangzhou\", \"Wuhan\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [cities, setCities] = useState<string[]>([]);\n  const checked = cities.length === options.length,\n    indeterminate = cities.length > 0 && !checked;\n  return (\n    <Space vertical>\n      <code>value: {cities.join(\", \")}</code>\n      <Checkbox\n        checked={checked}\n        indeterminate={indeterminate}\n        onChange={({ checked }) => setCities(checked ? options.map(({ value }) => value) : [])}\n      >\n        Check all\n      </Checkbox>\n      <CheckboxGroup options={options} value={cities} onChange={setCities} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/checkbox/demo/theme.tsx",
          "title": "外观档位",
          "source": "import { useState } from \"react\";\nimport { Checkbox, CheckboxGroup, Space, type CheckboxOption, type MarkThemeType } from \"react-kui\";\n\n// A check box paints two tiers, and both land on the square rather than on the label: `fill` — what it does\n// when nobody writes a theme — gives the box a pale plate, `outline` puts a border on it instead. Whatever the\n// tier, a checked box is still primary and a disabled one still reads as disabled, and a group hands its own\n// tier to every item that did not write one.\nconst tiers: MarkThemeType[] = [\"fill\", \"outline\"];\nconst options: CheckboxOption[] = [\"Apple\", \"Orange\", \"Banana\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\n\nexport default function App() {\n  const [grouped, setGrouped] = useState<(string | number)[]>([\"apple\", \"banana\"]);\n  const [single, setSingle] = useState(true);\n  return (\n    <Space vertical block>\n      {tiers.map((tier) => (\n        <Space key={tier} vertical>\n          <code>theme: {tier}</code>\n          <CheckboxGroup options={options} value={grouped} onChange={setGrouped} theme={tier} />\n          <Space>\n            <Checkbox\n              label=\"Checked\"\n              checked={single}\n              onChange={({ checked }) => setSingle(checked)}\n              theme={tier}\n            />\n            <Checkbox label=\"Disabled\" disabled theme={tier} />\n          </Space>\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "CheckCard",
      "import": "import { CheckCard } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/check-card",
      "props": [
        {
          "name": "checked",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "选中状态",
          "descriptionEn": "checked state"
        },
        {
          "name": "value",
          "type": "CheckCardValue | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在 Group 中使用的选项值",
          "descriptionEn": "Option value inside a group"
        },
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题",
          "descriptionEn": "Title"
        },
        {
          "name": "description",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "描述",
          "descriptionEn": "Description"
        },
        {
          "name": "symbol",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "未选中图标",
          "descriptionEn": "Unchecked symbol"
        },
        {
          "name": "checkedSymbol",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中图标",
          "descriptionEn": "Checked symbol"
        },
        {
          "name": "showIndicator",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示选中标记",
          "descriptionEn": "Whether to show the indicator"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether read-only"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(\n        themeProp ?? group?.theme ?? inheritedAppearance.theme,\n        PAINTED_THEMES,\n      ) ?? \"outline\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "onChange",
          "type": "((event: CheckCardChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "状态变化回调",
          "descriptionEn": "State change callback"
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择卡标题和描述之后的自定义内容。",
          "descriptionEn": "Custom content following the check card's title and description."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((event: CheckCardChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "状态变化回调",
          "descriptionEn": "State change callback"
        }
      ],
      "renderProps": [
        "title",
        "description",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/check-card/demo/basic.tsx",
          "title": "独立选择",
          "source": "import { useState } from \"react\";\nimport { CheckCard } from \"react-kui\";\n\nexport default function App() {\n  const [agreed, setAgreed] = useState(false);\n  return (\n    <div className=\"demo-list\" style={{ maxWidth: 480, display: \"grid\", gap: 12 }}>\n      <CheckCard\n        checked={agreed}\n        onChange={(event) => setAgreed(event.checked)}\n        title=\"同意用户协议\"\n        description=\"注册即表示你已阅读并接受服务条款与隐私政策。\"\n      />\n      <span style={{ color: \"var(--kui-color-text-description)\" }}>\n        当前状态：{agreed ? \"已同意\" : \"未同意\"}\n      </span>\n    </div>\n  );\n}"
        },
        {
          "id": "components/check-card/demo/group.tsx",
          "title": "单选组",
          "source": "import { useState } from \"react\";\nimport { CheckCardGroup } from \"react-kui\";\n\nconst options = [\n  { value: \"personal\", title: \"个人版\", description: \"适合个人项目和学习使用\" },\n  { value: \"team\", title: \"团队版\", description: \"适合小型团队协作\" },\n  { value: \"enterprise\", title: \"企业版\", description: \"提供企业级管理能力\" },\n];\n\nexport default function App() {\n  const [type, setType] = useState(\"personal\");\n  return (\n    <div style={{ display: \"grid\", gap: 16 }}>\n      <CheckCardGroup value={type} onChange={(next) => setType(String(next))} options={options} />\n      <span style={{ color: \"var(--kui-color-text-description)\" }}>已选择：{type}</span>\n    </div>\n  );\n}"
        },
        {
          "id": "components/check-card/demo/custom.tsx",
          "title": "自定义 Symbol",
          "source": "import { LogoApple, LogoMicrosoft } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { CheckCard, CheckCardGroup } from \"react-kui\";\n\nexport default function App() {\n  const [platform, setPlatform] = useState(\"apple\");\n  return (\n    <CheckCardGroup value={platform} onChange={(next) => setPlatform(String(next))}>\n      <CheckCard value=\"apple\" title=\"Apple\" description=\"macOS 与 iOS\" symbol={LogoApple} />\n      <CheckCard\n        value=\"microsoft\"\n        title=\"Microsoft\"\n        description=\"Windows 与 Azure\"\n        symbol={LogoMicrosoft}\n      />\n    </CheckCardGroup>\n  );\n}"
        },
        {
          "id": "components/check-card/demo/appearance.tsx",
          "title": "外观与禁用",
          "source": "import { useState } from \"react\";\nimport { CheckCardGroup, type CheckCardValue, type SurfaceThemeType } from \"react-kui\";\n\n// A check card paints all five surface tiers, and its own default is `outline` rather than the `fill` the\n// other cards start on — so the row is listed from `outline` and the tiers are shown side by side instead of\n// behind a switch. The last row is the disabled state: the tier still decides the shape of the box, but the\n// plate and the check mark both step back.\nconst tiers: SurfaceThemeType[] = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"];\nconst items = [\n  { value: \"basic\", title: \"Basic\", description: \"Essential features\" },\n  { value: \"pro\", title: \"Pro\", description: \"Advanced capabilities\" },\n];\n\nexport default function App() {\n  const [selected, setSelected] = useState<Record<string, CheckCardValue>>(\n    Object.fromEntries(tiers.map((tier) => [tier, \"basic\"])),\n  );\n  const [disabled, setDisabled] = useState<CheckCardValue>(\"basic\");\n\n  return (\n    <div style={{ display: \"grid\", gap: 24 }}>\n      {tiers.map((tier) => (\n        <CheckCardGroup\n          key={tier}\n          value={selected[tier]}\n          onChange={(next) => setSelected((prev) => ({ ...prev, [tier]: next }))}\n          theme={tier}\n          shape=\"square\"\n          size=\"small\"\n          options={items}\n        />\n      ))}\n      <CheckCardGroup\n        value={disabled}\n        onChange={(next) => setDisabled(next)}\n        theme=\"solid\"\n        shape=\"square\"\n        size=\"small\"\n        options={items}\n        disabled\n      />\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "CheckCardGroup",
      "import": "import { CheckCardGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/check-card",
      "props": [
        {
          "name": "value",
          "type": "CheckCardValue | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选项值",
          "descriptionEn": "Option value"
        },
        {
          "name": "options",
          "type": "CheckCardOption[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选项",
          "descriptionEn": "Options"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用该选项",
          "descriptionEn": "Whether this option is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读该选项",
          "descriptionEn": "Whether this option is read-only"
        },
        {
          "name": "direction",
          "type": "\"horizontal\" | \"vertical\" | undefined",
          "required": false,
          "enumValues": [
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "排列方向",
          "descriptionEn": "Layout direction"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "themeProp ?? inheritedAppearance.theme ?? \"outline\"",
          "descriptionZh": "卡片主题",
          "descriptionEn": "Card theme"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "卡片尺寸",
          "descriptionEn": "Card size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "卡片形状",
          "descriptionEn": "Card shape"
        },
        {
          "name": "onChange",
          "type": "((value: CheckCardValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中值变化回调",
          "descriptionEn": "Selected value callback"
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未通过 options 生成选项时使用的 CheckCard 子节点。",
          "descriptionEn": "CheckCard children used when options is not supplied."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: CheckCardValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中值变化回调",
          "descriptionEn": "Selected value callback"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/check-card/demo/basic.tsx",
          "title": "独立选择",
          "source": "import { useState } from \"react\";\nimport { CheckCard } from \"react-kui\";\n\nexport default function App() {\n  const [agreed, setAgreed] = useState(false);\n  return (\n    <div className=\"demo-list\" style={{ maxWidth: 480, display: \"grid\", gap: 12 }}>\n      <CheckCard\n        checked={agreed}\n        onChange={(event) => setAgreed(event.checked)}\n        title=\"同意用户协议\"\n        description=\"注册即表示你已阅读并接受服务条款与隐私政策。\"\n      />\n      <span style={{ color: \"var(--kui-color-text-description)\" }}>\n        当前状态：{agreed ? \"已同意\" : \"未同意\"}\n      </span>\n    </div>\n  );\n}"
        },
        {
          "id": "components/check-card/demo/group.tsx",
          "title": "单选组",
          "source": "import { useState } from \"react\";\nimport { CheckCardGroup } from \"react-kui\";\n\nconst options = [\n  { value: \"personal\", title: \"个人版\", description: \"适合个人项目和学习使用\" },\n  { value: \"team\", title: \"团队版\", description: \"适合小型团队协作\" },\n  { value: \"enterprise\", title: \"企业版\", description: \"提供企业级管理能力\" },\n];\n\nexport default function App() {\n  const [type, setType] = useState(\"personal\");\n  return (\n    <div style={{ display: \"grid\", gap: 16 }}>\n      <CheckCardGroup value={type} onChange={(next) => setType(String(next))} options={options} />\n      <span style={{ color: \"var(--kui-color-text-description)\" }}>已选择：{type}</span>\n    </div>\n  );\n}"
        },
        {
          "id": "components/check-card/demo/custom.tsx",
          "title": "自定义 Symbol",
          "source": "import { LogoApple, LogoMicrosoft } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { CheckCard, CheckCardGroup } from \"react-kui\";\n\nexport default function App() {\n  const [platform, setPlatform] = useState(\"apple\");\n  return (\n    <CheckCardGroup value={platform} onChange={(next) => setPlatform(String(next))}>\n      <CheckCard value=\"apple\" title=\"Apple\" description=\"macOS 与 iOS\" symbol={LogoApple} />\n      <CheckCard\n        value=\"microsoft\"\n        title=\"Microsoft\"\n        description=\"Windows 与 Azure\"\n        symbol={LogoMicrosoft}\n      />\n    </CheckCardGroup>\n  );\n}"
        },
        {
          "id": "components/check-card/demo/appearance.tsx",
          "title": "外观与禁用",
          "source": "import { useState } from \"react\";\nimport { CheckCardGroup, type CheckCardValue, type SurfaceThemeType } from \"react-kui\";\n\n// A check card paints all five surface tiers, and its own default is `outline` rather than the `fill` the\n// other cards start on — so the row is listed from `outline` and the tiers are shown side by side instead of\n// behind a switch. The last row is the disabled state: the tier still decides the shape of the box, but the\n// plate and the check mark both step back.\nconst tiers: SurfaceThemeType[] = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"];\nconst items = [\n  { value: \"basic\", title: \"Basic\", description: \"Essential features\" },\n  { value: \"pro\", title: \"Pro\", description: \"Advanced capabilities\" },\n];\n\nexport default function App() {\n  const [selected, setSelected] = useState<Record<string, CheckCardValue>>(\n    Object.fromEntries(tiers.map((tier) => [tier, \"basic\"])),\n  );\n  const [disabled, setDisabled] = useState<CheckCardValue>(\"basic\");\n\n  return (\n    <div style={{ display: \"grid\", gap: 24 }}>\n      {tiers.map((tier) => (\n        <CheckCardGroup\n          key={tier}\n          value={selected[tier]}\n          onChange={(next) => setSelected((prev) => ({ ...prev, [tier]: next }))}\n          theme={tier}\n          shape=\"square\"\n          size=\"small\"\n          options={items}\n        />\n      ))}\n      <CheckCardGroup\n        value={disabled}\n        onChange={(next) => setDisabled(next)}\n        theme=\"solid\"\n        shape=\"square\"\n        size=\"small\"\n        options={items}\n        disabled\n      />\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Collapse",
      "import": "import { Collapse } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/collapse",
      "props": [
        {
          "name": "openKeys",
          "type": "(string | number)[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "模式下当前展开面板的 key",
          "descriptionEn": "Expanded panel keys in mode"
        },
        {
          "name": "accordion",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否开启手风琴模式",
          "descriptionEn": "Whether at most one panel can be expanded"
        },
        {
          "name": "sample",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否开启简洁模式",
          "descriptionEn": "Whether to enable simple mode"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"outline\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "onChange",
          "type": "((key: string | number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "切换面板时触发，返回当前面板的 key",
          "descriptionEn": "Called with the key of the panel being toggled"
        },
        {
          "name": "onOpenKeysChange",
          "type": "((keys: (string | number)[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开项变化时触发，返回全部展开项",
          "descriptionEn": "Called with all expanded keys after a change"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "折叠面板子节点；Collapse 根据 panelKey 注入展开状态和切换处理。",
          "descriptionEn": "Panel children; Collapse injects expansion state and handlers using panelKey."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((key: string | number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "切换面板时触发，返回当前面板的 key",
          "descriptionEn": "Called with the key of the panel being toggled"
        },
        {
          "name": "onOpenKeysChange",
          "type": "((keys: (string | number)[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开项变化时触发，返回全部展开项",
          "descriptionEn": "Called with all expanded keys after a change"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [
        "CollapsePanel"
      ],
      "examples": [
        {
          "id": "components/collapse/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { CollapseDemo } from \"./content\";\nexport default function App() {\n  return <CollapseDemo />;\n}"
        },
        {
          "id": "components/collapse/demo/accordion.tsx",
          "title": "手风琴",
          "source": "import { CollapseDemo } from \"./content\";\nexport default function App() {\n  return <CollapseDemo accordion />;\n}"
        },
        {
          "id": "components/collapse/demo/nesting.tsx",
          "title": "嵌套面板",
          "source": "import { Collapse, CollapsePanel } from \"react-kui\";\nimport { text } from \"./content\";\nexport default function App() {\n  return (\n    <div className=\"demo-collapse\">\n      <Collapse openKeys={[\"1\"]}>\n        <CollapsePanel key=\"1\" title=\"Panel title\">\n          <Collapse openKeys={[\"1-1\"]}>\n            <CollapsePanel key=\"1-1\" title=\"Panel title\">\n              <div>{text}</div>\n            </CollapsePanel>\n            <CollapsePanel key=\"1-2\" title=\"Panel title\">\n              <div>{text}</div>\n            </CollapsePanel>\n          </Collapse>\n        </CollapsePanel>\n        <CollapsePanel key=\"2\" title=\"Panel title\">\n          <div>{text}</div>\n        </CollapsePanel>\n        <CollapsePanel key=\"3\" title=\"Panel title\">\n          <div>{text}</div>\n        </CollapsePanel>\n      </Collapse>\n    </div>\n  );\n}"
        },
        {
          "id": "components/collapse/demo/extra.tsx",
          "title": "额外节点",
          "source": "import { Settings } from \"kui-icons\";\nimport { Icon, Collapse, CollapsePanel } from \"react-kui\";\nimport { text } from \"./content\";\nexport default function App() {\n  const extra = <Icon type={Settings} />;\n  return (\n    <div className=\"demo-collapse\">\n      <Collapse openKeys={[1, 2]}>\n        {[1, 2, 3].map((key) => (\n          <CollapsePanel key={key} title=\"Panel title\" extra={extra}>\n            <div>{text}</div>\n          </CollapsePanel>\n        ))}\n      </Collapse>\n    </div>\n  );\n}"
        },
        {
          "id": "components/collapse/demo/sample.tsx",
          "title": "简洁模式",
          "source": "import { CollapseDemo } from \"./content\";\nexport default function App() {\n  return <CollapseDemo sample />;\n}"
        },
        {
          "id": "components/collapse/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Collapse, CollapsePanel, type SurfaceThemeType } from \"react-kui\";\n\n// A collapse paints all five tiers and starts on `outline` rather than the `fill` the cards start on. The tier\n// lands on the panel heads: `solid` plates the head on the primary and flips its title, `dashed` puts the head\n// row behind a dashed edge, and `plain` leaves the rows with no box at all. Only the first panel of each group\n// is opened, so the head — the part that changes — is what the row reads as.\nconst tiers: SurfaceThemeType[] = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"];\nconst text = \"面板内容跟着面板自己的外观走，档位只决定它露出多少。\";\n\nexport default function App() {\n  return (\n    <div style={{ display: \"grid\", gap: 16 }}>\n      {tiers.map((tier) => (\n        <Collapse key={tier} theme={tier} openKeys={[1]}>\n          <CollapsePanel key={1} title={`theme: ${tier}`}>\n            <div>{text}</div>\n          </CollapsePanel>\n          <CollapsePanel key={2} title=\"第二段\">\n            <div>{text}</div>\n          </CollapsePanel>\n        </Collapse>\n      ))}\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "CollapsePanel",
      "import": "import { CollapsePanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/collapse",
      "props": [
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "面板标题",
          "descriptionEn": "Panel title"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether the panel is disabled"
        },
        {
          "name": "active",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "当前面板是否展开；在 Collapse 中通常由父组件根据 openKeys 注入。",
          "descriptionEn": "Whether the panel is expanded; normally injected by Collapse from openKeys."
        },
        {
          "name": "extra",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题右侧扩展内容",
          "descriptionEn": "Extra content beside the title"
        },
        {
          "name": "panelKey",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显式的面板标识，数字 key 场景推荐使用",
          "descriptionEn": "Explicit identifier; recommended for numeric keys"
        },
        {
          "name": "onExpand",
          "type": "((key: string | number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可操作标题被点击或键盘激活时回传 panelKey；Collapse 使用它切换展开状态。",
          "descriptionEn": "Receives panelKey when an enabled header is clicked or keyboard-activated; Collapse uses it to toggle expansion."
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "面板展开区域的正文；显示与收起由 active 控制。",
          "descriptionEn": "Panel body whose visibility is controlled by active."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onExpand",
          "type": "((key: string | number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可操作标题被点击或键盘激活时回传 panelKey；Collapse 使用它切换展开状态。",
          "descriptionEn": "Receives panelKey when an enabled header is clicked or keyboard-activated; Collapse uses it to toggle expansion."
        }
      ],
      "renderProps": [
        "title",
        "extra",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Collapse",
      "examples": [
        {
          "id": "components/collapse/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { CollapseDemo } from \"./content\";\nexport default function App() {\n  return <CollapseDemo />;\n}"
        },
        {
          "id": "components/collapse/demo/accordion.tsx",
          "title": "手风琴",
          "source": "import { CollapseDemo } from \"./content\";\nexport default function App() {\n  return <CollapseDemo accordion />;\n}"
        },
        {
          "id": "components/collapse/demo/nesting.tsx",
          "title": "嵌套面板",
          "source": "import { Collapse, CollapsePanel } from \"react-kui\";\nimport { text } from \"./content\";\nexport default function App() {\n  return (\n    <div className=\"demo-collapse\">\n      <Collapse openKeys={[\"1\"]}>\n        <CollapsePanel key=\"1\" title=\"Panel title\">\n          <Collapse openKeys={[\"1-1\"]}>\n            <CollapsePanel key=\"1-1\" title=\"Panel title\">\n              <div>{text}</div>\n            </CollapsePanel>\n            <CollapsePanel key=\"1-2\" title=\"Panel title\">\n              <div>{text}</div>\n            </CollapsePanel>\n          </Collapse>\n        </CollapsePanel>\n        <CollapsePanel key=\"2\" title=\"Panel title\">\n          <div>{text}</div>\n        </CollapsePanel>\n        <CollapsePanel key=\"3\" title=\"Panel title\">\n          <div>{text}</div>\n        </CollapsePanel>\n      </Collapse>\n    </div>\n  );\n}"
        },
        {
          "id": "components/collapse/demo/extra.tsx",
          "title": "额外节点",
          "source": "import { Settings } from \"kui-icons\";\nimport { Icon, Collapse, CollapsePanel } from \"react-kui\";\nimport { text } from \"./content\";\nexport default function App() {\n  const extra = <Icon type={Settings} />;\n  return (\n    <div className=\"demo-collapse\">\n      <Collapse openKeys={[1, 2]}>\n        {[1, 2, 3].map((key) => (\n          <CollapsePanel key={key} title=\"Panel title\" extra={extra}>\n            <div>{text}</div>\n          </CollapsePanel>\n        ))}\n      </Collapse>\n    </div>\n  );\n}"
        },
        {
          "id": "components/collapse/demo/sample.tsx",
          "title": "简洁模式",
          "source": "import { CollapseDemo } from \"./content\";\nexport default function App() {\n  return <CollapseDemo sample />;\n}"
        },
        {
          "id": "components/collapse/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Collapse, CollapsePanel, type SurfaceThemeType } from \"react-kui\";\n\n// A collapse paints all five tiers and starts on `outline` rather than the `fill` the cards start on. The tier\n// lands on the panel heads: `solid` plates the head on the primary and flips its title, `dashed` puts the head\n// row behind a dashed edge, and `plain` leaves the rows with no box at all. Only the first panel of each group\n// is opened, so the head — the part that changes — is what the row reads as.\nconst tiers: SurfaceThemeType[] = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"];\nconst text = \"面板内容跟着面板自己的外观走，档位只决定它露出多少。\";\n\nexport default function App() {\n  return (\n    <div style={{ display: \"grid\", gap: 16 }}>\n      {tiers.map((tier) => (\n        <Collapse key={tier} theme={tier} openKeys={[1]}>\n          <CollapsePanel key={1} title={`theme: ${tier}`}>\n            <div>{text}</div>\n          </CollapsePanel>\n          <CollapsePanel key={2} title=\"第二段\">\n            <div>{text}</div>\n          </CollapsePanel>\n        </Collapse>\n      ))}\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "ColorPicker",
      "import": "import { ColorPicker } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/color-picker",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色值",
          "descriptionEn": "color value"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "弹层显示状态",
          "descriptionEn": "popup visibility"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether the picker is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the picker is read-only"
        },
        {
          "name": "disabledAlpha",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用透明度",
          "descriptionEn": "Whether alpha editing is disabled"
        },
        {
          "name": "showText",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示颜色文字",
          "descriptionEn": "Whether to display the color text"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "弹层位置",
          "descriptionEn": "Popup placement"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "trigger",
          "type": "\"hover\" | \"click\" | undefined",
          "required": false,
          "enumValues": [
            "hover",
            "click"
          ],
          "boolean": false,
          "defaultExpression": "\"click\"",
          "descriptionZh": "弹层触发方式",
          "descriptionEn": "Popup trigger mode"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "颜色选择器尺寸",
          "descriptionEn": "Picker size"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题，未设置时可继承 Form 或 ConfigProvider",
          "descriptionEn": "Theme; inherits from Form or ConfigProvider when unset"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "形状，支持 `round`、`circle`、`square`，未设置时可继承 Form 或 ConfigProvider",
          "descriptionEn": "Shape: `round`, `circle`, or `square`; inherits from Form or ConfigProvider"
        },
        {
          "name": "mode",
          "type": "ColorMode | undefined",
          "required": false,
          "enumValues": [
            "hex",
            "rgb",
            "hsl"
          ],
          "boolean": false,
          "descriptionZh": "颜色展示类型，支持 `hex`、`rgb`、`hsl`",
          "descriptionEn": "Color output mode: `hex`, `rgb`, or `hsl`"
        },
        {
          "name": "presets",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义颜色盘",
          "descriptionEn": "Custom color palette"
        },
        {
          "name": "onChange",
          "type": "((color: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色值改变时触发",
          "descriptionEn": "Called when the color value changes"
        },
        {
          "name": "onUpdateMode",
          "type": "((mode: ColorMode) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色模式更新时触发",
          "descriptionEn": "Called when the color mode changes"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色选择器展开或收起时触发",
          "descriptionEn": "Called when the popup opens or closes"
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义触发元素",
          "descriptionEn": "Custom trigger element"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只渲染颜色面板，不包含触发元素与弹层",
          "descriptionEn": "Render only the color panel, without a trigger or portal"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((color: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色值改变时触发",
          "descriptionEn": "Called when the color value changes"
        },
        {
          "name": "onUpdateMode",
          "type": "((mode: ColorMode) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色模式更新时触发",
          "descriptionEn": "Called when the color mode changes"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色选择器展开或收起时触发",
          "descriptionEn": "Called when the popup opens or closes"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/color-picker/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, ColorPicker } from \"react-kui\";\nexport default function App() {\n  const [color, setColor] = useState(\"#3a95ff\"),\n    [hex, setHex] = useState(\"#3a95ff\"),\n    [rgb, setRgb] = useState(\"rgba(0, 188, 212, 0.72)\"),\n    [hsl, setHsl] = useState(\"hsl(207, 90%, 54%)\");\n  return (\n    <Space vertical>\n      <code>value: {color}</code>\n      <ColorPicker value={color} onChange={setColor} />\n      <code>mode = hex, value: {hex}</code>\n      <ColorPicker value={hex} onChange={setHex} />\n      <code>mode = rgb, value: {rgb}</code>\n      <ColorPicker mode=\"rgb\" value={rgb} onChange={setRgb} />\n      <code>mode = hsl, value: {hsl}</code>\n      <ColorPicker mode=\"hsl\" value={hsl} onChange={setHsl} />\n      <code>showText = true</code>\n      <ColorPicker showText value={color} onChange={setColor} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/size.tsx",
          "title": "尺寸大小 / 不可用",
          "source": "import { useState } from \"react\";\nimport { Space, ColorPicker } from \"react-kui\";\nexport default function App() {\n  const [color, setColor] = useState(\"#3a95ff\");\n  return (\n    <Space vertical>\n      <Space>\n        <Space vertical>\n          <ColorPicker value={color} size=\"small\" />\n          <ColorPicker value={color} />\n          <ColorPicker value={color} size=\"large\" />\n        </Space>\n        <Space vertical>\n          <ColorPicker showText value={color} size=\"small\" />\n          <ColorPicker showText value={color} />\n          <ColorPicker showText value={color} size=\"large\" />\n        </Space>\n      </Space>\n      <br />\n      <Space vertical>\n        <code>disabled</code>\n        <Space>\n          <ColorPicker value={color} disabled />\n          <ColorPicker showText value={color} disabled />\n        </Space>\n        <br />\n        <code>disabledAlpha</code>\n        <ColorPicker showText disabledAlpha value={color} />\n        <code>presets colors</code>\n        <ColorPicker value={color} onChange={setColor} presets={[\"#9c27b0\", \"red\", \"blue\"]} />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/appearance.tsx",
          "title": "主题与形状",
          "source": "import { useState } from \"react\";\nimport { ColorPicker, Space } from \"react-kui\";\n\nexport default function App() {\n  const [color, setColor] = useState(\"#3a95ff\");\n\n  return (\n    <Space vertical>\n      <Space>\n        <ColorPicker value={color} onChange={setColor} theme=\"outline\" showText />\n        <ColorPicker value={color} onChange={setColor} theme=\"fill\" showText />\n        <ColorPicker value={color} onChange={setColor} theme=\"plain\" showText />\n      </Space>\n      <Space>\n        <ColorPicker value={color} onChange={setColor} shape=\"round\" showText />\n        <ColorPicker value={color} onChange={setColor} shape=\"circle\" showText />\n        <ColorPicker value={color} onChange={setColor} shape=\"square\" showText />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/custom-trigger.tsx",
          "title": "自定义触发器",
          "source": "import { useState } from \"react\";\nimport { Button, Space, ColorPicker } from \"react-kui\";\nexport default function App() {\n  const [color1, setColor1] = useState(\"#3a95ff\"),\n    [color2, setColor2] = useState(\"red\");\n  return (\n    <Space className=\"demo-color-picker\" vertical>\n      <Space>\n        <ColorPicker value={color1} onChange={setColor1}>\n          <Button type=\"primary\">Open</Button>\n        </ColorPicker>\n        {color1}\n      </Space>\n      <Space>\n        <ColorPicker value={color2} onChange={setColor2} trigger=\"hover\">\n          <Button type=\"primary\">Hover</Button>\n        </ColorPicker>\n        {color2}\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/placement.tsx",
          "title": "弹出位置",
          "source": "import { Button, Space, ColorPicker } from \"react-kui\";\nconst placements = [\n  \"bottom-left\",\n  \"bottom\",\n  \"bottom-right\",\n  \"top-left\",\n  \"top\",\n  \"top-right\",\n] as const;\nexport default function App() {\n  return (\n    <Space wrap>\n      {placements.map((placement) => (\n        <ColorPicker key={placement} value=\"red\" size=\"small\" placement={placement}>\n          <Button>{placement}</Button>\n        </ColorPicker>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "ColorPickerPanel",
      "import": "import { ColorPickerPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/color-picker",
      "props": [
        {
          "name": "onChange",
          "type": "((color: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色值改变时触发",
          "descriptionEn": "Called when the color value changes"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether the picker is disabled"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "descriptionZh": "弹层位置",
          "descriptionEn": "Popup placement"
        },
        {
          "name": "trigger",
          "type": "\"hover\" | \"click\" | undefined",
          "required": false,
          "enumValues": [
            "hover",
            "click"
          ],
          "boolean": false,
          "descriptionZh": "弹层触发方式",
          "descriptionEn": "Popup trigger mode"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色选择器展开或收起时触发",
          "descriptionEn": "Called when the popup opens or closes"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "颜色选择器尺寸",
          "descriptionEn": "Picker size"
        },
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色值",
          "descriptionEn": "color value"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the picker is read-only"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题，未设置时可继承 Form 或 ConfigProvider",
          "descriptionEn": "Theme; inherits from Form or ConfigProvider when unset"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "形状，支持 `round`、`circle`、`square`，未设置时可继承 Form 或 ConfigProvider",
          "descriptionEn": "Shape: `round`, `circle`, or `square`; inherits from Form or ConfigProvider"
        },
        {
          "name": "disabledAlpha",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用透明度",
          "descriptionEn": "Whether alpha editing is disabled"
        },
        {
          "name": "showText",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否展示颜色文字",
          "descriptionEn": "Whether to display the color text"
        },
        {
          "name": "mode",
          "type": "ColorMode | undefined",
          "required": false,
          "enumValues": [
            "hex",
            "rgb",
            "hsl"
          ],
          "boolean": false,
          "descriptionZh": "颜色展示类型，支持 `hex`、`rgb`、`hsl`",
          "descriptionEn": "Color output mode: `hex`, `rgb`, or `hsl`"
        },
        {
          "name": "presets",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义颜色盘",
          "descriptionEn": "Custom color palette"
        },
        {
          "name": "onUpdateMode",
          "type": "((mode: ColorMode) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色模式更新时触发",
          "descriptionEn": "Called when the color mode changes"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((color: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色值改变时触发",
          "descriptionEn": "Called when the color value changes"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色选择器展开或收起时触发",
          "descriptionEn": "Called when the popup opens or closes"
        },
        {
          "name": "onUpdateMode",
          "type": "((mode: ColorMode) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "颜色模式更新时触发",
          "descriptionEn": "Called when the color mode changes"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/color-picker/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, ColorPicker } from \"react-kui\";\nexport default function App() {\n  const [color, setColor] = useState(\"#3a95ff\"),\n    [hex, setHex] = useState(\"#3a95ff\"),\n    [rgb, setRgb] = useState(\"rgba(0, 188, 212, 0.72)\"),\n    [hsl, setHsl] = useState(\"hsl(207, 90%, 54%)\");\n  return (\n    <Space vertical>\n      <code>value: {color}</code>\n      <ColorPicker value={color} onChange={setColor} />\n      <code>mode = hex, value: {hex}</code>\n      <ColorPicker value={hex} onChange={setHex} />\n      <code>mode = rgb, value: {rgb}</code>\n      <ColorPicker mode=\"rgb\" value={rgb} onChange={setRgb} />\n      <code>mode = hsl, value: {hsl}</code>\n      <ColorPicker mode=\"hsl\" value={hsl} onChange={setHsl} />\n      <code>showText = true</code>\n      <ColorPicker showText value={color} onChange={setColor} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/size.tsx",
          "title": "尺寸大小 / 不可用",
          "source": "import { useState } from \"react\";\nimport { Space, ColorPicker } from \"react-kui\";\nexport default function App() {\n  const [color, setColor] = useState(\"#3a95ff\");\n  return (\n    <Space vertical>\n      <Space>\n        <Space vertical>\n          <ColorPicker value={color} size=\"small\" />\n          <ColorPicker value={color} />\n          <ColorPicker value={color} size=\"large\" />\n        </Space>\n        <Space vertical>\n          <ColorPicker showText value={color} size=\"small\" />\n          <ColorPicker showText value={color} />\n          <ColorPicker showText value={color} size=\"large\" />\n        </Space>\n      </Space>\n      <br />\n      <Space vertical>\n        <code>disabled</code>\n        <Space>\n          <ColorPicker value={color} disabled />\n          <ColorPicker showText value={color} disabled />\n        </Space>\n        <br />\n        <code>disabledAlpha</code>\n        <ColorPicker showText disabledAlpha value={color} />\n        <code>presets colors</code>\n        <ColorPicker value={color} onChange={setColor} presets={[\"#9c27b0\", \"red\", \"blue\"]} />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/appearance.tsx",
          "title": "主题与形状",
          "source": "import { useState } from \"react\";\nimport { ColorPicker, Space } from \"react-kui\";\n\nexport default function App() {\n  const [color, setColor] = useState(\"#3a95ff\");\n\n  return (\n    <Space vertical>\n      <Space>\n        <ColorPicker value={color} onChange={setColor} theme=\"outline\" showText />\n        <ColorPicker value={color} onChange={setColor} theme=\"fill\" showText />\n        <ColorPicker value={color} onChange={setColor} theme=\"plain\" showText />\n      </Space>\n      <Space>\n        <ColorPicker value={color} onChange={setColor} shape=\"round\" showText />\n        <ColorPicker value={color} onChange={setColor} shape=\"circle\" showText />\n        <ColorPicker value={color} onChange={setColor} shape=\"square\" showText />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/custom-trigger.tsx",
          "title": "自定义触发器",
          "source": "import { useState } from \"react\";\nimport { Button, Space, ColorPicker } from \"react-kui\";\nexport default function App() {\n  const [color1, setColor1] = useState(\"#3a95ff\"),\n    [color2, setColor2] = useState(\"red\");\n  return (\n    <Space className=\"demo-color-picker\" vertical>\n      <Space>\n        <ColorPicker value={color1} onChange={setColor1}>\n          <Button type=\"primary\">Open</Button>\n        </ColorPicker>\n        {color1}\n      </Space>\n      <Space>\n        <ColorPicker value={color2} onChange={setColor2} trigger=\"hover\">\n          <Button type=\"primary\">Hover</Button>\n        </ColorPicker>\n        {color2}\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/color-picker/demo/placement.tsx",
          "title": "弹出位置",
          "source": "import { Button, Space, ColorPicker } from \"react-kui\";\nconst placements = [\n  \"bottom-left\",\n  \"bottom\",\n  \"bottom-right\",\n  \"top-left\",\n  \"top\",\n  \"top-right\",\n] as const;\nexport default function App() {\n  return (\n    <Space wrap>\n      {placements.map((placement) => (\n        <ColorPicker key={placement} value=\"red\" size=\"small\" placement={placement}>\n          <Button>{placement}</Button>\n        </ColorPicker>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "DatePicker",
      "import": "import { DatePicker } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/date-picker",
      "props": [
        {
          "name": "value",
          "type": "DatePickerInput | DatePickerInput[]",
          "required": false,
          "boolean": false,
          "descriptionZh": "的日期或时间值",
          "descriptionEn": "date or time value"
        },
        {
          "name": "startDate",
          "type": "DatePickerInput",
          "required": false,
          "boolean": false,
          "descriptionZh": "开始时间（范围选择）",
          "descriptionEn": "Start value for range selection"
        },
        {
          "name": "endDate",
          "type": "DatePickerInput",
          "required": false,
          "boolean": false,
          "descriptionZh": "结束时间（范围选择）",
          "descriptionEn": "End value for range selection"
        },
        {
          "name": "valueType",
          "type": "DatePickerValueType | undefined",
          "required": false,
          "enumValues": [
            "string",
            "date",
            "timestamp",
            "unix"
          ],
          "boolean": false,
          "defaultExpression": "\"string\"",
          "descriptionZh": "输出值类型",
          "descriptionEn": "Output value type"
        },
        {
          "name": "mode",
          "type": "DatePickerModeType | undefined",
          "required": false,
          "enumValues": [
            "date",
            "time",
            "month",
            "year",
            "dateTime",
            "dateRange",
            "dateTimeRange"
          ],
          "boolean": false,
          "defaultExpression": "\"date\"",
          "descriptionZh": "日期选择模式",
          "descriptionEn": "Date picker mode"
        },
        {
          "name": "presets",
          "type": "DatePickerPreset[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "预设日期",
          "descriptionEn": "Preset dates"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用组件",
          "descriptionEn": "Whether the component is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the component is read-only"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下拉面板显示状态",
          "descriptionEn": "dropdown visibility"
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示清除图标",
          "descriptionEn": "Whether to show the clear icon"
        },
        {
          "name": "editable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否可编辑",
          "descriptionEn": "Whether it is editable"
        },
        {
          "name": "placeholder",
          "type": "string | string[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"\"",
          "descriptionZh": "提示语",
          "descriptionEn": "Placeholder text"
        },
        {
          "name": "format",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "设置日期格式，只接受单个格式（解析和展示都用它），不支持数组多格式匹配。配置参考 [dayjs](http://day.js.org/)",
          "descriptionEn": "Set the date format. A single format only: it drives both parsing and display, array format matching is not supported. Configuration reference http://day.js.org/"
        },
        {
          "name": "disabledDate",
          "type": "((date: Date) => boolean) | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "() => false",
          "descriptionZh": "不可选择的日期",
          "descriptionEn": "Disabled dates"
        },
        {
          "name": "disabledTime",
          "type": "((date: Date) => boolean) | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "() => false",
          "descriptionZh": "不可选择的时间",
          "descriptionEn": "Disabled times"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "按钮尺寸,可选值 `small`、`large`",
          "descriptionEn": "Button size, optional values `small`, `large`"
        },
        {
          "name": "dateIcon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "CalendarDays",
          "descriptionZh": "自定义图标",
          "descriptionEn": "Custom icon"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "组件呈现的形式",
          "descriptionEn": "Component shape"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否展示边框",
          "descriptionEn": "Whether to display the border"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "下拉展示的方位",
          "descriptionEn": "Direction displayed when pulled down"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "header",
          "type": "ReactNode | ((api: { emit: (value: DatePickerInput | DatePickerInput[]) => void; }) => ReactNode)",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义面板头部内容或渲染函数",
          "descriptionEn": "Custom panel header content or render function"
        },
        {
          "name": "footer",
          "type": "ReactNode | ((api: { emit: (value: DatePickerInput | DatePickerInput[]) => void; }) => ReactNode)",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义面板底部内容或渲染函数",
          "descriptionEn": "Custom panel footer content or render function"
        },
        {
          "name": "onChange",
          "type": "((date: DatePickerOutput | DatePickerOutput[], dateStr: string | string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值改变后的回调",
          "descriptionEn": "Callback after the value changes"
        },
        {
          "name": "onStartDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择开始日期变化时触发",
          "descriptionEn": "Triggered when the range start date changes"
        },
        {
          "name": "onEndDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择结束日期变化时触发",
          "descriptionEn": "Triggered when the range end date changes"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when the dropdown box expands or collapses"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮时触发",
          "descriptionEn": "Triggered when the clear button is clicked"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只渲染选择面板，不包含触发元素与弹层",
          "descriptionEn": "Render only the picker panel, without a trigger or portal"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((date: DatePickerOutput | DatePickerOutput[], dateStr: string | string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值改变后的回调",
          "descriptionEn": "Callback after the value changes"
        },
        {
          "name": "onStartDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择开始日期变化时触发",
          "descriptionEn": "Triggered when the range start date changes"
        },
        {
          "name": "onEndDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择结束日期变化时触发",
          "descriptionEn": "Triggered when the range end date changes"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when the dropdown box expands or collapses"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮时触发",
          "descriptionEn": "Triggered when the clear button is clicked"
        }
      ],
      "renderProps": [
        "disabledDate",
        "disabledTime",
        "header",
        "footer"
      ],
      "behavior": {
        "rules": [
          "Use value/onChange for a single date or a range array when the selected mode is a range. startDate/endDate with onStartDateChange/onEndDateChange are an alternative binding channel, not the only API.",
          "onChange receives (date, dateStr); output depends on valueType and mode. Handle clear/null values explicitly and avoid supplying conflicting binding channels."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/date-picker/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, DatePicker } from \"react-kui\";\nexport default function App() {\n  const [year, setYear] = useState(\"2025\"),\n    [month, setMonth] = useState(\"2025-10\"),\n    [date, setDate] = useState(\"2025-12-12\"),\n    [time, setTime] = useState(\"20:20:20\"),\n    [datetime, setDatetime] = useState(\"2021-01-01 20:20:20\");\n  return (\n    <Space wrap vertical>\n      <code>value: {year}</code>\n      <DatePicker mode=\"year\" value={year} onChange={(_, s) => setYear(s as string)} />\n      <code>value: {month}</code>\n      <DatePicker mode=\"month\" value={month} onChange={(_, s) => setMonth(s as string)} />\n      <code>value: {date}</code>\n      <DatePicker mode=\"date\" value={date} onChange={(_, s) => setDate(s as string)} />\n      <code>value: {time}</code>\n      <DatePicker mode=\"time\" value={time} onChange={(_, s) => setTime(s as string)} />\n      <code>value: {datetime}</code>\n      <DatePicker mode=\"dateTime\" value={datetime} onChange={(_, s) => setDatetime(s as string)} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/value-type.tsx",
          "title": "输出类型",
          "source": "import { useState } from \"react\";\nimport { Space, DatePicker, type DatePickerInput } from \"react-kui\";\nexport default function App() {\n  const [v1, s1] = useState<DatePickerInput>(\"2025-11-30\"),\n    [v2, s2] = useState<DatePickerInput>(\"2025/11/30\"),\n    [v3, s3] = useState<DatePickerInput>(new Date(\"2025-11-30\")),\n    [v4, s4] = useState<DatePickerInput>(1764460800000),\n    [v5, s5] = useState<DatePickerInput>(1764460800);\n  const row = (\n    label: string,\n    value: DatePickerInput,\n    set: (v: DatePickerInput) => void,\n    props: Record<string, unknown>,\n  ) => (\n    <>\n      <code>\n        {label}, value: {String(value)}\n      </code>\n      <DatePicker {...props} value={value} onChange={(v) => set(v as DatePickerInput)} />\n    </>\n  );\n  return (\n    <Space wrap vertical>\n      {row(\"string\", v1, s1, { valueType: \"string\" })}\n      {row(\"format\", v2, s2, { format: \"YYYY/MM/DD\" })}\n      {row(\"date\", v3, s3, { valueType: \"date\" })}\n      {row(\"timestamp\", v4, s4, { valueType: \"timestamp\" })}\n      {row(\"unix\", v5, s5, { valueType: \"unix\" })}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/range.tsx",
          "title": "时间区域",
          "source": "import { useState } from \"react\";\nimport { Space, DatePicker, type DatePickerOutput } from \"react-kui\";\nexport default function App() {\n  const [query, setQuery] = useState({\n    startDate: \"2025-10-01\" as DatePickerOutput,\n    endDate: \"2025-11-25\" as DatePickerOutput,\n    startTime: \"2025-09-01 10:10:10\" as DatePickerOutput,\n    endTime: \"2025-10-01 21:28:28\" as DatePickerOutput,\n  });\n  return (\n    <Space wrap vertical>\n      <code>start date: {String(query.startDate)}</code>\n      <code>end date: {String(query.endDate)}</code>\n      <DatePicker\n        mode=\"dateRange\"\n        startDate={query.startDate}\n        endDate={query.endDate}\n        onStartDateChange={(startDate) => setQuery((value) => ({ ...value, startDate }))}\n        onEndDateChange={(endDate) => setQuery((value) => ({ ...value, endDate }))}\n      />\n      <br />\n      <code>start date: {String(query.startTime)}</code>\n      <code>end date: {String(query.endTime)}</code>\n      <DatePicker\n        mode=\"dateTimeRange\"\n        startDate={query.startTime}\n        endDate={query.endTime}\n        onStartDateChange={(startTime) => setQuery((value) => ({ ...value, startTime }))}\n        onEndDateChange={(endTime) => setQuery((value) => ({ ...value, endTime }))}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/disabled-date.tsx",
          "title": "不可选择日期和时间",
          "source": "import dayjs from \"dayjs\";\nimport { Space, DatePicker } from \"react-kui\";\nconst disabledDate = (current: Date) => current < dayjs().endOf(\"day\").toDate();\nconst before = (hour: number, minute: number) => (date: Date) => {\n  const target = new Date(date);\n  target.setHours(hour, minute, 0, 0);\n  return date < target;\n};\nexport default function App() {\n  return (\n    <Space wrap vertical>\n      <code>not before than today</code>\n      <DatePicker disabledDate={disabledDate} />\n      <code>not before 09:30</code>\n      <DatePicker disabledTime={before(9, 30)} mode=\"time\" />\n      <code>not before 12:30 today</code>\n      <DatePicker mode=\"dateTimeRange\" disabledDate={disabledDate} disabledTime={before(12, 30)} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/disabled.tsx",
          "title": "禁用和不可编辑",
          "source": "import { Space, DatePicker } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap vertical>\n      <code>disabled = true</code>\n      <DatePicker disabled />\n      <br />\n      <code>editable = false</code>\n      <DatePicker editable={false} />\n      <br />\n      <code>clearable = false</code>\n      <DatePicker clearable={false} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/presets.tsx",
          "title": "预设范围",
          "source": "import dayjs from \"dayjs\";\nimport { useState } from \"react\";\nimport { Button, Space, DatePicker, type DatePickerInput } from \"react-kui\";\nconst p1 = [\n  { label: \"Yesterday\", value: () => dayjs().add(-1, \"d\") },\n  { label: \"7 days ago\", value: () => dayjs().add(-7, \"d\") },\n  { label: \"Last month\", value: () => dayjs().add(-1, \"month\") },\n];\nconst p2 = [7, 14, 30, 90].map((days) => ({\n  label: `Last ${days} days`,\n  value: () => [dayjs().add(-days, \"d\"), dayjs()],\n}));\nexport default function App() {\n  const [value1, setValue1] = useState<DatePickerInput>(),\n    [value2, setValue2] = useState<DatePickerInput[]>([]);\n  return (\n    <Space wrap vertical>\n      <DatePicker presets={p1} />\n      <DatePicker presets={p2} mode=\"dateRange\" />\n      <DatePicker mode=\"dateTimeRange\" presets={p2} />\n      <br />\n      <code>custom header and footer</code>\n      <DatePicker\n        value={value1}\n        onChange={(v) => setValue1(v as DatePickerInput)}\n        header={({ emit }) => <Button onClick={() => emit(dayjs().add(-1, \"d\"))}>Yesterday</Button>}\n      />\n      <DatePicker\n        value={value2}\n        onChange={(v) => setValue2(v as DatePickerInput[])}\n        mode=\"dateRange\"\n        footer={({ emit }) => (\n          <Button onClick={() => emit([dayjs().add(-7, \"d\"), dayjs()])}>7 days ago</Button>\n        )}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/theme.tsx",
          "title": "奇葩的主题",
          "source": "import { ArrowDown } from \"kui-icons\";\nimport { Space, DatePicker } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <DatePicker shape=\"circle\" />\n      <DatePicker />\n      <DatePicker theme=\"outline\" placeholder=\"Outline\" />\n      <DatePicker dateIcon={ArrowDown} placeholder=\"Custom Icon\" />\n      <DatePicker theme=\"plain\" placeholder=\"Plain\" />\n      <DatePicker mode=\"dateRange\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/size.tsx",
          "title": "尺寸",
          "source": "import { useState } from \"react\";\nimport { type SizeType, Segmented, Space, DatePicker } from \"react-kui\";\nconst options = [\n  { value: \"large\", label: \"Large\" },\n  { value: \"medium\", label: \"Medium\" },\n  { value: \"small\", label: \"Small\" },\n];\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\");\n  return (\n    <Space vertical>\n      <Segmented value={size} options={options} onChange={(value) => setSize(value as SizeType)} />\n      <Space vertical>\n        <DatePicker size={size} />\n        <DatePicker mode=\"month\" size={size} />\n        <DatePicker size={size} mode=\"dateRange\" />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/lang.tsx",
          "title": "多语言",
          "source": "import dayjs from \"dayjs\";\nimport \"dayjs/locale/en\";\nimport { useState } from \"react\";\nimport { Space, DatePicker } from \"react-kui\";\ndayjs.locale(\"en\");\nexport default function App() {\n  const [value, setValue] = useState(\"2021-01-01 20:20:20\");\n  return (\n    <Space wrap vertical>\n      <DatePicker mode=\"year\" />\n      <DatePicker mode=\"month\" />\n      <DatePicker mode=\"date\" />\n      <DatePicker mode=\"time\" />\n      <DatePicker mode=\"dateTime\" value={value} onChange={(_, s) => setValue(s as string)} />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "DatePickerPanel",
      "import": "import { DatePickerPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/date-picker",
      "props": [
        {
          "name": "onChange",
          "type": "((date: DatePickerOutput | DatePickerOutput[], dateStr: string | string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值改变后的回调",
          "descriptionEn": "Callback after the value changes"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用组件",
          "descriptionEn": "Whether the component is disabled"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "descriptionZh": "下拉展示的方位",
          "descriptionEn": "Direction displayed when pulled down"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when the dropdown box expands or collapses"
        },
        {
          "name": "footer",
          "type": "ReactNode | ((api: { emit: (value: DatePickerInput | DatePickerInput[]) => void; }) => ReactNode)",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义面板底部内容或渲染函数",
          "descriptionEn": "Custom panel footer content or render function"
        },
        {
          "name": "header",
          "type": "ReactNode | ((api: { emit: (value: DatePickerInput | DatePickerInput[]) => void; }) => ReactNode)",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义面板头部内容或渲染函数",
          "descriptionEn": "Custom panel header content or render function"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "按钮尺寸,可选值 `small`、`large`",
          "descriptionEn": "Button size, optional values `small`, `large`"
        },
        {
          "name": "value",
          "type": "DatePickerInput | DatePickerInput[]",
          "required": false,
          "boolean": false,
          "descriptionZh": "的日期或时间值",
          "descriptionEn": "date or time value"
        },
        {
          "name": "placeholder",
          "type": "string | string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "提示语",
          "descriptionEn": "Placeholder text"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the component is read-only"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "组件呈现的形式",
          "descriptionEn": "Component shape"
        },
        {
          "name": "mode",
          "type": "DatePickerModeType | undefined",
          "required": false,
          "enumValues": [
            "date",
            "time",
            "month",
            "year",
            "dateTime",
            "dateRange",
            "dateTimeRange"
          ],
          "boolean": false,
          "descriptionZh": "日期选择模式",
          "descriptionEn": "Date picker mode"
        },
        {
          "name": "presets",
          "type": "DatePickerPreset[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "预设日期",
          "descriptionEn": "Preset dates"
        },
        {
          "name": "startDate",
          "type": "DatePickerInput",
          "required": false,
          "boolean": false,
          "descriptionZh": "开始时间（范围选择）",
          "descriptionEn": "Start value for range selection"
        },
        {
          "name": "endDate",
          "type": "DatePickerInput",
          "required": false,
          "boolean": false,
          "descriptionZh": "结束时间（范围选择）",
          "descriptionEn": "End value for range selection"
        },
        {
          "name": "valueType",
          "type": "DatePickerValueType | undefined",
          "required": false,
          "enumValues": [
            "string",
            "date",
            "timestamp",
            "unix"
          ],
          "boolean": false,
          "descriptionZh": "输出值类型",
          "descriptionEn": "Output value type"
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否显示清除图标",
          "descriptionEn": "Whether to show the clear icon"
        },
        {
          "name": "editable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否可编辑",
          "descriptionEn": "Whether it is editable"
        },
        {
          "name": "format",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "设置日期格式，只接受单个格式（解析和展示都用它），不支持数组多格式匹配。配置参考 [dayjs](http://day.js.org/)",
          "descriptionEn": "Set the date format. A single format only: it drives both parsing and display, array format matching is not supported. Configuration reference http://day.js.org/"
        },
        {
          "name": "disabledDate",
          "type": "((date: Date) => boolean) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "不可选择的日期",
          "descriptionEn": "Disabled dates"
        },
        {
          "name": "disabledTime",
          "type": "((date: Date) => boolean) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "不可选择的时间",
          "descriptionEn": "Disabled times"
        },
        {
          "name": "dateIcon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标",
          "descriptionEn": "Custom icon"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否展示边框",
          "descriptionEn": "Whether to display the border"
        },
        {
          "name": "onStartDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择开始日期变化时触发",
          "descriptionEn": "Triggered when the range start date changes"
        },
        {
          "name": "onEndDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择结束日期变化时触发",
          "descriptionEn": "Triggered when the range end date changes"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮时触发",
          "descriptionEn": "Triggered when the clear button is clicked"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((date: DatePickerOutput | DatePickerOutput[], dateStr: string | string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值改变后的回调",
          "descriptionEn": "Callback after the value changes"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when the dropdown box expands or collapses"
        },
        {
          "name": "onStartDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择开始日期变化时触发",
          "descriptionEn": "Triggered when the range start date changes"
        },
        {
          "name": "onEndDateChange",
          "type": "((value: DatePickerOutput) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "范围选择结束日期变化时触发",
          "descriptionEn": "Triggered when the range end date changes"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮时触发",
          "descriptionEn": "Triggered when the clear button is clicked"
        }
      ],
      "renderProps": [
        "footer",
        "header",
        "disabledDate",
        "disabledTime"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/date-picker/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, DatePicker } from \"react-kui\";\nexport default function App() {\n  const [year, setYear] = useState(\"2025\"),\n    [month, setMonth] = useState(\"2025-10\"),\n    [date, setDate] = useState(\"2025-12-12\"),\n    [time, setTime] = useState(\"20:20:20\"),\n    [datetime, setDatetime] = useState(\"2021-01-01 20:20:20\");\n  return (\n    <Space wrap vertical>\n      <code>value: {year}</code>\n      <DatePicker mode=\"year\" value={year} onChange={(_, s) => setYear(s as string)} />\n      <code>value: {month}</code>\n      <DatePicker mode=\"month\" value={month} onChange={(_, s) => setMonth(s as string)} />\n      <code>value: {date}</code>\n      <DatePicker mode=\"date\" value={date} onChange={(_, s) => setDate(s as string)} />\n      <code>value: {time}</code>\n      <DatePicker mode=\"time\" value={time} onChange={(_, s) => setTime(s as string)} />\n      <code>value: {datetime}</code>\n      <DatePicker mode=\"dateTime\" value={datetime} onChange={(_, s) => setDatetime(s as string)} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/value-type.tsx",
          "title": "输出类型",
          "source": "import { useState } from \"react\";\nimport { Space, DatePicker, type DatePickerInput } from \"react-kui\";\nexport default function App() {\n  const [v1, s1] = useState<DatePickerInput>(\"2025-11-30\"),\n    [v2, s2] = useState<DatePickerInput>(\"2025/11/30\"),\n    [v3, s3] = useState<DatePickerInput>(new Date(\"2025-11-30\")),\n    [v4, s4] = useState<DatePickerInput>(1764460800000),\n    [v5, s5] = useState<DatePickerInput>(1764460800);\n  const row = (\n    label: string,\n    value: DatePickerInput,\n    set: (v: DatePickerInput) => void,\n    props: Record<string, unknown>,\n  ) => (\n    <>\n      <code>\n        {label}, value: {String(value)}\n      </code>\n      <DatePicker {...props} value={value} onChange={(v) => set(v as DatePickerInput)} />\n    </>\n  );\n  return (\n    <Space wrap vertical>\n      {row(\"string\", v1, s1, { valueType: \"string\" })}\n      {row(\"format\", v2, s2, { format: \"YYYY/MM/DD\" })}\n      {row(\"date\", v3, s3, { valueType: \"date\" })}\n      {row(\"timestamp\", v4, s4, { valueType: \"timestamp\" })}\n      {row(\"unix\", v5, s5, { valueType: \"unix\" })}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/range.tsx",
          "title": "时间区域",
          "source": "import { useState } from \"react\";\nimport { Space, DatePicker, type DatePickerOutput } from \"react-kui\";\nexport default function App() {\n  const [query, setQuery] = useState({\n    startDate: \"2025-10-01\" as DatePickerOutput,\n    endDate: \"2025-11-25\" as DatePickerOutput,\n    startTime: \"2025-09-01 10:10:10\" as DatePickerOutput,\n    endTime: \"2025-10-01 21:28:28\" as DatePickerOutput,\n  });\n  return (\n    <Space wrap vertical>\n      <code>start date: {String(query.startDate)}</code>\n      <code>end date: {String(query.endDate)}</code>\n      <DatePicker\n        mode=\"dateRange\"\n        startDate={query.startDate}\n        endDate={query.endDate}\n        onStartDateChange={(startDate) => setQuery((value) => ({ ...value, startDate }))}\n        onEndDateChange={(endDate) => setQuery((value) => ({ ...value, endDate }))}\n      />\n      <br />\n      <code>start date: {String(query.startTime)}</code>\n      <code>end date: {String(query.endTime)}</code>\n      <DatePicker\n        mode=\"dateTimeRange\"\n        startDate={query.startTime}\n        endDate={query.endTime}\n        onStartDateChange={(startTime) => setQuery((value) => ({ ...value, startTime }))}\n        onEndDateChange={(endTime) => setQuery((value) => ({ ...value, endTime }))}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/disabled-date.tsx",
          "title": "不可选择日期和时间",
          "source": "import dayjs from \"dayjs\";\nimport { Space, DatePicker } from \"react-kui\";\nconst disabledDate = (current: Date) => current < dayjs().endOf(\"day\").toDate();\nconst before = (hour: number, minute: number) => (date: Date) => {\n  const target = new Date(date);\n  target.setHours(hour, minute, 0, 0);\n  return date < target;\n};\nexport default function App() {\n  return (\n    <Space wrap vertical>\n      <code>not before than today</code>\n      <DatePicker disabledDate={disabledDate} />\n      <code>not before 09:30</code>\n      <DatePicker disabledTime={before(9, 30)} mode=\"time\" />\n      <code>not before 12:30 today</code>\n      <DatePicker mode=\"dateTimeRange\" disabledDate={disabledDate} disabledTime={before(12, 30)} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/disabled.tsx",
          "title": "禁用和不可编辑",
          "source": "import { Space, DatePicker } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap vertical>\n      <code>disabled = true</code>\n      <DatePicker disabled />\n      <br />\n      <code>editable = false</code>\n      <DatePicker editable={false} />\n      <br />\n      <code>clearable = false</code>\n      <DatePicker clearable={false} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/presets.tsx",
          "title": "预设范围",
          "source": "import dayjs from \"dayjs\";\nimport { useState } from \"react\";\nimport { Button, Space, DatePicker, type DatePickerInput } from \"react-kui\";\nconst p1 = [\n  { label: \"Yesterday\", value: () => dayjs().add(-1, \"d\") },\n  { label: \"7 days ago\", value: () => dayjs().add(-7, \"d\") },\n  { label: \"Last month\", value: () => dayjs().add(-1, \"month\") },\n];\nconst p2 = [7, 14, 30, 90].map((days) => ({\n  label: `Last ${days} days`,\n  value: () => [dayjs().add(-days, \"d\"), dayjs()],\n}));\nexport default function App() {\n  const [value1, setValue1] = useState<DatePickerInput>(),\n    [value2, setValue2] = useState<DatePickerInput[]>([]);\n  return (\n    <Space wrap vertical>\n      <DatePicker presets={p1} />\n      <DatePicker presets={p2} mode=\"dateRange\" />\n      <DatePicker mode=\"dateTimeRange\" presets={p2} />\n      <br />\n      <code>custom header and footer</code>\n      <DatePicker\n        value={value1}\n        onChange={(v) => setValue1(v as DatePickerInput)}\n        header={({ emit }) => <Button onClick={() => emit(dayjs().add(-1, \"d\"))}>Yesterday</Button>}\n      />\n      <DatePicker\n        value={value2}\n        onChange={(v) => setValue2(v as DatePickerInput[])}\n        mode=\"dateRange\"\n        footer={({ emit }) => (\n          <Button onClick={() => emit([dayjs().add(-7, \"d\"), dayjs()])}>7 days ago</Button>\n        )}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/theme.tsx",
          "title": "奇葩的主题",
          "source": "import { ArrowDown } from \"kui-icons\";\nimport { Space, DatePicker } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <DatePicker shape=\"circle\" />\n      <DatePicker />\n      <DatePicker theme=\"outline\" placeholder=\"Outline\" />\n      <DatePicker dateIcon={ArrowDown} placeholder=\"Custom Icon\" />\n      <DatePicker theme=\"plain\" placeholder=\"Plain\" />\n      <DatePicker mode=\"dateRange\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/size.tsx",
          "title": "尺寸",
          "source": "import { useState } from \"react\";\nimport { type SizeType, Segmented, Space, DatePicker } from \"react-kui\";\nconst options = [\n  { value: \"large\", label: \"Large\" },\n  { value: \"medium\", label: \"Medium\" },\n  { value: \"small\", label: \"Small\" },\n];\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\");\n  return (\n    <Space vertical>\n      <Segmented value={size} options={options} onChange={(value) => setSize(value as SizeType)} />\n      <Space vertical>\n        <DatePicker size={size} />\n        <DatePicker mode=\"month\" size={size} />\n        <DatePicker size={size} mode=\"dateRange\" />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/date-picker/demo/lang.tsx",
          "title": "多语言",
          "source": "import dayjs from \"dayjs\";\nimport \"dayjs/locale/en\";\nimport { useState } from \"react\";\nimport { Space, DatePicker } from \"react-kui\";\ndayjs.locale(\"en\");\nexport default function App() {\n  const [value, setValue] = useState(\"2021-01-01 20:20:20\");\n  return (\n    <Space wrap vertical>\n      <DatePicker mode=\"year\" />\n      <DatePicker mode=\"month\" />\n      <DatePicker mode=\"date\" />\n      <DatePicker mode=\"time\" />\n      <DatePicker mode=\"dateTime\" value={value} onChange={(_, s) => setValue(s as string)} />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Descriptions",
      "import": "import { Descriptions } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/descriptions",
      "props": [
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示边框",
          "descriptionEn": "Whether to show the border"
        },
        {
          "name": "column",
          "type": "DescriptionsColumn | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "3",
          "descriptionZh": "每行项目数，支持响应式配置",
          "descriptionEn": "Items per row; supports responsive configuration"
        },
        {
          "name": "layout",
          "type": "DirectionType | undefined",
          "required": false,
          "enumValues": [
            "inline",
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "描述布局",
          "descriptionEn": "Description layout"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "描述列表的标题，显示在最顶部",
          "descriptionEn": "The title of the description list, displayed at the very top"
        },
        {
          "name": "extra",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "描述列表的操作区域，显示在右上方",
          "descriptionEn": "The operation area of the description list, displayed in the upper right corner"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "设置列表大小",
          "descriptionEn": "List size"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "要排版的 DescriptionsItem 子节点，使用其 label、span 和内容。",
          "descriptionEn": "DescriptionsItem children laid out using their label, span and content."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "title",
        "extra",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/descriptions/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Descriptions } from \"react-kui\";\nimport { BasicItems } from \"./content\";\nexport default function App() {\n  return <Descriptions title=\"Order Information\">{BasicItems()}</Descriptions>;\n}"
        },
        {
          "id": "components/descriptions/demo/bordered.tsx",
          "title": "带边框的",
          "source": "import { Descriptions } from \"react-kui\";\nimport { DetailedItems } from \"./content\";\nexport default function App() {\n  return (\n    <Descriptions title=\"Order Information\" bordered>\n      {DetailedItems()}\n    </Descriptions>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/size.tsx",
          "title": "自定义尺寸",
          "source": "import { useState } from \"react\";\nimport { Button, Segmented, Descriptions } from \"react-kui\";\nimport { BasicItems, DetailedItems } from \"./content\";\nconst types = [\n  { label: \"Large\", value: \"large\" },\n  { label: \"Medium\", value: \"medium\" },\n  { label: \"Small\", value: \"small\" },\n];\nexport default function App() {\n  const [size, setSize] = useState<\"large\" | \"medium\" | \"small\">(\"medium\"),\n    extra = (\n      <Button size=\"small\" type=\"primary\">\n        Update Information\n      </Button>\n    );\n  return (\n    <>\n      <Segmented\n        options={types}\n        value={size}\n        onChange={(v) => setSize(v as typeof size)}\n      />\n      <br />\n      <br />\n      <Descriptions title=\"Order Information\" bordered size={size} extra={extra}>\n        {DetailedItems()}\n      </Descriptions>\n      <br />\n      <br />\n      <Descriptions title=\"Order Information\" size={size} extra={extra}>\n        {BasicItems()}\n      </Descriptions>\n    </>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/responsive.tsx",
          "title": "响应式列数",
          "source": "import { Badge, Descriptions, DescriptionsItem } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Descriptions title=\"Responsive Information\" bordered column={{ xs: 1, sm: 2, lg: 3 }}>\n      <DescriptionsItem label=\"Order Numbers\">20202203302200</DescriptionsItem>\n      <DescriptionsItem label=\"Name\">Qiu</DescriptionsItem>\n      <DescriptionsItem label=\"Phone\">13888888888</DescriptionsItem>\n      <DescriptionsItem label=\"Status\">\n        <Badge status=\"success\" text=\"Shipped\" />\n      </DescriptionsItem>\n      <DescriptionsItem label=\"Shipping Address\" span={2}>\n        No. 188, Guanggu, Hongshan District, Wuhan City, Hubei Province\n      </DescriptionsItem>\n    </Descriptions>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/vertical.tsx",
          "title": "垂直",
          "source": "import { Descriptions } from \"react-kui\";\nimport { BasicItems } from \"./content\";\nexport default function App() {\n  return (\n    <Descriptions title=\"Order Information\" layout=\"vertical\">\n      {BasicItems()}\n    </Descriptions>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/vertical-bordered.tsx",
          "title": "垂直带边框",
          "source": "import { Descriptions } from \"react-kui\";\nimport { DetailedItems } from \"./content\";\nexport default function App() {\n  return (\n    <Descriptions title=\"Order Information\" bordered layout=\"vertical\">\n      {DetailedItems()}\n    </Descriptions>\n  );\n}"
        }
      ]
    },
    {
      "name": "DescriptionsItem",
      "import": "import { DescriptionsItem } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/descriptions",
      "props": [
        {
          "name": "label",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "内容的描述",
          "descriptionEn": "Description of the content"
        },
        {
          "name": "span",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "列占的数量",
          "descriptionEn": "number of columns displayed"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前描述项的值或自定义内容，不是标签。",
          "descriptionEn": "The value or custom content of this description item, not its label."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "label",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/descriptions/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Descriptions } from \"react-kui\";\nimport { BasicItems } from \"./content\";\nexport default function App() {\n  return <Descriptions title=\"Order Information\">{BasicItems()}</Descriptions>;\n}"
        },
        {
          "id": "components/descriptions/demo/bordered.tsx",
          "title": "带边框的",
          "source": "import { Descriptions } from \"react-kui\";\nimport { DetailedItems } from \"./content\";\nexport default function App() {\n  return (\n    <Descriptions title=\"Order Information\" bordered>\n      {DetailedItems()}\n    </Descriptions>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/size.tsx",
          "title": "自定义尺寸",
          "source": "import { useState } from \"react\";\nimport { Button, Segmented, Descriptions } from \"react-kui\";\nimport { BasicItems, DetailedItems } from \"./content\";\nconst types = [\n  { label: \"Large\", value: \"large\" },\n  { label: \"Medium\", value: \"medium\" },\n  { label: \"Small\", value: \"small\" },\n];\nexport default function App() {\n  const [size, setSize] = useState<\"large\" | \"medium\" | \"small\">(\"medium\"),\n    extra = (\n      <Button size=\"small\" type=\"primary\">\n        Update Information\n      </Button>\n    );\n  return (\n    <>\n      <Segmented\n        options={types}\n        value={size}\n        onChange={(v) => setSize(v as typeof size)}\n      />\n      <br />\n      <br />\n      <Descriptions title=\"Order Information\" bordered size={size} extra={extra}>\n        {DetailedItems()}\n      </Descriptions>\n      <br />\n      <br />\n      <Descriptions title=\"Order Information\" size={size} extra={extra}>\n        {BasicItems()}\n      </Descriptions>\n    </>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/responsive.tsx",
          "title": "响应式列数",
          "source": "import { Badge, Descriptions, DescriptionsItem } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Descriptions title=\"Responsive Information\" bordered column={{ xs: 1, sm: 2, lg: 3 }}>\n      <DescriptionsItem label=\"Order Numbers\">20202203302200</DescriptionsItem>\n      <DescriptionsItem label=\"Name\">Qiu</DescriptionsItem>\n      <DescriptionsItem label=\"Phone\">13888888888</DescriptionsItem>\n      <DescriptionsItem label=\"Status\">\n        <Badge status=\"success\" text=\"Shipped\" />\n      </DescriptionsItem>\n      <DescriptionsItem label=\"Shipping Address\" span={2}>\n        No. 188, Guanggu, Hongshan District, Wuhan City, Hubei Province\n      </DescriptionsItem>\n    </Descriptions>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/vertical.tsx",
          "title": "垂直",
          "source": "import { Descriptions } from \"react-kui\";\nimport { BasicItems } from \"./content\";\nexport default function App() {\n  return (\n    <Descriptions title=\"Order Information\" layout=\"vertical\">\n      {BasicItems()}\n    </Descriptions>\n  );\n}"
        },
        {
          "id": "components/descriptions/demo/vertical-bordered.tsx",
          "title": "垂直带边框",
          "source": "import { Descriptions } from \"react-kui\";\nimport { DetailedItems } from \"./content\";\nexport default function App() {\n  return (\n    <Descriptions title=\"Order Information\" bordered layout=\"vertical\">\n      {DetailedItems()}\n    </Descriptions>\n  );\n}"
        }
      ]
    },
    {
      "name": "Drawer",
      "import": "import { Drawer } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/drawer",
      "props": [
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "抽屉显示状态",
          "descriptionEn": "drawer visibility"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "抽屉标题，不写就没有标题文本（不再有默认标题）；标题栏仍留给右上角关闭按钮，`closable: false` 且没有标题才整条不收",
          "descriptionEn": "Drawer title. With none there is no title text (no built-in default); the header bar stays for the top-right close button and is only dropped when `closable` is off too"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "520",
          "descriptionZh": "抽屉宽度 `placement`为 `left` 或 `right` 时使用,支持百分比",
          "descriptionEn": "Drawer width, used when `placement` is `left` or `right`, supports percentage"
        },
        {
          "name": "height",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "520",
          "descriptionZh": "抽屉高度 `placement`为 `top` 或 `bottom` 时使用,支持百分比",
          "descriptionEn": "Drawer height, used when `placement` is `top` or `bottom`, supports percentage"
        },
        {
          "name": "okText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "确定按钮文字",
          "descriptionEn": "OK button text"
        },
        {
          "name": "cancelText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "取消按钮文字",
          "descriptionEn": "Cancel button text"
        },
        {
          "name": "placement",
          "type": "DrawerPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "bottom",
            "left",
            "right"
          ],
          "boolean": false,
          "defaultExpression": "\"right\"",
          "descriptionZh": "抽屉显示方向，提供 `left` , `top` , `right` , `bottom` 4种展示方式",
          "descriptionEn": "The display direction of the drawer. Provides 4 display methods: `left`, `top`, `right`, `bottom`"
        },
        {
          "name": "closable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示关闭按钮",
          "descriptionEn": "Whether to show the close button"
        },
        {
          "name": "footer",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "defaultExpression": "true",
          "descriptionZh": "页脚内容，不显示页脚设置`footer=null`即可",
          "descriptionEn": "Footer content. Set `footer=null` to not display the footer"
        },
        {
          "name": "maskClosable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否点击遮罩关闭抽屉（只管遮罩，Esc 由 `escKey` 控制）",
          "descriptionEn": "Whether clicking the mask closes the drawer (mask only; Esc is gated by `escKey`)"
        },
        {
          "name": "target",
          "type": "DrawerTarget | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "getBody",
          "descriptionZh": "展示的父元素，支持元素、Ref 或获取元素的函数",
          "descriptionEn": "Display container; accepts an element, Ref, or element getter"
        },
        {
          "name": "mask",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否展示蒙层",
          "descriptionEn": "Whether to show the mask"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "为`true`时此时确定按钮为加载状态",
          "descriptionEn": "When set to `true`, the confirm button will be in a loading state"
        },
        {
          "name": "escKey",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否支持按 Esc 关闭",
          "descriptionEn": "Whether to support closing with Esc key"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁抽屉内容。默认销毁（重开时重新挂载）；设为 false 可保留抽屉内已填写的表单状态，代价是打开过的抽屉留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy drawer content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened drawer"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调",
          "descriptionEn": "Callback when OK is clicked"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调",
          "descriptionEn": "Callback when Cancel is clicked"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "抽屉关闭的回调",
          "descriptionEn": "Callback when the drawer closes"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "抽屉关闭时的回调；打开是调用方自己翻 `open`，不会再回传一次",
          "descriptionEn": "Fires when the drawer closes; opening is your own `open` flip, so it is never echoed back"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "抽屉正文区域内容。",
          "descriptionEn": "Content of the drawer body."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调",
          "descriptionEn": "Callback when OK is clicked"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调",
          "descriptionEn": "Callback when Cancel is clicked"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "抽屉关闭的回调",
          "descriptionEn": "Callback when the drawer closes"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "抽屉关闭时的回调；打开是调用方自己翻 `open`，不会再回传一次",
          "descriptionEn": "Fires when the drawer closes; opening is your own `open` flip, so it is never echoed back"
        }
      ],
      "renderProps": [
        "title",
        "footer",
        "children"
      ],
      "behavior": {
        "rules": [
          "Use open and onOpenChange. open initializes local visibility, allows interaction, and synchronizes changed props. Do not use v-model."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/drawer/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Button, Drawer, Space } from \"react-kui\";\nconst Body = () => (\n  <>\n    <p>something ...</p>\n    <p>something ...</p>\n    <p>something ...</p>\n  </>\n);\nexport default function App() {\n  const [show, setShow] = useState(false),\n    [show2, setShow2] = useState(false),\n    [show3, setShow3] = useState(false),\n    [show4, setShow4] = useState(false),\n    [loading, setLoading] = useState(false);\n  const submit = () => {\n    setLoading(true);\n    setTimeout(() => {\n      setShow4(false);\n      setLoading(false);\n    }, 2000);\n  };\n  return (\n    <div>\n      <Space wrap>\n        <Button onClick={() => setShow((v) => !v)}>Open</Button>\n        <Button onClick={() => setShow2((v) => !v)}>Width 30%</Button>\n        <Button onClick={() => setShow3((v) => !v)}>Click mask can't close</Button>\n        <Button onClick={() => setShow4((v) => !v)}>No mask</Button>\n      </Space>\n      <Drawer open={show} footer={false} onOpenChange={setShow}>\n        <Body />\n      </Drawer>\n      <Drawer\n        open={show2}\n        width=\"30%\"\n        title=\"Width 30%\"\n        onOpenChange={setShow2}\n        onOk={() => setShow2(false)}\n      >\n        <Body />\n      </Drawer>\n      <Drawer\n        open={show3}\n        title=\"Click mask to close\"\n        maskClosable={false}\n        onOpenChange={setShow3}\n        onOk={() => setShow3(false)}\n      >\n        <Body />\n      </Drawer>\n      <Drawer\n        open={show4}\n        title=\"No mask\"\n        mask={false}\n        onOpenChange={setShow4}\n        onOk={submit}\n        loading={loading}\n      >\n        <Body />\n      </Drawer>\n    </div>\n  );\n}"
        },
        {
          "id": "components/drawer/demo/custom.tsx",
          "title": "自定义",
          "source": "import { useState } from \"react\";\nimport { Button, Drawer, Segmented, Space, type DrawerPlacementsType } from \"react-kui\";\nconst placements: DrawerPlacementsType[] = [\"left\", \"top\", \"right\", \"bottom\"];\nexport default function App() {\n  const [open, setOpen] = useState(false),\n    [placement, setPlacement] = useState<DrawerPlacementsType>(\"left\");\n  return (\n    <div>\n      <Space wrap>\n        <Segmented\n          value={placement}\n          options={placements.map((value) => ({ label: value, value }))}\n          onChange={(v) => setPlacement(v as DrawerPlacementsType)}\n        />\n        <Button onClick={() => setOpen(true)}>Open</Button>\n      </Space>\n      <Drawer\n        open={open}\n        height={300}\n        placement={placement}\n        title=\"What's your name?\"\n        cancelText=\"Cancel\"\n        okText=\"Ok\"\n        onOpenChange={setOpen}\n        onOk={() => setOpen(false)}\n      >\n        My name is Qiu.\n      </Drawer>\n    </div>\n  );\n}"
        },
        {
          "id": "components/drawer/demo/with-form.tsx",
          "title": "表单模式",
          "source": "import { House } from \"kui-icons\";\nimport { useRef, useState } from \"react\";\nimport {\n  Button,\n  Checkbox,\n  CheckboxGroup,\n  Drawer,\n  Form,\n  FormItem,\n  Input,\n  InputNumber,\n  message,\n  Radio,\n  RadioGroup,\n  Space,\n  TextArea,\n  type FormExpose,\n  type FormRules,\n} from \"react-kui\";\nconst rules: FormRules = {\n  input: [{ required: true }],\n  number: [{ required: true }],\n  radios: [{ required: true }],\n  checkbox_group: [{ required: true }],\n  textarea: [\n    { required: true, message: \"必填\", trigger: \"blur\" },\n    { min: 2, max: 5, message: \"长度为2-5个字符\" },\n  ],\n};\nexport default function App() {\n  const [show1, setShow1] = useState(false),\n    [show2, setShow2] = useState(false),\n    ref = useRef<FormExpose>(null),\n    model = { input: \"\", number: \"\", radios: \"\", checkbox_group: [], textarea: \"\" };\n  const submit = () =>\n    ref.current?.validate(({ valid }) => {\n      message[valid ? \"success\" : \"error\"](valid ? \"Successfully\" : \"Failed\");\n      if (valid) setShow1(false);\n    });\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => setShow1(true)}>Drawer with forms</Button>\n        <Button onClick={() => setShow2(true)}>Custom</Button>\n      </Space>\n      <Drawer\n        open={show1}\n        title=\"Forms valid\"\n        onOpenChange={setShow1}\n        onOk={submit}\n        onCancel={() => ref.current?.reset()}\n      >\n        <Form\n          ref={ref}\n          model={model}\n          rules={rules}\n          labelCol={{ span: 5 }}\n          wrapperCol={{ span: 19 }}\n        >\n          <FormItem label=\"Input\" prop=\"input\">\n            <Input clearable icon={House} />\n          </FormItem>\n          <FormItem label=\"Number\" prop=\"number\">\n            <InputNumber />\n          </FormItem>\n          <FormItem label=\"RadioGroup\" prop=\"radios\">\n            <RadioGroup>\n              <Radio value=\"0\" label=\"Wuhan\" />\n              <Radio value=\"1\" label=\"Shenzhen\" />\n            </RadioGroup>\n          </FormItem>\n          <FormItem label=\"CheckboxGroup\" prop=\"checkbox_group\">\n            <CheckboxGroup>\n              <Checkbox value=\"0\" label=\"Wuhan\" />\n              <Checkbox value=\"1\" label=\"Hangzhou\" />\n            </CheckboxGroup>\n          </FormItem>\n          <FormItem label=\"Text\" prop=\"textarea\">\n            <TextArea placeholder=\"Please enter something...\" />\n          </FormItem>\n        </Form>\n      </Drawer>\n      <Drawer\n        open={show2}\n        title=\"I am custom title\"\n        onOpenChange={setShow2}\n        footer={\n          <Space>\n            <Button onClick={() => setShow2(false)}>Cancel</Button>\n            <Button type=\"danger\">Reject</Button>\n            <Button>Inject</Button>\n          </Space>\n        }\n      >\n        <p>Content...</p>\n      </Drawer>\n    </div>\n  );\n}"
        },
        {
          "id": "components/drawer/demo/target.tsx",
          "title": "植入目标元素",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Drawer, Segmented, Space, type DrawerPlacementsType } from \"react-kui\";\nconst options = [\"left\", \"top\", \"right\", \"bottom\"].map((value) => ({ label: value, value }));\nexport default function App() {\n  const [open, setOpen] = useState(false),\n    [placement, setPlacement] = useState<DrawerPlacementsType>(\"left\"),\n    ref = useRef<HTMLDivElement>(null);\n  return (\n    <>\n      <Space wrap>\n        <Segmented\n          value={placement}\n          options={options}\n          onChange={(v) => setPlacement(v as DrawerPlacementsType)}\n        />\n        <Button onClick={() => setOpen((v) => !v)}>Open</Button>\n      </Space>\n      <br />\n      <br />\n      <div\n        ref={ref}\n        style={{\n          height: 300,\n          overflow: \"hidden\",\n          borderRadius: 8,\n          background: \"rgba(130, 130, 130, 0.18)\",\n          display: \"flex\",\n          alignItems: \"center\",\n          justifyContent: \"center\",\n        }}\n      >\n        <p style={{ color: \"#999\" }}>Drawer inside with target.</p>\n      </div>\n      <Drawer\n        open={open}\n        width=\"50%\"\n        height=\"50%\"\n        footer={false}\n        placement={placement}\n        target={ref}\n        onOpenChange={setOpen}\n      >\n        <p>something ...</p>\n        <p>something ...</p>\n        <p>something ...</p>\n      </Drawer>\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "Dropdown",
      "import": "import { Dropdown } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/dropdown",
      "props": [
        {
          "name": "trigger",
          "type": "TriggerType | undefined",
          "required": false,
          "enumValues": [
            "hover",
            "click",
            "contextmenu"
          ],
          "boolean": false,
          "defaultExpression": "\"hover\"",
          "descriptionZh": "触发方式",
          "descriptionEn": "Trigger method"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否允许触发下拉",
          "descriptionEn": "Whether dropdown triggering is allowed"
        },
        {
          "name": "arrow",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示箭头",
          "descriptionEn": "Whether to display the arrow"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "显示状态",
          "descriptionEn": "visibility"
        },
        {
          "name": "show",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "已废弃，请使用 `open`",
          "descriptionEn": "Deprecated; use `open` instead"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "下拉层位置",
          "descriptionEn": "Dropdown placement"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "target",
          "type": "React.RefObject<HTMLElement | null> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "外部触发元素的引用",
          "descriptionEn": "Ref of an external trigger element"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "打开或关闭Dropdown时触发",
          "descriptionEn": "Triggered when opening or closing a Dropdown"
        },
        {
          "name": "overlay",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉层内容",
          "descriptionEn": "Dropdown overlay content"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉触发器；弹层内容请放在 overlay 中。",
          "descriptionEn": "Dropdown trigger; put popup content in overlay instead."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "打开或关闭Dropdown时触发",
          "descriptionEn": "Triggered when opening or closing a Dropdown"
        }
      ],
      "renderProps": [
        "overlay",
        "children"
      ],
      "behavior": {
        "rules": [
          "children is the trigger; overlay supplies popup content. Do not place the menu in children as a translation of the Vue overlay slot."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/dropdown/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Menu, MenuItem, Dropdown } from \"react-kui\";\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a href=\"#\">1st menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"#\">2nd menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"#\">3rd menu item</a>\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <>\n      <Dropdown arrow placement=\"bottom\" overlay={overlay}>\n        <Button type=\"text\">Hover me</Button>\n      </Dropdown>\n      <Dropdown trigger=\"click\" overlay={overlay}>\n        <Button type=\"text\">Click me</Button>\n      </Dropdown>\n    </>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/right-menu.tsx",
          "title": "右键菜单",
          "source": "import { File, LogOut, Save, Scissors, SquarePen } from \"kui-icons\";\nimport { Menu, MenuDivider, MenuItem, type MenuSelectEvent, message, Dropdown } from \"react-kui\";\nconst overlay = (\n  <Menu onSelect={({ key }: MenuSelectEvent) => message.info(\"Click on item \" + key)}>\n    <MenuItem key=\"news\" itemKey=\"news\" icon={File}>\n      New file\n    </MenuItem>\n    <MenuItem key=\"edit\" itemKey=\"edit\" icon={SquarePen}>\n      Edit\n    </MenuItem>\n    <MenuItem key=\"save\" itemKey=\"save\" icon={Save}>\n      Save\n    </MenuItem>\n    <MenuItem key=\"cut\" itemKey=\"cut\" icon={Scissors}>\n      Cut\n    </MenuItem>\n    <MenuDivider />\n    <MenuItem key=\"exit\" itemKey=\"exit\" icon={LogOut}>\n      Exit\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Dropdown trigger=\"contextmenu\" overlay={overlay}>\n      <div\n        style={{ textAlign: \"center\", height: 200, lineHeight: \"200px\", color: \"#999\" }}\n        className=\"demo-view-fill\"\n      >\n        Right Click on here\n      </div>\n    </Dropdown>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/dropdown-buttons.tsx",
          "title": "带下拉框的按钮",
          "source": "import { UserPlus } from \"kui-icons\";\nimport {\n  Button,\n  Icon,\n  Menu,\n  MenuItem,\n  type MenuSelectEvent,\n  Space,\n  Dropdown,\n  DropdownButton,\n} from \"react-kui\";\nconst handleMenuClick = (e: MenuSelectEvent) => console.log(\"click\", e);\nconst overlay = (\n  <Menu onSelect={handleMenuClick}>\n    {[1, 2, 3].map((i) => (\n      <MenuItem key={i} itemKey={String(i)}>\n        <Icon type={UserPlus} /> {i === 3 ? \"3rd item\" : `${i}${i === 1 ? \"st\" : \"nd\"} menu item`}\n      </MenuItem>\n    ))}\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Space vertical>\n      <DropdownButton overlay={overlay} onClick={(e) => console.log(\"click left button\", e)}>\n        Dropdown\n      </DropdownButton>\n      <DropdownButton overlay={overlay} icon={UserPlus}>\n        Dropdown\n      </DropdownButton>\n      <DropdownButton overlay={overlay} disabled>\n        Dropdown\n      </DropdownButton>\n      <Dropdown overlay={overlay}>\n        <Button>\n          Button <Icon type={UserPlus} />\n        </Button>\n      </Dropdown>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/divider.tsx",
          "title": "其他元素",
          "source": "import { ChevronDown } from \"kui-icons\";\nimport { Button, Icon, Menu, MenuDivider, MenuItem, Dropdown } from \"react-kui\";\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://www.chuchur.com/\">\n        1st menu item\n      </a>\n    </MenuItem>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.k-ui.cn/\">\n        2nd menu item\n      </a>\n    </MenuItem>\n    <MenuDivider />\n    <MenuItem disabled>3rd menu item (disabled)</MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Dropdown overlay={overlay}>\n      <Button>\n        Divider <Icon type={ChevronDown} />\n      </Button>\n    </Dropdown>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/placement.tsx",
          "title": "弹出位置",
          "source": "import { Button, type DropPlacementsType, Menu, MenuItem, Space, Dropdown } from \"react-kui\";\nconst placements: DropPlacementsType[] = [\n  \"bottom-left\",\n  \"bottom\",\n  \"bottom-right\",\n  \"top-left\",\n  \"top\",\n  \"top-right\",\n];\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.chuchur.com/\">\n        1st menu item\n      </a>\n    </MenuItem>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.k-ui.cn/\">\n        2nd menu item\n      </a>\n    </MenuItem>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.k-ui.cn/\">\n        3rd menu item\n      </a>\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Space wrap>\n      {placements.map((placement) => (\n        <Dropdown key={placement} placement={placement} overlay={overlay}>\n          <Button>{placement}</Button>\n        </Dropdown>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/arrow.tsx",
          "title": "显示箭头",
          "source": "import { Button, Dropdown, type DropPlacementsType, Menu, MenuItem, Space } from \"react-kui\";\nconst placements: DropPlacementsType[] = [\n  \"bottom-left\",\n  \"bottom\",\n  \"bottom-right\",\n  \"top-left\",\n  \"top\",\n  \"top-right\",\n];\nconst overlay = (\n  <Menu>\n    <MenuItem>1st menu item</MenuItem>\n    <MenuItem>2nd menu item</MenuItem>\n    <MenuItem>3rd menu item</MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Space id=\"dropdown-demo-placement\" wrap>\n      {placements.map((placement) => (\n        <Dropdown key={placement} placement={placement} arrow overlay={overlay}>\n          <Button>{placement}</Button>\n        </Dropdown>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/cascading.tsx",
          "title": "多级菜单",
          "source": "import { ChevronDown } from \"kui-icons\";\nimport { Button, Icon, Menu, type MenuSelectEvent, Dropdown } from \"react-kui\";\nconst items = [\n  { key: \"1-1\", title: \"1st menu item\" },\n  { key: \"1-2\", title: \"2nd menu item\" },\n  {\n    key: \"2\",\n    title: \"sub menu\",\n    children: [\n      { key: \"2-1\", title: \"3rd menu item\" },\n      { key: \"2-2\", title: \"4th menu item\" },\n      {\n        key: \"2-3\",\n        title: \"sub menu\",\n        children: [\n          { key: \"2-3-1\", title: \"3rd menu item\" },\n          { key: \"2-3-2\", title: \"4th menu item\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"3\",\n    title: \"disabled sub menu\",\n    disabled: true,\n    children: [\n      { key: \"3-1\", title: \"5th menu item\" },\n      { key: \"3-2\", title: \"6th menu item\" },\n    ],\n  },\n];\nexport default function App() {\n  const overlay = <Menu items={items} onSelect={({ key }: MenuSelectEvent) => console.log(key)} />;\n  return (\n    <Dropdown overlay={overlay}>\n      <Button>\n        Multi-level Menu <Icon type={ChevronDown} />\n      </Button>\n    </Dropdown>\n  );\n}"
        }
      ]
    },
    {
      "name": "DropdownButton",
      "import": "import { DropdownButton } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/dropdown",
      "props": [
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "按钮尺寸",
          "descriptionEn": "Button size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "按钮形状",
          "descriptionEn": "Button shape"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether disabled"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉触发按钮图标",
          "descriptionEn": "Dropdown trigger icon"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "descriptionZh": "按钮主题，可用 `fill` / `outline` / `plain` / `solid` / `dashed`；不写 `theme` 就是按钮自身的外观，`underlined` 是给可输入的控件用的，按钮不会画下划线",
          "descriptionEn": "Button theme; `fill` / `outline` / `plain` / `solid` / `dashed` are drawn. Leaving `theme` unset keeps the button's own look, and `underlined` belongs to controls you type into, so a button never draws an underline"
        },
        {
          "name": "arrow",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示下拉箭头",
          "descriptionEn": "Whether to show the dropdown arrow"
        },
        {
          "name": "trigger",
          "type": "TriggerType | undefined",
          "required": false,
          "enumValues": [
            "hover",
            "click",
            "contextmenu"
          ],
          "boolean": false,
          "descriptionZh": "触发方式",
          "descriptionEn": "Trigger mode"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-right\"",
          "descriptionZh": "下拉层位置",
          "descriptionEn": "Dropdown placement"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onClick",
          "type": "((e: React.MouseEvent<HTMLButtonElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "主按钮点击回调",
          "descriptionEn": "Main button click callback"
        },
        {
          "name": "overlay",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉层内容",
          "descriptionEn": "Dropdown overlay content"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "分裂式下拉按钮主按钮的内容；菜单使用 overlay。",
          "descriptionEn": "Content of the main split button; supply the menu through overlay."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onClick",
          "type": "((e: React.MouseEvent<HTMLButtonElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "主按钮点击回调",
          "descriptionEn": "Main button click callback"
        }
      ],
      "renderProps": [
        "overlay",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/dropdown/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Menu, MenuItem, Dropdown } from \"react-kui\";\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a href=\"#\">1st menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"#\">2nd menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"#\">3rd menu item</a>\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <>\n      <Dropdown arrow placement=\"bottom\" overlay={overlay}>\n        <Button type=\"text\">Hover me</Button>\n      </Dropdown>\n      <Dropdown trigger=\"click\" overlay={overlay}>\n        <Button type=\"text\">Click me</Button>\n      </Dropdown>\n    </>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/right-menu.tsx",
          "title": "右键菜单",
          "source": "import { File, LogOut, Save, Scissors, SquarePen } from \"kui-icons\";\nimport { Menu, MenuDivider, MenuItem, type MenuSelectEvent, message, Dropdown } from \"react-kui\";\nconst overlay = (\n  <Menu onSelect={({ key }: MenuSelectEvent) => message.info(\"Click on item \" + key)}>\n    <MenuItem key=\"news\" itemKey=\"news\" icon={File}>\n      New file\n    </MenuItem>\n    <MenuItem key=\"edit\" itemKey=\"edit\" icon={SquarePen}>\n      Edit\n    </MenuItem>\n    <MenuItem key=\"save\" itemKey=\"save\" icon={Save}>\n      Save\n    </MenuItem>\n    <MenuItem key=\"cut\" itemKey=\"cut\" icon={Scissors}>\n      Cut\n    </MenuItem>\n    <MenuDivider />\n    <MenuItem key=\"exit\" itemKey=\"exit\" icon={LogOut}>\n      Exit\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Dropdown trigger=\"contextmenu\" overlay={overlay}>\n      <div\n        style={{ textAlign: \"center\", height: 200, lineHeight: \"200px\", color: \"#999\" }}\n        className=\"demo-view-fill\"\n      >\n        Right Click on here\n      </div>\n    </Dropdown>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/dropdown-buttons.tsx",
          "title": "带下拉框的按钮",
          "source": "import { UserPlus } from \"kui-icons\";\nimport {\n  Button,\n  Icon,\n  Menu,\n  MenuItem,\n  type MenuSelectEvent,\n  Space,\n  Dropdown,\n  DropdownButton,\n} from \"react-kui\";\nconst handleMenuClick = (e: MenuSelectEvent) => console.log(\"click\", e);\nconst overlay = (\n  <Menu onSelect={handleMenuClick}>\n    {[1, 2, 3].map((i) => (\n      <MenuItem key={i} itemKey={String(i)}>\n        <Icon type={UserPlus} /> {i === 3 ? \"3rd item\" : `${i}${i === 1 ? \"st\" : \"nd\"} menu item`}\n      </MenuItem>\n    ))}\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Space vertical>\n      <DropdownButton overlay={overlay} onClick={(e) => console.log(\"click left button\", e)}>\n        Dropdown\n      </DropdownButton>\n      <DropdownButton overlay={overlay} icon={UserPlus}>\n        Dropdown\n      </DropdownButton>\n      <DropdownButton overlay={overlay} disabled>\n        Dropdown\n      </DropdownButton>\n      <Dropdown overlay={overlay}>\n        <Button>\n          Button <Icon type={UserPlus} />\n        </Button>\n      </Dropdown>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/divider.tsx",
          "title": "其他元素",
          "source": "import { ChevronDown } from \"kui-icons\";\nimport { Button, Icon, Menu, MenuDivider, MenuItem, Dropdown } from \"react-kui\";\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://www.chuchur.com/\">\n        1st menu item\n      </a>\n    </MenuItem>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.k-ui.cn/\">\n        2nd menu item\n      </a>\n    </MenuItem>\n    <MenuDivider />\n    <MenuItem disabled>3rd menu item (disabled)</MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Dropdown overlay={overlay}>\n      <Button>\n        Divider <Icon type={ChevronDown} />\n      </Button>\n    </Dropdown>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/placement.tsx",
          "title": "弹出位置",
          "source": "import { Button, type DropPlacementsType, Menu, MenuItem, Space, Dropdown } from \"react-kui\";\nconst placements: DropPlacementsType[] = [\n  \"bottom-left\",\n  \"bottom\",\n  \"bottom-right\",\n  \"top-left\",\n  \"top\",\n  \"top-right\",\n];\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.chuchur.com/\">\n        1st menu item\n      </a>\n    </MenuItem>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.k-ui.cn/\">\n        2nd menu item\n      </a>\n    </MenuItem>\n    <MenuItem>\n      <a target=\"_blank\" rel=\"noreferrer\" href=\"https://react.k-ui.cn/\">\n        3rd menu item\n      </a>\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Space wrap>\n      {placements.map((placement) => (\n        <Dropdown key={placement} placement={placement} overlay={overlay}>\n          <Button>{placement}</Button>\n        </Dropdown>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/arrow.tsx",
          "title": "显示箭头",
          "source": "import { Button, Dropdown, type DropPlacementsType, Menu, MenuItem, Space } from \"react-kui\";\nconst placements: DropPlacementsType[] = [\n  \"bottom-left\",\n  \"bottom\",\n  \"bottom-right\",\n  \"top-left\",\n  \"top\",\n  \"top-right\",\n];\nconst overlay = (\n  <Menu>\n    <MenuItem>1st menu item</MenuItem>\n    <MenuItem>2nd menu item</MenuItem>\n    <MenuItem>3rd menu item</MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Space id=\"dropdown-demo-placement\" wrap>\n      {placements.map((placement) => (\n        <Dropdown key={placement} placement={placement} arrow overlay={overlay}>\n          <Button>{placement}</Button>\n        </Dropdown>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/dropdown/demo/cascading.tsx",
          "title": "多级菜单",
          "source": "import { ChevronDown } from \"kui-icons\";\nimport { Button, Icon, Menu, type MenuSelectEvent, Dropdown } from \"react-kui\";\nconst items = [\n  { key: \"1-1\", title: \"1st menu item\" },\n  { key: \"1-2\", title: \"2nd menu item\" },\n  {\n    key: \"2\",\n    title: \"sub menu\",\n    children: [\n      { key: \"2-1\", title: \"3rd menu item\" },\n      { key: \"2-2\", title: \"4th menu item\" },\n      {\n        key: \"2-3\",\n        title: \"sub menu\",\n        children: [\n          { key: \"2-3-1\", title: \"3rd menu item\" },\n          { key: \"2-3-2\", title: \"4th menu item\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"3\",\n    title: \"disabled sub menu\",\n    disabled: true,\n    children: [\n      { key: \"3-1\", title: \"5th menu item\" },\n      { key: \"3-2\", title: \"6th menu item\" },\n    ],\n  },\n];\nexport default function App() {\n  const overlay = <Menu items={items} onSelect={({ key }: MenuSelectEvent) => console.log(key)} />;\n  return (\n    <Dropdown overlay={overlay}>\n      <Button>\n        Multi-level Menu <Icon type={ChevronDown} />\n      </Button>\n    </Dropdown>\n  );\n}"
        }
      ]
    },
    {
      "name": "Divider",
      "import": "import { Divider } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/divider",
      "props": [
        {
          "name": "type",
          "type": "DirectionType | undefined",
          "required": false,
          "enumValues": [
            "inline",
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "descriptionZh": "水平还是垂直类型: horizontal vertical",
          "descriptionEn": "Horizontal or vertical type: horizontal vertical"
        },
        {
          "name": "text",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "分割线文字",
          "descriptionEn": "Divider text"
        },
        {
          "name": "dashed",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否虚线",
          "descriptionEn": "Whether it is a dashed line"
        },
        {
          "name": "orientation",
          "type": "\"left\" | \"right\" | \"center\" | undefined",
          "required": false,
          "enumValues": [
            "left",
            "right",
            "center"
          ],
          "boolean": false,
          "descriptionZh": "分割线标题的位置：left right",
          "descriptionEn": "The position of the divider title : left right"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "水平分割线中的标题内容；有效时优先于 text。",
          "descriptionEn": "Title content in a horizontal divider; when truthy it takes precedence over text."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/divider/demo/basic.tsx",
          "title": "垂直分割线",
          "source": "import { Divider } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      Text\n      <Divider type=\"vertical\" />\n      <a href=\"#\">Link</a>\n      <Divider type=\"vertical\" />\n      <a href=\"#\">Link</a>\n    </div>\n  );\n}"
        },
        {
          "id": "components/divider/demo/default.tsx",
          "title": "水平分割线",
          "source": "import { Divider } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <p>See the light through the mist!</p>\n      <Divider />\n      <p>See the light through the mist!</p>\n      <Divider>Text</Divider>\n      <p>See the light through the mist!</p>\n      <Divider dashed />\n      <p>See the light through the mist!</p>\n    </div>\n  );\n}"
        },
        {
          "id": "components/divider/demo/with-text.tsx",
          "title": "带文字的分割线",
          "source": "import { Divider } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <p>See the light through the mist!</p>\n      <Divider orientation=\"left\" text=\"Text\" />\n      <p>See the light through the mist!</p>\n      <Divider>Text</Divider>\n      <p>See the light through the mist!</p>\n      <Divider orientation=\"right\" text=\"Text\" />\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Empty",
      "import": "import { Empty } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/empty",
      "props": [
        {
          "name": "description",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义描述内容",
          "descriptionEn": "Custom description content"
        },
        {
          "name": "image",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "设置显示图片，为 string 时表示自定义图片地址",
          "descriptionEn": "Set the display image. When a string, it represents a custom image address"
        },
        {
          "name": "imageStyle",
          "type": "React.CSSProperties | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片样式",
          "descriptionEn": "Image style"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "空状态底部区域，通常用于操作按钮。",
          "descriptionEn": "Footer content of the empty state, usually action buttons."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "description",
        "image",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/empty/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Empty } from \"react-kui\";\nexport default function App() {\n  return <Empty />;\n}"
        },
        {
          "id": "components/empty/demo/custom.tsx",
          "title": "自定义",
          "source": "import { Plus } from \"kui-icons\";\nimport { Button, Space, Empty } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Empty\n        image=\"https://cdn.chuchur.com/img/thumb.png\"\n        description=\"No image\"\n        imageStyle={{ height: 60 }}\n      >\n        <Button type=\"primary\" shape=\"circle\" icon={Plus} size=\"small\">\n          Upload a image\n        </Button>\n      </Empty>\n      <br />\n      Use React nodes\n      <br />\n      <Empty\n        description={\n          <>\n            Currently no <a>images</a>\n          </>\n        }\n        image={<img src=\"https://cdn.chuchur.com/img/thumb.png\" style={{ height: 60 }} alt=\"\" />}\n      >\n        <Button type=\"primary\" shape=\"circle\" icon={Plus} size=\"small\">\n          Upload a image\n        </Button>\n      </Empty>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/empty/demo/used.tsx",
          "title": "默认展示",
          "source": "import { Select, Space, Table, type Column } from \"react-kui\";\nconst columns: Column[] = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Age\", key: \"age\" },\n];\nexport default function App() {\n  return (\n    <Space vertical block>\n      Select:\n      <Select width={220} />\n      Table:\n      <Table data={[]} columns={columns} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/empty/demo/nodesc.tsx",
          "title": "无描述",
          "source": "import { Empty } from \"react-kui\";\nexport default function App() {\n  return <Empty description={false} />;\n}"
        }
      ]
    },
    {
      "name": "Form",
      "import": "import { Form } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/form",
      "props": [
        {
          "name": "layout",
          "type": "DirectionType | undefined",
          "required": false,
          "enumValues": [
            "inline",
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "表单布局",
          "descriptionEn": "Form layout"
        },
        {
          "name": "model",
          "type": "Record<string, unknown> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "表单数据对象；未传时由 Form 内部维护",
          "descriptionEn": "Form data object; Form manages it internally when omitted"
        },
        {
          "name": "name",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "表单名称，会作为表单字段 id 前缀使用",
          "descriptionEn": "Form name, will be used as the id prefix for form fields"
        },
        {
          "name": "labelCol",
          "type": "ColProps | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "label 标签布局，同 `<Col>` 的 span、offset；inline 布局下不生效",
          "descriptionEn": "Label layout, same as the `<Col>` component, set span offset values, such as {span: 3, offset: 12}"
        },
        {
          "name": "wrapperCol",
          "type": "ColProps | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "控件标签布局，同 `<Col>` 的 span、offset；inline 布局下不生效",
          "descriptionEn": "Control layout, same as the `<Col>` component, set span offset values, such as {span: 15, offset: 12}"
        },
        {
          "name": "rules",
          "type": "FormRules | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "表单验证规则",
          "descriptionEn": "Form validation rules"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "子控件尺寸",
          "descriptionEn": "Child control size"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "子控件主题",
          "descriptionEn": "Child control theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "子控件形状",
          "descriptionEn": "Child control shape"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用表单",
          "descriptionEn": "Whether to disable the form"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否将支持只读的子控件设为只读",
          "descriptionEn": "Whether the form and its child controls are read-only"
        },
        {
          "name": "colon",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示标签冒号",
          "descriptionEn": "Whether to display a colon after labels"
        },
        {
          "name": "onSubmit",
          "type": "((event: FormSubmitEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "提交并完成校验后触发",
          "descriptionEn": "Called after submission validation completes"
        },
        {
          "name": "onReset",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "表单重置后的回调",
          "descriptionEn": "Called after resetting all field values and validation results"
        },
        {
          "name": "onChange",
          "type": "((model: Record<string, unknown>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "字段变化时返回不可变更新后的 model",
          "descriptionEn": "Returns an immutably updated model when a field changes"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onResetCapture",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "target",
        "autoComplete",
        "acceptCharset",
        "action",
        "encType",
        "method",
        "noValidate",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "target": "string",
        "autoComplete": "string",
        "acceptCharset": "string",
        "encType": "string",
        "method": "string",
        "noValidate": "boolean"
      },
      "events": [
        {
          "name": "onSubmit",
          "type": "((event: FormSubmitEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "提交并完成校验后触发",
          "descriptionEn": "Called after submission validation completes"
        },
        {
          "name": "onReset",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "表单重置后的回调",
          "descriptionEn": "Called after resetting all field values and validation results"
        },
        {
          "name": "onChange",
          "type": "((model: Record<string, unknown>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "字段变化时返回不可变更新后的 model",
          "descriptionEn": "Returns an immutably updated model when a field changes"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": [
          "When model is supplied, update React state with onChange(nextModel); the library does not mutate the caller's model object. Without model, Form keeps an internal model.",
          "FormItem prop selects a model field; supported child controls receive the field value and change handler automatically.",
          "onSubmit receives { valid }, not a DOM submit event. Save only when valid is true. Button htmlType=submit triggers validation.",
          "disabled and readOnly are inherited by supported form controls; explicit child props override inherited state.",
          "reset clears registered fields to null and emits onChange/onReset; it does not restore an original snapshot."
        ],
        "methods": [
          "ref.current.validate(): Promise<{ valid: boolean }>",
          "ref.current.reset(): void",
          "ref.current.submit(): Promise<void>"
        ]
      },
      "children": [
        "FormItem"
      ],
      "examples": [
        {
          "id": "components/form/demo/basic.tsx",
          "title": "典型表单",
          "source": "import { useState } from \"react\";\nimport {\n  Button,\n  Checkbox,\n  CheckboxGroup,\n  DatePicker,\n  Form,\n  FormItem,\n  Input,\n  InputNumber,\n  Option,\n  Radio,\n  RadioButton,\n  RadioGroup,\n  Select,\n  Slider,\n  Space,\n  Switch,\n  TextArea,\n  TreeSelect,\n  type ShapeType,\n  type SizeType,\n  type ThemeType,\n} from \"react-kui\";\nconst treeData = [\n  {\n    title: \"food\",\n    key: \"0\",\n    children: [\n      { title: \"apple\", key: \"0-1\" },\n      { title: \"orange\", key: \"0-2\" },\n    ],\n  },\n];\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [size, setSize] = useState<SizeType>(\"medium\"),\n    [shape, setShape] = useState<ShapeType>(\"round\"),\n    [theme, setTheme] = useState<ThemeType>(\"fill\");\n  return (\n    <div>\n      <Space>\n        <Checkbox\n          checked={disabled}\n          onChange={(event) => setDisabled(event.checked)}\n          label=\"Form disabled\"\n        />\n      </Space>\n      <Form\n        labelCol={{ span: 5 }}\n        wrapperCol={{ span: 16 }}\n        disabled={disabled}\n        size={size}\n        shape={shape}\n        theme={theme}\n      >\n        <FormItem label=\"Shape\">\n          <RadioGroup value={shape} onChange={setShape}>\n            <Radio value=\"round\" label=\"Round\" />\n            <Radio value=\"circle\" label=\"Circle\" />\n            <Radio value=\"square\" label=\"Square\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Theme\">\n          <RadioGroup value={theme} onChange={setTheme}>\n            <Radio value=\"fill\" label=\"Fill\" />\n            <Radio value=\"outline\" label=\"Outline\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Size\">\n          <RadioGroup value={size} onChange={setSize} type=\"button\">\n            <RadioButton value=\"large\" label=\"Large\" />\n            <RadioButton value=\"medium\" label=\"Medium\" />\n            <RadioButton value=\"small\" label=\"Small\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Input\">\n          <Input placeholder=\"input...\" />\n        </FormItem>\n        <FormItem label=\"InputNumber\">\n          <InputNumber placeholder=\"input number...\" />\n        </FormItem>\n        <FormItem label=\"Select\">\n          <Select style={{ width: \"100%\" }}>\n            <Option value=\"0\" label=\"Apple\" />\n            <Option value=\"1\" label=\"Banana\" />\n            <Option value=\"2\" label=\"Orange\" />\n          </Select>\n        </FormItem>\n        <FormItem label=\"TreeSelect\">\n          <TreeSelect style={{ width: \"100%\" }} treeData={treeData} />\n        </FormItem>\n        <FormItem label=\"Slider\">\n          <Slider />\n        </FormItem>\n        <FormItem label=\"DatePicker\">\n          <DatePicker />\n        </FormItem>\n        <FormItem label=\"Radio\">\n          <RadioGroup>\n            <Radio value=\"0\" label=\"Apple\" />\n            <Radio value=\"1\" label=\"Banana\" />\n            <Radio value=\"2\" label=\"Orange\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Checkbox\">\n          <CheckboxGroup>\n            <Checkbox value=\"0\" label=\"Apple\" />\n            <Checkbox value=\"1\" label=\"Banana\" />\n            <Checkbox value=\"2\" label=\"Orange\" />\n          </CheckboxGroup>\n        </FormItem>\n        <FormItem label=\"Switch\">\n          <Switch trueText=\"Yes\" falseText=\"No\" />\n        </FormItem>\n        <FormItem label=\"Text\">\n          <TextArea placeholder=\"Please input...\" />\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 5 }}>\n          <Button type=\"primary\">Submit</Button>\n          <Button style={{ marginLeft: 10 }}>Cancel</Button>\n        </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/align.tsx",
          "title": "对齐方式",
          "source": "import { useState } from \"react\";\nimport { Button, DatePicker, Input, Segmented, Option, Select, Form, FormItem } from \"react-kui\";\nimport type { DirectionType } from \"react-kui\";\nexport default function App() {\n  const [layout, setLayout] = useState<DirectionType>(\"horizontal\");\n  return (\n    <div>\n      <Form layout={layout} labelCol={{ span: 5 }} wrapperCol={{ span: 6 }}>\n      <FormItem label=\"Layout\">\n        <Segmented\n          value={layout}\n          onChange={(value) => setLayout(value as DirectionType)}\n          options={[\"horizontal\", \"vertical\", \"inline\"].map((value) => ({ value, label: value }))}\n        />\n      </FormItem>\n      <FormItem label=\"Input\">\n        <Input />\n      </FormItem>\n      <FormItem label=\"Select\">\n        <Select style={{ width: \"100%\" }}>\n          <Option value=\"0\" label=\"Apple\" />\n          <Option value=\"1\" label=\"Banana\" />\n          <Option value=\"2\" label=\"Orange\" />\n        </Select>\n      </FormItem>\n      <FormItem label=\"DatePicker\">\n        <DatePicker />\n      </FormItem>\n      <FormItem wrapperCol={{ offset: 5 }}>\n        <Button type=\"primary\">Submit</Button>\n      </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/valid.tsx",
          "title": "表单验证",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport {\n  Button,\n  Checkbox,\n  CheckboxGroup,\n  Col,\n  DatePicker,\n  Form,\n  FormItem,\n  Input,\n  InputNumber,\n  message,\n  Option,\n  Radio,\n  RadioButton,\n  RadioGroup,\n  Rate,\n  Row,\n  Select,\n  Slider,\n  Switch,\n  TextArea,\n  TreeSelect,\n  type FormRule,\n  type FormSubmitEvent,\n} from \"react-kui\";\nconst treeData = [\n  {\n    title: \"food\",\n    key: \"0\",\n    children: [\n      { title: \"apple\", key: \"0-1\" },\n      { title: \"orange\", key: \"0-2\" },\n    ],\n  },\n];\nconst initial = {\n  email: \"\",\n  number: undefined as number | undefined,\n  password: \"\",\n  confirm_password: \"\",\n  phone: \"\",\n  captcha: \"\",\n  slider: 3,\n  rate: 0,\n  tree: undefined as string | undefined,\n  gender: undefined as number | undefined,\n  one: false,\n  system: undefined as number | undefined,\n  birthday: undefined as Date | undefined,\n  country: undefined as string | undefined,\n  city: undefined as string | undefined,\n  hobbies: [] as string[],\n  hardcore: false,\n  other: \"\",\n  readme: false,\n};\nexport default function App() {\n  const [form, setForm] = useState({ ...initial });\n  const [time, setTime] = useState(60);\n  const timer = useRef<ReturnType<typeof setInterval> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearInterval(timer.current);\n    },\n    [],\n  );\n  const custom =\n    (test: (v: unknown) => boolean, msg: string) =>\n    (_: FormRule, v: unknown, cb: (e?: Error) => void) =>\n      cb(test(v) ? undefined : new Error(msg));\n  const rules = {\n    email: [\n      { type: \"mail\", message: \"Please input a valid email\" },\n      { required: true, message: \"The email is required\" },\n    ],\n    number: [\n      { type: \"number\", message: \"Please input a valid number\" },\n      { required: true, message: \"The number is required\" },\n    ],\n    password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { required: true, message: \"The password is required\" },\n    ],\n    confirm_password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { validator: custom((v) => v === form.password, \"Please confirm the password\") },\n      { required: true, message: \"Please confirm the password\" },\n    ],\n    phone: [\n      { type: \"mobile\", message: \"Please input the correct phone number\" },\n      { required: true, message: \"Please input your phone number\" },\n    ],\n    captcha: [\n      { type: \"number\", message: \"The captcha must be a number\" },\n      { required: true, message: \"Please input the captcha\" },\n    ],\n    birthday: [{ required: true, message: \"Please select your birthday\" }],\n    country: [{ required: true, message: \"Please select your country\" }],\n    city: [{ required: true, message: \"Please select your city\" }],\n    tree: [{ required: true, message: \"Please select your food\" }],\n    slider: [\n      { required: true, message: \"Please select a value\" },\n      { min: 5, message: \"Minimum value is 5\" },\n      { max: 50, message: \"Maximum value is 50\" },\n    ],\n    rate: [\n      { required: true, message: \"Please select your rate\" },\n      { min: 1, message: \"The minimum value is 1\" },\n    ],\n    gender: [{ required: true, message: \"Please select your gender\" }],\n    one: [{ required: true, message: \"Please select this option\" }],\n    system: [{ required: true, message: \"Please select your system\" }],\n    hardcore: [{ required: true, message: \"Please enable this option\" }],\n    readme: [\n      { validator: custom((v) => v === true, \"Please accept the Terms of Service\"), required: true },\n    ],\n    hobbies: [\n      { required: true, message: \"Please select your hobbies\" },\n      { max: 3, message: \"Maximum value is 3\" },\n      { min: 2, message: \"Minimum value is 2\" },\n    ],\n    other: [\n      { required: true, message: \"Please fill in other information\" },\n      { max: 10, message: \"Maximum characters is 10\" },\n    ],\n  } as Record<string, FormRule[]>;\n  const sendCode = () => {\n    setTime(59);\n    message.success(\"The verification code has been sent.\");\n    if (timer.current) clearInterval(timer.current);\n    timer.current = setInterval(\n      () =>\n        setTime((v) => {\n          if (v <= 1) {\n            if (timer.current) clearInterval(timer.current);\n            return 60;\n          }\n          return v - 1;\n        }),\n      1000,\n    );\n  };\n  const setValue = () =>\n    setForm({\n      email: \"master@k-ui.cn\",\n      password: \"abc@123@123\",\n      confirm_password: \"abc@123@123\",\n      phone: \"13888888888\",\n      captcha: \"8888\",\n      gender: 1,\n      slider: 5,\n      rate: 5,\n      number: 5,\n      tree: \"0\",\n      system: 0,\n      one: true,\n      birthday: new Date(1995, 4, 5),\n      country: \"1\",\n      city: \"1\",\n      hobbies: [\"0\", \"1\"],\n      hardcore: true,\n      other: \"Test data\",\n      readme: true,\n    });\n  const handleSubmit = ({ valid }: FormSubmitEvent) =>\n    message[valid ? \"success\" : \"error\"](valid ? \"success\" : \"failed\");\n  const handleReset = () => {\n    if (timer.current) clearInterval(timer.current);\n    setTime(60);\n  };\n  const halfCol = { xs: 24, md: 12 };\n  const halfLabelCol = { span: 8 };\n  const halfWrapperCol = { span: 16 };\n  const fieldProps = { labelCol: halfLabelCol, wrapperCol: halfWrapperCol };\n  return (\n    <div>\n      <Form\n      model={form}\n      onChange={(next) => setForm(next as typeof form)}\n      rules={rules}\n      labelCol={{ span: 6 }}\n      wrapperCol={{ span: 16 }}\n      onReset={handleReset}\n      onSubmit={handleSubmit}\n    >\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"E-mail\" prop=\"email\" {...fieldProps}>\n            <Input clearable placeholder=\"Please enter your email\" />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Number\" prop=\"number\" {...fieldProps}>\n            <InputNumber placeholder=\"Please enter your number\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Password\" prop=\"password\" {...fieldProps}>\n            <Input type=\"password\" placeholder=\"Please enter password\" />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Confirm Password\" prop=\"confirm_password\" {...fieldProps}>\n            <Input type=\"password\" placeholder=\"Please enter password\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Phone Number\" prop=\"phone\" {...fieldProps}>\n            <Input placeholder=\"Please enter phone number\" />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Captcha\" prop=\"captcha\" {...fieldProps}>\n            <Input\n              placeholder=\"Please enter captcha\"\n              addonAfter={\n                <Button disabled={time !== 60} htmlType=\"button\" onClick={sendCode}>\n                  {time === 60 ? \"Get Captcha\" : `${time}(s)`}\n                </Button>\n              }\n            />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Country\" prop=\"country\" {...fieldProps}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"China\" />\n              <Option value=\"1\" label=\"Russia\" />\n            </Select>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"City\" prop=\"city\" {...fieldProps}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"Shanghai\" />\n              <Option value=\"1\" label=\"Wuhan\" />\n              <Option value=\"2\" label=\"Hangzhou\" />\n            </Select>\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"TreeSelect\" prop=\"tree\" {...fieldProps}>\n            <TreeSelect style={{ width: \"100%\" }} treeData={treeData} />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Birthday\" prop=\"birthday\" {...fieldProps}>\n            <DatePicker clearable />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Slider\" prop=\"slider\" {...fieldProps}><Slider /></FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Rate\" prop=\"rate\" {...fieldProps}><Rate /></FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Gender\" prop=\"gender\" {...fieldProps}>\n            <RadioGroup>\n              <Radio value={0} label=\"Girl\" />\n              <Radio value={1} label=\"Boy\" />\n            </RadioGroup>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"One\" prop=\"one\" {...fieldProps}><Radio label=\"Only One?\" /></FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"System\" prop=\"system\" {...fieldProps}>\n            <RadioGroup type=\"button\">\n              <RadioButton value={0} label=\"Mac OS\" />\n              <RadioButton value={1} label=\"Windows\" />\n              <RadioButton value={2} label=\"Linux\" />\n            </RadioGroup>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Hardcore\" prop=\"hardcore\" {...fieldProps}>\n            <Switch trueText=\"Yes\" falseText=\"No\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Hobby\" prop=\"hobbies\" {...fieldProps}>\n            <CheckboxGroup>\n              <Checkbox value=\"0\" label=\"Football\" />\n              <Checkbox value=\"1\" label=\"Music\" />\n              <Checkbox value=\"2\" label=\"Photograph\" />\n              <Checkbox value=\"3\" label=\"Tennis\" />\n            </CheckboxGroup>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Other\" prop=\"other\" {...fieldProps}>\n            <TextArea placeholder=\"Maximum 10 characters\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <FormItem prop=\"readme\" wrapperCol={{ offset: 6 }}>\n        <Checkbox>I have read the <a>Terms of Service</a></Checkbox>\n      </FormItem>\n      <FormItem wrapperCol={{ offset: 6 }}>\n        <Button type=\"primary\" htmlType=\"submit\">Submit</Button>\n        <Button style={{ margin: \"0 10px\" }} htmlType=\"reset\">Reset</Button>\n        <Button theme=\"dashed\" htmlType=\"button\" onClick={setValue}>Set Value</Button>\n      </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/length.tsx",
          "title": "辅助校验",
          "source": "import { useState } from \"react\";\nimport {\n  Button,\n  Checkbox,\n  CheckboxGroup,\n  Input,\n  TextArea,\n  message,\n  Option,\n  Select,\n  Form,\n  FormItem,\n  type FormSubmitEvent,\n  type FormRule,\n} from \"react-kui\";\nconst initial = {\n  number: \"\",\n  text: \"\",\n  email: \"\",\n  phone: \"\",\n  password: \"\",\n  confirm_password: \"\",\n  country: \"\",\n  city: \"\",\n  hobbies: [] as string[],\n  other: \"\",\n};\nexport default function App() {\n  const [form, setForm] = useState<Record<string, unknown>>({ ...initial });\n  const validatePass = (_: FormRule, value: unknown, cb: (e?: Error) => void) =>\n    cb(value !== form.password ? new Error(\"The two passwords do not match!\") : undefined);\n  const rules = {\n    number: [\n      { required: true, message: \"The number is required\" },\n      { type: \"number\", message: \"Only numbers can be entered\" },\n    ],\n    text: [\n      { required: true, message: \"The text is required\" },\n      { max: 5, message: \"Maximum of 5 characters\" },\n    ],\n    email: [\n      { type: \"mail\", message: \"Please enter the correct email\" },\n      { required: true, message: \"The email is required\" },\n    ],\n    phone: [\n      { type: \"mobile\", message: \"Please enter the correct phone number\" },\n      { required: true, message: \"Please enter the phone number\" },\n    ],\n    password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { required: true, message: \"Please enter the password\" },\n    ],\n    confirm_password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { validator: validatePass },\n      { required: true, message: \"Please enter the password again\" },\n    ],\n    country: [{ required: true, message: \"Please select the country\" }],\n    city: [{ required: true, message: \"Please select the city\" }],\n    hobbies: [\n      { required: true, message: \"Please select at least one hobby\" },\n      { max: 3, message: \"Maximum of 3 hobbies\" },\n      { min: 2, message: \"Minimum of 2 hobbies\" },\n    ],\n    other: [\n      { required: true, message: \"Please input others\" },\n      { max: 5, message: \"Maximum of 5 characters\" },\n    ],\n  } as Record<string, FormRule[]>;\n  const submit = (e: FormSubmitEvent) =>\n    message[e.valid ? \"success\" : \"error\"](e.valid ? \"success\" : \"failed\");\n  const setValue = () =>\n    setForm({\n      number: 123,\n      text: \"abcd\",\n      email: \"master@k-ui.cn\",\n      password: \"abc@123@123\",\n      confirm_password: \"abc@123@123\",\n      phone: \"13888888888\",\n      country: \"1\",\n      city: \"1\",\n      hobbies: [\"0\", \"1\"],\n      other: \"abcd\",\n    });\n  return (\n    <div style={{ maxWidth: 600 }}>\n      <Form\n        name=\"rules\"\n        rules={rules}\n        model={form}\n        onChange={setForm}\n        onSubmit={submit}\n        wrapperCol={{ span: 16 }}\n        labelCol={{ span: 6 }}\n      >\n        {[\n          [\"Number\", \"number\", \"Verify numbers\"],\n          [\"Text\", \"text\", \"Validate character length\"],\n          [\"E-mail\", \"email\", \"Verify e-mail\"],\n          [\"Phone Number\", \"phone\", \"Verify phone number\"],\n          [\"Password\", \"password\", \"Verify password\"],\n          [\"Confirm Password\", \"confirm_password\", \"Verify confirm password\"],\n        ].map(([label, prop, placeholder]) => (\n          <FormItem key={prop} label={label} prop={prop}>\n            <Input\n              clearable\n              type={prop.includes(\"password\") ? \"password\" : undefined}\n              placeholder={placeholder}\n            />\n          </FormItem>\n        ))}\n        <FormItem label=\"Country\">\n          <FormItem prop=\"country\" wrapperCol={{ span: 24 }}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"China\" />\n              <Option value=\"1\" label=\"Russia\" />\n            </Select>\n          </FormItem>\n          <FormItem prop=\"city\" wrapperCol={{ span: 24 }}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"Shanghai\" />\n              <Option value=\"1\" label=\"Wuhan\" />\n              <Option value=\"2\" label=\"Hangzhou\" />\n            </Select>\n          </FormItem>\n        </FormItem>\n        <FormItem label=\"Hobby\" prop=\"hobbies\">\n          <CheckboxGroup>\n            <Checkbox value=\"0\" label=\"Football\" />\n            <Checkbox value=\"1\" label=\"Music\" />\n            <Checkbox value=\"2\" label=\"Photograph\" />\n            <Checkbox value=\"3\" label=\"Tennis\" />\n          </CheckboxGroup>\n        </FormItem>\n        <FormItem label=\"Other\" prop=\"other\">\n          <TextArea placeholder=\"Verify the information you entered\" />\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 6 }}>\n          <Button type=\"primary\" htmlType=\"submit\">\n            Submit\n          </Button>\n          <Button style={{ margin: \"0 10px\" }} htmlType=\"reset\">\n            Reset\n          </Button>\n          <Button theme=\"dashed\" onClick={setValue}>\n            Set Value\n          </Button>\n        </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/withmodal.tsx",
          "title": "多表单联动",
          "source": "import { useRef, useState } from \"react\";\nimport {\n  Button,\n  Input,\n  message,\n  Modal,\n  Space,\n  Tag,\n  Form,\n  FormItem,\n  type FormExpose,\n  type FormSubmitEvent,\n  type FormRule,\n} from \"react-kui\";\nconst labelCol = { span: 6 },\n  wrapperCol = { span: 16 };\nexport default function App() {\n  const ref = useRef<FormExpose>(null);\n  const [visible, setVisible] = useState(false),\n    [group, setGroup] = useState<{ name: string; list: { username: string; age: string }[] }>({\n      name: \"\",\n      list: [],\n    }),\n    [form, setForm] = useState({ username: \"\", age: \"\" });\n  const rules = { name: [{ required: true, message: \"Please input the organization name\" }] };\n  const userRules = {\n    username: [{ required: true, message: \"Please input the organization name\" }],\n    age: [\n      { required: true, message: \"Please input the age.\" },\n      { type: \"number\", message: \"Please input the valid age.\" },\n    ],\n  } as Record<string, FormRule[]>;\n  const submitUser = ({ valid }: FormSubmitEvent) => {\n    if (valid) {\n      setGroup({ ...group, list: [...group.list, { ...form }] });\n      ref.current?.reset();\n      setForm({ username: \"\", age: \"\" });\n      setVisible(false);\n    }\n  };\n  // 开合状态只从 `onOpenChange` 回写（点「取消」不走 `onClose`）；\n  // 顺带在关掉那一刻清一次表单，X、Esc、取消三条路都覆盖到。\n  const changeOpen = (next: boolean) => {\n    setVisible(next);\n    if (!next) ref.current?.reset();\n  };\n  return (\n    <div style={{ maxWidth: 512 }}>\n      <Form\n        name=\"with-modal\"\n        model={group}\n        onChange={(next) => setGroup(next as typeof group)}\n        onSubmit={(e) => message[e.valid ? \"success\" : \"error\"](e.valid ? \"success\" : \"failed\")}\n        rules={rules}\n        labelCol={labelCol}\n        wrapperCol={wrapperCol}\n      >\n        <FormItem label=\"Group\" prop=\"name\">\n          <Input />\n        </FormItem>\n        <FormItem label=\"UserList\">\n          <Space>\n            {group.list.map((item, i) => (\n              <Tag theme=\"fill\" key={i}>\n                {item.username} - {item.age}\n              </Tag>\n            ))}\n          </Space>\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 6 }}>\n          <Button type=\"primary\" htmlType=\"submit\">\n            Submit\n          </Button>\n          <Button onClick={() => setVisible(true)} style={{ marginLeft: 10 }}>\n            Add User\n          </Button>\n        </FormItem>\n      </Form>\n      <Modal\n        open={visible}\n        title=\"New User\"\n        width={450}\n        onOpenChange={changeOpen}\n        onOk={() => ref.current?.submit()}\n      >\n        <Form\n          ref={ref}\n          labelCol={labelCol}\n          wrapperCol={wrapperCol}\n          name=\"modal\"\n          model={form}\n          onChange={(next) => setForm(next as typeof form)}\n          rules={userRules}\n          onSubmit={submitUser}\n        >\n          <FormItem label=\"Usename\" prop=\"username\">\n            <Input placeholder=\"Please input username\" />\n          </FormItem>\n          <FormItem label=\"Age\" prop=\"age\">\n            <Input placeholder=\"Please input age\" />\n          </FormItem>\n        </Form>\n      </Modal>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/customvalid.tsx",
          "title": "自定义校验规则",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Input, message, Form, FormItem, type FormExpose, type FormRule } from \"react-kui\";\nconst labelCol = { span: 5 },\n  wrapperCol = { span: 16 };\nexport default function App() {\n  const ref = useRef<FormExpose>(null);\n  const [form, setForm] = useState({\n    fullname: \"\",\n    IDnumber: \"\",\n    password: \"\",\n    confirm_password: \"\",\n  });\n  const validateID = (_: FormRule, value: unknown, cb: (e?: Error) => void) =>\n    cb(\n      typeof value === \"string\" &&\n        value !== \"\" &&\n        !/(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/.test(value)\n        ? new Error(\"Please enter the correct ID number\")\n        : undefined,\n    );\n  const validatePassword = (_: FormRule, value: unknown, cb: (e?: Error) => void) => {\n    cb(!value ? new Error(\"Please input your password\") : undefined);\n    if (value) ref.current?.test(\"confirm_password\");\n  };\n  const validateAgain = (_: FormRule, value: unknown, cb: (e?: Error) => void) =>\n    cb(\n      !value\n        ? new Error(\"Please input your password again\")\n        : value !== form.password\n          ? new Error(\"The two passwords do not match.\")\n          : undefined,\n    );\n  const rules = {\n    fullname: [\n      { required: true, message: \"Please input your name\" },\n      { message: \"Name must be in Chinese\", pattern: /^[\\u4e00-\\u9fa5]+$/ },\n    ],\n    IDnumber: [{ validator: validateID }],\n    password: [{ validator: validatePassword }],\n    confirm_password: [{ validator: validateAgain }],\n  };\n  return (\n    <div style={{ maxWidth: 600 }}>\n      <Form\n        ref={ref}\n        model={form}\n        onChange={(next) => setForm(next as typeof form)}\n        rules={rules}\n        labelCol={labelCol}\n        wrapperCol={wrapperCol}\n      >\n        <FormItem label=\"Name\" prop=\"fullname\">\n          <Input clearable />\n        </FormItem>\n        <FormItem label=\"ID Card Number\" prop=\"IDnumber\">\n          <Input placeholder=\"Optional\" />\n        </FormItem>\n        <FormItem label=\"Password\" prop=\"password\">\n          <Input type=\"password\" placeholder=\"Please input your password\" />\n        </FormItem>\n        <FormItem label=\"Confirm Password\" prop=\"confirm_password\">\n          <Input type=\"password\" placeholder=\"Please confirm your password\" />\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 5 }}>\n          <Button\n            type=\"primary\"\n            onClick={() =>\n              ref.current?.validate().then(({ valid }) =>\n                message[valid ? \"success\" : \"error\"](valid ? \"success\" : \"failed\"),\n              )\n            }\n          >\n            Submit\n          </Button>\n          <Button style={{ marginLeft: 10 }} onClick={() => ref.current?.reset()}>\n            Reset\n          </Button>\n        </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/dynamicvalid.tsx",
          "title": "动态校验规则",
          "source": "import { Trash2 } from \"kui-icons\";\nimport { useRef, useState } from \"react\";\nimport {\n  Button,\n  Input,\n  message,\n  Col,\n  Row,\n  Option,\n  Select,\n  Form,\n  FormItem,\n  type FormExpose,\n} from \"react-kui\";\nexport default function App() {\n  const ref = useRef<FormExpose>(null),\n    count = useRef(2);\n  const [form, setForm] = useState({\n    cname: \"\",\n    info: { gender: \"\", age: \"\" },\n    webs: [\n      { value: \"\", key: \"0\" },\n      { value: \"\", key: \"1\" },\n    ],\n  });\n  const required = (message: string) => ({ required: true, message });\n  return (\n    <Row>\n      <Col span={16}>\n        <Form\n          ref={ref}\n          model={form}\n          onChange={(next) => setForm(next as typeof form)}\n          labelCol={{ span: 5 }}\n          wrapperCol={{ span: 16 }}\n        >\n          <FormItem label=\"Name\" prop=\"cname\" rules={required(\"Please input your name\")}>\n            <Input clearable />\n          </FormItem>\n          <FormItem label=\"Gender\" prop=\"info.gender\" rules={required(\"Please select your gender\")}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"1\" label=\"男\" />\n              <Option value=\"0\" label=\"女\" />\n            </Select>\n          </FormItem>\n          <FormItem label=\"Age\" prop=\"info.age\" rules={required(\"Please input your age\")}>\n            <Input clearable />\n          </FormItem>\n          {form.webs.map((item, i) => (\n            <FormItem\n              key={item.key}\n              label={`Web Site${item.key}`}\n              prop={`webs.${i}.value`}\n              rules={required(\"Web site is required\")}\n            >\n              <Input style={{ width: 230 }} />\n              {i > 0 && (\n                <Button\n                  icon={Trash2}\n                  onClick={() => setForm({ ...form, webs: form.webs.filter((_, n) => n !== i) })}\n                  style={{ fontSize: 25, margin: \"0 10px\" }}\n                />\n              )}\n            </FormItem>\n          ))}\n          <FormItem wrapperCol={{ offset: 5 }}>\n            <Button\n              type=\"primary\"\n              onClick={() =>\n                ref.current?.validate().then(({ valid }) =>\n                  message[valid ? \"success\" : \"error\"](valid ? \"success\" : \"failed\"),\n                )\n              }\n            >\n              Submit\n            </Button>\n            <Button\n              onClick={() => {\n                count.current += 1;\n                setForm({\n                  ...form,\n                  webs: [...form.webs, { value: \"\", key: String(count.current) }],\n                });\n              }}\n              style={{ margin: \"0 10px\" }}\n            >\n              Add\n            </Button>\n            <Button onClick={() => ref.current?.reset()}>Reset</Button>\n          </FormItem>\n        </Form>\n      </Col>\n      <Col span={8}>\n        <pre style={{ height: \"100%\", overflow: \"scroll\", lineHeight: 1.4 }}>\n          {JSON.stringify(form, null, 2)}\n        </pre>\n      </Col>\n    </Row>\n  );\n}"
        }
      ]
    },
    {
      "name": "FormItem",
      "import": "import { FormItem } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/form",
      "props": [
        {
          "name": "label",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签文本",
          "descriptionEn": "Label text"
        },
        {
          "name": "prop",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "对应表单域 model 里的字段，表单验证必须字段",
          "descriptionEn": "Corresponds to the field in the form domain model. Required for form validation"
        },
        {
          "name": "labelCol",
          "type": "ColProps | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "label 标签布局，同 `<Col>` 的 span、offset；inline 布局下不生效",
          "descriptionEn": "Label layout, same as the `<Col>` component, set span offset values, such as {span: 3, offset: 12}"
        },
        {
          "name": "wrapperCol",
          "type": "ColProps | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "控件标签布局，同 `<Col>` 的 span、offset；inline 布局下不生效",
          "descriptionEn": "Control layout, same as the `<Col>` component, set span offset values, such as {span: 15, offset: 12}"
        },
        {
          "name": "rules",
          "type": "FormRule | FormRule[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "表单验证规则",
          "descriptionEn": "Form validation rules"
        },
        {
          "name": "colon",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否在标签后显示冒号；未设置时继承 Form 的配置",
          "descriptionEn": "Whether to display a colon after the label; inherits the Form setting when unset"
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "字段控件及辅助内容；支持的表单控件通过 prop 接入 Form 字段上下文。",
          "descriptionEn": "Field controls and supporting content; supported controls bind to the Form field through prop."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "label",
        "children"
      ],
      "behavior": {
        "rules": [
          "Use inside Form. prop is the field path, not the field value. Do not copy Vue v-model bindings."
        ]
      },
      "children": [],
      "parent": "Form",
      "examples": [
        {
          "id": "components/form/demo/basic.tsx",
          "title": "典型表单",
          "source": "import { useState } from \"react\";\nimport {\n  Button,\n  Checkbox,\n  CheckboxGroup,\n  DatePicker,\n  Form,\n  FormItem,\n  Input,\n  InputNumber,\n  Option,\n  Radio,\n  RadioButton,\n  RadioGroup,\n  Select,\n  Slider,\n  Space,\n  Switch,\n  TextArea,\n  TreeSelect,\n  type ShapeType,\n  type SizeType,\n  type ThemeType,\n} from \"react-kui\";\nconst treeData = [\n  {\n    title: \"food\",\n    key: \"0\",\n    children: [\n      { title: \"apple\", key: \"0-1\" },\n      { title: \"orange\", key: \"0-2\" },\n    ],\n  },\n];\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [size, setSize] = useState<SizeType>(\"medium\"),\n    [shape, setShape] = useState<ShapeType>(\"round\"),\n    [theme, setTheme] = useState<ThemeType>(\"fill\");\n  return (\n    <div>\n      <Space>\n        <Checkbox\n          checked={disabled}\n          onChange={(event) => setDisabled(event.checked)}\n          label=\"Form disabled\"\n        />\n      </Space>\n      <Form\n        labelCol={{ span: 5 }}\n        wrapperCol={{ span: 16 }}\n        disabled={disabled}\n        size={size}\n        shape={shape}\n        theme={theme}\n      >\n        <FormItem label=\"Shape\">\n          <RadioGroup value={shape} onChange={setShape}>\n            <Radio value=\"round\" label=\"Round\" />\n            <Radio value=\"circle\" label=\"Circle\" />\n            <Radio value=\"square\" label=\"Square\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Theme\">\n          <RadioGroup value={theme} onChange={setTheme}>\n            <Radio value=\"fill\" label=\"Fill\" />\n            <Radio value=\"outline\" label=\"Outline\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Size\">\n          <RadioGroup value={size} onChange={setSize} type=\"button\">\n            <RadioButton value=\"large\" label=\"Large\" />\n            <RadioButton value=\"medium\" label=\"Medium\" />\n            <RadioButton value=\"small\" label=\"Small\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Input\">\n          <Input placeholder=\"input...\" />\n        </FormItem>\n        <FormItem label=\"InputNumber\">\n          <InputNumber placeholder=\"input number...\" />\n        </FormItem>\n        <FormItem label=\"Select\">\n          <Select style={{ width: \"100%\" }}>\n            <Option value=\"0\" label=\"Apple\" />\n            <Option value=\"1\" label=\"Banana\" />\n            <Option value=\"2\" label=\"Orange\" />\n          </Select>\n        </FormItem>\n        <FormItem label=\"TreeSelect\">\n          <TreeSelect style={{ width: \"100%\" }} treeData={treeData} />\n        </FormItem>\n        <FormItem label=\"Slider\">\n          <Slider />\n        </FormItem>\n        <FormItem label=\"DatePicker\">\n          <DatePicker />\n        </FormItem>\n        <FormItem label=\"Radio\">\n          <RadioGroup>\n            <Radio value=\"0\" label=\"Apple\" />\n            <Radio value=\"1\" label=\"Banana\" />\n            <Radio value=\"2\" label=\"Orange\" />\n          </RadioGroup>\n        </FormItem>\n        <FormItem label=\"Checkbox\">\n          <CheckboxGroup>\n            <Checkbox value=\"0\" label=\"Apple\" />\n            <Checkbox value=\"1\" label=\"Banana\" />\n            <Checkbox value=\"2\" label=\"Orange\" />\n          </CheckboxGroup>\n        </FormItem>\n        <FormItem label=\"Switch\">\n          <Switch trueText=\"Yes\" falseText=\"No\" />\n        </FormItem>\n        <FormItem label=\"Text\">\n          <TextArea placeholder=\"Please input...\" />\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 5 }}>\n          <Button type=\"primary\">Submit</Button>\n          <Button style={{ marginLeft: 10 }}>Cancel</Button>\n        </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/align.tsx",
          "title": "对齐方式",
          "source": "import { useState } from \"react\";\nimport { Button, DatePicker, Input, Segmented, Option, Select, Form, FormItem } from \"react-kui\";\nimport type { DirectionType } from \"react-kui\";\nexport default function App() {\n  const [layout, setLayout] = useState<DirectionType>(\"horizontal\");\n  return (\n    <div>\n      <Form layout={layout} labelCol={{ span: 5 }} wrapperCol={{ span: 6 }}>\n      <FormItem label=\"Layout\">\n        <Segmented\n          value={layout}\n          onChange={(value) => setLayout(value as DirectionType)}\n          options={[\"horizontal\", \"vertical\", \"inline\"].map((value) => ({ value, label: value }))}\n        />\n      </FormItem>\n      <FormItem label=\"Input\">\n        <Input />\n      </FormItem>\n      <FormItem label=\"Select\">\n        <Select style={{ width: \"100%\" }}>\n          <Option value=\"0\" label=\"Apple\" />\n          <Option value=\"1\" label=\"Banana\" />\n          <Option value=\"2\" label=\"Orange\" />\n        </Select>\n      </FormItem>\n      <FormItem label=\"DatePicker\">\n        <DatePicker />\n      </FormItem>\n      <FormItem wrapperCol={{ offset: 5 }}>\n        <Button type=\"primary\">Submit</Button>\n      </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/valid.tsx",
          "title": "表单验证",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport {\n  Button,\n  Checkbox,\n  CheckboxGroup,\n  Col,\n  DatePicker,\n  Form,\n  FormItem,\n  Input,\n  InputNumber,\n  message,\n  Option,\n  Radio,\n  RadioButton,\n  RadioGroup,\n  Rate,\n  Row,\n  Select,\n  Slider,\n  Switch,\n  TextArea,\n  TreeSelect,\n  type FormRule,\n  type FormSubmitEvent,\n} from \"react-kui\";\nconst treeData = [\n  {\n    title: \"food\",\n    key: \"0\",\n    children: [\n      { title: \"apple\", key: \"0-1\" },\n      { title: \"orange\", key: \"0-2\" },\n    ],\n  },\n];\nconst initial = {\n  email: \"\",\n  number: undefined as number | undefined,\n  password: \"\",\n  confirm_password: \"\",\n  phone: \"\",\n  captcha: \"\",\n  slider: 3,\n  rate: 0,\n  tree: undefined as string | undefined,\n  gender: undefined as number | undefined,\n  one: false,\n  system: undefined as number | undefined,\n  birthday: undefined as Date | undefined,\n  country: undefined as string | undefined,\n  city: undefined as string | undefined,\n  hobbies: [] as string[],\n  hardcore: false,\n  other: \"\",\n  readme: false,\n};\nexport default function App() {\n  const [form, setForm] = useState({ ...initial });\n  const [time, setTime] = useState(60);\n  const timer = useRef<ReturnType<typeof setInterval> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearInterval(timer.current);\n    },\n    [],\n  );\n  const custom =\n    (test: (v: unknown) => boolean, msg: string) =>\n    (_: FormRule, v: unknown, cb: (e?: Error) => void) =>\n      cb(test(v) ? undefined : new Error(msg));\n  const rules = {\n    email: [\n      { type: \"mail\", message: \"Please input a valid email\" },\n      { required: true, message: \"The email is required\" },\n    ],\n    number: [\n      { type: \"number\", message: \"Please input a valid number\" },\n      { required: true, message: \"The number is required\" },\n    ],\n    password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { required: true, message: \"The password is required\" },\n    ],\n    confirm_password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { validator: custom((v) => v === form.password, \"Please confirm the password\") },\n      { required: true, message: \"Please confirm the password\" },\n    ],\n    phone: [\n      { type: \"mobile\", message: \"Please input the correct phone number\" },\n      { required: true, message: \"Please input your phone number\" },\n    ],\n    captcha: [\n      { type: \"number\", message: \"The captcha must be a number\" },\n      { required: true, message: \"Please input the captcha\" },\n    ],\n    birthday: [{ required: true, message: \"Please select your birthday\" }],\n    country: [{ required: true, message: \"Please select your country\" }],\n    city: [{ required: true, message: \"Please select your city\" }],\n    tree: [{ required: true, message: \"Please select your food\" }],\n    slider: [\n      { required: true, message: \"Please select a value\" },\n      { min: 5, message: \"Minimum value is 5\" },\n      { max: 50, message: \"Maximum value is 50\" },\n    ],\n    rate: [\n      { required: true, message: \"Please select your rate\" },\n      { min: 1, message: \"The minimum value is 1\" },\n    ],\n    gender: [{ required: true, message: \"Please select your gender\" }],\n    one: [{ required: true, message: \"Please select this option\" }],\n    system: [{ required: true, message: \"Please select your system\" }],\n    hardcore: [{ required: true, message: \"Please enable this option\" }],\n    readme: [\n      { validator: custom((v) => v === true, \"Please accept the Terms of Service\"), required: true },\n    ],\n    hobbies: [\n      { required: true, message: \"Please select your hobbies\" },\n      { max: 3, message: \"Maximum value is 3\" },\n      { min: 2, message: \"Minimum value is 2\" },\n    ],\n    other: [\n      { required: true, message: \"Please fill in other information\" },\n      { max: 10, message: \"Maximum characters is 10\" },\n    ],\n  } as Record<string, FormRule[]>;\n  const sendCode = () => {\n    setTime(59);\n    message.success(\"The verification code has been sent.\");\n    if (timer.current) clearInterval(timer.current);\n    timer.current = setInterval(\n      () =>\n        setTime((v) => {\n          if (v <= 1) {\n            if (timer.current) clearInterval(timer.current);\n            return 60;\n          }\n          return v - 1;\n        }),\n      1000,\n    );\n  };\n  const setValue = () =>\n    setForm({\n      email: \"master@k-ui.cn\",\n      password: \"abc@123@123\",\n      confirm_password: \"abc@123@123\",\n      phone: \"13888888888\",\n      captcha: \"8888\",\n      gender: 1,\n      slider: 5,\n      rate: 5,\n      number: 5,\n      tree: \"0\",\n      system: 0,\n      one: true,\n      birthday: new Date(1995, 4, 5),\n      country: \"1\",\n      city: \"1\",\n      hobbies: [\"0\", \"1\"],\n      hardcore: true,\n      other: \"Test data\",\n      readme: true,\n    });\n  const handleSubmit = ({ valid }: FormSubmitEvent) =>\n    message[valid ? \"success\" : \"error\"](valid ? \"success\" : \"failed\");\n  const handleReset = () => {\n    if (timer.current) clearInterval(timer.current);\n    setTime(60);\n  };\n  const halfCol = { xs: 24, md: 12 };\n  const halfLabelCol = { span: 8 };\n  const halfWrapperCol = { span: 16 };\n  const fieldProps = { labelCol: halfLabelCol, wrapperCol: halfWrapperCol };\n  return (\n    <div>\n      <Form\n      model={form}\n      onChange={(next) => setForm(next as typeof form)}\n      rules={rules}\n      labelCol={{ span: 6 }}\n      wrapperCol={{ span: 16 }}\n      onReset={handleReset}\n      onSubmit={handleSubmit}\n    >\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"E-mail\" prop=\"email\" {...fieldProps}>\n            <Input clearable placeholder=\"Please enter your email\" />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Number\" prop=\"number\" {...fieldProps}>\n            <InputNumber placeholder=\"Please enter your number\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Password\" prop=\"password\" {...fieldProps}>\n            <Input type=\"password\" placeholder=\"Please enter password\" />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Confirm Password\" prop=\"confirm_password\" {...fieldProps}>\n            <Input type=\"password\" placeholder=\"Please enter password\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Phone Number\" prop=\"phone\" {...fieldProps}>\n            <Input placeholder=\"Please enter phone number\" />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Captcha\" prop=\"captcha\" {...fieldProps}>\n            <Input\n              placeholder=\"Please enter captcha\"\n              addonAfter={\n                <Button disabled={time !== 60} htmlType=\"button\" onClick={sendCode}>\n                  {time === 60 ? \"Get Captcha\" : `${time}(s)`}\n                </Button>\n              }\n            />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Country\" prop=\"country\" {...fieldProps}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"China\" />\n              <Option value=\"1\" label=\"Russia\" />\n            </Select>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"City\" prop=\"city\" {...fieldProps}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"Shanghai\" />\n              <Option value=\"1\" label=\"Wuhan\" />\n              <Option value=\"2\" label=\"Hangzhou\" />\n            </Select>\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"TreeSelect\" prop=\"tree\" {...fieldProps}>\n            <TreeSelect style={{ width: \"100%\" }} treeData={treeData} />\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Birthday\" prop=\"birthday\" {...fieldProps}>\n            <DatePicker clearable />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Slider\" prop=\"slider\" {...fieldProps}><Slider /></FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Rate\" prop=\"rate\" {...fieldProps}><Rate /></FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Gender\" prop=\"gender\" {...fieldProps}>\n            <RadioGroup>\n              <Radio value={0} label=\"Girl\" />\n              <Radio value={1} label=\"Boy\" />\n            </RadioGroup>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"One\" prop=\"one\" {...fieldProps}><Radio label=\"Only One?\" /></FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"System\" prop=\"system\" {...fieldProps}>\n            <RadioGroup type=\"button\">\n              <RadioButton value={0} label=\"Mac OS\" />\n              <RadioButton value={1} label=\"Windows\" />\n              <RadioButton value={2} label=\"Linux\" />\n            </RadioGroup>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Hardcore\" prop=\"hardcore\" {...fieldProps}>\n            <Switch trueText=\"Yes\" falseText=\"No\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <Row>\n        <Col {...halfCol}>\n          <FormItem label=\"Hobby\" prop=\"hobbies\" {...fieldProps}>\n            <CheckboxGroup>\n              <Checkbox value=\"0\" label=\"Football\" />\n              <Checkbox value=\"1\" label=\"Music\" />\n              <Checkbox value=\"2\" label=\"Photograph\" />\n              <Checkbox value=\"3\" label=\"Tennis\" />\n            </CheckboxGroup>\n          </FormItem>\n        </Col>\n        <Col {...halfCol}>\n          <FormItem label=\"Other\" prop=\"other\" {...fieldProps}>\n            <TextArea placeholder=\"Maximum 10 characters\" />\n          </FormItem>\n        </Col>\n      </Row>\n      <FormItem prop=\"readme\" wrapperCol={{ offset: 6 }}>\n        <Checkbox>I have read the <a>Terms of Service</a></Checkbox>\n      </FormItem>\n      <FormItem wrapperCol={{ offset: 6 }}>\n        <Button type=\"primary\" htmlType=\"submit\">Submit</Button>\n        <Button style={{ margin: \"0 10px\" }} htmlType=\"reset\">Reset</Button>\n        <Button theme=\"dashed\" htmlType=\"button\" onClick={setValue}>Set Value</Button>\n      </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/length.tsx",
          "title": "辅助校验",
          "source": "import { useState } from \"react\";\nimport {\n  Button,\n  Checkbox,\n  CheckboxGroup,\n  Input,\n  TextArea,\n  message,\n  Option,\n  Select,\n  Form,\n  FormItem,\n  type FormSubmitEvent,\n  type FormRule,\n} from \"react-kui\";\nconst initial = {\n  number: \"\",\n  text: \"\",\n  email: \"\",\n  phone: \"\",\n  password: \"\",\n  confirm_password: \"\",\n  country: \"\",\n  city: \"\",\n  hobbies: [] as string[],\n  other: \"\",\n};\nexport default function App() {\n  const [form, setForm] = useState<Record<string, unknown>>({ ...initial });\n  const validatePass = (_: FormRule, value: unknown, cb: (e?: Error) => void) =>\n    cb(value !== form.password ? new Error(\"The two passwords do not match!\") : undefined);\n  const rules = {\n    number: [\n      { required: true, message: \"The number is required\" },\n      { type: \"number\", message: \"Only numbers can be entered\" },\n    ],\n    text: [\n      { required: true, message: \"The text is required\" },\n      { max: 5, message: \"Maximum of 5 characters\" },\n    ],\n    email: [\n      { type: \"mail\", message: \"Please enter the correct email\" },\n      { required: true, message: \"The email is required\" },\n    ],\n    phone: [\n      { type: \"mobile\", message: \"Please enter the correct phone number\" },\n      { required: true, message: \"Please enter the phone number\" },\n    ],\n    password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { required: true, message: \"Please enter the password\" },\n    ],\n    confirm_password: [\n      { min: 8, max: 20, message: \"Please keep the password length between 8-20 digits.\" },\n      { validator: validatePass },\n      { required: true, message: \"Please enter the password again\" },\n    ],\n    country: [{ required: true, message: \"Please select the country\" }],\n    city: [{ required: true, message: \"Please select the city\" }],\n    hobbies: [\n      { required: true, message: \"Please select at least one hobby\" },\n      { max: 3, message: \"Maximum of 3 hobbies\" },\n      { min: 2, message: \"Minimum of 2 hobbies\" },\n    ],\n    other: [\n      { required: true, message: \"Please input others\" },\n      { max: 5, message: \"Maximum of 5 characters\" },\n    ],\n  } as Record<string, FormRule[]>;\n  const submit = (e: FormSubmitEvent) =>\n    message[e.valid ? \"success\" : \"error\"](e.valid ? \"success\" : \"failed\");\n  const setValue = () =>\n    setForm({\n      number: 123,\n      text: \"abcd\",\n      email: \"master@k-ui.cn\",\n      password: \"abc@123@123\",\n      confirm_password: \"abc@123@123\",\n      phone: \"13888888888\",\n      country: \"1\",\n      city: \"1\",\n      hobbies: [\"0\", \"1\"],\n      other: \"abcd\",\n    });\n  return (\n    <div style={{ maxWidth: 600 }}>\n      <Form\n        name=\"rules\"\n        rules={rules}\n        model={form}\n        onChange={setForm}\n        onSubmit={submit}\n        wrapperCol={{ span: 16 }}\n        labelCol={{ span: 6 }}\n      >\n        {[\n          [\"Number\", \"number\", \"Verify numbers\"],\n          [\"Text\", \"text\", \"Validate character length\"],\n          [\"E-mail\", \"email\", \"Verify e-mail\"],\n          [\"Phone Number\", \"phone\", \"Verify phone number\"],\n          [\"Password\", \"password\", \"Verify password\"],\n          [\"Confirm Password\", \"confirm_password\", \"Verify confirm password\"],\n        ].map(([label, prop, placeholder]) => (\n          <FormItem key={prop} label={label} prop={prop}>\n            <Input\n              clearable\n              type={prop.includes(\"password\") ? \"password\" : undefined}\n              placeholder={placeholder}\n            />\n          </FormItem>\n        ))}\n        <FormItem label=\"Country\">\n          <FormItem prop=\"country\" wrapperCol={{ span: 24 }}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"China\" />\n              <Option value=\"1\" label=\"Russia\" />\n            </Select>\n          </FormItem>\n          <FormItem prop=\"city\" wrapperCol={{ span: 24 }}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"0\" label=\"Shanghai\" />\n              <Option value=\"1\" label=\"Wuhan\" />\n              <Option value=\"2\" label=\"Hangzhou\" />\n            </Select>\n          </FormItem>\n        </FormItem>\n        <FormItem label=\"Hobby\" prop=\"hobbies\">\n          <CheckboxGroup>\n            <Checkbox value=\"0\" label=\"Football\" />\n            <Checkbox value=\"1\" label=\"Music\" />\n            <Checkbox value=\"2\" label=\"Photograph\" />\n            <Checkbox value=\"3\" label=\"Tennis\" />\n          </CheckboxGroup>\n        </FormItem>\n        <FormItem label=\"Other\" prop=\"other\">\n          <TextArea placeholder=\"Verify the information you entered\" />\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 6 }}>\n          <Button type=\"primary\" htmlType=\"submit\">\n            Submit\n          </Button>\n          <Button style={{ margin: \"0 10px\" }} htmlType=\"reset\">\n            Reset\n          </Button>\n          <Button theme=\"dashed\" onClick={setValue}>\n            Set Value\n          </Button>\n        </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/withmodal.tsx",
          "title": "多表单联动",
          "source": "import { useRef, useState } from \"react\";\nimport {\n  Button,\n  Input,\n  message,\n  Modal,\n  Space,\n  Tag,\n  Form,\n  FormItem,\n  type FormExpose,\n  type FormSubmitEvent,\n  type FormRule,\n} from \"react-kui\";\nconst labelCol = { span: 6 },\n  wrapperCol = { span: 16 };\nexport default function App() {\n  const ref = useRef<FormExpose>(null);\n  const [visible, setVisible] = useState(false),\n    [group, setGroup] = useState<{ name: string; list: { username: string; age: string }[] }>({\n      name: \"\",\n      list: [],\n    }),\n    [form, setForm] = useState({ username: \"\", age: \"\" });\n  const rules = { name: [{ required: true, message: \"Please input the organization name\" }] };\n  const userRules = {\n    username: [{ required: true, message: \"Please input the organization name\" }],\n    age: [\n      { required: true, message: \"Please input the age.\" },\n      { type: \"number\", message: \"Please input the valid age.\" },\n    ],\n  } as Record<string, FormRule[]>;\n  const submitUser = ({ valid }: FormSubmitEvent) => {\n    if (valid) {\n      setGroup({ ...group, list: [...group.list, { ...form }] });\n      ref.current?.reset();\n      setForm({ username: \"\", age: \"\" });\n      setVisible(false);\n    }\n  };\n  // 开合状态只从 `onOpenChange` 回写（点「取消」不走 `onClose`）；\n  // 顺带在关掉那一刻清一次表单，X、Esc、取消三条路都覆盖到。\n  const changeOpen = (next: boolean) => {\n    setVisible(next);\n    if (!next) ref.current?.reset();\n  };\n  return (\n    <div style={{ maxWidth: 512 }}>\n      <Form\n        name=\"with-modal\"\n        model={group}\n        onChange={(next) => setGroup(next as typeof group)}\n        onSubmit={(e) => message[e.valid ? \"success\" : \"error\"](e.valid ? \"success\" : \"failed\")}\n        rules={rules}\n        labelCol={labelCol}\n        wrapperCol={wrapperCol}\n      >\n        <FormItem label=\"Group\" prop=\"name\">\n          <Input />\n        </FormItem>\n        <FormItem label=\"UserList\">\n          <Space>\n            {group.list.map((item, i) => (\n              <Tag theme=\"fill\" key={i}>\n                {item.username} - {item.age}\n              </Tag>\n            ))}\n          </Space>\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 6 }}>\n          <Button type=\"primary\" htmlType=\"submit\">\n            Submit\n          </Button>\n          <Button onClick={() => setVisible(true)} style={{ marginLeft: 10 }}>\n            Add User\n          </Button>\n        </FormItem>\n      </Form>\n      <Modal\n        open={visible}\n        title=\"New User\"\n        width={450}\n        onOpenChange={changeOpen}\n        onOk={() => ref.current?.submit()}\n      >\n        <Form\n          ref={ref}\n          labelCol={labelCol}\n          wrapperCol={wrapperCol}\n          name=\"modal\"\n          model={form}\n          onChange={(next) => setForm(next as typeof form)}\n          rules={userRules}\n          onSubmit={submitUser}\n        >\n          <FormItem label=\"Usename\" prop=\"username\">\n            <Input placeholder=\"Please input username\" />\n          </FormItem>\n          <FormItem label=\"Age\" prop=\"age\">\n            <Input placeholder=\"Please input age\" />\n          </FormItem>\n        </Form>\n      </Modal>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/customvalid.tsx",
          "title": "自定义校验规则",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Input, message, Form, FormItem, type FormExpose, type FormRule } from \"react-kui\";\nconst labelCol = { span: 5 },\n  wrapperCol = { span: 16 };\nexport default function App() {\n  const ref = useRef<FormExpose>(null);\n  const [form, setForm] = useState({\n    fullname: \"\",\n    IDnumber: \"\",\n    password: \"\",\n    confirm_password: \"\",\n  });\n  const validateID = (_: FormRule, value: unknown, cb: (e?: Error) => void) =>\n    cb(\n      typeof value === \"string\" &&\n        value !== \"\" &&\n        !/(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/.test(value)\n        ? new Error(\"Please enter the correct ID number\")\n        : undefined,\n    );\n  const validatePassword = (_: FormRule, value: unknown, cb: (e?: Error) => void) => {\n    cb(!value ? new Error(\"Please input your password\") : undefined);\n    if (value) ref.current?.test(\"confirm_password\");\n  };\n  const validateAgain = (_: FormRule, value: unknown, cb: (e?: Error) => void) =>\n    cb(\n      !value\n        ? new Error(\"Please input your password again\")\n        : value !== form.password\n          ? new Error(\"The two passwords do not match.\")\n          : undefined,\n    );\n  const rules = {\n    fullname: [\n      { required: true, message: \"Please input your name\" },\n      { message: \"Name must be in Chinese\", pattern: /^[\\u4e00-\\u9fa5]+$/ },\n    ],\n    IDnumber: [{ validator: validateID }],\n    password: [{ validator: validatePassword }],\n    confirm_password: [{ validator: validateAgain }],\n  };\n  return (\n    <div style={{ maxWidth: 600 }}>\n      <Form\n        ref={ref}\n        model={form}\n        onChange={(next) => setForm(next as typeof form)}\n        rules={rules}\n        labelCol={labelCol}\n        wrapperCol={wrapperCol}\n      >\n        <FormItem label=\"Name\" prop=\"fullname\">\n          <Input clearable />\n        </FormItem>\n        <FormItem label=\"ID Card Number\" prop=\"IDnumber\">\n          <Input placeholder=\"Optional\" />\n        </FormItem>\n        <FormItem label=\"Password\" prop=\"password\">\n          <Input type=\"password\" placeholder=\"Please input your password\" />\n        </FormItem>\n        <FormItem label=\"Confirm Password\" prop=\"confirm_password\">\n          <Input type=\"password\" placeholder=\"Please confirm your password\" />\n        </FormItem>\n        <FormItem wrapperCol={{ offset: 5 }}>\n          <Button\n            type=\"primary\"\n            onClick={() =>\n              ref.current?.validate().then(({ valid }) =>\n                message[valid ? \"success\" : \"error\"](valid ? \"success\" : \"failed\"),\n              )\n            }\n          >\n            Submit\n          </Button>\n          <Button style={{ marginLeft: 10 }} onClick={() => ref.current?.reset()}>\n            Reset\n          </Button>\n        </FormItem>\n      </Form>\n    </div>\n  );\n}"
        },
        {
          "id": "components/form/demo/dynamicvalid.tsx",
          "title": "动态校验规则",
          "source": "import { Trash2 } from \"kui-icons\";\nimport { useRef, useState } from \"react\";\nimport {\n  Button,\n  Input,\n  message,\n  Col,\n  Row,\n  Option,\n  Select,\n  Form,\n  FormItem,\n  type FormExpose,\n} from \"react-kui\";\nexport default function App() {\n  const ref = useRef<FormExpose>(null),\n    count = useRef(2);\n  const [form, setForm] = useState({\n    cname: \"\",\n    info: { gender: \"\", age: \"\" },\n    webs: [\n      { value: \"\", key: \"0\" },\n      { value: \"\", key: \"1\" },\n    ],\n  });\n  const required = (message: string) => ({ required: true, message });\n  return (\n    <Row>\n      <Col span={16}>\n        <Form\n          ref={ref}\n          model={form}\n          onChange={(next) => setForm(next as typeof form)}\n          labelCol={{ span: 5 }}\n          wrapperCol={{ span: 16 }}\n        >\n          <FormItem label=\"Name\" prop=\"cname\" rules={required(\"Please input your name\")}>\n            <Input clearable />\n          </FormItem>\n          <FormItem label=\"Gender\" prop=\"info.gender\" rules={required(\"Please select your gender\")}>\n            <Select clearable style={{ width: \"100%\" }}>\n              <Option value=\"1\" label=\"男\" />\n              <Option value=\"0\" label=\"女\" />\n            </Select>\n          </FormItem>\n          <FormItem label=\"Age\" prop=\"info.age\" rules={required(\"Please input your age\")}>\n            <Input clearable />\n          </FormItem>\n          {form.webs.map((item, i) => (\n            <FormItem\n              key={item.key}\n              label={`Web Site${item.key}`}\n              prop={`webs.${i}.value`}\n              rules={required(\"Web site is required\")}\n            >\n              <Input style={{ width: 230 }} />\n              {i > 0 && (\n                <Button\n                  icon={Trash2}\n                  onClick={() => setForm({ ...form, webs: form.webs.filter((_, n) => n !== i) })}\n                  style={{ fontSize: 25, margin: \"0 10px\" }}\n                />\n              )}\n            </FormItem>\n          ))}\n          <FormItem wrapperCol={{ offset: 5 }}>\n            <Button\n              type=\"primary\"\n              onClick={() =>\n                ref.current?.validate().then(({ valid }) =>\n                  message[valid ? \"success\" : \"error\"](valid ? \"success\" : \"failed\"),\n                )\n              }\n            >\n              Submit\n            </Button>\n            <Button\n              onClick={() => {\n                count.current += 1;\n                setForm({\n                  ...form,\n                  webs: [...form.webs, { value: \"\", key: String(count.current) }],\n                });\n              }}\n              style={{ margin: \"0 10px\" }}\n            >\n              Add\n            </Button>\n            <Button onClick={() => ref.current?.reset()}>Reset</Button>\n          </FormItem>\n        </Form>\n      </Col>\n      <Col span={8}>\n        <pre style={{ height: \"100%\", overflow: \"scroll\", lineHeight: 1.4 }}>\n          {JSON.stringify(form, null, 2)}\n        </pre>\n      </Col>\n    </Row>\n  );\n}"
        }
      ]
    },
    {
      "name": "Flex",
      "import": "import { Flex } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/flex",
      "props": [
        {
          "name": "align",
          "type": "FlexAlignType | undefined",
          "required": false,
          "enumValues": [
            "center",
            "end",
            "flex-end",
            "flex-start",
            "start",
            "baseline"
          ],
          "boolean": false,
          "descriptionZh": "交叉轴对齐方式",
          "descriptionEn": "Cross-axis alignment"
        },
        {
          "name": "justify",
          "type": "FlexJustifyType | undefined",
          "required": false,
          "enumValues": [
            "center",
            "space-around",
            "space-between",
            "space-evenly",
            "flex-end",
            "flex-start"
          ],
          "boolean": false,
          "descriptionZh": "主轴对齐方式",
          "descriptionEn": "Main-axis alignment"
        },
        {
          "name": "vertical",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否垂直显示",
          "descriptionEn": "Whether to display vertically"
        },
        {
          "name": "wrap",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否换行",
          "descriptionEn": "Whether to wrap"
        },
        {
          "name": "size",
          "type": "FlexSizeType | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "间距大小；数组格式为 `[水平, 垂直]`",
          "descriptionEn": "Gap size; array format is `[horizontal, vertical]`"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "参与 Flex 排列的子内容。",
          "descriptionEn": "Children arranged by the flex container."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/flex/demo/basic.tsx",
          "title": "基本布局",
          "source": "import { useState } from \"react\";\nimport { Flex, Radio, RadioGroup } from \"react-kui\";\nexport default function App() {\n  const [direction, setDirectionl] = useState(\"horizontal\");\n  return (\n    <Flex vertical size=\"medium\">\n      <RadioGroup value={direction} onChange={setDirectionl}>\n        <Radio value=\"horizontal\">horizontal</Radio>\n        <Radio value=\"vertical\">vertical</Radio>\n      </RadioGroup>\n      <Flex vertical={direction == \"vertical\"} style={{ width: \"100%\" }}>\n        {Array.from({ length: 4 }, (_, index) => (\n          <div\n            key={index}\n            style={{\n              backgroundColor: `var(--kui-color-bg-${index % 2 ? 4 : 3})`,\n              height: 40,\n              width: direction == \"vertical\" ? \"100%\" : \"25%\",\n            }}\n          />\n        ))}\n      </Flex>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/flex/demo/align.tsx",
          "title": "对齐方式",
          "source": "import { useState } from \"react\";\nimport {\n  Button,\n  Flex,\n  Segmented,\n  type FlexAlignType,\n  type FlexJustifyType,\n} from \"react-kui\";\nconst justifyOptions: FlexJustifyType[] = [\n  \"flex-start\",\n  \"center\",\n  \"flex-end\",\n  \"space-between\",\n  \"space-around\",\n  \"space-evenly\",\n];\nconst alignOptions: FlexAlignType[] = [\"flex-start\", \"center\", \"flex-end\"];\nexport default function App() {\n  const [justify, setJustify] = useState<FlexJustifyType>(\"flex-start\");\n  const [align, setAlign] = useState<FlexAlignType>(\"flex-start\");\n  return (\n    <Flex vertical size=\"small\" align=\"start\">\n      <span>Justify</span>\n      <Segmented value={justify} options={justifyOptions.map((value) => ({ label: value, value }))} onChange={(value) => setJustify(value as FlexJustifyType)} />\n      <span>Align</span>\n      <Segmented value={align} options={alignOptions.map((value) => ({ label: value, value }))} onChange={(value) => setAlign(value as FlexAlignType)} />\n      <Flex\n        align={align}\n        justify={justify}\n        style={{\n          width: \"100%\",\n          height: 120,\n          border: \"1px solid var(--kui-color-bg-2)\",\n          borderRadius: 5,\n        }}\n      >\n        {Array.from({ length: 3 }, (_, index) => (\n          <Button key={index}>Button</Button>\n        ))}\n      </Flex>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/flex/demo/size.tsx",
          "title": "间距大小",
          "source": "import { useState } from \"react\";\nimport { Button, Checkbox, Flex, Radio, RadioGroup, Slider, type SizeType } from \"react-kui\";\n\nexport default function App() {\n  const [flexSize, setFlexSize] = useState<SizeType | number>(\"small\");\n  const [custom, setCustom] = useState(false);\n  const [customSize, setCustomSize] = useState(8);\n  return (\n    <Flex vertical size=\"medium\">\n      <RadioGroup\n        value={flexSize}\n        onChange={(value) => {\n          if (value === \"small\" || value === \"medium\" || value === \"large\") setFlexSize(value);\n        }}\n      >\n        {([\"small\", \"medium\", \"large\"] as SizeType[]).map((item) => (\n          <Radio key={item} value={item} label={item[0].toUpperCase() + item.slice(1)} />\n        ))}\n      </RadioGroup>\n      <Checkbox checked={custom} label=\"customize\" onChange={({ checked }) => setCustom(checked)} />\n      {custom && (\n        <Slider\n          value={customSize}\n          max={50}\n          step={1}\n          onChange={(value) => {\n            if (typeof value === \"number\") setCustomSize(value);\n          }}\n        />\n      )}\n      <Flex size={custom ? customSize : flexSize}>\n        <Button type=\"primary\">Primary</Button>\n        <Button>Default</Button>\n        <Button type=\"text\">Text</Button>\n        <Button type=\"link\">Link</Button>\n      </Flex>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/flex/demo/wrap.tsx",
          "title": "设置换行",
          "source": "import { useState } from \"react\";\nimport { Button, Flex, Slider } from \"react-kui\";\n\nexport default function App() {\n  const [x, setX] = useState(12);\n  const [y, setY] = useState(15);\n  return (\n    <Flex size=\"medium\" vertical align=\"flex-start\" style={{ maxWidth: 300 }}>\n      <Slider value={x} min={0} max={100} step={1} onChange={(value) => setX(value as number)} />\n      <Slider value={y} min={0} max={100} step={1} onChange={(value) => setY(value as number)} />\n      <Flex size={[x, y]} wrap>\n        {Array.from({ length: 10 }, (_, index) => (\n          <Button size=\"small\" key={index}>\n            Wrap\n          </Button>\n        ))}\n      </Flex>\n    </Flex>\n  );\n}"
        }
      ]
    },
    {
      "name": "FeatureCard",
      "import": "import { FeatureCard } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/feature-card",
      "props": [
        {
          "name": "icon",
          "type": "ReactNode | IconType[]",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标或自定义图标节点",
          "descriptionEn": "Icon or custom icon node"
        },
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题",
          "descriptionEn": "Title"
        },
        {
          "name": "desc",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "描述",
          "descriptionEn": "Description"
        },
        {
          "name": "extra",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "右侧扩展区域",
          "descriptionEn": "Trailing content"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示边框",
          "descriptionEn": "Whether to show a border"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"fill\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "卡片形状",
          "descriptionEn": "Card shape"
        },
        {
          "name": "size",
          "type": "\"small\" | \"medium\" | \"large\" | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "卡片尺寸",
          "descriptionEn": "Card size"
        },
        {
          "name": "direction",
          "type": "\"horizontal\" | \"vertical\" | undefined",
          "required": false,
          "enumValues": [
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "内容排列方向",
          "descriptionEn": "Content direction"
        },
        {
          "name": "clickable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否可交互；启用键盘及按钮语义",
          "descriptionEn": "Enable interaction, keyboard control, and button semantics"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用交互",
          "descriptionEn": "Disable interaction"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标强调色",
          "descriptionEn": "Icon accent color"
        },
        {
          "name": "iconBackground",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标容器背景；未设置时由 `color` 淡化生成，`color` 无法解析（如 `currentColor`、CSS 变量）时改用主题主色淡化",
          "descriptionEn": "Icon container background; a wash of `color`, or of the theme primary when `color` cannot be parsed (e.g. `currentColor`, a CSS variable)"
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "功能卡片正文中的附加自定义内容。",
          "descriptionEn": "Additional custom content in the feature-card body."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "icon",
        "title",
        "desc",
        "extra",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/feature-card/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { Palette, Zap } from \"kui-icons\";\nimport { FeatureCard, Grid } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Grid cols={2} xGap={16}>\n      <FeatureCard\n        icon={Zap}\n        title=\"开箱即用\"\n        desc=\"简洁的 API 与完善的 TypeScript 类型，让开发过程更高效。\"\n      />\n      <FeatureCard\n        icon={Palette}\n        title=\"灵活主题\"\n        desc=\"通过设计变量快速调整品牌色彩与组件视觉风格。\"\n      />\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/feature-card/demo/bordered.tsx",
          "title": "边框",
          "source": "import { Code } from \"kui-icons\";\nimport { FeatureCard, Grid } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Grid cols={2} xGap={16}>\n      <FeatureCard bordered icon={Code} title=\"显示边框\" desc=\"适合放置在普通页面背景中。\" />\n      <FeatureCard icon={Code} title=\"隐藏边框\" desc=\"默认不显示边框，适合层次化容器。\" />\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/feature-card/demo/size.tsx",
          "title": "尺寸",
          "source": "import { Zap } from \"kui-icons\";\nimport { FeatureCard, Space } from \"react-kui\";\n\nconst sizes = [\"small\", \"medium\", \"large\"] as const;\n\nexport default function App() {\n  return (\n    <Space vertical block size={12}>\n      {sizes.map((size) => (\n        <FeatureCard\n          key={size}\n          icon={Zap}\n          size={size}\n          title={`${size} card`}\n          desc=\"Icon, spacing and typography scale together.\"\n          theme=\"outline\"\n        />\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/feature-card/demo/interactive.tsx",
          "title": "功能入口",
          "source": "import { FolderKanban, ShoppingCart, Users, Wallet } from \"kui-icons\";\nimport { FeatureCard, Grid, GridItem, message } from \"react-kui\";\n\nconst entries = [\n  { title: \"项目管理\", icon: FolderKanban, color: \"#3a95ff\" },\n  { title: \"订单管理\", icon: ShoppingCart, color: \"#7b61ff\" },\n  { title: \"客户管理\", icon: Users, color: \"#22a06b\" },\n  { title: \"财务报表\", icon: Wallet, color: \"#f59e0b\" },\n];\n\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 2, md: 4 }} xGap={12} yGap={12}>\n      {entries.map((item) => (\n        <GridItem key={item.title}>\n          <FeatureCard\n            icon={item.icon}\n            title={item.title}\n            color={item.color}\n            size=\"small\"\n            direction=\"vertical\"\n            theme=\"outline\"\n            clickable\n            onClick={() => message.info(item.title)}\n          />\n        </GridItem>\n      ))}\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/feature-card/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Zap } from \"kui-icons\";\nimport { FeatureCard, Grid, type SurfaceThemeType } from \"react-kui\";\n\n// The feature card paints the same five tiers as the plain card and starts on `fill`; `solid` puts the icon\n// plate and the title on the primary, which is the one tier that moves the text, and `plain` drops the box\n// around the content entirely. Kept to `direction=\"vertical\"` and one line of copy so the five read as a row\n// of the same card rather than five different layouts.\nconst tiers: SurfaceThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <Grid cols={5} xGap={12} yGap={12}>\n      {tiers.map((tier) => (\n        <FeatureCard\n          key={tier}\n          icon={Zap}\n          title={`theme: ${tier}`}\n          direction=\"vertical\"\n          size=\"small\"\n          theme={tier}\n        />\n      ))}\n    </Grid>\n  );\n}"
        }
      ]
    },
    {
      "name": "FlameWrap",
      "import": "import { FlameWrap } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/flame-wrap",
      "props": [
        {
          "name": "children",
          "type": "ReactNode",
          "required": true,
          "boolean": false,
          "descriptionZh": "被火焰包裹的内容",
          "descriptionEn": "Content wrapped by the flame"
        },
        {
          "name": "className",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "外层容器类名",
          "descriptionEn": "Wrapper class name"
        },
        {
          "name": "style",
          "type": "CSSProperties | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "外层容器样式",
          "descriptionEn": "Wrapper styles"
        },
        {
          "name": "color",
          "type": "[number, number, number] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火焰 RGB 颜色，每项范围 0–1",
          "descriptionEn": "Flame RGB values in the 0–1 range"
        },
        {
          "name": "intensity",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火焰整体亮度，建议范围 0–3",
          "descriptionEn": "Overall brightness, recommended range 0–3"
        },
        {
          "name": "height",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "顶部火焰延伸高度，单位 px",
          "descriptionEn": "Flame reach above the top edge in px"
        },
        {
          "name": "spread",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "两侧和底部光晕范围，单位 px",
          "descriptionEn": "Side and bottom glow reach in px"
        },
        {
          "name": "radius",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "燃烧轮廓圆角，单位 px",
          "descriptionEn": "Burning outline radius in px"
        },
        {
          "name": "speed",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "整体动画速度倍率",
          "descriptionEn": "Overall animation speed multiplier"
        },
        {
          "name": "scale",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火焰细节，范围 0–1",
          "descriptionEn": "Flame detail in the 0–1 range"
        },
        {
          "name": "turbulence",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "湍流振幅，范围 0–1",
          "descriptionEn": "Turbulence amplitude in the 0–1 range"
        },
        {
          "name": "turbulenceScale",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "湍流频率倍率",
          "descriptionEn": "Turbulence frequency multiplier"
        },
        {
          "name": "turbulenceReach",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "热浪影响边缘的范围，单位 px",
          "descriptionEn": "Heat distortion reach from edges in px"
        },
        {
          "name": "sparks",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火星亮度，`0` 表示关闭",
          "descriptionEn": "Spark brightness; `0` disables sparks"
        },
        {
          "name": "sparkSize",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火星大小倍率",
          "descriptionEn": "Spark size multiplier"
        },
        {
          "name": "sparkDensity",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火星密度倍率",
          "descriptionEn": "Spark density multiplier"
        },
        {
          "name": "sparkSpeed",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火星上升与闪烁速度",
          "descriptionEn": "Spark rise and flicker speed"
        },
        {
          "name": "rim",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "贴近边缘的熔融光强度",
          "descriptionEn": "Molten rim strength"
        },
        {
          "name": "melt",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "火焰侵入内容轮廓的距离，单位 px",
          "descriptionEn": "Distance flames eat into the outline in px"
        },
        {
          "name": "distortion",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "边缘热浪折射强度，单位 px",
          "descriptionEn": "Edge heat-refraction strength in px"
        },
        {
          "name": "smoke",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "烟雾量，建议范围 0–2",
          "descriptionEn": "Smoke amount, recommended range 0–2"
        },
        {
          "name": "ember",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "燃烧边缘余烬亮度",
          "descriptionEn": "Burnt-edge ember brightness"
        },
        {
          "name": "scorch",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "内容边缘焦黑强度",
          "descriptionEn": "Content-edge charring strength"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/flame-wrap/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { Button, Card, FlameWrap, Space, Tag } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <div style={{ padding: \"150px 60px 48px\" }}>\n      <FlameWrap\n        style={{\n          borderRadius: 18,\n        }}\n      >\n        <Card style={{ padding: 20 }}>\n          <Tag color=\"blue\">WebGL Effect</Tag>\n          <h3 style={{ margin: \"18px 0 8px\" }}>Flame wrapped content</h3>\n          <p style={{ margin: \"0 0 24px\", color: \"var(--kui-color-text-secondary, var(--kui-color-text-description))\" }}>\n            火焰沿内容轮廓燃烧，内部仍然是真实且可交互的 DOM。\n          </p>\n          <Space>\n            <Button type=\"primary\">Explore</Button>\n            <Button>Details</Button>\n          </Space>\n        </Card>\n      </FlameWrap>\n    </div>\n  );\n}"
        },
        {
          "id": "components/flame-wrap/demo/custom.tsx",
          "title": "自定义火焰",
          "source": "import { Card, FlameWrap } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <div style={{ padding: \"130px 60px 48px\" }}>\n      <FlameWrap\n        color={[1, 0.28, 0.08]}\n        intensity={0.85}\n        height={120}\n        speed={0.55}\n        sparks={2}\n        smoke={0.6}\n        radius={18}\n        style={{\n          minHeight: 180,\n          borderRadius: 18,\n          background: \"var(--kui-color-bg-component)\",\n        }}\n      >\n        <Card style={{ padding: 32 }}>\n          <h3 style={{ margin: \"0 0 8px\" }}>Warm flame</h3>\n          <p style={{ margin: 0, color: \"var(--kui-color-text-secondary, var(--kui-color-text-description))\" }}>\n            可以调整颜色、火焰高度、火星、烟雾和燃烧速度。\n          </p>\n        </Card>\n      </FlameWrap>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "FeedbackPanel",
      "import": "import { FeedbackPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/feedback-panel",
      "props": [
        {
          "name": "kind",
          "type": "FeedbackPanelKind | undefined",
          "required": false,
          "enumValues": [
            "positive",
            "negative",
            "caution",
            "neutral"
          ],
          "boolean": false,
          "defaultExpression": "\"neutral\"",
          "descriptionZh": "状态类型",
          "descriptionEn": "Feedback kind"
        },
        {
          "name": "heading",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题",
          "descriptionEn": "Heading"
        },
        {
          "name": "description",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "描述",
          "descriptionEn": "Description"
        },
        {
          "name": "symbol",
          "type": "ReactNode | IconType[]",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标或内容",
          "descriptionEn": "Custom icon or content"
        },
        {
          "name": "compact",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "紧凑模式",
          "descriptionEn": "Compact layout"
        },
        {
          "name": "actions",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "操作区域",
          "descriptionEn": "Action content"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"outline\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "heading",
        "description",
        "symbol",
        "actions"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/feedback-panel/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { Button, FeedbackPanel, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <FeedbackPanel\n      kind=\"positive\"\n      heading=\"Workspace created.\"\n      description=\"Member permissions and default views have been configured.\"\n      actions={\n        <Space>\n          <Button type=\"primary\">Open workspace</Button>\n          <Button>View Settings</Button>\n        </Space>\n      }\n    />\n  );\n}"
        },
        {
          "id": "components/feedback-panel/demo/kinds.tsx",
          "title": "状态类型",
          "source": "import { FeedbackPanel, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space vertical block size=\"large\">\n      <FeedbackPanel\n        compact\n        kind=\"positive\"\n        heading=\"Sync Complete\"\n        description=\"12 records updated.\"\n      />\n      <FeedbackPanel\n        compact\n        kind=\"neutral\"\n        heading=\"Awaiting Confirmation\"\n        description=\"The change will only be implemented upon confirmation.\"\n      />\n      <FeedbackPanel\n        compact\n        kind=\"caution\"\n        heading=\"Partial Configuration Missing\"\n        description=\"Please add the notification recipients.\"\n      />\n      <FeedbackPanel\n        compact\n        kind=\"negative\"\n        heading=\"Connection Failed\"\n        description=\"Unable to access the target service. Please try again later.\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/feedback-panel/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Button, FeedbackPanel, Space, type SurfaceThemeType } from \"react-kui\";\n\n// A feedback panel paints all five tiers and starts on `outline`. The tier only decides how much of the panel\n// shows: the four-pixel status stripe on the left and the `kind` colours stay put in every tier, while `solid`\n// plates the panel itself on the primary and moves the heading and the actions onto the light ink of the plate.\nconst tiers: SurfaceThemeType[] = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <div style={{ display: \"grid\", gap: 16 }}>\n      {tiers.map((tier) => (\n        <FeedbackPanel\n          key={tier}\n          theme={tier}\n          kind=\"positive\"\n          heading={`theme: ${tier}`}\n          description=\"状态色带和图标不受档位影响，只有面板自己铺多少。\"\n          actions={\n            <Space>\n              <Button type=\"primary\">继续</Button>\n              <Button>查看设置</Button>\n            </Space>\n          }\n        />\n      ))}\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Grid",
      "import": "import { Grid } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/grid",
      "props": [
        {
          "name": "cols",
          "type": "ResponsiveValue<GridDimension> | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "24",
          "descriptionZh": "设置网格的列数。支持数字（平分）或字符串（如 1fr 2fr）",
          "descriptionEn": "Set the number of grid columns. Supports numbers (equal division) or strings (e.g., 1fr 2fr)"
        },
        {
          "name": "rows",
          "type": "ResponsiveValue<GridDimension> | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"auto\"",
          "descriptionZh": "设置网格的行数或高度。默认为 auto",
          "descriptionEn": "Set the number of grid rows or height. Default is auto"
        },
        {
          "name": "autoRows",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"auto\"",
          "descriptionZh": "隐式网格行高。在 Bento 布局或瀑布流中用于设定基准高度。",
          "descriptionEn": "Implicit grid row height. Used in Bento layout or waterfall flow to set the base height."
        },
        {
          "name": "xGap",
          "type": "ResponsiveValue<GridDimension> | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "水格间距（水平方向）。数字类型会自动补充 px 单位。",
          "descriptionEn": "Grid spacing (horizontal direction). Numeric type will automatically add px unit."
        },
        {
          "name": "yGap",
          "type": "ResponsiveValue<GridDimension> | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "行间距（垂直方向）。数字类型会自动补充 px 单位。",
          "descriptionEn": "Row spacing (vertical direction). Numeric type will automatically add px unit."
        },
        {
          "name": "itemMinWidth",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自动填充模式。设置子项最小宽度，Grid 将根据容器宽度自动计算列数。",
          "descriptionEn": "Auto-fill mode. Set the minimum width of child items. Grid will automatically calculate the number of columns based on container width."
        },
        {
          "name": "align",
          "type": "Property.AlignItems | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "子项在网格单元格内的垂直对齐方式",
          "descriptionEn": "Vertical alignment of child items within grid cells"
        },
        {
          "name": "justify",
          "type": "Property.JustifyItems | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "子项在网格单元格内的水平对齐方式。",
          "descriptionEn": "Horizontal alignment of child items within grid cells."
        },
        {
          "name": "flow",
          "type": "Property.GridAutoFlow | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"row\"",
          "descriptionZh": "网格自动排列方式，对应 `grid-auto-flow`",
          "descriptionEn": "Grid auto-placement mode, maps to `grid-auto-flow`"
        },
        {
          "name": "debug",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "调试模式。开启后会显示红色透明背景列，方便开发者校对布局。",
          "descriptionEn": "Debug mode. When enabled, red transparent background columns are displayed to facilitate developer layout alignment."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [
        "GridItem"
      ],
      "examples": [
        {
          "id": "components/grid/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Grid, GridItem } from \"react-kui\";\nconst boxStyle = {\n  padding: 8,\n  fontSize: 12,\n  background: \"var(--kui-color-bg-3)\",\n};\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 2, md: 4 }} xGap={16} yGap={16}>\n      <GridItem span={{ xs: 2, md: 2 }}>\n        <div style={boxStyle}>Occupies 2 columns</div>\n      </GridItem>\n      <GridItem>\n        <div style={boxStyle}>Regular item</div>\n      </GridItem>\n      <GridItem suffix>\n        <div style={boxStyle}>Always at the end</div>\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/auto-fill-min-width.tsx",
          "title": "仪表盘卡片布局 (Auto-fill + Min-Width)",
          "source": "import { Grid, GridItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid itemMinWidth={256} xGap={16} yGap={16}>\n      {Array.from({ length: 7 }, (_, i) => (\n        <GridItem key={i} style={{ background: \"var(--kui-color-bg-3)\", height: 64 }}>\n          Card {i + 1} (Minimum 256px)\n        </GridItem>\n      ))}\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/breakpoint-fallback.tsx",
          "title": "复杂表单响应式 (Breakpoint Fallback)",
          "source": "import { Grid, GridItem, Input } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 1, md: 4, xl: 6 }} xGap={20} yGap={20}>\n      <GridItem span={{ xs: 1, md: 2, xl: 1 }}>\n        <Input placeholder=\"Project name\" />\n      </GridItem>\n      <GridItem span={{ xs: 1, md: 2 }}>\n        <Input placeholder=\"Person in charge\" />\n      </GridItem>\n      <GridItem span={{ md: 2 }} columnStart={{ md: 2 }}>\n        <Input placeholder=\"Remark\" />\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/fixed-rows-areas.tsx",
          "title": "圣杯布局/管理后台 (Fixed Rows & Areas)",
          "source": "import type { CSSProperties } from \"react\";\nimport { Grid, GridItem } from \"react-kui\";\n\nconst itemStyle: CSSProperties = {\n  display: \"flex\",\n  alignItems: \"center\",\n  justifyContent: \"center\",\n};\n\nexport default function App() {\n  return (\n    <Grid\n      cols={4}\n      rows=\"auto 1fr auto\"\n      style={{\n        height: 500,\n        border: \"1px solid var(--kui-color-border)\",\n        borderRadius: 12,\n        overflow: \"hidden\",\n      }}\n    >\n      <GridItem span={4} style={{ ...itemStyle, height: 50, background: \"var(--kui-color-bg-3)\" }}>\n        Header (100% Width)\n      </GridItem>\n      <GridItem span={1} rowSpan={1} style={{ ...itemStyle, background: \"var(--kui-color-bg-4)\" }}>\n        Menu\n      </GridItem>\n      <GridItem span={3} style={{ ...itemStyle, background: \"var(--kui-color-bg-2)\" }}>\n        Main Content (Auto Height)\n      </GridItem>\n      <GridItem span={4} style={{ ...itemStyle, height: 50, background: \"var(--kui-color-bg-3)\" }}>\n        Footer\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/suffix-display-none.tsx",
          "title": "响应式隐藏与强制排序 (Suffix & Display None)",
          "source": "import { Button, Grid, GridItem, Input, Option, Select } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 2, md: 6 }} xGap={8}>\n      <GridItem span={2}>\n        <Input placeholder=\"Search keywords...\" />\n      </GridItem>\n      <GridItem span={{ xs: 0, md: 2 }}>\n        <Select>\n          <Option value={1}>Filter</Option>\n        </Select>\n      </GridItem>\n      <GridItem suffix style={{ justifySelf: \"end\" }}>\n        <Button>Query</Button>\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/bento.tsx",
          "title": "图片画廊 / 瀑布流（Bento Grid 风格）",
          "source": "import type { CSSProperties } from \"react\";\nimport { Grid, GridItem } from \"react-kui\";\n\ninterface Feature {\n  id: number;\n  title: string;\n  desc: string;\n  span: { xs: number; md: number; lg: number };\n  rowSpan: number;\n  color: string;\n  textColor?: string;\n  border?: string;\n}\n\nconst features: Feature[] = [\n  {\n    id: 1,\n    title: \"自研芯片 M3 Max\",\n    desc: \"极致算力，从容应对专业级工作流。\",\n    span: { xs: 2, md: 3, lg: 4 },\n    rowSpan: 3,\n    color: \"var(--kui-color-bg-4)\",\n    textColor: \"#fff\",\n  },\n  {\n    id: 2,\n    title: \"超长续航\",\n    desc: \"长达 22 小时视频播放。\",\n    span: { xs: 1, md: 3, lg: 4 },\n    rowSpan: 2,\n    color: \"#f5f5f7\",\n  },\n  {\n    id: 3,\n    title: \"5G 超高速\",\n    desc: \"随时随地，畅享疾速。\",\n    span: { xs: 1, md: 3, lg: 2 },\n    rowSpan: 1,\n    color: \"#e8e8ed\",\n  },\n  {\n    id: 4,\n    title: \"Retina 显示屏\",\n    desc: \"绚丽色彩，纤毫毕现。\",\n    span: { xs: 2, md: 3, lg: 4 },\n    rowSpan: 2,\n    color: \"#fff\",\n    border: \"1px solid var(--kui-color-border)\",\n  },\n  {\n    id: 5,\n    title: \"隐私保护\",\n    desc: \"你的数据，由你掌控。\",\n    span: { xs: 1, md: 3, lg: 2 },\n    rowSpan: 2,\n    color: \"#f2f2f2\",\n  },\n  {\n    id: 6,\n    title: \"多设备协作\",\n    desc: \"无缝衔接，效率翻倍。\",\n    span: { xs: 1, md: 3, lg: 4 },\n    rowSpan: 1,\n    color: \"#fafafa\",\n  },\n];\n\nconst cardStyle: CSSProperties = {\n  height: \"100%\",\n  borderRadius: 24,\n  padding: 32,\n  boxSizing: \"border-box\",\n  display: \"flex\",\n  flexDirection: \"column\",\n  justifyContent: \"flex-end\",\n  transition: \"transform 0.2s ease-in-out\",\n  cursor: \"pointer\",\n};\n\nexport default function App() {\n  return (\n    <div style={{ padding: \"40px 20px\", maxWidth: \"100%\", margin: \"0 auto\" }}>\n      <h1\n        style={{\n          marginBottom: 32,\n          fontWeight: 600,\n          fontSize: \"2rem\",\n          color: \"var(--kui-color-text)\",\n        }}\n      >\n        技术规格矩阵\n      </h1>\n\n      <Grid\n        cols={{ xs: 2, md: 6, lg: 10 }}\n        xGap={20}\n        yGap={20}\n        autoRows=\"120px\"\n        flow=\"row dense\"\n      >\n        {features.map((item) => (\n          <GridItem key={item.id} span={item.span} rowSpan={item.rowSpan}>\n            <div\n              style={{\n                ...cardStyle,\n                backgroundColor: item.color,\n                color: item.textColor || \"#333\",\n                border: item.border || \"none\",\n              }}\n              onMouseEnter={(event) => (event.currentTarget.style.transform = \"scale(0.99)\")}\n              onMouseLeave={(event) => (event.currentTarget.style.transform = \"\")}\n            >\n              <div>\n                <h3 style={{ fontSize: \"1.5rem\", margin: \"0 0 8px 0\", fontWeight: 600 }}>\n                  {item.title}\n                </h3>\n                <p style={{ fontSize: \"1rem\", opacity: 0.7, margin: 0, lineHeight: 1.4 }}>\n                  {item.desc}\n                </p>\n              </div>\n            </div>\n          </GridItem>\n        ))}\n\n        <GridItem suffix span={{ xs: 2, md: 3, lg: 2 }}>\n          <div\n            style={{\n              background: \"var(--kui-color-primary)\",\n              color: \"#fff\",\n              borderRadius: 24,\n              height: \"100%\",\n              display: \"flex\",\n              alignItems: \"center\",\n              justifyContent: \"center\",\n              fontSize: \"1.1rem\",\n              fontWeight: 500,\n              padding: 32,\n              boxSizing: \"border-box\",\n              cursor: \"pointer\",\n            }}\n          >\n            <span>了解更多参数 →</span>\n          </div>\n        </GridItem>\n      </Grid>\n    </div>\n  );\n}"
        },
        {
          "id": "components/grid/demo/hero-section.tsx",
          "title": "Hero Section 叠加布局（Layering）",
          "source": "import { Grid, GridItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid cols={12} rows={8} style={{ height: 400, background: \"var(--kui-color-bg-5)\" }}>\n      <GridItem span={12} rowSpan={8} columnStart={1} rowStart={1}>\n        <div\n          style={{\n            width: \"100%\",\n            height: \"100%\",\n            background:\n              \"radial-gradient(circle at 75% 25%, var(--kui-color-primary), transparent 35%), linear-gradient(135deg, var(--kui-color-bg-3), var(--kui-color-bg-5))\",\n          }}\n        />\n      </GridItem>\n      <GridItem\n        span={{ xs: 10, md: 6 }}\n        rowSpan={4}\n        columnStart={{ xs: 2, md: 4 }}\n        rowStart={3}\n        style={{\n          background: \"var(--kui-color-bg-3)\",\n          zIndex: 1,\n          padding: 20,\n        }}\n      >\n        <h1>Commercial-grade advertising slogan</h1>\n        <p>Grid 布局让叠加效果变得简单，无需大量 absolute 定位。</p>\n      </GridItem>\n    </Grid>\n  );\n}"
        }
      ]
    },
    {
      "name": "GridItem",
      "import": "import { GridItem } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/grid",
      "props": [
        {
          "name": "span",
          "type": "ResponsiveValue<number> | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "1",
          "descriptionZh": "占据的列数。设为 0 时会在该断点下彻底隐藏（display: none）",
          "descriptionEn": "Number of columns occupied. A value of 0 hides the item at that breakpoint"
        },
        {
          "name": "rowSpan",
          "type": "ResponsiveValue<number> | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "1",
          "descriptionZh": "占据的行数。配合容器的 autoRows 可实现非对称布局",
          "descriptionEn": "Number of rows occupied"
        },
        {
          "name": "columnStart",
          "type": "ResponsiveValue<number> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显式指定起始列，支持响应式值",
          "descriptionEn": "Explicit starting column; supports responsive values"
        },
        {
          "name": "rowStart",
          "type": "ResponsiveValue<number> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显式指定起始行，支持响应式值",
          "descriptionEn": "Explicit starting row; supports responsive values"
        },
        {
          "name": "suffix",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "尾部固定。设为 true 时，该项将强制移动到当前行的末尾。",
          "descriptionEn": "Forces the item to the end of the current row"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Grid",
      "examples": [
        {
          "id": "components/grid/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Grid, GridItem } from \"react-kui\";\nconst boxStyle = {\n  padding: 8,\n  fontSize: 12,\n  background: \"var(--kui-color-bg-3)\",\n};\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 2, md: 4 }} xGap={16} yGap={16}>\n      <GridItem span={{ xs: 2, md: 2 }}>\n        <div style={boxStyle}>Occupies 2 columns</div>\n      </GridItem>\n      <GridItem>\n        <div style={boxStyle}>Regular item</div>\n      </GridItem>\n      <GridItem suffix>\n        <div style={boxStyle}>Always at the end</div>\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/auto-fill-min-width.tsx",
          "title": "仪表盘卡片布局 (Auto-fill + Min-Width)",
          "source": "import { Grid, GridItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid itemMinWidth={256} xGap={16} yGap={16}>\n      {Array.from({ length: 7 }, (_, i) => (\n        <GridItem key={i} style={{ background: \"var(--kui-color-bg-3)\", height: 64 }}>\n          Card {i + 1} (Minimum 256px)\n        </GridItem>\n      ))}\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/breakpoint-fallback.tsx",
          "title": "复杂表单响应式 (Breakpoint Fallback)",
          "source": "import { Grid, GridItem, Input } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 1, md: 4, xl: 6 }} xGap={20} yGap={20}>\n      <GridItem span={{ xs: 1, md: 2, xl: 1 }}>\n        <Input placeholder=\"Project name\" />\n      </GridItem>\n      <GridItem span={{ xs: 1, md: 2 }}>\n        <Input placeholder=\"Person in charge\" />\n      </GridItem>\n      <GridItem span={{ md: 2 }} columnStart={{ md: 2 }}>\n        <Input placeholder=\"Remark\" />\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/fixed-rows-areas.tsx",
          "title": "圣杯布局/管理后台 (Fixed Rows & Areas)",
          "source": "import type { CSSProperties } from \"react\";\nimport { Grid, GridItem } from \"react-kui\";\n\nconst itemStyle: CSSProperties = {\n  display: \"flex\",\n  alignItems: \"center\",\n  justifyContent: \"center\",\n};\n\nexport default function App() {\n  return (\n    <Grid\n      cols={4}\n      rows=\"auto 1fr auto\"\n      style={{\n        height: 500,\n        border: \"1px solid var(--kui-color-border)\",\n        borderRadius: 12,\n        overflow: \"hidden\",\n      }}\n    >\n      <GridItem span={4} style={{ ...itemStyle, height: 50, background: \"var(--kui-color-bg-3)\" }}>\n        Header (100% Width)\n      </GridItem>\n      <GridItem span={1} rowSpan={1} style={{ ...itemStyle, background: \"var(--kui-color-bg-4)\" }}>\n        Menu\n      </GridItem>\n      <GridItem span={3} style={{ ...itemStyle, background: \"var(--kui-color-bg-2)\" }}>\n        Main Content (Auto Height)\n      </GridItem>\n      <GridItem span={4} style={{ ...itemStyle, height: 50, background: \"var(--kui-color-bg-3)\" }}>\n        Footer\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/suffix-display-none.tsx",
          "title": "响应式隐藏与强制排序 (Suffix & Display None)",
          "source": "import { Button, Grid, GridItem, Input, Option, Select } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 2, md: 6 }} xGap={8}>\n      <GridItem span={2}>\n        <Input placeholder=\"Search keywords...\" />\n      </GridItem>\n      <GridItem span={{ xs: 0, md: 2 }}>\n        <Select>\n          <Option value={1}>Filter</Option>\n        </Select>\n      </GridItem>\n      <GridItem suffix style={{ justifySelf: \"end\" }}>\n        <Button>Query</Button>\n      </GridItem>\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/grid/demo/bento.tsx",
          "title": "图片画廊 / 瀑布流（Bento Grid 风格）",
          "source": "import type { CSSProperties } from \"react\";\nimport { Grid, GridItem } from \"react-kui\";\n\ninterface Feature {\n  id: number;\n  title: string;\n  desc: string;\n  span: { xs: number; md: number; lg: number };\n  rowSpan: number;\n  color: string;\n  textColor?: string;\n  border?: string;\n}\n\nconst features: Feature[] = [\n  {\n    id: 1,\n    title: \"自研芯片 M3 Max\",\n    desc: \"极致算力，从容应对专业级工作流。\",\n    span: { xs: 2, md: 3, lg: 4 },\n    rowSpan: 3,\n    color: \"var(--kui-color-bg-4)\",\n    textColor: \"#fff\",\n  },\n  {\n    id: 2,\n    title: \"超长续航\",\n    desc: \"长达 22 小时视频播放。\",\n    span: { xs: 1, md: 3, lg: 4 },\n    rowSpan: 2,\n    color: \"#f5f5f7\",\n  },\n  {\n    id: 3,\n    title: \"5G 超高速\",\n    desc: \"随时随地，畅享疾速。\",\n    span: { xs: 1, md: 3, lg: 2 },\n    rowSpan: 1,\n    color: \"#e8e8ed\",\n  },\n  {\n    id: 4,\n    title: \"Retina 显示屏\",\n    desc: \"绚丽色彩，纤毫毕现。\",\n    span: { xs: 2, md: 3, lg: 4 },\n    rowSpan: 2,\n    color: \"#fff\",\n    border: \"1px solid var(--kui-color-border)\",\n  },\n  {\n    id: 5,\n    title: \"隐私保护\",\n    desc: \"你的数据，由你掌控。\",\n    span: { xs: 1, md: 3, lg: 2 },\n    rowSpan: 2,\n    color: \"#f2f2f2\",\n  },\n  {\n    id: 6,\n    title: \"多设备协作\",\n    desc: \"无缝衔接，效率翻倍。\",\n    span: { xs: 1, md: 3, lg: 4 },\n    rowSpan: 1,\n    color: \"#fafafa\",\n  },\n];\n\nconst cardStyle: CSSProperties = {\n  height: \"100%\",\n  borderRadius: 24,\n  padding: 32,\n  boxSizing: \"border-box\",\n  display: \"flex\",\n  flexDirection: \"column\",\n  justifyContent: \"flex-end\",\n  transition: \"transform 0.2s ease-in-out\",\n  cursor: \"pointer\",\n};\n\nexport default function App() {\n  return (\n    <div style={{ padding: \"40px 20px\", maxWidth: \"100%\", margin: \"0 auto\" }}>\n      <h1\n        style={{\n          marginBottom: 32,\n          fontWeight: 600,\n          fontSize: \"2rem\",\n          color: \"var(--kui-color-text)\",\n        }}\n      >\n        技术规格矩阵\n      </h1>\n\n      <Grid\n        cols={{ xs: 2, md: 6, lg: 10 }}\n        xGap={20}\n        yGap={20}\n        autoRows=\"120px\"\n        flow=\"row dense\"\n      >\n        {features.map((item) => (\n          <GridItem key={item.id} span={item.span} rowSpan={item.rowSpan}>\n            <div\n              style={{\n                ...cardStyle,\n                backgroundColor: item.color,\n                color: item.textColor || \"#333\",\n                border: item.border || \"none\",\n              }}\n              onMouseEnter={(event) => (event.currentTarget.style.transform = \"scale(0.99)\")}\n              onMouseLeave={(event) => (event.currentTarget.style.transform = \"\")}\n            >\n              <div>\n                <h3 style={{ fontSize: \"1.5rem\", margin: \"0 0 8px 0\", fontWeight: 600 }}>\n                  {item.title}\n                </h3>\n                <p style={{ fontSize: \"1rem\", opacity: 0.7, margin: 0, lineHeight: 1.4 }}>\n                  {item.desc}\n                </p>\n              </div>\n            </div>\n          </GridItem>\n        ))}\n\n        <GridItem suffix span={{ xs: 2, md: 3, lg: 2 }}>\n          <div\n            style={{\n              background: \"var(--kui-color-primary)\",\n              color: \"#fff\",\n              borderRadius: 24,\n              height: \"100%\",\n              display: \"flex\",\n              alignItems: \"center\",\n              justifyContent: \"center\",\n              fontSize: \"1.1rem\",\n              fontWeight: 500,\n              padding: 32,\n              boxSizing: \"border-box\",\n              cursor: \"pointer\",\n            }}\n          >\n            <span>了解更多参数 →</span>\n          </div>\n        </GridItem>\n      </Grid>\n    </div>\n  );\n}"
        },
        {
          "id": "components/grid/demo/hero-section.tsx",
          "title": "Hero Section 叠加布局（Layering）",
          "source": "import { Grid, GridItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <Grid cols={12} rows={8} style={{ height: 400, background: \"var(--kui-color-bg-5)\" }}>\n      <GridItem span={12} rowSpan={8} columnStart={1} rowStart={1}>\n        <div\n          style={{\n            width: \"100%\",\n            height: \"100%\",\n            background:\n              \"radial-gradient(circle at 75% 25%, var(--kui-color-primary), transparent 35%), linear-gradient(135deg, var(--kui-color-bg-3), var(--kui-color-bg-5))\",\n          }}\n        />\n      </GridItem>\n      <GridItem\n        span={{ xs: 10, md: 6 }}\n        rowSpan={4}\n        columnStart={{ xs: 2, md: 4 }}\n        rowStart={3}\n        style={{\n          background: \"var(--kui-color-bg-3)\",\n          zIndex: 1,\n          padding: 20,\n        }}\n      >\n        <h1>Commercial-grade advertising slogan</h1>\n        <p>Grid 布局让叠加效果变得简单，无需大量 absolute 定位。</p>\n      </GridItem>\n    </Grid>\n  );\n}"
        }
      ]
    },
    {
      "name": "ImageGroup",
      "import": "import { ImageGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/image",
      "props": [
        {
          "name": "data",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片数据",
          "descriptionEn": "Image data"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/image/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Space, KImage } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap vertical>\n      <code>Image</code>\n      <KImage width={120} height={120} src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\" />\n      <code>Media</code>\n      <KImage\n        width={120}\n        height={120}\n        type=\"media\"\n        src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n        origin=\"https://cdn.chuchur.com/upload/demo/test.mp4\"\n      />\n      <code>Loading large image</code>\n      <KImage\n        width={120}\n        height={120}\n        src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n        origin=\"https://cdn.chuchur.com/upload/demo/test.jpg\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/errors.tsx",
          "title": "容错处理",
          "source": "import { useState } from \"react\";\nimport { Button, Space, KImage } from \"react-kui\";\nexport default function App() {\n  const [src, setSrc] = useState(\"https://cdn.chuchur.com/upload/demo/test_300.jpg\");\n  return (\n    <Space vertical>\n      <KImage\n        width={120}\n        src=\"https://react.k-ui.cn/error.jpg\"\n        placeholder=\"https://cdn.chuchur.com/img/thumb.png\"\n      />\n      <KImage width={120} height={120} src=\"https://react.k-ui.cn/error.jpg\" />\n      <KImage width={120} height={120} src={src} />\n      <Button onClick={() => setSrc(\"https://react.k-ui.cn/error.jpg\")}>Load origin</Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/group.tsx",
          "title": "照片墙",
          "source": "import { Space, ImageGroup, KImage } from \"react-kui\";\nconst data = [\n  \"https://cdn.chuchur.com/upload/cat/cat1.jpg\",\n  \"https://cdn.chuchur.com/upload/cat/cat2.webp\",\n  \"https://cdn.chuchur.com/upload/cat/cat3.webp\",\n  \"https://cdn.chuchur.com/upload/cat/cat4.jpg\",\n  \"https://cdn.chuchur.com/upload/cat/cat5---.jpg\",\n];\nexport default function App() {\n  return (\n    <Space vertical>\n      <ImageGroup>\n        {data.map((src) => (\n          <KImage width={80} height={80} key={src} src={src} />\n        ))}\n      </ImageGroup>\n      <code>Use group data</code>\n      <ImageGroup data={data}>\n        <KImage width={80} height={80} src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\" />\n      </ImageGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/extra.tsx",
          "title": "扩展",
          "source": "import { Heart, Star } from \"kui-icons\";\nimport { useRef } from \"react\";\nimport { Icon, message, Space, KImage, type ImageRef } from \"react-kui\";\nexport default function App() {\n  const ref = useRef<ImageRef>(null),\n    toggle = () => ref.current?.togglePanel();\n  return (\n    <Space vertical>\n      <KImage\n        width={120}\n        height={120}\n        src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n        onClose={() => message.info(\"close\")}\n        ref={ref}\n        tools={\n          <>\n            <Icon type={Heart} color=\"#3a95ff\" onClick={toggle} />\n            <Icon type={Star} color=\"#3a95ff\" onClick={toggle} />\n          </>\n        }\n        panel={<div>Some thing here.</div>}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/appearance.tsx",
          "title": "外观",
          "source": "import { KImage, Space, type SurfaceThemeType } from \"react-kui\";\n\n// An image is a frame around a picture, so the tier lands on the frame: `fill` gives it a plate, `outline` and\n// `dashed` put a solid or dashed edge around it, `solid` plates the frame on the primary, and `plain` — the\n// image's own look — leaves the picture alone. Listed from `plain` because that is what an image does when\n// nobody tells it otherwise.\nconst tiers: SurfaceThemeType[] = [\"plain\", \"fill\", \"outline\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <Space wrap size={16}>\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 8, justifyItems: \"center\" }}>\n          <KImage\n            width={104}\n            height={104}\n            theme={tier}\n            src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n          />\n          <code>theme: {tier}</code>\n        </div>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "KImage",
      "import": "import { KImage } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/image",
      "props": [
        {
          "name": "alt",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片替代文本",
          "descriptionEn": "Alternative text for the image"
        },
        {
          "name": "src",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片默认展示的地址",
          "descriptionEn": "The default address of the image to display"
        },
        {
          "name": "type",
          "type": "ImageType | undefined",
          "required": false,
          "enumValues": [
            "img",
            "media"
          ],
          "boolean": false,
          "descriptionZh": "Preview 内容类型",
          "descriptionEn": "Preview content type"
        },
        {
          "name": "origin",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击图片展示的大图",
          "descriptionEn": "The large image displayed when clicking the image"
        },
        {
          "name": "height",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件的高度",
          "descriptionEn": "The height of the component"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件的宽度",
          "descriptionEn": "The width of the component"
        },
        {
          "name": "placeholder",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片加载失败时展示的占位符",
          "descriptionEn": "The placeholder displayed when the image fails to load"
        },
        {
          "name": "data",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "预览图片列表",
          "descriptionEn": "Preview image list"
        },
        {
          "name": "imgStyle",
          "type": "CSSProperties | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片的 style",
          "descriptionEn": "The style of the image"
        },
        {
          "name": "showPanel",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "默认是否展示扩展面板",
          "descriptionEn": "Whether to display the extension panel by default"
        },
        {
          "name": "tools",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义工具栏按钮",
          "descriptionEn": "Custom toolbar buttons"
        },
        {
          "name": "panel",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义扩展面板",
          "descriptionEn": "Custom extension panel"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭触发事件",
          "descriptionEn": "Close trigger event"
        },
        {
          "name": "onSwitch",
          "type": "((index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "多图切换触发事件",
          "descriptionEn": "Multi-image switch callback"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"plain\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭触发事件",
          "descriptionEn": "Close trigger event"
        },
        {
          "name": "onSwitch",
          "type": "((index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "多图切换触发事件",
          "descriptionEn": "Multi-image switch callback"
        }
      ],
      "renderProps": [
        "tools",
        "panel"
      ],
      "behavior": {
        "rules": [
          "The public React export is KImage, not the Vue Image component name."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/image/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Space, KImage } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap vertical>\n      <code>Image</code>\n      <KImage width={120} height={120} src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\" />\n      <code>Media</code>\n      <KImage\n        width={120}\n        height={120}\n        type=\"media\"\n        src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n        origin=\"https://cdn.chuchur.com/upload/demo/test.mp4\"\n      />\n      <code>Loading large image</code>\n      <KImage\n        width={120}\n        height={120}\n        src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n        origin=\"https://cdn.chuchur.com/upload/demo/test.jpg\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/errors.tsx",
          "title": "容错处理",
          "source": "import { useState } from \"react\";\nimport { Button, Space, KImage } from \"react-kui\";\nexport default function App() {\n  const [src, setSrc] = useState(\"https://cdn.chuchur.com/upload/demo/test_300.jpg\");\n  return (\n    <Space vertical>\n      <KImage\n        width={120}\n        src=\"https://react.k-ui.cn/error.jpg\"\n        placeholder=\"https://cdn.chuchur.com/img/thumb.png\"\n      />\n      <KImage width={120} height={120} src=\"https://react.k-ui.cn/error.jpg\" />\n      <KImage width={120} height={120} src={src} />\n      <Button onClick={() => setSrc(\"https://react.k-ui.cn/error.jpg\")}>Load origin</Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/group.tsx",
          "title": "照片墙",
          "source": "import { Space, ImageGroup, KImage } from \"react-kui\";\nconst data = [\n  \"https://cdn.chuchur.com/upload/cat/cat1.jpg\",\n  \"https://cdn.chuchur.com/upload/cat/cat2.webp\",\n  \"https://cdn.chuchur.com/upload/cat/cat3.webp\",\n  \"https://cdn.chuchur.com/upload/cat/cat4.jpg\",\n  \"https://cdn.chuchur.com/upload/cat/cat5---.jpg\",\n];\nexport default function App() {\n  return (\n    <Space vertical>\n      <ImageGroup>\n        {data.map((src) => (\n          <KImage width={80} height={80} key={src} src={src} />\n        ))}\n      </ImageGroup>\n      <code>Use group data</code>\n      <ImageGroup data={data}>\n        <KImage width={80} height={80} src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\" />\n      </ImageGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/extra.tsx",
          "title": "扩展",
          "source": "import { Heart, Star } from \"kui-icons\";\nimport { useRef } from \"react\";\nimport { Icon, message, Space, KImage, type ImageRef } from \"react-kui\";\nexport default function App() {\n  const ref = useRef<ImageRef>(null),\n    toggle = () => ref.current?.togglePanel();\n  return (\n    <Space vertical>\n      <KImage\n        width={120}\n        height={120}\n        src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n        onClose={() => message.info(\"close\")}\n        ref={ref}\n        tools={\n          <>\n            <Icon type={Heart} color=\"#3a95ff\" onClick={toggle} />\n            <Icon type={Star} color=\"#3a95ff\" onClick={toggle} />\n          </>\n        }\n        panel={<div>Some thing here.</div>}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/image/demo/appearance.tsx",
          "title": "外观",
          "source": "import { KImage, Space, type SurfaceThemeType } from \"react-kui\";\n\n// An image is a frame around a picture, so the tier lands on the frame: `fill` gives it a plate, `outline` and\n// `dashed` put a solid or dashed edge around it, `solid` plates the frame on the primary, and `plain` — the\n// image's own look — leaves the picture alone. Listed from `plain` because that is what an image does when\n// nobody tells it otherwise.\nconst tiers: SurfaceThemeType[] = [\"plain\", \"fill\", \"outline\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <Space wrap size={16}>\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 8, justifyItems: \"center\" }}>\n          <KImage\n            width={104}\n            height={104}\n            theme={tier}\n            src=\"https://cdn.chuchur.com/upload/demo/test_300.jpg\"\n          />\n          <code>theme: {tier}</code>\n        </div>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Icon",
      "import": "import { Icon } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/icon",
      "props": [
        {
          "name": "type",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "图标类型。遵循图标的命名规范",
          "descriptionEn": "Icon type. Follows the icon naming convention"
        },
        {
          "name": "size",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标的大小，单位是 px",
          "descriptionEn": "The size of the icon, unit is px"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标的颜色",
          "descriptionEn": "The color of the icon"
        },
        {
          "name": "spin",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否有旋转动画",
          "descriptionEn": "Whether to have rotation animation"
        },
        {
          "name": "strokeWidth",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "2",
          "descriptionZh": "图标的线条粗细",
          "descriptionEn": "The line thickness of the icon"
        },
        {
          "name": "reverseFill",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "图标边框和反相填充,仅支持闭合的图标",
          "descriptionEn": "Icon borders and inverted fills are only supported for closed icons."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/icon/demo/search.tsx",
          "title": "IconList",
          "source": "import * as icons from \"kui-icons\";\nimport { useMemo, useState } from \"react\";\nimport { Affix, Grid, GridItem, Icon, Input, message, Space, Tag, type IconType } from \"react-kui\";\nimport { copyToClipboard } from \"react-kui/utils/share\";\nimport \"./search.less\";\nimport { tags } from \"./tags\";\n\nconst iconMap: Record<string, IconType[]> = icons;\nconst names = Object.keys(iconMap);\nconst toPascalCase = (value: string) =>\n  value\n    .split(\"-\")\n    .filter(Boolean)\n    .map((word) => word[0].toUpperCase() + word.slice(1))\n    .join(\"\");\n\nexport default function App() {\n  const [query, setQuery] = useState(\"\");\n  const matches = useMemo(() => {\n    const term = query.toLowerCase().trim();\n    if (!term) return names;\n    const tagged = new Set(\n      tags\n        .filter((icon) => icon.name.includes(term) || icon.tags.some((tag) => tag.includes(term)))\n        .map((icon) => toPascalCase(icon.name)),\n    );\n    return names.filter((name) => name.toLowerCase().includes(term) || tagged.has(name));\n  }, [query]);\n  const apps = matches.filter((name) => !name.startsWith(\"Logo\"));\n  const logos = matches.filter((name) => name.startsWith(\"Logo\"));\n  const copyHandle = (name: string) => {\n    copyToClipboard(name).then((result) => {\n      if (result) {\n        message.success(\"Copied！\");\n      } else {\n        message.error(\"Copy failed\");\n      }\n    });\n  };\n  const section = (title: string, items: string[]) =>\n    items.length ? (\n      <>\n        <h3>{title}</h3>\n        <Grid className=\"icon-list\" itemMinWidth={56} xGap={8} yGap={8}>\n          {items.map((name) => (\n            <GridItem key={name} className=\"icon-item\" onClick={() => copyHandle(name)}>\n              <Icon type={iconMap[name]} strokeWidth={1} />\n              <span className=\"item-tip\">{name}</span>\n            </GridItem>\n          ))}\n        </Grid>\n      </>\n    ) : null;\n  return (\n    <div>\n      <h3>Icons Filter</h3>\n      <Affix offsetTop={65}>\n        <Space size=\"large\" block style={{ backgroundColor: \"var(--kui-color-bg)\" }}>\n          <Input\n            value={query}\n            onChange={(value) => setQuery(value)}\n            placeholder=\"Enter keyword to search, then click an icon to copy its name.\"\n            icon={icons.Search}\n            suffix={<Tag>⌘K</Tag>}\n          />\n        </Space>\n      </Affix>\n      <div className=\"icon-list-container k-scroll\">\n        {section(\"App icons\", apps)}\n        {section(\"Logos\", logos)}\n        {!matches.length && (\n          <h3 style={{ textAlign: \"center\", paddingBottom: 50, color: \"#888\" }}>\n            No results for “{query}”\n          </h3>\n        )}\n      </div>\n    </div>\n  );\n}"
        },
        {
          "id": "components/icon/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Apple, Heart, House, Loading, LogoApple, LogoKui } from \"kui-icons\";\nimport { Space, Icon } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <code>Logo and Spin</code>\n      <Space size={15}>\n        <Icon strokeWidth={1} size={25} type={LogoApple} />\n        <Icon strokeWidth={1} size={25} type={LogoKui} />\n        <Icon strokeWidth={1} size={25} type={LogoKui} color=\"#00be83\" />\n        <Icon strokeWidth={1} size={25} type={Loading} spin />\n      </Space>\n      <code>Stroke Width</code>\n      <Space size={15}>\n        {[House, Heart, Apple].flatMap((type, i) => [\n          <Icon key={`${i}-1`} strokeWidth={1} size={25} type={type} />,\n          <Icon key={`${i}-2`} strokeWidth={2} size={25} type={type} />,\n        ])}\n      </Space>\n      <code>Fill and Color</code>\n      <Space size={15}>\n        <Icon size={25} type={House} reverseFill />\n        <Icon size={25} type={Heart} reverseFill color=\"red\" />\n        <Icon size={25} type={Apple} reverseFill color=\"orange\" />\n      </Space>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Input",
      "import": "import { Input } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/input",
      "props": [
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "有值且悬停时显示清除按钮",
          "descriptionEn": "Show the clear button on hover when a value exists"
        },
        {
          "name": "visiblePasswordIcon",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否显示切换按钮或者控制密码显隐",
          "descriptionEn": "Whether to show the toggle button or control password visibility"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "子组件的间距,可选值 `small`、`large`，默认不选",
          "descriptionEn": "Spacing of child components, optional values `small`, `large`, default not selected"
        },
        {
          "name": "value",
          "type": "string | number | readonly string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入值",
          "descriptionEn": "input value"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框图标",
          "descriptionEn": "Input box icon"
        },
        {
          "name": "suffix",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框内部后缀",
          "descriptionEn": "Inline suffix"
        },
        {
          "name": "prefix",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框内部前缀",
          "descriptionEn": "Inline prefix"
        },
        {
          "name": "addonBefore",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框外部前置附件",
          "descriptionEn": "Addon before the input"
        },
        {
          "name": "addonAfter",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框外部后置附件",
          "descriptionEn": "Addon after the input"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "输入框形状",
          "descriptionEn": "Input shape"
        },
        {
          "name": "onSearch",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索事件的回调",
          "descriptionEn": "Search event callback"
        },
        {
          "name": "onIconClick",
          "type": "((e: React.MouseEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标点击事件的回调",
          "descriptionEn": "Callback for icon click event"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "按下清除按钮的回调",
          "descriptionEn": "Callback for pressing the clear button"
        },
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框内容变化时的回调",
          "descriptionEn": "Callback when the input box content changes"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "form",
        "list",
        "step",
        "disabled",
        "width",
        "multiple",
        "pattern",
        "accept",
        "alt",
        "autoComplete",
        "capture",
        "checked",
        "formAction",
        "formEncType",
        "formMethod",
        "formNoValidate",
        "formTarget",
        "height",
        "max",
        "maxLength",
        "min",
        "minLength",
        "name",
        "placeholder",
        "readOnly",
        "required",
        "src",
        "type",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "form": "string",
        "list": "string",
        "disabled": "boolean",
        "multiple": "boolean",
        "pattern": "string",
        "accept": "string",
        "alt": "string",
        "checked": "boolean",
        "formEncType": "string",
        "formMethod": "string",
        "formNoValidate": "boolean",
        "formTarget": "string",
        "maxLength": "number",
        "minLength": "number",
        "name": "string",
        "placeholder": "string",
        "readOnly": "boolean",
        "required": "boolean",
        "src": "string"
      },
      "events": [
        {
          "name": "onSearch",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索事件的回调",
          "descriptionEn": "Search event callback"
        },
        {
          "name": "onIconClick",
          "type": "((e: React.MouseEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标点击事件的回调",
          "descriptionEn": "Callback for icon click event"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "按下清除按钮的回调",
          "descriptionEn": "Callback for pressing the clear button"
        },
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框内容变化时的回调",
          "descriptionEn": "Callback when the input box content changes"
        }
      ],
      "renderProps": [
        "suffix",
        "prefix",
        "addonBefore",
        "addonAfter"
      ],
      "behavior": {
        "rules": [
          "Use value and onChange(nextValue). onChange receives a string, not a DOM event.",
          "Input uses synchronized local state: edits can stay local until the parent supplies a different value. Do not promise strict native controlled-input semantics. Keep application state updated through onChange."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/input/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, Input, TextArea } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Space vertical block>\n      <code>value: {value}</code>\n      <Input\n        placeholder=\"Please input\"\n        onBlur={() => console.log(\"blur\")}\n        onFocus={() => console.log(\"focus\")}\n        value={value}\n        onChange={setValue}\n      />\n      <Input placeholder=\"clearable=false\" clearable={false} />\n      <Input placeholder=\"Disabled\" disabled />\n      <Input placeholder=\"Readonly\" readOnly value={value} />\n      <TextArea value={value} onChange={setValue} placeholder=\"TextArea\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/theme.tsx",
          "title": "主题",
          "source": "import { Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Checkbox,\n  Input,\n  message,\n  Space,\n  TextArea,\n  type ShapeType,\n  type ThemeType,\n} from \"react-kui\";\n\n// An input paints all six tiers, and the tier lands on the box itself: `fill` — what it does when nobody\n// writes a theme — plates it, `outline` and `dashed` put a solid or dashed edge on it instead, `plain` leaves\n// it bare, `solid` plates it on the primary and inverts the typed text, the placeholder and the icons, and\n// `underlined` keeps only the bottom rule. A text area and an input with an addon are drawn from the same\n// arms, so they take the same tiers. The addon is the group's own surface: a group that is not `fill` borders\n// the addon it wraps, which is why the second row of each pair reads differently from the first.\nconst tiers: ThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\", \"underlined\"];\n\nexport default function App() {\n  const [circle, setCircle] = useState(false);\n  const shape: ShapeType | undefined = circle ? \"circle\" : undefined;\n  const search = (value: string) => {\n    message.info(\"This is search event\");\n    console.log(value);\n  };\n  return (\n    <Space vertical block>\n      <Checkbox checked={circle} label=\"Circle\" onChange={(event) => setCircle(event.checked)} />\n      <Input placeholder=\"Please input\" shape={shape} />\n      <Input placeholder=\"Disabled\" disabled shape={shape} />\n      <Input placeholder=\"Please input\" icon={Search} shape={shape} />\n      <Input placeholder=\"Please input\" clearable={false} shape={shape} onSearch={search} />\n      <br />\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 4 }}>\n          <code>theme: {tier}</code>\n          <TextArea theme={tier} rows={2} placeholder=\"Please input\" />\n          <Input theme={tier} prefix=\"https://\" placeholder=\"Please input\" />\n        </div>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/icon.tsx",
          "title": "带图标",
          "source": "import { Lock, User } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, message, Space, Input } from \"react-kui\";\nexport default function App() {\n  const [visible, setVisible] = useState(true);\n  const search = (value: string) => {\n    message.info(\"This is search event\");\n    console.log(value);\n  };\n  return (\n    <Space vertical block>\n      <Input placeholder=\"User Name...\" icon={User} />\n      <Input type=\"password\" placeholder=\"Password...\" icon={Lock} />\n      <Input\n        type=\"password\"\n        placeholder=\"Password no toggle\"\n        icon={Lock}\n        visiblePasswordIcon={false}\n      />\n      <Space compact block>\n        <Input\n          type=\"password\"\n          placeholder=\"Password default text\"\n          icon={Lock}\n          visiblePasswordIcon={visible}\n        />\n        <Button onClick={() => setVisible(!visible)}>Toggle</Button>\n      </Space>\n      <Input placeholder=\"Please input\" clearable={false} onSearch={search} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/suffix.tsx",
          "title": "扩展, 前缀和后缀",
          "source": "import { CircleQuestionMark, Gift, Search, User } from \"kui-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button, Icon, Input, message, Select, Space, Tag, Tooltip, TreeSelect } from \"react-kui\";\nconst protocols = [\n    { label: \"http\", value: \"http\" },\n    { label: \"https\", value: \"https\" },\n  ],\n  domains = [\n    { label: \".com\", value: \".com\" },\n    { label: \".cn\", value: \".cn\" },\n    { label: \".org\", value: \".org\" },\n  ],\n  treeData = [\n    {\n      title: \"fruit\",\n      key: \"1\",\n      children: [\n        { title: \"apple\", key: \"11\" },\n        { title: \"orange\", key: \"12\" },\n      ],\n    },\n  ];\nexport default function App() {\n  const [time, setTime] = useState(60);\n  const timer = useRef<ReturnType<typeof setInterval> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearInterval(timer.current);\n    },\n    [],\n  );\n  const send = () => {\n    if (timer.current) clearInterval(timer.current);\n    setTime(59);\n    message.success(\"Verification code sent successfully\");\n    timer.current = setInterval(\n      () =>\n        setTime((v) => {\n          if (v <= 1) {\n            if (timer.current) clearInterval(timer.current);\n            return 60;\n          }\n          return v - 1;\n        }),\n      1000,\n    );\n  };\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Please input username\" icon={User} />\n      <Input\n        placeholder=\"Please input the captcha\"\n        maxLength={8}\n        prefix={<Icon type={Search} />}\n        suffix={<Tag theme=\"outline\">⌘K</Tag>}\n      />\n      <Input\n        placeholder=\"Please input the captcha\"\n        maxLength={8}\n        addonAfter={\n          <Button disabled={time < 60} onClick={send}>\n            {time === 60 ? \"Get Captcha\" : `${time}(s)`}\n          </Button>\n        }\n      />\n      <Input\n        placeholder=\"Please input\"\n        icon={Gift}\n        addonAfter={\n          <Tooltip title=\"Please contact the administrator\">\n            <Button icon={CircleQuestionMark} />\n          </Tooltip>\n        }\n      />\n      <Input placeholder=\"Please enter the amount\" suffix=\"RMB\" prefix=\"¥\" />\n      <Input placeholder=\"Please enter the domain\" suffix=\".com\" prefix=\"https://\" />\n      <Input\n        placeholder=\"Please input\"\n        addonBefore={<Select options={protocols} clearable value=\"http\" />}\n        addonAfter={<Select options={domains} clearable value=\".com\" />}\n      />\n      <Input placeholder=\"Please input\" suffix=\".00\" />\n      <Input\n        placeholder=\"Please input\"\n        addonBefore={<Select options={protocols} clearable value=\"http\" />}\n        addonAfter={<TreeSelect treeData={treeData} clearable style={{ width: 100 }} />}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/group.tsx",
          "title": "输入框组合",
          "source": "import { Copy } from \"kui-icons\";\nimport {\n  Button,\n  DatePicker,\n  InputNumber,\n  Option,\n  Select,\n  Space,\n  Tooltip,\n  TreeSelect,\n  Input,\n  InputGroup,\n} from \"react-kui\";\nconst treeData = [\n  {\n    title: \"fruit\",\n    key: \"1\",\n    children: [\n      { title: \"apple\", key: \"11\" },\n      { title: \"orange\", key: \"12\" },\n    ],\n  },\n];\nconst options = (prefix: string) => (\n  <>\n    <Option value={`${prefix}-1`}>{prefix}-1</Option>\n    <Option value={`${prefix}-2`}>{prefix}-2</Option>\n  </>\n);\nexport default function App() {\n  return (\n    <Space vertical size=\"medium\" block style={{ width: 600, maxWidth: \"100%\" }}>\n      <InputGroup>\n        <Input style={{ width: \"20%\" }} value=\"027\" />\n        <Input style={{ width: \"30%\" }} value=\"28398987\" />\n      </InputGroup>\n      <InputGroup size=\"small\">\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" />\n        <Button type=\"primary\">Submit</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" />\n        <Button type=\"primary\">Submit</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input\n          style={{ width: \"calc(100% - 200px)\" }}\n          value=\"git@gitee.com:chuchur/kui-react.git\"\n        />\n        <Tooltip title=\"copy git url\">\n          <Button icon={Copy} />\n        </Tooltip>\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Shenzheng\" clearable>\n          <Option value=\"Wuhan\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" />\n      </InputGroup>\n      <InputGroup>\n        <Select clearable multiple value={[\"Wuhan001\"]} style={{ width: \"50%\" }} maxTagCount={1}>\n          <Option value=\"Wuhan001\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" />\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"30%\" }} value=\"0755\" />\n        <Input clearable style={{ width: \"50%\" }} value=\"28398987\" />\n        <Input style={{ width: \"20%\" }} value=\"+1\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1\">{options(\"Option\")}</Select>\n        <Input style={{ width: \"50%\" }} value=\"input content\" />\n        <InputNumber value={12} />\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"50%\" }} value=\"input content\" icon={Copy} />\n        <DatePicker />\n      </InputGroup>\n      <InputGroup>\n        <DatePicker mode=\"dateRange\" />\n        <Input style={{ width: \"30%\" }} value=\"input content\" />\n        <Button type=\"primary\">Query</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"30%\" }} value=\"input content\" />\n        <DatePicker mode=\"dateRange\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1-1\">{options(\"Option1\")}</Select>\n        <Select value=\"Option2-2\">{options(\"Option2\")}</Select>\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"1\">\n          <Option value=\"1\">Between</Option>\n          <Option value=\"2\">Except</Option>\n        </Select>\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Minimum\" />\n        <Input\n          style={{ width: 30, borderLeft: 0, borderRight: 0, pointerEvents: \"none\" }}\n          placeholder=\"~\"\n          disabled\n        />\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Maximum\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1-1\">{options(\"Option1\")}</Select>\n        <TreeSelect treeData={treeData} clearable style={{ width: 200 }} />\n      </InputGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/size.tsx",
          "title": "尺寸",
          "source": "import { LogoKui } from \"kui-icons\";\nimport { message, Space, Input } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Large Input\" size=\"large\" icon={LogoKui} clearable />\n      <Input placeholder=\"Base Input\" icon={LogoKui} clearable />\n      <Input\n        size=\"small\"\n        placeholder=\"Small Input\"\n        icon={LogoKui}\n        onIconClick={() => message.info(\"You click the icon\")}\n        clearable\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/event.tsx",
          "title": "事件",
          "source": "import { message, Space, Input, TextArea } from \"react-kui\";\nconst fire = (type: string) => (event: unknown) => {\n  message.info(type);\n  console.log(type, event);\n};\nconst keyboard = {\n  onKeyPress: fire(\"keypress\"),\n  onKeyUp: fire(\"keyup\"),\n  onKeyDown: (e: React.KeyboardEvent) => {\n    fire(\"keydown\")(e);\n    if (e.key === \"Enter\") fire(\"keydownEnter\")(e);\n  },\n  onBlur: fire(\"blur\"),\n  onFocus: fire(\"focus\"),\n};\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Please input\" clearable onChange={fire(\"change\")} {...keyboard} />\n      <TextArea placeholder=\"Please input\" onChange={fire(\"change\")} {...keyboard} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/textarea.tsx",
          "title": "文本域",
          "source": "import { Space, TextArea } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <TextArea rows={4} placeholder=\"Please input\" />\n      <TextArea rows={2} placeholder=\"Please input\" />\n      <TextArea rows={2} placeholder=\"Disabled\" disabled />\n      <TextArea rows={2} placeholder=\"Readonly\" readOnly />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "InputGroup",
      "import": "import { InputGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/input",
      "props": [
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否继承父集宽度",
          "descriptionEn": "Whether to inherit the parent width"
        },
        {
          "name": "compact",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否使用紧凑模式",
          "descriptionEn": "Whether to use compact mode"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "文本域主题",
          "descriptionEn": "Textarea theme"
        },
        {
          "name": "size",
          "type": "number | SizeType | number[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "尺寸，可选值 `small`、`large`，默认不选",
          "descriptionEn": "Size, optional values `small`, `large`, default not selected"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "组合展示的输入框、按钮等内容，使用组的布局及外观上下文。",
          "descriptionEn": "Inputs, buttons or other content sharing the group's layout and appearance context."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/input/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, Input, TextArea } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Space vertical block>\n      <code>value: {value}</code>\n      <Input\n        placeholder=\"Please input\"\n        onBlur={() => console.log(\"blur\")}\n        onFocus={() => console.log(\"focus\")}\n        value={value}\n        onChange={setValue}\n      />\n      <Input placeholder=\"clearable=false\" clearable={false} />\n      <Input placeholder=\"Disabled\" disabled />\n      <Input placeholder=\"Readonly\" readOnly value={value} />\n      <TextArea value={value} onChange={setValue} placeholder=\"TextArea\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/theme.tsx",
          "title": "主题",
          "source": "import { Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Checkbox,\n  Input,\n  message,\n  Space,\n  TextArea,\n  type ShapeType,\n  type ThemeType,\n} from \"react-kui\";\n\n// An input paints all six tiers, and the tier lands on the box itself: `fill` — what it does when nobody\n// writes a theme — plates it, `outline` and `dashed` put a solid or dashed edge on it instead, `plain` leaves\n// it bare, `solid` plates it on the primary and inverts the typed text, the placeholder and the icons, and\n// `underlined` keeps only the bottom rule. A text area and an input with an addon are drawn from the same\n// arms, so they take the same tiers. The addon is the group's own surface: a group that is not `fill` borders\n// the addon it wraps, which is why the second row of each pair reads differently from the first.\nconst tiers: ThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\", \"underlined\"];\n\nexport default function App() {\n  const [circle, setCircle] = useState(false);\n  const shape: ShapeType | undefined = circle ? \"circle\" : undefined;\n  const search = (value: string) => {\n    message.info(\"This is search event\");\n    console.log(value);\n  };\n  return (\n    <Space vertical block>\n      <Checkbox checked={circle} label=\"Circle\" onChange={(event) => setCircle(event.checked)} />\n      <Input placeholder=\"Please input\" shape={shape} />\n      <Input placeholder=\"Disabled\" disabled shape={shape} />\n      <Input placeholder=\"Please input\" icon={Search} shape={shape} />\n      <Input placeholder=\"Please input\" clearable={false} shape={shape} onSearch={search} />\n      <br />\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 4 }}>\n          <code>theme: {tier}</code>\n          <TextArea theme={tier} rows={2} placeholder=\"Please input\" />\n          <Input theme={tier} prefix=\"https://\" placeholder=\"Please input\" />\n        </div>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/icon.tsx",
          "title": "带图标",
          "source": "import { Lock, User } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, message, Space, Input } from \"react-kui\";\nexport default function App() {\n  const [visible, setVisible] = useState(true);\n  const search = (value: string) => {\n    message.info(\"This is search event\");\n    console.log(value);\n  };\n  return (\n    <Space vertical block>\n      <Input placeholder=\"User Name...\" icon={User} />\n      <Input type=\"password\" placeholder=\"Password...\" icon={Lock} />\n      <Input\n        type=\"password\"\n        placeholder=\"Password no toggle\"\n        icon={Lock}\n        visiblePasswordIcon={false}\n      />\n      <Space compact block>\n        <Input\n          type=\"password\"\n          placeholder=\"Password default text\"\n          icon={Lock}\n          visiblePasswordIcon={visible}\n        />\n        <Button onClick={() => setVisible(!visible)}>Toggle</Button>\n      </Space>\n      <Input placeholder=\"Please input\" clearable={false} onSearch={search} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/suffix.tsx",
          "title": "扩展, 前缀和后缀",
          "source": "import { CircleQuestionMark, Gift, Search, User } from \"kui-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button, Icon, Input, message, Select, Space, Tag, Tooltip, TreeSelect } from \"react-kui\";\nconst protocols = [\n    { label: \"http\", value: \"http\" },\n    { label: \"https\", value: \"https\" },\n  ],\n  domains = [\n    { label: \".com\", value: \".com\" },\n    { label: \".cn\", value: \".cn\" },\n    { label: \".org\", value: \".org\" },\n  ],\n  treeData = [\n    {\n      title: \"fruit\",\n      key: \"1\",\n      children: [\n        { title: \"apple\", key: \"11\" },\n        { title: \"orange\", key: \"12\" },\n      ],\n    },\n  ];\nexport default function App() {\n  const [time, setTime] = useState(60);\n  const timer = useRef<ReturnType<typeof setInterval> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearInterval(timer.current);\n    },\n    [],\n  );\n  const send = () => {\n    if (timer.current) clearInterval(timer.current);\n    setTime(59);\n    message.success(\"Verification code sent successfully\");\n    timer.current = setInterval(\n      () =>\n        setTime((v) => {\n          if (v <= 1) {\n            if (timer.current) clearInterval(timer.current);\n            return 60;\n          }\n          return v - 1;\n        }),\n      1000,\n    );\n  };\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Please input username\" icon={User} />\n      <Input\n        placeholder=\"Please input the captcha\"\n        maxLength={8}\n        prefix={<Icon type={Search} />}\n        suffix={<Tag theme=\"outline\">⌘K</Tag>}\n      />\n      <Input\n        placeholder=\"Please input the captcha\"\n        maxLength={8}\n        addonAfter={\n          <Button disabled={time < 60} onClick={send}>\n            {time === 60 ? \"Get Captcha\" : `${time}(s)`}\n          </Button>\n        }\n      />\n      <Input\n        placeholder=\"Please input\"\n        icon={Gift}\n        addonAfter={\n          <Tooltip title=\"Please contact the administrator\">\n            <Button icon={CircleQuestionMark} />\n          </Tooltip>\n        }\n      />\n      <Input placeholder=\"Please enter the amount\" suffix=\"RMB\" prefix=\"¥\" />\n      <Input placeholder=\"Please enter the domain\" suffix=\".com\" prefix=\"https://\" />\n      <Input\n        placeholder=\"Please input\"\n        addonBefore={<Select options={protocols} clearable value=\"http\" />}\n        addonAfter={<Select options={domains} clearable value=\".com\" />}\n      />\n      <Input placeholder=\"Please input\" suffix=\".00\" />\n      <Input\n        placeholder=\"Please input\"\n        addonBefore={<Select options={protocols} clearable value=\"http\" />}\n        addonAfter={<TreeSelect treeData={treeData} clearable style={{ width: 100 }} />}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/group.tsx",
          "title": "输入框组合",
          "source": "import { Copy } from \"kui-icons\";\nimport {\n  Button,\n  DatePicker,\n  InputNumber,\n  Option,\n  Select,\n  Space,\n  Tooltip,\n  TreeSelect,\n  Input,\n  InputGroup,\n} from \"react-kui\";\nconst treeData = [\n  {\n    title: \"fruit\",\n    key: \"1\",\n    children: [\n      { title: \"apple\", key: \"11\" },\n      { title: \"orange\", key: \"12\" },\n    ],\n  },\n];\nconst options = (prefix: string) => (\n  <>\n    <Option value={`${prefix}-1`}>{prefix}-1</Option>\n    <Option value={`${prefix}-2`}>{prefix}-2</Option>\n  </>\n);\nexport default function App() {\n  return (\n    <Space vertical size=\"medium\" block style={{ width: 600, maxWidth: \"100%\" }}>\n      <InputGroup>\n        <Input style={{ width: \"20%\" }} value=\"027\" />\n        <Input style={{ width: \"30%\" }} value=\"28398987\" />\n      </InputGroup>\n      <InputGroup size=\"small\">\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" />\n        <Button type=\"primary\">Submit</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" />\n        <Button type=\"primary\">Submit</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input\n          style={{ width: \"calc(100% - 200px)\" }}\n          value=\"git@gitee.com:chuchur/kui-react.git\"\n        />\n        <Tooltip title=\"copy git url\">\n          <Button icon={Copy} />\n        </Tooltip>\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Shenzheng\" clearable>\n          <Option value=\"Wuhan\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" />\n      </InputGroup>\n      <InputGroup>\n        <Select clearable multiple value={[\"Wuhan001\"]} style={{ width: \"50%\" }} maxTagCount={1}>\n          <Option value=\"Wuhan001\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" />\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"30%\" }} value=\"0755\" />\n        <Input clearable style={{ width: \"50%\" }} value=\"28398987\" />\n        <Input style={{ width: \"20%\" }} value=\"+1\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1\">{options(\"Option\")}</Select>\n        <Input style={{ width: \"50%\" }} value=\"input content\" />\n        <InputNumber value={12} />\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"50%\" }} value=\"input content\" icon={Copy} />\n        <DatePicker />\n      </InputGroup>\n      <InputGroup>\n        <DatePicker mode=\"dateRange\" />\n        <Input style={{ width: \"30%\" }} value=\"input content\" />\n        <Button type=\"primary\">Query</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"30%\" }} value=\"input content\" />\n        <DatePicker mode=\"dateRange\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1-1\">{options(\"Option1\")}</Select>\n        <Select value=\"Option2-2\">{options(\"Option2\")}</Select>\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"1\">\n          <Option value=\"1\">Between</Option>\n          <Option value=\"2\">Except</Option>\n        </Select>\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Minimum\" />\n        <Input\n          style={{ width: 30, borderLeft: 0, borderRight: 0, pointerEvents: \"none\" }}\n          placeholder=\"~\"\n          disabled\n        />\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Maximum\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1-1\">{options(\"Option1\")}</Select>\n        <TreeSelect treeData={treeData} clearable style={{ width: 200 }} />\n      </InputGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/size.tsx",
          "title": "尺寸",
          "source": "import { LogoKui } from \"kui-icons\";\nimport { message, Space, Input } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Large Input\" size=\"large\" icon={LogoKui} clearable />\n      <Input placeholder=\"Base Input\" icon={LogoKui} clearable />\n      <Input\n        size=\"small\"\n        placeholder=\"Small Input\"\n        icon={LogoKui}\n        onIconClick={() => message.info(\"You click the icon\")}\n        clearable\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/event.tsx",
          "title": "事件",
          "source": "import { message, Space, Input, TextArea } from \"react-kui\";\nconst fire = (type: string) => (event: unknown) => {\n  message.info(type);\n  console.log(type, event);\n};\nconst keyboard = {\n  onKeyPress: fire(\"keypress\"),\n  onKeyUp: fire(\"keyup\"),\n  onKeyDown: (e: React.KeyboardEvent) => {\n    fire(\"keydown\")(e);\n    if (e.key === \"Enter\") fire(\"keydownEnter\")(e);\n  },\n  onBlur: fire(\"blur\"),\n  onFocus: fire(\"focus\"),\n};\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Please input\" clearable onChange={fire(\"change\")} {...keyboard} />\n      <TextArea placeholder=\"Please input\" onChange={fire(\"change\")} {...keyboard} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/textarea.tsx",
          "title": "文本域",
          "source": "import { Space, TextArea } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <TextArea rows={4} placeholder=\"Please input\" />\n      <TextArea rows={2} placeholder=\"Please input\" />\n      <TextArea rows={2} placeholder=\"Disabled\" disabled />\n      <TextArea rows={2} placeholder=\"Readonly\" readOnly />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "TextArea",
      "import": "import { TextArea } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/input",
      "props": [
        {
          "name": "value",
          "type": "string | number | readonly string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入值",
          "descriptionEn": "input value"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "文本域主题",
          "descriptionEn": "Textarea theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "尺寸，可选值 `small`、`large`，默认不选",
          "descriptionEn": "Size, optional values `small`, `large`, default not selected"
        },
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "内容变化时的回调",
          "descriptionEn": "Callback when the content changes"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "form",
        "disabled",
        "wrap",
        "autoComplete",
        "maxLength",
        "minLength",
        "name",
        "placeholder",
        "readOnly",
        "required",
        "cols",
        "dirName",
        "rows",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "form": "string",
        "disabled": "boolean",
        "wrap": "string",
        "autoComplete": "string",
        "maxLength": "number",
        "minLength": "number",
        "name": "string",
        "placeholder": "string",
        "readOnly": "boolean",
        "required": "boolean",
        "cols": "number",
        "dirName": "string",
        "rows": "number"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "内容变化时的回调",
          "descriptionEn": "Callback when the content changes"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/input/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, Input, TextArea } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Space vertical block>\n      <code>value: {value}</code>\n      <Input\n        placeholder=\"Please input\"\n        onBlur={() => console.log(\"blur\")}\n        onFocus={() => console.log(\"focus\")}\n        value={value}\n        onChange={setValue}\n      />\n      <Input placeholder=\"clearable=false\" clearable={false} />\n      <Input placeholder=\"Disabled\" disabled />\n      <Input placeholder=\"Readonly\" readOnly value={value} />\n      <TextArea value={value} onChange={setValue} placeholder=\"TextArea\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/theme.tsx",
          "title": "主题",
          "source": "import { Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Checkbox,\n  Input,\n  message,\n  Space,\n  TextArea,\n  type ShapeType,\n  type ThemeType,\n} from \"react-kui\";\n\n// An input paints all six tiers, and the tier lands on the box itself: `fill` — what it does when nobody\n// writes a theme — plates it, `outline` and `dashed` put a solid or dashed edge on it instead, `plain` leaves\n// it bare, `solid` plates it on the primary and inverts the typed text, the placeholder and the icons, and\n// `underlined` keeps only the bottom rule. A text area and an input with an addon are drawn from the same\n// arms, so they take the same tiers. The addon is the group's own surface: a group that is not `fill` borders\n// the addon it wraps, which is why the second row of each pair reads differently from the first.\nconst tiers: ThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\", \"underlined\"];\n\nexport default function App() {\n  const [circle, setCircle] = useState(false);\n  const shape: ShapeType | undefined = circle ? \"circle\" : undefined;\n  const search = (value: string) => {\n    message.info(\"This is search event\");\n    console.log(value);\n  };\n  return (\n    <Space vertical block>\n      <Checkbox checked={circle} label=\"Circle\" onChange={(event) => setCircle(event.checked)} />\n      <Input placeholder=\"Please input\" shape={shape} />\n      <Input placeholder=\"Disabled\" disabled shape={shape} />\n      <Input placeholder=\"Please input\" icon={Search} shape={shape} />\n      <Input placeholder=\"Please input\" clearable={false} shape={shape} onSearch={search} />\n      <br />\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 4 }}>\n          <code>theme: {tier}</code>\n          <TextArea theme={tier} rows={2} placeholder=\"Please input\" />\n          <Input theme={tier} prefix=\"https://\" placeholder=\"Please input\" />\n        </div>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/icon.tsx",
          "title": "带图标",
          "source": "import { Lock, User } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, message, Space, Input } from \"react-kui\";\nexport default function App() {\n  const [visible, setVisible] = useState(true);\n  const search = (value: string) => {\n    message.info(\"This is search event\");\n    console.log(value);\n  };\n  return (\n    <Space vertical block>\n      <Input placeholder=\"User Name...\" icon={User} />\n      <Input type=\"password\" placeholder=\"Password...\" icon={Lock} />\n      <Input\n        type=\"password\"\n        placeholder=\"Password no toggle\"\n        icon={Lock}\n        visiblePasswordIcon={false}\n      />\n      <Space compact block>\n        <Input\n          type=\"password\"\n          placeholder=\"Password default text\"\n          icon={Lock}\n          visiblePasswordIcon={visible}\n        />\n        <Button onClick={() => setVisible(!visible)}>Toggle</Button>\n      </Space>\n      <Input placeholder=\"Please input\" clearable={false} onSearch={search} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/suffix.tsx",
          "title": "扩展, 前缀和后缀",
          "source": "import { CircleQuestionMark, Gift, Search, User } from \"kui-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button, Icon, Input, message, Select, Space, Tag, Tooltip, TreeSelect } from \"react-kui\";\nconst protocols = [\n    { label: \"http\", value: \"http\" },\n    { label: \"https\", value: \"https\" },\n  ],\n  domains = [\n    { label: \".com\", value: \".com\" },\n    { label: \".cn\", value: \".cn\" },\n    { label: \".org\", value: \".org\" },\n  ],\n  treeData = [\n    {\n      title: \"fruit\",\n      key: \"1\",\n      children: [\n        { title: \"apple\", key: \"11\" },\n        { title: \"orange\", key: \"12\" },\n      ],\n    },\n  ];\nexport default function App() {\n  const [time, setTime] = useState(60);\n  const timer = useRef<ReturnType<typeof setInterval> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearInterval(timer.current);\n    },\n    [],\n  );\n  const send = () => {\n    if (timer.current) clearInterval(timer.current);\n    setTime(59);\n    message.success(\"Verification code sent successfully\");\n    timer.current = setInterval(\n      () =>\n        setTime((v) => {\n          if (v <= 1) {\n            if (timer.current) clearInterval(timer.current);\n            return 60;\n          }\n          return v - 1;\n        }),\n      1000,\n    );\n  };\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Please input username\" icon={User} />\n      <Input\n        placeholder=\"Please input the captcha\"\n        maxLength={8}\n        prefix={<Icon type={Search} />}\n        suffix={<Tag theme=\"outline\">⌘K</Tag>}\n      />\n      <Input\n        placeholder=\"Please input the captcha\"\n        maxLength={8}\n        addonAfter={\n          <Button disabled={time < 60} onClick={send}>\n            {time === 60 ? \"Get Captcha\" : `${time}(s)`}\n          </Button>\n        }\n      />\n      <Input\n        placeholder=\"Please input\"\n        icon={Gift}\n        addonAfter={\n          <Tooltip title=\"Please contact the administrator\">\n            <Button icon={CircleQuestionMark} />\n          </Tooltip>\n        }\n      />\n      <Input placeholder=\"Please enter the amount\" suffix=\"RMB\" prefix=\"¥\" />\n      <Input placeholder=\"Please enter the domain\" suffix=\".com\" prefix=\"https://\" />\n      <Input\n        placeholder=\"Please input\"\n        addonBefore={<Select options={protocols} clearable value=\"http\" />}\n        addonAfter={<Select options={domains} clearable value=\".com\" />}\n      />\n      <Input placeholder=\"Please input\" suffix=\".00\" />\n      <Input\n        placeholder=\"Please input\"\n        addonBefore={<Select options={protocols} clearable value=\"http\" />}\n        addonAfter={<TreeSelect treeData={treeData} clearable style={{ width: 100 }} />}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/group.tsx",
          "title": "输入框组合",
          "source": "import { Copy } from \"kui-icons\";\nimport {\n  Button,\n  DatePicker,\n  InputNumber,\n  Option,\n  Select,\n  Space,\n  Tooltip,\n  TreeSelect,\n  Input,\n  InputGroup,\n} from \"react-kui\";\nconst treeData = [\n  {\n    title: \"fruit\",\n    key: \"1\",\n    children: [\n      { title: \"apple\", key: \"11\" },\n      { title: \"orange\", key: \"12\" },\n    ],\n  },\n];\nconst options = (prefix: string) => (\n  <>\n    <Option value={`${prefix}-1`}>{prefix}-1</Option>\n    <Option value={`${prefix}-2`}>{prefix}-2</Option>\n  </>\n);\nexport default function App() {\n  return (\n    <Space vertical size=\"medium\" block style={{ width: 600, maxWidth: \"100%\" }}>\n      <InputGroup>\n        <Input style={{ width: \"20%\" }} value=\"027\" />\n        <Input style={{ width: \"30%\" }} value=\"28398987\" />\n      </InputGroup>\n      <InputGroup size=\"small\">\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" />\n        <Button type=\"primary\">Submit</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" />\n        <Button type=\"primary\">Submit</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input\n          style={{ width: \"calc(100% - 200px)\" }}\n          value=\"git@gitee.com:chuchur/kui-react.git\"\n        />\n        <Tooltip title=\"copy git url\">\n          <Button icon={Copy} />\n        </Tooltip>\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Shenzheng\" clearable>\n          <Option value=\"Wuhan\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" />\n      </InputGroup>\n      <InputGroup>\n        <Select clearable multiple value={[\"Wuhan001\"]} style={{ width: \"50%\" }} maxTagCount={1}>\n          <Option value=\"Wuhan001\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" />\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"30%\" }} value=\"0755\" />\n        <Input clearable style={{ width: \"50%\" }} value=\"28398987\" />\n        <Input style={{ width: \"20%\" }} value=\"+1\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1\">{options(\"Option\")}</Select>\n        <Input style={{ width: \"50%\" }} value=\"input content\" />\n        <InputNumber value={12} />\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"50%\" }} value=\"input content\" icon={Copy} />\n        <DatePicker />\n      </InputGroup>\n      <InputGroup>\n        <DatePicker mode=\"dateRange\" />\n        <Input style={{ width: \"30%\" }} value=\"input content\" />\n        <Button type=\"primary\">Query</Button>\n      </InputGroup>\n      <InputGroup>\n        <Input style={{ width: \"30%\" }} value=\"input content\" />\n        <DatePicker mode=\"dateRange\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1-1\">{options(\"Option1\")}</Select>\n        <Select value=\"Option2-2\">{options(\"Option2\")}</Select>\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"1\">\n          <Option value=\"1\">Between</Option>\n          <Option value=\"2\">Except</Option>\n        </Select>\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Minimum\" />\n        <Input\n          style={{ width: 30, borderLeft: 0, borderRight: 0, pointerEvents: \"none\" }}\n          placeholder=\"~\"\n          disabled\n        />\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Maximum\" />\n      </InputGroup>\n      <InputGroup>\n        <Select value=\"Option1-1\">{options(\"Option1\")}</Select>\n        <TreeSelect treeData={treeData} clearable style={{ width: 200 }} />\n      </InputGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/size.tsx",
          "title": "尺寸",
          "source": "import { LogoKui } from \"kui-icons\";\nimport { message, Space, Input } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Large Input\" size=\"large\" icon={LogoKui} clearable />\n      <Input placeholder=\"Base Input\" icon={LogoKui} clearable />\n      <Input\n        size=\"small\"\n        placeholder=\"Small Input\"\n        icon={LogoKui}\n        onIconClick={() => message.info(\"You click the icon\")}\n        clearable\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/event.tsx",
          "title": "事件",
          "source": "import { message, Space, Input, TextArea } from \"react-kui\";\nconst fire = (type: string) => (event: unknown) => {\n  message.info(type);\n  console.log(type, event);\n};\nconst keyboard = {\n  onKeyPress: fire(\"keypress\"),\n  onKeyUp: fire(\"keyup\"),\n  onKeyDown: (e: React.KeyboardEvent) => {\n    fire(\"keydown\")(e);\n    if (e.key === \"Enter\") fire(\"keydownEnter\")(e);\n  },\n  onBlur: fire(\"blur\"),\n  onFocus: fire(\"focus\"),\n};\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Input placeholder=\"Please input\" clearable onChange={fire(\"change\")} {...keyboard} />\n      <TextArea placeholder=\"Please input\" onChange={fire(\"change\")} {...keyboard} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input/demo/textarea.tsx",
          "title": "文本域",
          "source": "import { Space, TextArea } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <TextArea rows={4} placeholder=\"Please input\" />\n      <TextArea rows={2} placeholder=\"Please input\" />\n      <TextArea rows={2} placeholder=\"Disabled\" disabled />\n      <TextArea rows={2} placeholder=\"Readonly\" readOnly />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "InputTag",
      "import": "import { InputTag } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/input-tag",
      "props": [
        {
          "name": "value",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签",
          "descriptionEn": "tags"
        },
        {
          "name": "placeholder",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "占位文本",
          "descriptionEn": "Placeholder"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "禁用",
          "descriptionEn": "Disabled state"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只读，允许聚焦和复制但不可修改",
          "descriptionEn": "Read-only while remaining focusable"
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示一键清空按钮",
          "descriptionEn": "Whether to show the clear button"
        },
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否撑满父容器宽度",
          "descriptionEn": "Fill the parent width"
        },
        {
          "name": "allowDuplicates",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "允许重复",
          "descriptionEn": "Allow duplicate tags"
        },
        {
          "name": "max",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "最大标签数",
          "descriptionEn": "Maximum tag count"
        },
        {
          "name": "maxTagCount",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "最多展示的标签数，超出部分显示为 +N",
          "descriptionEn": "Maximum visible tags; the remainder is shown as +N"
        },
        {
          "name": "separators",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[\",\"]",
          "descriptionZh": "提交分隔键",
          "descriptionEn": "Commit keys"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "onChange",
          "type": "((value: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签变化",
          "descriptionEn": "Tags change"
        },
        {
          "name": "onAdd",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "新增标签",
          "descriptionEn": "Tag added"
        },
        {
          "name": "onRemove",
          "type": "((value: string, index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "删除标签",
          "descriptionEn": "Tag removed"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "清空标签",
          "descriptionEn": "Tags cleared"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签变化",
          "descriptionEn": "Tags change"
        },
        {
          "name": "onAdd",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "新增标签",
          "descriptionEn": "Tag added"
        },
        {
          "name": "onRemove",
          "type": "((value: string, index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "删除标签",
          "descriptionEn": "Tag removed"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "清空标签",
          "descriptionEn": "Tags cleared"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/input-tag/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { InputTag } from \"react-kui\";\nexport default function App() {\n  return <InputTag value={[\"Design\", \"TypeScript\"]} placeholder=\"输入后按回车\" />;\n}"
        },
        {
          "id": "components/input-tag/demo/controlled.tsx",
          "title": "受控标签",
          "source": "import { Button, InputTag, Space } from \"react-kui\";\nimport { useState } from \"react\";\nexport default function App() {\n  const [tags, setTags] = useState([\"Design\", \"TypeScript\"]);\n  return (\n    <Space vertical>\n      <code>{tags.join(\" / \")}</code>\n      <InputTag value={tags} onChange={setTags} />\n      <Button size=\"small\" onClick={() => setTags([\"Design\", \"TypeScript\"])}>\n        重置\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-tag/demo/limit.tsx",
          "title": "数量限制",
          "source": "import { useState } from \"react\";\nimport { InputTag, Space } from \"react-kui\";\nexport default function App() {\n  const [tags, setTags] = useState([\"Design\", \"Develop\"]);\n  return (\n    <Space vertical>\n      <code>已输入 {tags.length} / 3</code>\n      <InputTag value={tags} onChange={setTags} max={3} placeholder=\"最多输入 3 项\" />\n      <InputTag\n        value={[\"Design\", \"Develop\", \"Test\", \"Release\"]}\n        maxTagCount={2}\n        clearable\n        placeholder=\"最多展示 2 项\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-tag/demo/separators.tsx",
          "title": "分隔符",
          "source": "import { useState } from \"react\";\nimport { InputTag } from \"react-kui\";\nexport default function App() {\n  const [tags, setTags] = useState<string[]>([]);\n  return (\n    <InputTag\n      value={tags}\n      onChange={setTags}\n      separators={[\",\", \";\"]}\n      placeholder=\"使用逗号或分号创建标签\"\n    />\n  );\n}"
        },
        {
          "id": "components/input-tag/demo/size.tsx",
          "title": "尺寸",
          "source": "import { useState } from \"react\";\nimport { InputTag, RadioButton, RadioGroup, Space } from \"react-kui\";\n\nexport default function App() {\n  const [size, setSize] = useState<\"small\" | \"medium\" | \"large\">(\"medium\");\n  return (\n    <Space vertical block>\n      <RadioGroup type=\"button\" value={size} onChange={(value) => setSize(value as typeof size)}>\n        <RadioButton value=\"large\" label=\"large\" />\n        <RadioButton value=\"medium\" label=\"Medium\" />\n        <RadioButton value=\"small\" label=\"small\" />\n      </RadioGroup>\n      <InputTag size={size} block value={[\"Design\"]} />\n      <InputTag size={size} block value={[\"Design\", \"Develop\"]} />\n      <InputTag size={size} block value={[\"Design\", \"Develop\", \"Release\"]} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-tag/demo/appearance.tsx",
          "title": "外观与禁用",
          "source": "import { InputTag, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <InputTag size=\"small\" theme=\"plain\" value={[\"Plain\"]} />\n      <InputTag theme=\"dashed\" value={[\"Outline\"]} />\n      <InputTag shape=\"square\" theme=\"outline\" value={[\"Outline\"]} />\n      <InputTag size=\"large\" shape=\"circle\" value={[\"Circle\"]} />\n      <InputTag disabled value={[\"Disabled\"]} />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "InputNumber",
      "import": "import { InputNumber } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/input-number",
      "props": [
        {
          "name": "value",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "InputNumber 的值",
          "descriptionEn": "InputNumber value"
        },
        {
          "name": "min",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "-Infinity",
          "descriptionZh": "最小值",
          "descriptionEn": "Minimum value"
        },
        {
          "name": "max",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "Infinity",
          "descriptionZh": "最大值",
          "descriptionEn": "Maximum value"
        },
        {
          "name": "step",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "1",
          "descriptionZh": "每次改变步数，可以为小数",
          "descriptionEn": "Step value for each change, can be a decimal"
        },
        {
          "name": "precision",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "数值精度",
          "descriptionEn": "Numerical precision"
        },
        {
          "name": "formatter",
          "type": "((value: string | number) => string) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定输入框展示值的格式",
          "descriptionEn": "Specifies the format of the value displayed in the input box"
        },
        {
          "name": "parser",
          "type": "((value: string) => string | number) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定从 formatter 里转换回数字的方式，和 formatter 搭配使用",
          "descriptionEn": "Specifies how to convert back from formatter to number, used with formatter"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "禁用",
          "descriptionEn": "Disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the input is read-only"
        },
        {
          "name": "controls",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示增减按钮",
          "descriptionEn": "Whether to show increase/decrease buttons"
        },
        {
          "name": "keyboard",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否允许通过上下方向键调整数值",
          "descriptionEn": "Whether the value can be adjusted with the up/down arrow keys"
        },
        {
          "name": "suffix",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义后缀",
          "descriptionEn": "Custom suffix"
        },
        {
          "name": "prefix",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "前缀内容",
          "descriptionEn": "Prefix content"
        },
        {
          "name": "addonBefore",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框外部前置附件",
          "descriptionEn": "Addon before the input"
        },
        {
          "name": "addonAfter",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框外部后置附件",
          "descriptionEn": "Addon after the input"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "组件呈现主题",
          "descriptionEn": "Component theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "组件的外观",
          "descriptionEn": "Component appearance"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框图标",
          "descriptionEn": "Input icon"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "输入框大小",
          "descriptionEn": "Input box size"
        },
        {
          "name": "placeholder",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入提示",
          "descriptionEn": "Input placeholder"
        },
        {
          "name": "onChange",
          "type": "((value: number | undefined) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "变化回调，清空时返回 `undefined`",
          "descriptionEn": "Change callback; returns `undefined` when cleared"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: number | undefined) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "变化回调，清空时返回 `undefined`",
          "descriptionEn": "Change callback; returns `undefined` when cleared"
        }
      ],
      "renderProps": [
        "formatter",
        "parser",
        "suffix",
        "prefix",
        "addonBefore",
        "addonAfter"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/input-number/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Button, InputGroup, Space, InputNumber } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(1),\n    change = (v: number | undefined) => setValue(v ?? 0);\n  return (\n    <Space style={{ fontSize: 12, maxWidth: 200 }} block vertical>\n      <code>value: {value}</code>\n      <InputNumber value={value} onChange={change} />\n      <code>readonly</code>\n      <InputNumber value={value} readOnly />\n      <code>disabled</code>\n      <InputNumber value={value} disabled />\n      <code>group</code>\n      <InputGroup>\n        <Button onClick={() => setValue((v) => v - 1)}>-</Button>\n        <InputNumber value={value} controls={false} onChange={change} />\n        <Button onClick={() => setValue((v) => v + 1)}>+</Button>\n      </InputGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-number/demo/format.tsx",
          "title": "高精度小数/格式化展示",
          "source": "import { useState } from \"react\";\nimport { Space, InputNumber } from \"react-kui\";\nexport default function App() {\n  const [n, setN] = useState(0.1),\n    [n1, setN1] = useState(0.1),\n    [n3, setN3] = useState(3.14159),\n    [n4, setN4] = useState(1000),\n    [n5, setN5] = useState(98),\n    [n7, setN7] = useState(111111);\n  const bind = (set: (v: number) => void) => (v: number | undefined) => set(v ?? 0);\n  return (\n    <Space vertical block>\n      <code>0.1+0.2 = 0.3 (yes), output：{n}</code>\n      <InputNumber step={0.2} value={n} onChange={bind(setN)} />\n      <code>step is 0.00000000000001, output：{n1}</code>\n      <InputNumber value={n1} min={0} max={10} step={0.00000000000001} onChange={bind(setN1)} />\n      <code>Keep 2 decimal places, output：{n3}</code>\n      <InputNumber precision={2} value={n3} onChange={bind(setN3)} />\n      <code>Currency, thousandths, output：{n4}</code>\n      <InputNumber\n        value={n4}\n        min={0}\n        formatter={(v) => `￥ ${v}`.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\n        parser={(v) => v.replace(/￥\\s?|(,*)/g, \"\")}\n        onChange={bind(setN4)}\n      />\n      <code>percent %, output：{n5}</code>\n      <InputNumber\n        value={n5}\n        min={0}\n        max={100}\n        formatter={(v) => `${v}%`}\n        parser={(v) => v.replace(\"%\", \"\")}\n        onChange={bind(setN5)}\n      />\n      <code>custom, output：{n7}</code>\n      <InputNumber\n        value={n7}\n        formatter={(v) => String(v).split(\"\").join(\"-\")}\n        parser={(v) => v.replace(/-/g, \"\")}\n        onChange={bind(setN7)}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-number/demo/ffix.tsx",
          "title": "扩展, 前缀、后缀与附件",
          "source": "import { CircleQuestionMark, LogoYen, UserPlus } from \"kui-icons\";\nimport { Button, Divider, InputNumber, Space, Tooltip } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <Space block vertical>\n        <InputNumber placeholder=\"Please input amount\" suffix=\"元\" prefix=\"¥\" />\n        <InputNumber placeholder=\"Please input amount\" step={50} suffix=\"元\" prefix=\"充值\" />\n        <InputNumber placeholder=\"Please input amount\" suffix=\".00\" />\n      </Space>\n      <Divider text=\"Addons\" />\n      <Space vertical block>\n        <InputNumber placeholder=\"Please input amount\" addonBefore=\"¥\" addonAfter=\"RMB\" />\n        <InputNumber placeholder=\"Please input weight\" addonAfter=\"kg\" />\n      </Space>\n      <Divider text=\"React nodes\" />\n      <Space vertical block>\n        <InputNumber\n          placeholder=\"请填写您的薪资\"\n          icon={LogoYen}\n          addonAfter={\n            <Tooltip title=\"此处如果不知道怎么填，请咨询管理员\">\n              <Button icon={CircleQuestionMark} />\n            </Tooltip>\n          }\n        />\n        <InputNumber\n          placeholder=\"Please input amount\"\n          addonBefore={<Button icon={UserPlus} />}\n          addonAfter={<Button>Top up</Button>}\n        />\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/input-number/demo/size.tsx",
          "title": "尺寸",
          "source": "import { LogoKui } from \"kui-icons\";\nimport { Space, InputNumber } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block>\n      <InputNumber placeholder=\"Large Input\" size=\"large\" icon={LogoKui} />\n      <InputNumber placeholder=\"Base Input\" icon={LogoKui} />\n      <InputNumber size=\"small\" placeholder=\"Small Input\" icon={LogoKui} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-number/demo/theme.tsx",
          "title": "外观档位",
          "source": "import { InputNumber, Space, type ThemeType } from \"react-kui\";\n\n// A number input is a text control, so it paints all six tiers: `fill` — what it does when nobody writes a\n// theme — plates the box, `outline` and `dashed` put a solid or dashed edge on it instead, `plain` leaves it\n// bare, `solid` plates it on the primary and inverts the digits, the placeholder and the steppers, and\n// `underlined` keeps only the bottom rule. The steppers are part of the box, so they follow the tier.\nconst tiers: ThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\", \"underlined\"];\n\nexport default function App() {\n  return (\n    <Space vertical block style={{ width: 220, maxWidth: \"100%\" }}>\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 4, justifyItems: \"start\" }}>\n          <code>theme: {tier}</code>\n          <InputNumber theme={tier} value={42} />\n        </div>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "InputOTP",
      "import": "import { InputOTP } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/input-otp",
      "props": [
        {
          "name": "value",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入值",
          "descriptionEn": "value"
        },
        {
          "name": "length",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "6",
          "descriptionZh": "输入框数量，按非负整数处理",
          "descriptionEn": "Number of inputs, normalized to a non-negative integer"
        },
        {
          "name": "type",
          "type": "\"number\" | \"text\" | undefined",
          "required": false,
          "enumValues": [
            "number",
            "text"
          ],
          "boolean": false,
          "defaultExpression": "\"number\"",
          "descriptionZh": "字符类型",
          "descriptionEn": "Character type"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether read-only"
        },
        {
          "name": "mask",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否隐藏内容",
          "descriptionEn": "Whether to mask the value"
        },
        {
          "name": "autoFocus",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否自动聚焦",
          "descriptionEn": "Whether to focus automatically"
        },
        {
          "name": "separator",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "分隔内容",
          "descriptionEn": "Separator content"
        },
        {
          "name": "validator",
          "type": "InputOTPValidator | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "单字符校验函数",
          "descriptionEn": "Character validator"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值变化回调",
          "descriptionEn": "Value change callback"
        },
        {
          "name": "onComplete",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入完成回调",
          "descriptionEn": "Completion callback"
        },
        {
          "name": "onFocus",
          "type": "((event: FocusEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框获得焦点时触发",
          "descriptionEn": "Triggered when an input receives focus"
        },
        {
          "name": "onBlur",
          "type": "((event: FocusEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框失去焦点时触发",
          "descriptionEn": "Triggered when an input loses focus"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocusCapture",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值变化回调",
          "descriptionEn": "Value change callback"
        },
        {
          "name": "onComplete",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入完成回调",
          "descriptionEn": "Completion callback"
        },
        {
          "name": "onFocus",
          "type": "((event: FocusEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框获得焦点时触发",
          "descriptionEn": "Triggered when an input receives focus"
        },
        {
          "name": "onBlur",
          "type": "((event: FocusEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "输入框失去焦点时触发",
          "descriptionEn": "Triggered when an input loses focus"
        }
      ],
      "renderProps": [
        "separator"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/input-otp/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { useState } from \"react\";\nimport { InputOTP, message, Space } from \"react-kui\";\n\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  const [text, setText] = useState(\"\");\n  return (\n    <Space vertical size=\"large\">\n      <div>Value: {value || \"-\"}</div>\n      <InputOTP\n        value={value}\n        onChange={setValue}\n        onComplete={(code) => message.success(`complete: ${code}`)}\n      />\n      <InputOTP value={text} onChange={setText} type=\"text\" length={4} mask />\n      <InputOTP value=\"123456\" size=\"small\" disabled />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-otp/demo/length.tsx",
          "title": "自定义长度",
          "source": "import { useState } from \"react\";\nimport { InputOTP, Space } from \"react-kui\";\n\nexport default function App() {\n  const [four, setFour] = useState(\"\");\n  const [six, setSix] = useState(\"\");\n  return (\n    <Space vertical>\n      <code>Value: {four || \"-\"}</code>\n      <InputOTP value={four} onChange={setFour} length={4} />\n      <InputOTP value={six} onChange={setSix} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-otp/demo/theme.tsx",
          "title": "主题与形状",
          "source": "import { InputOTP, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space vertical size=\"large\">\n      <InputOTP value=\"123456\" theme=\"fill\" />\n      <InputOTP value=\"123456\" theme=\"outline\" />\n      <InputOTP value=\"123456\" theme=\"underlined\" />\n      <InputOTP value=\"123456\" shape=\"square\" />\n      <InputOTP value=\"123456\" shape=\"circle\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-otp/demo/size.tsx",
          "title": "尺寸",
          "source": "import { InputOTP, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space vertical size=\"large\">\n      <InputOTP value=\"123456\" size=\"small\" />\n      <InputOTP value=\"123456\" />\n      <InputOTP value=\"123456\" size=\"large\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-otp/demo/state.tsx",
          "title": "禁用与只读",
          "source": "import { InputOTP, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space vertical size=\"large\">\n      <code>Disabled</code>\n      <InputOTP value=\"123456\" disabled />\n      <code>Readonly</code>\n      <InputOTP value=\"123456\" readOnly />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-otp/demo/separator.tsx",
          "title": "分隔符",
          "source": "import { InputOTP, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space vertical size=\"large\">\n      <InputOTP length={4} separator=\"-\" />\n      <InputOTP length={4} separator=\"/\" />\n      <InputOTP value=\"123456\" separator=\"•\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-otp/demo/paste.tsx",
          "title": "粘贴验证码",
          "source": "import { useState } from \"react\";\nimport { InputOTP, Space } from \"react-kui\";\n\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Space vertical>\n      <div>Copy and paste: 123456</div>\n      <InputOTP value={value} onChange={setValue} />\n      <div>Value: {value || \"-\"}</div>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/input-otp/demo/validator.tsx",
          "title": "输入验证",
          "source": "import { useState } from \"react\";\nimport { InputOTP, Space } from \"react-kui\";\n\nexport default function App() {\n  const [numberValue, setNumberValue] = useState(\"\");\n  const [letterValue, setLetterValue] = useState(\"\");\n  return (\n    <Space vertical size=\"large\">\n      <div>\n        <p>Any character</p>\n        <InputOTP value={letterValue} onChange={setLetterValue} type=\"text\" length={4} />\n      </div>\n      <div>\n        <p>Numbers only</p>\n        <InputOTP value={numberValue} onChange={setNumberValue} />\n      </div>\n      <div>\n        <p>Only uppercase letters allowed</p>\n        <InputOTP type=\"text\" length={4} validator={(char) => /^[A-Z]$/.test(char)} />\n      </div>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Content",
      "import": "import { Content } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/layout",
      "props": [
        {
          "name": "suffixCls",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"layout-content\"",
          "descriptionZh": "布局实现使用的基础类名后缀，生成 k-<suffixCls>；普通样式扩展应使用 className。",
          "descriptionEn": "Base class suffix used by the layout implementation to form k-<suffixCls>; use className for ordinary styling extensions."
        },
        {
          "name": "hasSider",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否包含侧边栏；未设置时自动检测 Sider",
          "descriptionEn": "Whether the layout contains a sider; detected automatically when omitted"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "布局主内容区域的内容。",
          "descriptionEn": "Content of the layout's main section."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Layout",
      "examples": [
        {
          "id": "components/layout/demo/basic.tsx",
          "title": "基础布局",
          "source": "import { Content, Flex, Footer, Header, Layout, Sider } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Flex className=\"demo-layout\" size=\"small\" wrap>\n        <Layout>\n          <Header>Header</Header>\n          <Content>Content</Content>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Sider>Sider</Sider>\n            <Content>Content</Content>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Content>Content</Content>\n            <Sider>Sider</Sider>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Sider>Sider</Sider>\n          <Layout>\n            <Header>Header</Header>\n            <Content>Content</Content>\n            <Footer>Footer</Footer>\n          </Layout>\n        </Layout>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/layout/demo/collapsible-sider.tsx",
          "title": "可折叠侧边栏",
          "source": "import { useState, type CSSProperties } from \"react\";\nimport { Button, Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  label: { display: \"grid\", placeItems: \"center\" },\n  labelText: {\n    gridArea: \"1 / 1\",\n    transition: \"opacity var(--kui-motion-duration) var(--kui-motion-easing)\",\n  },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false);\n\n  return (\n    <Layout style={styles.layout}>\n      <Sider collapsed={collapsed} collapsible style={styles.sider}>\n        <span style={styles.label}>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 0 : 1 }}>Sider</span>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 1 : 0 }}>S</span>\n        </span>\n      </Sider>\n      <Layout>\n        <Header style={styles.headerFooter}>\n          <Button size=\"small\" onClick={() => setCollapsed((value) => !value)}>\n            {collapsed ? \"Expand\" : \"Collapse\"}\n          </Button>\n        </Header>\n        <Content style={styles.content}>Content</Content>\n        <Footer style={styles.headerFooter}>Footer</Footer>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/nested.tsx",
          "title": "多层嵌套布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Header</Header>\n      <Layout>\n        <Sider width={120} style={styles.sider}>\n          Left Sider\n        </Sider>\n        <Layout>\n          <Content style={styles.content}>Content</Content>\n          <Footer style={styles.headerFooter}>Inner Footer</Footer>\n        </Layout>\n        <Sider width={120} style={styles.sider}>\n          Right Sider\n        </Sider>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/fixed-height.tsx",
          "title": "固定高度布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 360, overflow: \"hidden\" },\n  headerFooter: { flex: \"none\", padding: \"16px 24px\", background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  body: { minHeight: 0 },\n  content: {\n    minHeight: 0,\n    overflow: \"auto\",\n    padding: \"8px 24px\",\n    background: \"var(--kui-color-bg-2)\",\n  },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Fixed-height Layout</Header>\n      <Layout style={styles.body}>\n        <Sider width={140} style={styles.sider}>\n          Sider\n        </Sider>\n        <Content style={styles.content}>\n          {Array.from({ length: 20 }, (_, index) => (\n            <p key={index}>Scrollable content {index + 1}</p>\n          ))}\n        </Content>\n      </Layout>\n      <Footer style={styles.headerFooter}>Footer</Footer>\n    </Layout>\n  );\n}"
        }
      ]
    },
    {
      "name": "Footer",
      "import": "import { Footer } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/layout",
      "props": [
        {
          "name": "suffixCls",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"layout-footer\"",
          "descriptionZh": "布局实现使用的基础类名后缀，生成 k-<suffixCls>；普通样式扩展应使用 className。",
          "descriptionEn": "Base class suffix used by the layout implementation to form k-<suffixCls>; use className for ordinary styling extensions."
        },
        {
          "name": "hasSider",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否包含侧边栏；未设置时自动检测 Sider",
          "descriptionEn": "Whether the layout contains a sider; detected automatically when omitted"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "布局底部区域的内容。",
          "descriptionEn": "Content of the layout footer."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Layout",
      "examples": [
        {
          "id": "components/layout/demo/basic.tsx",
          "title": "基础布局",
          "source": "import { Content, Flex, Footer, Header, Layout, Sider } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Flex className=\"demo-layout\" size=\"small\" wrap>\n        <Layout>\n          <Header>Header</Header>\n          <Content>Content</Content>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Sider>Sider</Sider>\n            <Content>Content</Content>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Content>Content</Content>\n            <Sider>Sider</Sider>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Sider>Sider</Sider>\n          <Layout>\n            <Header>Header</Header>\n            <Content>Content</Content>\n            <Footer>Footer</Footer>\n          </Layout>\n        </Layout>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/layout/demo/collapsible-sider.tsx",
          "title": "可折叠侧边栏",
          "source": "import { useState, type CSSProperties } from \"react\";\nimport { Button, Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  label: { display: \"grid\", placeItems: \"center\" },\n  labelText: {\n    gridArea: \"1 / 1\",\n    transition: \"opacity var(--kui-motion-duration) var(--kui-motion-easing)\",\n  },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false);\n\n  return (\n    <Layout style={styles.layout}>\n      <Sider collapsed={collapsed} collapsible style={styles.sider}>\n        <span style={styles.label}>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 0 : 1 }}>Sider</span>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 1 : 0 }}>S</span>\n        </span>\n      </Sider>\n      <Layout>\n        <Header style={styles.headerFooter}>\n          <Button size=\"small\" onClick={() => setCollapsed((value) => !value)}>\n            {collapsed ? \"Expand\" : \"Collapse\"}\n          </Button>\n        </Header>\n        <Content style={styles.content}>Content</Content>\n        <Footer style={styles.headerFooter}>Footer</Footer>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/nested.tsx",
          "title": "多层嵌套布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Header</Header>\n      <Layout>\n        <Sider width={120} style={styles.sider}>\n          Left Sider\n        </Sider>\n        <Layout>\n          <Content style={styles.content}>Content</Content>\n          <Footer style={styles.headerFooter}>Inner Footer</Footer>\n        </Layout>\n        <Sider width={120} style={styles.sider}>\n          Right Sider\n        </Sider>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/fixed-height.tsx",
          "title": "固定高度布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 360, overflow: \"hidden\" },\n  headerFooter: { flex: \"none\", padding: \"16px 24px\", background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  body: { minHeight: 0 },\n  content: {\n    minHeight: 0,\n    overflow: \"auto\",\n    padding: \"8px 24px\",\n    background: \"var(--kui-color-bg-2)\",\n  },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Fixed-height Layout</Header>\n      <Layout style={styles.body}>\n        <Sider width={140} style={styles.sider}>\n          Sider\n        </Sider>\n        <Content style={styles.content}>\n          {Array.from({ length: 20 }, (_, index) => (\n            <p key={index}>Scrollable content {index + 1}</p>\n          ))}\n        </Content>\n      </Layout>\n      <Footer style={styles.headerFooter}>Footer</Footer>\n    </Layout>\n  );\n}"
        }
      ]
    },
    {
      "name": "Header",
      "import": "import { Header } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/layout",
      "props": [
        {
          "name": "suffixCls",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"layout-header\"",
          "descriptionZh": "布局实现使用的基础类名后缀，生成 k-<suffixCls>；普通样式扩展应使用 className。",
          "descriptionEn": "Base class suffix used by the layout implementation to form k-<suffixCls>; use className for ordinary styling extensions."
        },
        {
          "name": "hasSider",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否包含侧边栏；未设置时自动检测 Sider",
          "descriptionEn": "Whether the layout contains a sider; detected automatically when omitted"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "布局头部区域的内容。",
          "descriptionEn": "Content of the layout header."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Layout",
      "examples": [
        {
          "id": "components/layout/demo/basic.tsx",
          "title": "基础布局",
          "source": "import { Content, Flex, Footer, Header, Layout, Sider } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Flex className=\"demo-layout\" size=\"small\" wrap>\n        <Layout>\n          <Header>Header</Header>\n          <Content>Content</Content>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Sider>Sider</Sider>\n            <Content>Content</Content>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Content>Content</Content>\n            <Sider>Sider</Sider>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Sider>Sider</Sider>\n          <Layout>\n            <Header>Header</Header>\n            <Content>Content</Content>\n            <Footer>Footer</Footer>\n          </Layout>\n        </Layout>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/layout/demo/collapsible-sider.tsx",
          "title": "可折叠侧边栏",
          "source": "import { useState, type CSSProperties } from \"react\";\nimport { Button, Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  label: { display: \"grid\", placeItems: \"center\" },\n  labelText: {\n    gridArea: \"1 / 1\",\n    transition: \"opacity var(--kui-motion-duration) var(--kui-motion-easing)\",\n  },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false);\n\n  return (\n    <Layout style={styles.layout}>\n      <Sider collapsed={collapsed} collapsible style={styles.sider}>\n        <span style={styles.label}>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 0 : 1 }}>Sider</span>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 1 : 0 }}>S</span>\n        </span>\n      </Sider>\n      <Layout>\n        <Header style={styles.headerFooter}>\n          <Button size=\"small\" onClick={() => setCollapsed((value) => !value)}>\n            {collapsed ? \"Expand\" : \"Collapse\"}\n          </Button>\n        </Header>\n        <Content style={styles.content}>Content</Content>\n        <Footer style={styles.headerFooter}>Footer</Footer>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/nested.tsx",
          "title": "多层嵌套布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Header</Header>\n      <Layout>\n        <Sider width={120} style={styles.sider}>\n          Left Sider\n        </Sider>\n        <Layout>\n          <Content style={styles.content}>Content</Content>\n          <Footer style={styles.headerFooter}>Inner Footer</Footer>\n        </Layout>\n        <Sider width={120} style={styles.sider}>\n          Right Sider\n        </Sider>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/fixed-height.tsx",
          "title": "固定高度布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 360, overflow: \"hidden\" },\n  headerFooter: { flex: \"none\", padding: \"16px 24px\", background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  body: { minHeight: 0 },\n  content: {\n    minHeight: 0,\n    overflow: \"auto\",\n    padding: \"8px 24px\",\n    background: \"var(--kui-color-bg-2)\",\n  },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Fixed-height Layout</Header>\n      <Layout style={styles.body}>\n        <Sider width={140} style={styles.sider}>\n          Sider\n        </Sider>\n        <Content style={styles.content}>\n          {Array.from({ length: 20 }, (_, index) => (\n            <p key={index}>Scrollable content {index + 1}</p>\n          ))}\n        </Content>\n      </Layout>\n      <Footer style={styles.headerFooter}>Footer</Footer>\n    </Layout>\n  );\n}"
        }
      ]
    },
    {
      "name": "Layout",
      "import": "import { Layout } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/layout",
      "props": [
        {
          "name": "suffixCls",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "布局实现使用的基础类名后缀，生成 k-<suffixCls>；普通样式扩展应使用 className。",
          "descriptionEn": "Base class suffix used by the layout implementation to form k-<suffixCls>; use className for ordinary styling extensions."
        },
        {
          "name": "hasSider",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否包含侧边栏；未设置时自动检测 Sider",
          "descriptionEn": "Whether the layout contains a sider; detected automatically when omitted"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "布局子区域，如 Header、Content、Sider 和 Footer；嵌套布局也可作为内容。",
          "descriptionEn": "Layout sections such as Header, Content, Sider and Footer, including nested layouts."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [
        "Header",
        "Sider",
        "Content",
        "Footer"
      ],
      "examples": [
        {
          "id": "components/layout/demo/basic.tsx",
          "title": "基础布局",
          "source": "import { Content, Flex, Footer, Header, Layout, Sider } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Flex className=\"demo-layout\" size=\"small\" wrap>\n        <Layout>\n          <Header>Header</Header>\n          <Content>Content</Content>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Sider>Sider</Sider>\n            <Content>Content</Content>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Content>Content</Content>\n            <Sider>Sider</Sider>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Sider>Sider</Sider>\n          <Layout>\n            <Header>Header</Header>\n            <Content>Content</Content>\n            <Footer>Footer</Footer>\n          </Layout>\n        </Layout>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/layout/demo/collapsible-sider.tsx",
          "title": "可折叠侧边栏",
          "source": "import { useState, type CSSProperties } from \"react\";\nimport { Button, Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  label: { display: \"grid\", placeItems: \"center\" },\n  labelText: {\n    gridArea: \"1 / 1\",\n    transition: \"opacity var(--kui-motion-duration) var(--kui-motion-easing)\",\n  },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false);\n\n  return (\n    <Layout style={styles.layout}>\n      <Sider collapsed={collapsed} collapsible style={styles.sider}>\n        <span style={styles.label}>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 0 : 1 }}>Sider</span>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 1 : 0 }}>S</span>\n        </span>\n      </Sider>\n      <Layout>\n        <Header style={styles.headerFooter}>\n          <Button size=\"small\" onClick={() => setCollapsed((value) => !value)}>\n            {collapsed ? \"Expand\" : \"Collapse\"}\n          </Button>\n        </Header>\n        <Content style={styles.content}>Content</Content>\n        <Footer style={styles.headerFooter}>Footer</Footer>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/nested.tsx",
          "title": "多层嵌套布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Header</Header>\n      <Layout>\n        <Sider width={120} style={styles.sider}>\n          Left Sider\n        </Sider>\n        <Layout>\n          <Content style={styles.content}>Content</Content>\n          <Footer style={styles.headerFooter}>Inner Footer</Footer>\n        </Layout>\n        <Sider width={120} style={styles.sider}>\n          Right Sider\n        </Sider>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/fixed-height.tsx",
          "title": "固定高度布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 360, overflow: \"hidden\" },\n  headerFooter: { flex: \"none\", padding: \"16px 24px\", background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  body: { minHeight: 0 },\n  content: {\n    minHeight: 0,\n    overflow: \"auto\",\n    padding: \"8px 24px\",\n    background: \"var(--kui-color-bg-2)\",\n  },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Fixed-height Layout</Header>\n      <Layout style={styles.body}>\n        <Sider width={140} style={styles.sider}>\n          Sider\n        </Sider>\n        <Content style={styles.content}>\n          {Array.from({ length: 20 }, (_, index) => (\n            <p key={index}>Scrollable content {index + 1}</p>\n          ))}\n        </Content>\n      </Layout>\n      <Footer style={styles.headerFooter}>Footer</Footer>\n    </Layout>\n  );\n}"
        }
      ]
    },
    {
      "name": "Sider",
      "import": "import { Sider } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/layout",
      "props": [
        {
          "name": "suffixCls",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"layout-sider\"",
          "descriptionZh": "布局实现使用的基础类名后缀，生成 k-<suffixCls>；普通样式扩展应使用 className。",
          "descriptionEn": "Base class suffix used by the layout implementation to form k-<suffixCls>; use className for ordinary styling extensions."
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "200",
          "descriptionZh": "展开宽度",
          "descriptionEn": "Expanded width"
        },
        {
          "name": "collapsedWidth",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "80",
          "descriptionZh": "收起宽度",
          "descriptionEn": "Collapsed width"
        },
        {
          "name": "collapsible",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否启用收起样式",
          "descriptionEn": "Whether collapsed styling is enabled"
        },
        {
          "name": "collapsed",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "受控的收起状态",
          "descriptionEn": "Controlled collapsed state"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "侧栏内容，如导航菜单；宽度和折叠由 Sider 属性控制。",
          "descriptionEn": "Sidebar content such as navigation; Sider props control width and collapse."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Layout",
      "examples": [
        {
          "id": "components/layout/demo/basic.tsx",
          "title": "基础布局",
          "source": "import { Content, Flex, Footer, Header, Layout, Sider } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Flex className=\"demo-layout\" size=\"small\" wrap>\n        <Layout>\n          <Header>Header</Header>\n          <Content>Content</Content>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Sider>Sider</Sider>\n            <Content>Content</Content>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Header>Header</Header>\n          <Layout>\n            <Content>Content</Content>\n            <Sider>Sider</Sider>\n          </Layout>\n          <Footer>Footer</Footer>\n        </Layout>\n        <Layout>\n          <Sider>Sider</Sider>\n          <Layout>\n            <Header>Header</Header>\n            <Content>Content</Content>\n            <Footer>Footer</Footer>\n          </Layout>\n        </Layout>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/layout/demo/collapsible-sider.tsx",
          "title": "可折叠侧边栏",
          "source": "import { useState, type CSSProperties } from \"react\";\nimport { Button, Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  label: { display: \"grid\", placeItems: \"center\" },\n  labelText: {\n    gridArea: \"1 / 1\",\n    transition: \"opacity var(--kui-motion-duration) var(--kui-motion-easing)\",\n  },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false);\n\n  return (\n    <Layout style={styles.layout}>\n      <Sider collapsed={collapsed} collapsible style={styles.sider}>\n        <span style={styles.label}>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 0 : 1 }}>Sider</span>\n          <span style={{ ...styles.labelText, opacity: collapsed ? 1 : 0 }}>S</span>\n        </span>\n      </Sider>\n      <Layout>\n        <Header style={styles.headerFooter}>\n          <Button size=\"small\" onClick={() => setCollapsed((value) => !value)}>\n            {collapsed ? \"Expand\" : \"Collapse\"}\n          </Button>\n        </Header>\n        <Content style={styles.content}>Content</Content>\n        <Footer style={styles.headerFooter}>Footer</Footer>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/nested.tsx",
          "title": "多层嵌套布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 320, overflow: \"hidden\", textAlign: \"center\" },\n  headerFooter: { padding: 16, background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  content: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-2)\" },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Header</Header>\n      <Layout>\n        <Sider width={120} style={styles.sider}>\n          Left Sider\n        </Sider>\n        <Layout>\n          <Content style={styles.content}>Content</Content>\n          <Footer style={styles.headerFooter}>Inner Footer</Footer>\n        </Layout>\n        <Sider width={120} style={styles.sider}>\n          Right Sider\n        </Sider>\n      </Layout>\n    </Layout>\n  );\n}"
        },
        {
          "id": "components/layout/demo/fixed-height.tsx",
          "title": "固定高度布局",
          "source": "import type { CSSProperties } from \"react\";\nimport { Content, Footer, Header, Layout, Sider } from \"react-kui\";\n\nconst styles = {\n  layout: { height: 360, overflow: \"hidden\" },\n  headerFooter: { flex: \"none\", padding: \"16px 24px\", background: \"var(--kui-color-bg-3)\" },\n  sider: { display: \"grid\", placeItems: \"center\", background: \"var(--kui-color-bg-4)\" },\n  body: { minHeight: 0 },\n  content: {\n    minHeight: 0,\n    overflow: \"auto\",\n    padding: \"8px 24px\",\n    background: \"var(--kui-color-bg-2)\",\n  },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  return (\n    <Layout style={styles.layout}>\n      <Header style={styles.headerFooter}>Fixed-height Layout</Header>\n      <Layout style={styles.body}>\n        <Sider width={140} style={styles.sider}>\n          Sider\n        </Sider>\n        <Content style={styles.content}>\n          {Array.from({ length: 20 }, (_, index) => (\n            <p key={index}>Scrollable content {index + 1}</p>\n          ))}\n        </Content>\n      </Layout>\n      <Footer style={styles.headerFooter}>Footer</Footer>\n    </Layout>\n  );\n}"
        }
      ]
    },
    {
      "name": "Menu",
      "import": "import { Menu } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/menu",
      "props": [
        {
          "name": "theme",
          "type": "\"dark\" | \"light\" | undefined",
          "required": false,
          "enumValues": [
            "dark",
            "light"
          ],
          "boolean": false,
          "descriptionZh": "局部主题，未设置时继承全局主题",
          "descriptionEn": "Local theme; inherits global theme when omitted"
        },
        {
          "name": "mode",
          "type": "DirectionType | undefined",
          "required": false,
          "enumValues": [
            "inline",
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"vertical\"",
          "descriptionZh": "菜单类型",
          "descriptionEn": "Menu type"
        },
        {
          "name": "value",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前选中的菜单项",
          "descriptionEn": "Currently selected menu items"
        },
        {
          "name": "selectedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前选中的菜单项",
          "descriptionEn": "Currently selected menu items"
        },
        {
          "name": "accordion",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只允许菜单展开一项",
          "descriptionEn": "Whether only one menu item can be expanded"
        },
        {
          "name": "items",
          "type": "MenuOptionsProps[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单数据",
          "descriptionEn": "Menu data"
        },
        {
          "name": "inlineCollapsed",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "inline 时菜单是否收起状态",
          "descriptionEn": "Whether the menu is collapsed in inline mode"
        },
        {
          "name": "collapsedTooltip",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "收起时是否显示无子菜单项的文字提示",
          "descriptionEn": "Whether leaf items show a tooltip when collapsed"
        },
        {
          "name": "openKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前展开的 SubMenu 菜单项 key 数组",
          "descriptionEn": "Currently expanded SubMenu menu item key array"
        },
        {
          "name": "onSelect",
          "type": "((data: MenuSelectEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击 MenuItem 调用此函数",
          "descriptionEn": "Called when MenuItem is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((openKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "SubMenu 展开/关闭的回调",
          "descriptionEn": "Callback when SubMenu expands/collapses"
        },
        {
          "name": "onChange",
          "type": "((selectedKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中 key 集合变化时触发",
          "descriptionEn": "Called when the selected key collection changes"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单子集",
          "descriptionEn": "Menu children"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onSelect",
          "type": "((data: MenuSelectEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击 MenuItem 调用此函数",
          "descriptionEn": "Called when MenuItem is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((openKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "SubMenu 展开/关闭的回调",
          "descriptionEn": "Callback when SubMenu expands/collapses"
        },
        {
          "name": "onChange",
          "type": "((selectedKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中 key 集合变化时触发",
          "descriptionEn": "Called when the selected key collection changes"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": [
          "Use selectedKeys or value with onChange for selection; openKeys with onOpenChange controls expanded submenus. Do not use Vue update events."
        ]
      },
      "children": [
        "MenuItem",
        "SubMenu",
        "MenuGroup",
        "MenuDivider"
      ],
      "examples": [
        {
          "id": "components/menu/demo/basic.tsx",
          "title": "顶部导航",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Navigation One\", key: \"1\", icon: Mail },\n  { title: \"Navigation Two\", key: \"2\", icon: Heart, disabled: true },\n  {\n    title: \"Navigation - Submenu\",\n    key: \"3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 1\", key: \"3-1\" },\n      { title: \"Option 2\", key: \"3-2\" },\n      { title: \"Option 3\", key: \"3-3\" },\n      { title: \"Option 4\", key: \"3-4\" },\n      {\n        title: \"Submenu\",\n        key: \"3-5\",\n        children: [1, 2, 3, 4].map((n) => ({ title: `Option ${n}`, key: `3-5-${n}` })),\n      },\n    ],\n  },\n  {\n    title: (\n      <a href=\"https://react.k-ui.cn\" target=\"_blank\" rel=\"noreferrer\">\n        Navigation - Link\n      </a>\n    ),\n    key: \"4\",\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1\"]);\n  return <Menu mode=\"horizontal\" value={current} onChange={setCurrent} items={items} />;\n}"
        },
        {
          "id": "components/menu/demo/inline.tsx",
          "title": "内嵌菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    key: \"sub1\",\n    icon: Mail,\n    title: \"Navigation One\",\n    children: [\n      { key: \"1-1\", icon: Heart, title: \"Option 1\" },\n      { key: \"1-2\", icon: Heart, title: \"Option 2\" },\n      { key: \"1-3\", icon: Heart, title: \"Option 3\" },\n      { key: \"1-4\", icon: Heart, title: \"Option 4\" },\n    ],\n  },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        mode=\"inline\"\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/accordion.tsx",
          "title": "只展开当前父级菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    title: \"Navigation One\",\n    key: \"sub1\",\n    icon: Mail,\n    children: [\n      { title: \"Option 1\", key: \"1-1\" },\n      { title: \"Option 2\", key: \"1-2\" },\n      { title: \"Option 3\", key: \"1-3\" },\n      { title: \"Option 4\", key: \"1-4\" },\n    ],\n  },\n  {\n    title: \"Navigation Two\",\n    key: \"sub2\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"2-1\" },\n      { title: \"Option 6\", key: \"2-2\" },\n      {\n        title: \"Submenu\",\n        key: \"sub2-1\",\n        children: [\n          { title: \"Option 7\", key: \"2-1-1\" },\n          { title: \"Option 8\", key: \"2-1-2\" },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"sub3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"3-1\" },\n      { title: \"Option 10\", key: \"3-2\" },\n      { title: \"Option 11\", key: \"3-3\" },\n      { title: \"Option 12\", key: \"3-4\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        accordion\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/vertical.tsx",
          "title": "垂直菜单",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu value={current} onChange={setCurrent} mode=\"vertical\" items={items} />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/theme.tsx",
          "title": "主题",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Switch, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [dark, setDark] = useState(true),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Switch\n        trueText=\"dark\"\n        falseText=\"light\"\n        checked={dark}\n        onChange={(value) => setDark(Boolean(value))}\n      />\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/mode.tsx",
          "title": "切换菜单类型",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, type DirectionType, Space, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]),\n    [mode, setMode] = useState<DirectionType>(\"inline\"),\n    [dark, setDark] = useState(false);\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => setMode(mode === \"inline\" ? \"vertical\" : \"inline\")}>\n          Change Mode\n        </Button>\n        <Button onClick={() => setDark(!dark)}>Change Theme</Button>\n      </Space>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode={mode}\n        style={{ width: 256 }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/collapsed.tsx",
          "title": "缩起内嵌菜单",
          "source": "import { Heart, Mail, PanelLeftClose, PanelLeftOpen, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Menu, Switch, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Option 1\", key: \"1-1\", icon: Mail },\n  { title: \"Option 2\", key: \"2-1\", icon: Table },\n  {\n    title: \"Navigation Two\",\n    key: \"3-1\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"3-1-1\", icon: Mail },\n      { title: \"Option 6\", key: \"3-1-2\", icon: Mail },\n      {\n        title: \"SubMenu\",\n        key: \"3-1-3\",\n        icon: Mail,\n        children: [\n          { title: \"Option 7\", key: \"3-1-3-1\", icon: Mail },\n          { title: \"Option 8\", key: \"3-1-3-2\", icon: Mail },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"4-1\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"4-1-1\", icon: Mail },\n      { title: \"Option 10\", key: \"4-1-2\", icon: Mail },\n      { title: \"Option 11\", key: \"4-1-3\", icon: Mail },\n      { title: \"Option 12\", key: \"4-1-4\", icon: Mail },\n    ],\n  },\n];\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"3-1\", \"3-1-3\"]),\n    [collapsedTooltip, setCollapsedTooltip] = useState(true);\n  return (\n    <div style={{ width: 256 }}>\n      <Button\n        onClick={() => setCollapsed(!collapsed)}\n        icon={collapsed ? PanelLeftOpen : PanelLeftClose}\n        type=\"primary\"\n      />\n      <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8, marginLeft: 12 }}>\n        Tooltip\n        <Switch\n          checked={collapsedTooltip}\n          onChange={(checked) => setCollapsedTooltip(Boolean(checked))}\n        />\n      </label>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme=\"dark\"\n        inlineCollapsed={collapsed}\n        collapsedTooltip={collapsedTooltip}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/group.tsx",
          "title": "分组与分割线",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, MenuDivider, MenuGroup, MenuItem, SubMenu } from \"react-kui\";\n\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        mode=\"inline\"\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n      >\n        <MenuGroup title=\"Application\">\n          <MenuItem itemKey=\"1-1\" icon={Mail}>\n            Navigation One\n          </MenuItem>\n          <MenuItem itemKey=\"1-2\" icon={Heart}>\n            Navigation Two\n          </MenuItem>\n          <MenuItem itemKey=\"1-3\" icon={Settings} disabled>\n            Navigation Three\n          </MenuItem>\n        </MenuGroup>\n        <MenuDivider />\n        <SubMenu itemKey=\"sub1\" title=\"Navigation Four\" icon={Mail}>\n          <MenuGroup title=\"Options\">\n            <MenuItem itemKey=\"4-1\">Option 1</MenuItem>\n            <MenuItem itemKey=\"4-2\">Option 2</MenuItem>\n          </MenuGroup>\n          <MenuDivider />\n          <MenuItem itemKey=\"4-3\">Option 3</MenuItem>\n        </SubMenu>\n      </Menu>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "MenuDivider",
      "import": "import { MenuDivider } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/menu",
      "props": [],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Menu",
      "examples": [
        {
          "id": "components/menu/demo/basic.tsx",
          "title": "顶部导航",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Navigation One\", key: \"1\", icon: Mail },\n  { title: \"Navigation Two\", key: \"2\", icon: Heart, disabled: true },\n  {\n    title: \"Navigation - Submenu\",\n    key: \"3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 1\", key: \"3-1\" },\n      { title: \"Option 2\", key: \"3-2\" },\n      { title: \"Option 3\", key: \"3-3\" },\n      { title: \"Option 4\", key: \"3-4\" },\n      {\n        title: \"Submenu\",\n        key: \"3-5\",\n        children: [1, 2, 3, 4].map((n) => ({ title: `Option ${n}`, key: `3-5-${n}` })),\n      },\n    ],\n  },\n  {\n    title: (\n      <a href=\"https://react.k-ui.cn\" target=\"_blank\" rel=\"noreferrer\">\n        Navigation - Link\n      </a>\n    ),\n    key: \"4\",\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1\"]);\n  return <Menu mode=\"horizontal\" value={current} onChange={setCurrent} items={items} />;\n}"
        },
        {
          "id": "components/menu/demo/inline.tsx",
          "title": "内嵌菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    key: \"sub1\",\n    icon: Mail,\n    title: \"Navigation One\",\n    children: [\n      { key: \"1-1\", icon: Heart, title: \"Option 1\" },\n      { key: \"1-2\", icon: Heart, title: \"Option 2\" },\n      { key: \"1-3\", icon: Heart, title: \"Option 3\" },\n      { key: \"1-4\", icon: Heart, title: \"Option 4\" },\n    ],\n  },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        mode=\"inline\"\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/accordion.tsx",
          "title": "只展开当前父级菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    title: \"Navigation One\",\n    key: \"sub1\",\n    icon: Mail,\n    children: [\n      { title: \"Option 1\", key: \"1-1\" },\n      { title: \"Option 2\", key: \"1-2\" },\n      { title: \"Option 3\", key: \"1-3\" },\n      { title: \"Option 4\", key: \"1-4\" },\n    ],\n  },\n  {\n    title: \"Navigation Two\",\n    key: \"sub2\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"2-1\" },\n      { title: \"Option 6\", key: \"2-2\" },\n      {\n        title: \"Submenu\",\n        key: \"sub2-1\",\n        children: [\n          { title: \"Option 7\", key: \"2-1-1\" },\n          { title: \"Option 8\", key: \"2-1-2\" },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"sub3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"3-1\" },\n      { title: \"Option 10\", key: \"3-2\" },\n      { title: \"Option 11\", key: \"3-3\" },\n      { title: \"Option 12\", key: \"3-4\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        accordion\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/vertical.tsx",
          "title": "垂直菜单",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu value={current} onChange={setCurrent} mode=\"vertical\" items={items} />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/theme.tsx",
          "title": "主题",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Switch, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [dark, setDark] = useState(true),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Switch\n        trueText=\"dark\"\n        falseText=\"light\"\n        checked={dark}\n        onChange={(value) => setDark(Boolean(value))}\n      />\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/mode.tsx",
          "title": "切换菜单类型",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, type DirectionType, Space, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]),\n    [mode, setMode] = useState<DirectionType>(\"inline\"),\n    [dark, setDark] = useState(false);\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => setMode(mode === \"inline\" ? \"vertical\" : \"inline\")}>\n          Change Mode\n        </Button>\n        <Button onClick={() => setDark(!dark)}>Change Theme</Button>\n      </Space>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode={mode}\n        style={{ width: 256 }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/collapsed.tsx",
          "title": "缩起内嵌菜单",
          "source": "import { Heart, Mail, PanelLeftClose, PanelLeftOpen, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Menu, Switch, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Option 1\", key: \"1-1\", icon: Mail },\n  { title: \"Option 2\", key: \"2-1\", icon: Table },\n  {\n    title: \"Navigation Two\",\n    key: \"3-1\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"3-1-1\", icon: Mail },\n      { title: \"Option 6\", key: \"3-1-2\", icon: Mail },\n      {\n        title: \"SubMenu\",\n        key: \"3-1-3\",\n        icon: Mail,\n        children: [\n          { title: \"Option 7\", key: \"3-1-3-1\", icon: Mail },\n          { title: \"Option 8\", key: \"3-1-3-2\", icon: Mail },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"4-1\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"4-1-1\", icon: Mail },\n      { title: \"Option 10\", key: \"4-1-2\", icon: Mail },\n      { title: \"Option 11\", key: \"4-1-3\", icon: Mail },\n      { title: \"Option 12\", key: \"4-1-4\", icon: Mail },\n    ],\n  },\n];\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"3-1\", \"3-1-3\"]),\n    [collapsedTooltip, setCollapsedTooltip] = useState(true);\n  return (\n    <div style={{ width: 256 }}>\n      <Button\n        onClick={() => setCollapsed(!collapsed)}\n        icon={collapsed ? PanelLeftOpen : PanelLeftClose}\n        type=\"primary\"\n      />\n      <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8, marginLeft: 12 }}>\n        Tooltip\n        <Switch\n          checked={collapsedTooltip}\n          onChange={(checked) => setCollapsedTooltip(Boolean(checked))}\n        />\n      </label>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme=\"dark\"\n        inlineCollapsed={collapsed}\n        collapsedTooltip={collapsedTooltip}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/group.tsx",
          "title": "分组与分割线",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, MenuDivider, MenuGroup, MenuItem, SubMenu } from \"react-kui\";\n\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        mode=\"inline\"\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n      >\n        <MenuGroup title=\"Application\">\n          <MenuItem itemKey=\"1-1\" icon={Mail}>\n            Navigation One\n          </MenuItem>\n          <MenuItem itemKey=\"1-2\" icon={Heart}>\n            Navigation Two\n          </MenuItem>\n          <MenuItem itemKey=\"1-3\" icon={Settings} disabled>\n            Navigation Three\n          </MenuItem>\n        </MenuGroup>\n        <MenuDivider />\n        <SubMenu itemKey=\"sub1\" title=\"Navigation Four\" icon={Mail}>\n          <MenuGroup title=\"Options\">\n            <MenuItem itemKey=\"4-1\">Option 1</MenuItem>\n            <MenuItem itemKey=\"4-2\">Option 2</MenuItem>\n          </MenuGroup>\n          <MenuDivider />\n          <MenuItem itemKey=\"4-3\">Option 3</MenuItem>\n        </SubMenu>\n      </Menu>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "MenuGroup",
      "import": "import { MenuGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/menu",
      "props": [
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "分组标题",
          "descriptionEn": "Group title"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单子集",
          "descriptionEn": "Menu children"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "title",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Menu",
      "examples": [
        {
          "id": "components/menu/demo/basic.tsx",
          "title": "顶部导航",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Navigation One\", key: \"1\", icon: Mail },\n  { title: \"Navigation Two\", key: \"2\", icon: Heart, disabled: true },\n  {\n    title: \"Navigation - Submenu\",\n    key: \"3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 1\", key: \"3-1\" },\n      { title: \"Option 2\", key: \"3-2\" },\n      { title: \"Option 3\", key: \"3-3\" },\n      { title: \"Option 4\", key: \"3-4\" },\n      {\n        title: \"Submenu\",\n        key: \"3-5\",\n        children: [1, 2, 3, 4].map((n) => ({ title: `Option ${n}`, key: `3-5-${n}` })),\n      },\n    ],\n  },\n  {\n    title: (\n      <a href=\"https://react.k-ui.cn\" target=\"_blank\" rel=\"noreferrer\">\n        Navigation - Link\n      </a>\n    ),\n    key: \"4\",\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1\"]);\n  return <Menu mode=\"horizontal\" value={current} onChange={setCurrent} items={items} />;\n}"
        },
        {
          "id": "components/menu/demo/inline.tsx",
          "title": "内嵌菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    key: \"sub1\",\n    icon: Mail,\n    title: \"Navigation One\",\n    children: [\n      { key: \"1-1\", icon: Heart, title: \"Option 1\" },\n      { key: \"1-2\", icon: Heart, title: \"Option 2\" },\n      { key: \"1-3\", icon: Heart, title: \"Option 3\" },\n      { key: \"1-4\", icon: Heart, title: \"Option 4\" },\n    ],\n  },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        mode=\"inline\"\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/accordion.tsx",
          "title": "只展开当前父级菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    title: \"Navigation One\",\n    key: \"sub1\",\n    icon: Mail,\n    children: [\n      { title: \"Option 1\", key: \"1-1\" },\n      { title: \"Option 2\", key: \"1-2\" },\n      { title: \"Option 3\", key: \"1-3\" },\n      { title: \"Option 4\", key: \"1-4\" },\n    ],\n  },\n  {\n    title: \"Navigation Two\",\n    key: \"sub2\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"2-1\" },\n      { title: \"Option 6\", key: \"2-2\" },\n      {\n        title: \"Submenu\",\n        key: \"sub2-1\",\n        children: [\n          { title: \"Option 7\", key: \"2-1-1\" },\n          { title: \"Option 8\", key: \"2-1-2\" },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"sub3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"3-1\" },\n      { title: \"Option 10\", key: \"3-2\" },\n      { title: \"Option 11\", key: \"3-3\" },\n      { title: \"Option 12\", key: \"3-4\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        accordion\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/vertical.tsx",
          "title": "垂直菜单",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu value={current} onChange={setCurrent} mode=\"vertical\" items={items} />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/theme.tsx",
          "title": "主题",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Switch, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [dark, setDark] = useState(true),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Switch\n        trueText=\"dark\"\n        falseText=\"light\"\n        checked={dark}\n        onChange={(value) => setDark(Boolean(value))}\n      />\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/mode.tsx",
          "title": "切换菜单类型",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, type DirectionType, Space, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]),\n    [mode, setMode] = useState<DirectionType>(\"inline\"),\n    [dark, setDark] = useState(false);\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => setMode(mode === \"inline\" ? \"vertical\" : \"inline\")}>\n          Change Mode\n        </Button>\n        <Button onClick={() => setDark(!dark)}>Change Theme</Button>\n      </Space>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode={mode}\n        style={{ width: 256 }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/collapsed.tsx",
          "title": "缩起内嵌菜单",
          "source": "import { Heart, Mail, PanelLeftClose, PanelLeftOpen, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Menu, Switch, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Option 1\", key: \"1-1\", icon: Mail },\n  { title: \"Option 2\", key: \"2-1\", icon: Table },\n  {\n    title: \"Navigation Two\",\n    key: \"3-1\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"3-1-1\", icon: Mail },\n      { title: \"Option 6\", key: \"3-1-2\", icon: Mail },\n      {\n        title: \"SubMenu\",\n        key: \"3-1-3\",\n        icon: Mail,\n        children: [\n          { title: \"Option 7\", key: \"3-1-3-1\", icon: Mail },\n          { title: \"Option 8\", key: \"3-1-3-2\", icon: Mail },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"4-1\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"4-1-1\", icon: Mail },\n      { title: \"Option 10\", key: \"4-1-2\", icon: Mail },\n      { title: \"Option 11\", key: \"4-1-3\", icon: Mail },\n      { title: \"Option 12\", key: \"4-1-4\", icon: Mail },\n    ],\n  },\n];\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"3-1\", \"3-1-3\"]),\n    [collapsedTooltip, setCollapsedTooltip] = useState(true);\n  return (\n    <div style={{ width: 256 }}>\n      <Button\n        onClick={() => setCollapsed(!collapsed)}\n        icon={collapsed ? PanelLeftOpen : PanelLeftClose}\n        type=\"primary\"\n      />\n      <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8, marginLeft: 12 }}>\n        Tooltip\n        <Switch\n          checked={collapsedTooltip}\n          onChange={(checked) => setCollapsedTooltip(Boolean(checked))}\n        />\n      </label>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme=\"dark\"\n        inlineCollapsed={collapsed}\n        collapsedTooltip={collapsedTooltip}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/group.tsx",
          "title": "分组与分割线",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, MenuDivider, MenuGroup, MenuItem, SubMenu } from \"react-kui\";\n\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        mode=\"inline\"\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n      >\n        <MenuGroup title=\"Application\">\n          <MenuItem itemKey=\"1-1\" icon={Mail}>\n            Navigation One\n          </MenuItem>\n          <MenuItem itemKey=\"1-2\" icon={Heart}>\n            Navigation Two\n          </MenuItem>\n          <MenuItem itemKey=\"1-3\" icon={Settings} disabled>\n            Navigation Three\n          </MenuItem>\n        </MenuGroup>\n        <MenuDivider />\n        <SubMenu itemKey=\"sub1\" title=\"Navigation Four\" icon={Mail}>\n          <MenuGroup title=\"Options\">\n            <MenuItem itemKey=\"4-1\">Option 1</MenuItem>\n            <MenuItem itemKey=\"4-2\">Option 2</MenuItem>\n          </MenuGroup>\n          <MenuDivider />\n          <MenuItem itemKey=\"4-3\">Option 3</MenuItem>\n        </SubMenu>\n      </Menu>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "MenuItem",
      "import": "import { MenuItem } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/menu",
      "props": [
        {
          "name": "itemKey",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "item 的唯一标志",
          "descriptionEn": "Unique identifier for item"
        },
        {
          "name": "menuKey",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单身份标识的兼容回退值，仅在未设置 itemKey 时使用；新代码优先使用 itemKey。",
          "descriptionEn": "Compatibility fallback for item identity, used only when itemKey is absent; prefer itemKey in new code."
        },
        {
          "name": "icon",
          "type": "React.ReactNode | IconType[]",
          "required": false,
          "boolean": false,
          "descriptionZh": "item 的图标",
          "descriptionEn": "Item icon"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "分组标题",
          "descriptionEn": "Group title"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether disabled"
        },
        {
          "name": "onClick",
          "type": "React.MouseEventHandler<HTMLLIElement> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击菜单项时触发",
          "descriptionEn": "Called when the menu item is activated"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单子集",
          "descriptionEn": "Menu children"
        },
        {
          "name": "className",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"\"",
          "descriptionZh": "追加到菜单项 li 元素的 CSS 类名。",
          "descriptionEn": "Additional CSS classes on the menu item's li element."
        },
        {
          "name": "style",
          "type": "React.CSSProperties | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单项 li 元素的内联样式；内联模式嵌套缩进可能覆盖 paddingLeft。",
          "descriptionEn": "Inline styles on the menu item's li element; nested inline-menu indentation may override paddingLeft."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onClick",
          "type": "React.MouseEventHandler<HTMLLIElement> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击菜单项时触发",
          "descriptionEn": "Called when the menu item is activated"
        }
      ],
      "renderProps": [
        "icon",
        "title",
        "children"
      ],
      "behavior": {
        "rules": [
          "Use itemKey to identify the menu item. React key alone is not forwarded as itemKey."
        ]
      },
      "children": [],
      "parent": "Menu",
      "examples": [
        {
          "id": "components/menu/demo/basic.tsx",
          "title": "顶部导航",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Navigation One\", key: \"1\", icon: Mail },\n  { title: \"Navigation Two\", key: \"2\", icon: Heart, disabled: true },\n  {\n    title: \"Navigation - Submenu\",\n    key: \"3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 1\", key: \"3-1\" },\n      { title: \"Option 2\", key: \"3-2\" },\n      { title: \"Option 3\", key: \"3-3\" },\n      { title: \"Option 4\", key: \"3-4\" },\n      {\n        title: \"Submenu\",\n        key: \"3-5\",\n        children: [1, 2, 3, 4].map((n) => ({ title: `Option ${n}`, key: `3-5-${n}` })),\n      },\n    ],\n  },\n  {\n    title: (\n      <a href=\"https://react.k-ui.cn\" target=\"_blank\" rel=\"noreferrer\">\n        Navigation - Link\n      </a>\n    ),\n    key: \"4\",\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1\"]);\n  return <Menu mode=\"horizontal\" value={current} onChange={setCurrent} items={items} />;\n}"
        },
        {
          "id": "components/menu/demo/inline.tsx",
          "title": "内嵌菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    key: \"sub1\",\n    icon: Mail,\n    title: \"Navigation One\",\n    children: [\n      { key: \"1-1\", icon: Heart, title: \"Option 1\" },\n      { key: \"1-2\", icon: Heart, title: \"Option 2\" },\n      { key: \"1-3\", icon: Heart, title: \"Option 3\" },\n      { key: \"1-4\", icon: Heart, title: \"Option 4\" },\n    ],\n  },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        mode=\"inline\"\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/accordion.tsx",
          "title": "只展开当前父级菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    title: \"Navigation One\",\n    key: \"sub1\",\n    icon: Mail,\n    children: [\n      { title: \"Option 1\", key: \"1-1\" },\n      { title: \"Option 2\", key: \"1-2\" },\n      { title: \"Option 3\", key: \"1-3\" },\n      { title: \"Option 4\", key: \"1-4\" },\n    ],\n  },\n  {\n    title: \"Navigation Two\",\n    key: \"sub2\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"2-1\" },\n      { title: \"Option 6\", key: \"2-2\" },\n      {\n        title: \"Submenu\",\n        key: \"sub2-1\",\n        children: [\n          { title: \"Option 7\", key: \"2-1-1\" },\n          { title: \"Option 8\", key: \"2-1-2\" },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"sub3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"3-1\" },\n      { title: \"Option 10\", key: \"3-2\" },\n      { title: \"Option 11\", key: \"3-3\" },\n      { title: \"Option 12\", key: \"3-4\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        accordion\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/vertical.tsx",
          "title": "垂直菜单",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu value={current} onChange={setCurrent} mode=\"vertical\" items={items} />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/theme.tsx",
          "title": "主题",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Switch, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [dark, setDark] = useState(true),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Switch\n        trueText=\"dark\"\n        falseText=\"light\"\n        checked={dark}\n        onChange={(value) => setDark(Boolean(value))}\n      />\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/mode.tsx",
          "title": "切换菜单类型",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, type DirectionType, Space, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]),\n    [mode, setMode] = useState<DirectionType>(\"inline\"),\n    [dark, setDark] = useState(false);\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => setMode(mode === \"inline\" ? \"vertical\" : \"inline\")}>\n          Change Mode\n        </Button>\n        <Button onClick={() => setDark(!dark)}>Change Theme</Button>\n      </Space>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode={mode}\n        style={{ width: 256 }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/collapsed.tsx",
          "title": "缩起内嵌菜单",
          "source": "import { Heart, Mail, PanelLeftClose, PanelLeftOpen, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Menu, Switch, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Option 1\", key: \"1-1\", icon: Mail },\n  { title: \"Option 2\", key: \"2-1\", icon: Table },\n  {\n    title: \"Navigation Two\",\n    key: \"3-1\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"3-1-1\", icon: Mail },\n      { title: \"Option 6\", key: \"3-1-2\", icon: Mail },\n      {\n        title: \"SubMenu\",\n        key: \"3-1-3\",\n        icon: Mail,\n        children: [\n          { title: \"Option 7\", key: \"3-1-3-1\", icon: Mail },\n          { title: \"Option 8\", key: \"3-1-3-2\", icon: Mail },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"4-1\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"4-1-1\", icon: Mail },\n      { title: \"Option 10\", key: \"4-1-2\", icon: Mail },\n      { title: \"Option 11\", key: \"4-1-3\", icon: Mail },\n      { title: \"Option 12\", key: \"4-1-4\", icon: Mail },\n    ],\n  },\n];\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"3-1\", \"3-1-3\"]),\n    [collapsedTooltip, setCollapsedTooltip] = useState(true);\n  return (\n    <div style={{ width: 256 }}>\n      <Button\n        onClick={() => setCollapsed(!collapsed)}\n        icon={collapsed ? PanelLeftOpen : PanelLeftClose}\n        type=\"primary\"\n      />\n      <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8, marginLeft: 12 }}>\n        Tooltip\n        <Switch\n          checked={collapsedTooltip}\n          onChange={(checked) => setCollapsedTooltip(Boolean(checked))}\n        />\n      </label>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme=\"dark\"\n        inlineCollapsed={collapsed}\n        collapsedTooltip={collapsedTooltip}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/group.tsx",
          "title": "分组与分割线",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, MenuDivider, MenuGroup, MenuItem, SubMenu } from \"react-kui\";\n\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        mode=\"inline\"\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n      >\n        <MenuGroup title=\"Application\">\n          <MenuItem itemKey=\"1-1\" icon={Mail}>\n            Navigation One\n          </MenuItem>\n          <MenuItem itemKey=\"1-2\" icon={Heart}>\n            Navigation Two\n          </MenuItem>\n          <MenuItem itemKey=\"1-3\" icon={Settings} disabled>\n            Navigation Three\n          </MenuItem>\n        </MenuGroup>\n        <MenuDivider />\n        <SubMenu itemKey=\"sub1\" title=\"Navigation Four\" icon={Mail}>\n          <MenuGroup title=\"Options\">\n            <MenuItem itemKey=\"4-1\">Option 1</MenuItem>\n            <MenuItem itemKey=\"4-2\">Option 2</MenuItem>\n          </MenuGroup>\n          <MenuDivider />\n          <MenuItem itemKey=\"4-3\">Option 3</MenuItem>\n        </SubMenu>\n      </Menu>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "SubMenu",
      "import": "import { SubMenu } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/menu",
      "props": [
        {
          "name": "itemKey",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "item 的唯一标志",
          "descriptionEn": "Unique identifier for item"
        },
        {
          "name": "menuKey",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单身份标识的兼容回退值，仅在未设置 itemKey 时使用；新代码优先使用 itemKey。",
          "descriptionEn": "Compatibility fallback for item identity, used only when itemKey is absent; prefer itemKey in new code."
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether disabled"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "分组标题",
          "descriptionEn": "Group title"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "item 的图标",
          "descriptionEn": "Item icon"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "菜单子集",
          "descriptionEn": "Menu children"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "title",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Menu",
      "examples": [
        {
          "id": "components/menu/demo/basic.tsx",
          "title": "顶部导航",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Navigation One\", key: \"1\", icon: Mail },\n  { title: \"Navigation Two\", key: \"2\", icon: Heart, disabled: true },\n  {\n    title: \"Navigation - Submenu\",\n    key: \"3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 1\", key: \"3-1\" },\n      { title: \"Option 2\", key: \"3-2\" },\n      { title: \"Option 3\", key: \"3-3\" },\n      { title: \"Option 4\", key: \"3-4\" },\n      {\n        title: \"Submenu\",\n        key: \"3-5\",\n        children: [1, 2, 3, 4].map((n) => ({ title: `Option ${n}`, key: `3-5-${n}` })),\n      },\n    ],\n  },\n  {\n    title: (\n      <a href=\"https://react.k-ui.cn\" target=\"_blank\" rel=\"noreferrer\">\n        Navigation - Link\n      </a>\n    ),\n    key: \"4\",\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1\"]);\n  return <Menu mode=\"horizontal\" value={current} onChange={setCurrent} items={items} />;\n}"
        },
        {
          "id": "components/menu/demo/inline.tsx",
          "title": "内嵌菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    key: \"sub1\",\n    icon: Mail,\n    title: \"Navigation One\",\n    children: [\n      { key: \"1-1\", icon: Heart, title: \"Option 1\" },\n      { key: \"1-2\", icon: Heart, title: \"Option 2\" },\n      { key: \"1-3\", icon: Heart, title: \"Option 3\" },\n      { key: \"1-4\", icon: Heart, title: \"Option 4\" },\n    ],\n  },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        mode=\"inline\"\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/accordion.tsx",
          "title": "只展开当前父级菜单",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  {\n    title: \"Navigation One\",\n    key: \"sub1\",\n    icon: Mail,\n    children: [\n      { title: \"Option 1\", key: \"1-1\" },\n      { title: \"Option 2\", key: \"1-2\" },\n      { title: \"Option 3\", key: \"1-3\" },\n      { title: \"Option 4\", key: \"1-4\" },\n    ],\n  },\n  {\n    title: \"Navigation Two\",\n    key: \"sub2\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"2-1\" },\n      { title: \"Option 6\", key: \"2-2\" },\n      {\n        title: \"Submenu\",\n        key: \"sub2-1\",\n        children: [\n          { title: \"Option 7\", key: \"2-1-1\" },\n          { title: \"Option 8\", key: \"2-1-2\" },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"sub3\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"3-1\" },\n      { title: \"Option 10\", key: \"3-2\" },\n      { title: \"Option 11\", key: \"3-3\" },\n      { title: \"Option 12\", key: \"3-4\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={(keys) => {\n          setOpenKeys(keys);\n          console.log(keys);\n        }}\n        accordion\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/vertical.tsx",
          "title": "垂直菜单",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu value={current} onChange={setCurrent} mode=\"vertical\" items={items} />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/theme.tsx",
          "title": "主题",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Switch, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [dark, setDark] = useState(true),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Switch\n        trueText=\"dark\"\n        falseText=\"light\"\n        checked={dark}\n        onChange={(value) => setDark(Boolean(value))}\n      />\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/mode.tsx",
          "title": "切换菜单类型",
          "source": "import { Heart, Mail, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, type DirectionType, Space, Menu, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { key: \"1-1\", icon: Mail, title: \"Option 1\" },\n  { key: \"1-2\", icon: Table, title: \"Option 2\" },\n  {\n    key: \"sub2\",\n    icon: Heart,\n    title: \"Navigation Two\",\n    children: [\n      { key: \"2-1\", title: \"Option 5\" },\n      { key: \"2-2\", title: \"Option 6\" },\n      {\n        key: \"sub2-1\",\n        title: \"SubMenu\",\n        children: [\n          { key: \"2-3\", title: \"Option 7\" },\n          { key: \"2-4\", title: \"Option 8\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"sub3\",\n    icon: Settings,\n    title: \"Navigation Three\",\n    children: [\n      { key: \"3-1\", title: \"Option 9\" },\n      { key: \"3-2\", title: \"Option 10\" },\n      { key: \"3-3\", title: \"Option 11\" },\n      { key: \"3-4\", title: \"Option 12\" },\n    ],\n  },\n];\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub2\"]),\n    [mode, setMode] = useState<DirectionType>(\"inline\"),\n    [dark, setDark] = useState(false);\n  return (\n    <div>\n      <Space>\n        <Button onClick={() => setMode(mode === \"inline\" ? \"vertical\" : \"inline\")}>\n          Change Mode\n        </Button>\n        <Button onClick={() => setDark(!dark)}>Change Theme</Button>\n      </Space>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme={dark ? \"dark\" : \"light\"}\n        mode={mode}\n        style={{ width: 256 }}\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/collapsed.tsx",
          "title": "缩起内嵌菜单",
          "source": "import { Heart, Mail, PanelLeftClose, PanelLeftOpen, Settings, Table } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Menu, Switch, type MenuOptionsProps } from \"react-kui\";\nconst items: MenuOptionsProps[] = [\n  { title: \"Option 1\", key: \"1-1\", icon: Mail },\n  { title: \"Option 2\", key: \"2-1\", icon: Table },\n  {\n    title: \"Navigation Two\",\n    key: \"3-1\",\n    icon: Heart,\n    children: [\n      { title: \"Option 5\", key: \"3-1-1\", icon: Mail },\n      { title: \"Option 6\", key: \"3-1-2\", icon: Mail },\n      {\n        title: \"SubMenu\",\n        key: \"3-1-3\",\n        icon: Mail,\n        children: [\n          { title: \"Option 7\", key: \"3-1-3-1\", icon: Mail },\n          { title: \"Option 8\", key: \"3-1-3-2\", icon: Mail },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Navigation Three\",\n    key: \"4-1\",\n    icon: Settings,\n    children: [\n      { title: \"Option 9\", key: \"4-1-1\", icon: Mail },\n      { title: \"Option 10\", key: \"4-1-2\", icon: Mail },\n      { title: \"Option 11\", key: \"4-1-3\", icon: Mail },\n      { title: \"Option 12\", key: \"4-1-4\", icon: Mail },\n    ],\n  },\n];\nexport default function App() {\n  const [collapsed, setCollapsed] = useState(false),\n    [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"3-1\", \"3-1-3\"]),\n    [collapsedTooltip, setCollapsedTooltip] = useState(true);\n  return (\n    <div style={{ width: 256 }}>\n      <Button\n        onClick={() => setCollapsed(!collapsed)}\n        icon={collapsed ? PanelLeftOpen : PanelLeftClose}\n        type=\"primary\"\n      />\n      <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8, marginLeft: 12 }}>\n        Tooltip\n        <Switch\n          checked={collapsedTooltip}\n          onChange={(checked) => setCollapsedTooltip(Boolean(checked))}\n        />\n      </label>\n      <br />\n      <br />\n      <Menu\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n        theme=\"dark\"\n        inlineCollapsed={collapsed}\n        collapsedTooltip={collapsedTooltip}\n        mode=\"inline\"\n        items={items}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/menu/demo/group.tsx",
          "title": "分组与分割线",
          "source": "import { Heart, Mail, Settings } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Menu, MenuDivider, MenuGroup, MenuItem, SubMenu } from \"react-kui\";\n\nexport default function App() {\n  const [current, setCurrent] = useState([\"1-1\"]),\n    [openKeys, setOpenKeys] = useState([\"sub1\"]);\n  return (\n    <div style={{ width: 256 }}>\n      <Menu\n        mode=\"inline\"\n        value={current}\n        onChange={setCurrent}\n        openKeys={openKeys}\n        onOpenChange={setOpenKeys}\n      >\n        <MenuGroup title=\"Application\">\n          <MenuItem itemKey=\"1-1\" icon={Mail}>\n            Navigation One\n          </MenuItem>\n          <MenuItem itemKey=\"1-2\" icon={Heart}>\n            Navigation Two\n          </MenuItem>\n          <MenuItem itemKey=\"1-3\" icon={Settings} disabled>\n            Navigation Three\n          </MenuItem>\n        </MenuGroup>\n        <MenuDivider />\n        <SubMenu itemKey=\"sub1\" title=\"Navigation Four\" icon={Mail}>\n          <MenuGroup title=\"Options\">\n            <MenuItem itemKey=\"4-1\">Option 1</MenuItem>\n            <MenuItem itemKey=\"4-2\">Option 2</MenuItem>\n          </MenuGroup>\n          <MenuDivider />\n          <MenuItem itemKey=\"4-3\">Option 3</MenuItem>\n        </SubMenu>\n      </Menu>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Mentions",
      "import": "import { Mentions } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/mentions",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本",
          "descriptionEn": "text"
        },
        {
          "name": "options",
          "type": "(string | MentionOption)[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_OPTIONS",
          "descriptionZh": "候选项",
          "descriptionEn": "Suggestions"
        },
        {
          "name": "triggers",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[\"@\"]",
          "descriptionZh": "触发字符",
          "descriptionEn": "Trigger strings"
        },
        {
          "name": "rows",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "1",
          "descriptionZh": "文本域行数",
          "descriptionEn": "Textarea rows"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "下拉菜单优先位置",
          "descriptionEn": "Preferred dropdown placement"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "defaultExpression": "themeProp ?? inheritedAppearance.theme ?? \"fill\"",
          "descriptionZh": "主题，画在内部文本域上，可用档位与 TextArea 一致",
          "descriptionEn": "Theme, painted on the inner text area; supports the same tiers as TextArea"
        },
        {
          "name": "emptyText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "空状态说明",
          "descriptionEn": "Empty-state text"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示加载状态",
          "descriptionEn": "Whether to show loading"
        },
        {
          "name": "loadingText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "加载状态文案",
          "descriptionEn": "Loading text"
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示清除按钮",
          "descriptionEn": "Whether to show the clear button"
        },
        {
          "name": "filterOption",
          "type": "((query: string, option: MentionOption) => boolean) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义过滤",
          "descriptionEn": "Custom filter"
        },
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本变化",
          "descriptionEn": "Text change"
        },
        {
          "name": "onSearch",
          "type": "((query: string, trigger: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "远程搜索，参数为搜索词与触发字符",
          "descriptionEn": "Remote search with query and trigger"
        },
        {
          "name": "onSelect",
          "type": "((option: MentionOption, trigger: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择提及",
          "descriptionEn": "Mention selected"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮",
          "descriptionEn": "Clear button clicked"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "form",
        "disabled",
        "wrap",
        "autoComplete",
        "maxLength",
        "minLength",
        "name",
        "placeholder",
        "readOnly",
        "required",
        "cols",
        "dirName"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "form": "string",
        "disabled": "boolean",
        "wrap": "string",
        "autoComplete": "string",
        "maxLength": "number",
        "minLength": "number",
        "name": "string",
        "placeholder": "string",
        "readOnly": "boolean",
        "required": "boolean",
        "cols": "number",
        "dirName": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本变化",
          "descriptionEn": "Text change"
        },
        {
          "name": "onSearch",
          "type": "((query: string, trigger: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "远程搜索，参数为搜索词与触发字符",
          "descriptionEn": "Remote search with query and trigger"
        },
        {
          "name": "onSelect",
          "type": "((option: MentionOption, trigger: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择提及",
          "descriptionEn": "Mention selected"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮",
          "descriptionEn": "Clear button clicked"
        }
      ],
      "renderProps": [
        "filterOption"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/mentions/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { Mentions } from \"react-kui\";\nimport { useState } from \"react\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Mentions\n      value={value}\n      onChange={setValue}\n      clearable\n      placeholder=\"输入 @ 提及成员\"\n      options={[\"小北\", \"设计团队\", \"开发团队\"]}\n    />\n  );\n}"
        },
        {
          "id": "components/mentions/demo/triggers.tsx",
          "title": "多个触发字符",
          "source": "import { Mentions } from \"react-kui\";\nimport { useState } from \"react\";\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Mentions\n      value={value}\n      onChange={setValue}\n      triggers={[\"@\", \"#\"]}\n      options={[\"xiaobei\", \"前端\", \"组件库\", \"设计系统\"]}\n      placeholder=\"输入 @ 提及成员，输入 # 关联话题\"\n    />\n  );\n}"
        },
        {
          "id": "components/mentions/demo/filter.tsx",
          "title": "自定义过滤",
          "source": "import { useState } from \"react\";\nimport { Mentions, type MentionOption } from \"react-kui\";\n\nconst options = [\"Alice\", \"Alex\", \"Bob\", \"Bella\"];\nconst startsWith = (query: string, option: MentionOption) =>\n  option.value.toLowerCase().startsWith(query.toLowerCase());\n\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  return (\n    <Mentions\n      value={value}\n      onChange={setValue}\n      options={options}\n      filterOption={startsWith}\n      placeholder=\"输入 @ 后按名称开头过滤\"\n    />\n  );\n}"
        },
        {
          "id": "components/mentions/demo/remote.tsx",
          "title": "远程搜索",
          "source": "import { useRef, useState } from \"react\";\nimport { Mentions } from \"react-kui\";\n\nconst members = [\"Alice\", \"Alex\", \"Bob\", \"Bella\", \"Cindy\"];\n\nexport default function App() {\n  const [value, setValue] = useState(\"\");\n  const [options, setOptions] = useState<string[]>([]);\n  const [loading, setLoading] = useState(false);\n  const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const search = (query: string) => {\n    if (timer.current) clearTimeout(timer.current);\n    setLoading(true);\n    timer.current = setTimeout(() => {\n      setOptions(\n        members.filter((member) => member.toLocaleLowerCase().includes(query.toLocaleLowerCase())),\n      );\n      setLoading(false);\n    }, 1000);\n  };\n  return (\n    <Mentions\n      value={value}\n      clearable\n      onChange={setValue}\n      onSearch={search}\n      loading={loading}\n      loadingText=\"Searching\"\n      options={options}\n      placeholder=\"输入 @ 后继续输入以远程搜索\"\n    />\n  );\n}"
        },
        {
          "id": "components/mentions/demo/size.tsx",
          "title": "尺寸",
          "source": "import { Mentions, Space } from \"react-kui\";\n\nconst options = [\"产品\", \"设计\", \"研发\"];\n\nexport default function App() {\n  return (\n    <Space vertical>\n      <Mentions size=\"small\" options={options} placeholder=\"small size\" />\n      <Mentions options={options} placeholder=\"default size\" />\n      <Mentions size=\"large\" shape=\"circle\" options={options} placeholder=\"large size\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/mentions/demo/appearance.tsx",
          "title": "尺寸、主题与形状",
          "source": "import { Mentions, Space } from \"react-kui\";\nconst options = [\"产品\", \"设计\", \"研发\"];\nexport default function App() {\n  return (\n    <Space vertical>\n      <Mentions size=\"small\" theme=\"plain\" options={options} placeholder=\"small / plain\" />\n      <Mentions shape=\"square\" theme=\"outline\" options={options} placeholder=\"square / outline\" />\n      <Mentions size=\"large\" shape=\"circle\" options={options} placeholder=\"large / circle\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/mentions/demo/empty.tsx",
          "title": "空状态",
          "source": "import { Mentions } from \"react-kui\";\nexport default function App() {\n  return <Mentions options={[]} emptyText=\"没有匹配的成员\" placeholder=\"输入 @ 查看空状态\" />;\n}"
        },
        {
          "id": "components/mentions/demo/rows.tsx",
          "title": "行数",
          "source": "import { Mentions, Space } from \"react-kui\";\nconst options = [\"小北\", \"设计团队\", \"开发团队\"];\nexport default function App() {\n  return (\n    <Space vertical>\n      <Mentions rows={1} options={options} placeholder=\"单行外观，输入 @\" />\n      <Mentions rows={4} options={options} placeholder=\"四行文本域，输入 @\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/mentions/demo/placement.tsx",
          "title": "下拉位置",
          "source": "import { Mentions, Space } from \"react-kui\";\nconst options = [\"小北\", \"设计团队\", \"开发团队\"];\nexport default function App() {\n  return (\n    <Space vertical>\n      <Mentions placement=\"bottom-left\" options={options} placeholder=\"默认向下展开，输入 @\" />\n      <Mentions placement=\"top-right\" options={options} placeholder=\"优先向上展开，输入 @\" />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "MessagePanel",
      "import": "import { MessagePanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/notice",
      "props": [
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "通知提醒的标题",
          "descriptionEn": "Notification title"
        },
        {
          "name": "content",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "提示内容",
          "descriptionEn": "Prompt content"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标颜色",
          "descriptionEn": "Custom icon color"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标",
          "descriptionEn": "Custom icon"
        },
        {
          "name": "type",
          "type": "NoticeType | undefined",
          "required": false,
          "enumValues": [
            "info",
            "success",
            "warning",
            "error",
            "loading"
          ],
          "boolean": false,
          "descriptionZh": "消息语义类型，影响状态类名和默认图标；icon 可覆盖默认图标。",
          "descriptionEn": "Semantic message type controlling status classes and the default icon; icon can override that icon."
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closing"
        },
        {
          "name": "duration",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自动关闭的延时，单位秒，不关闭可以写 0",
          "descriptionEn": "Auto-close delay, in seconds, 0 means not closed"
        },
        {
          "name": "closable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否显示关闭按钮；点击时调用 onClose，独立面板由调用方处理移除。",
          "descriptionEn": "Whether to show the close button; clicking calls onClose, and the caller handles removal of a standalone panel."
        },
        {
          "name": "grouping",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "分组标识；相同标识的通知复用原条目并重新计时",
          "descriptionEn": "Group key; notices with the same key reuse the existing entry and reset its timer"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closing"
        }
      ],
      "renderProps": [
        "title",
        "content"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/notice/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Space, notice } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button\n        type=\"primary\"\n        onClick={() =>\n          notice.open({ title: \"Title\", content: \"The content of the notice.\", duration: 5 })\n        }\n      >\n        Notice\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/notice/demo/grouping.tsx",
          "title": "合并通知",
          "source": "import { useRef } from \"react\";\nimport { Button, notice } from \"react-kui\";\n\nexport default function App() {\n  const count = useRef(0);\n  return (\n    <Button\n      type=\"primary\"\n      onClick={() => {\n        count.current += 1;\n        notice.info({\n          title: \"Task Progress\",\n          content: `Processed ${count.current} batch${count.current > 1 ? \"es\" : \"\"}.`,\n          grouping: \"task-batch\",\n        });\n      }}\n    >\n      Update Notice\n    </Button>\n  );\n}"
        },
        {
          "id": "components/notice/demo/types.tsx",
          "title": "带图标的提醒",
          "source": "import { Button, Space, notice } from \"react-kui\";\nconst types = [\"info\", \"warning\", \"success\", \"error\"] as const;\nexport default function App() {\n  return (\n    <Space vertical>\n      {types.map((type) => (\n        <Button\n          key={type}\n          onClick={() => notice[type]({ title: \"Title\", content: \"Content message.\", duration: 5 })}\n        >\n          {type[0].toUpperCase() + type.slice(1)}\n        </Button>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/notice/demo/icon.tsx",
          "title": "自定义图标",
          "source": "import { LogoAlipay, LogoWechat } from \"kui-icons\";\nimport { Button, Space, notice } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button\n        icon={LogoAlipay}\n        onClick={() =>\n          notice.open({\n            icon: LogoAlipay,\n            color: \"#0082d9ff\",\n            title: \"Dear user, hello\",\n            content:\n              \"We are pleased to inform you that you don't need to repay your Huabei balance next month!\",\n            duration: 10,\n          })\n        }\n      />\n      <Button\n        icon={LogoWechat}\n        onClick={() =>\n          notice.open({\n            icon: LogoWechat,\n            color: \"#00c87b\",\n            title: \"Dear user, hello\",\n            content: (\n              <div>\n                <p style={{ margin: \"10px 0\" }}>\n                  WeChat has added some new features, and we invite you to try them out!\n                </p>\n                <Button type=\"primary\" size=\"small\">\n                  Go and see\n                </Button>\n              </div>\n            ),\n            duration: 10,\n          })\n        }\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/notice/demo/close.tsx",
          "title": "自定义时长",
          "source": "import { useRef } from \"react\";\nimport { Button, message, Space, notice } from \"react-kui\";\nexport default function App() {\n  const count = useRef(0);\n  return (\n    <Space vertical>\n      <Button\n        onClick={() =>\n          notice.open({ type: \"success\", duration: 10, title: \"Title\", content: \"Closing in 10s\" })\n        }\n      >\n        Closing in 10s\n      </Button>\n      <Button\n        type=\"primary\"\n        onClick={() =>\n          notice.open({\n            type: \"info\",\n            duration: 0,\n            title: \"Alert\",\n            content: `Manually close ${++count.current}`,\n            onClose: () => message.success(\"I am a callback.\"),\n          })\n        }\n      >\n        Manually close\n      </Button>\n      <Button type=\"primary\" onClick={notice.destroy}>\n        Destroy\n      </Button>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Modal",
      "import": "import { Modal } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/modal",
      "props": [
        {
          "name": "className",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "追加到 k-modal 根容器的 CSS 类名。",
          "descriptionEn": "Additional CSS classes on the k-modal root container."
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "对话框显示状态",
          "descriptionEn": "dialog visibility"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "对话框标题，字符串之外可给任意节点",
          "descriptionEn": "Dialog title, accepts nodes as well as text"
        },
        {
          "name": "okText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "确定按钮文字",
          "descriptionEn": "OK button text"
        },
        {
          "name": "cancelText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "取消按钮文字",
          "descriptionEn": "Cancel button text"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "520",
          "descriptionZh": "对话框宽度",
          "descriptionEn": "Dialog width"
        },
        {
          "name": "top",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "100",
          "descriptionZh": "窗口距离顶部的距离",
          "descriptionEn": "Distance from the top of the window"
        },
        {
          "name": "mask",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否展示蒙层",
          "descriptionEn": "Whether to show the mask"
        },
        {
          "name": "maskClosable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否点击遮罩关闭弹窗（只管遮罩，Esc 由 `escKey` 控制）",
          "descriptionEn": "Whether clicking the mask closes the modal (mask only; Esc is gated by `escKey`)"
        },
        {
          "name": "maximized",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "弹框是否可以最大化显示 , confirm 模式不可用",
          "descriptionEn": "Whether the modal can be maximized, not available in confirm mode"
        },
        {
          "name": "centered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "窗口是否可以居中 , confirm 模式不可用",
          "descriptionEn": "Whether the window can be centered, not available in confirm mode"
        },
        {
          "name": "draggable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "弹框是否可拖动, confirm 模式不可用",
          "descriptionEn": "Whether the modal can be dragged, not available in confirm mode"
        },
        {
          "name": "showClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否展示关闭按钮",
          "descriptionEn": "Whether to display the close button"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "为`true`时此时确定按钮为加载状态",
          "descriptionEn": "When set to `true`, the confirm button will be in a loading state"
        },
        {
          "name": "footer",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "defaultExpression": "true",
          "descriptionZh": "当`footer=false`时不展示底部按钮，给节点时用它替换整个底部",
          "descriptionEn": "When `footer=false` the footer is hidden; pass a node to replace the whole footer."
        },
        {
          "name": "escKey",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否支持按 Esc 关闭",
          "descriptionEn": "Whether to support closing with Esc key"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只渲染弹窗面板本身，不包含遮罩、动画与全局事件",
          "descriptionEn": "Render only the modal panel, without mask, animation, or global events"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁窗口内容。默认销毁（重开时重新挂载）；设为 false 可保留窗口内已填写的表单状态，代价是打开过的窗口留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy dialog content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened dialog"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭的回调",
          "descriptionEn": "Callback when window closes"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调；返回 Promise 时关闭时机交给组件：resolve 后关窗，reject 只停 loading 并保持窗口打开",
          "descriptionEn": "Callback when OK is clicked; returning a Promise hands the closing timing to the component — resolve closes it, reject only stops loading and keeps it open"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调",
          "descriptionEn": "Callback when Cancel is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭时的回调；打开是调用方自己翻 `open`，不会再回传一次",
          "descriptionEn": "Fires when the window closes; opening is your own `open` flip, so it is never echoed back"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭动画结束后的回调",
          "descriptionEn": "Callback after the close animation finishes"
        },
        {
          "name": "content",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "对话框内容，字符串之外可给任意节点",
          "descriptionEn": "Dialog content, accepts nodes as well as text"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标准弹窗正文；传入真值 content 时将替换整个标准内容区，包括头部、正文和页脚。",
          "descriptionEn": "Standard modal body; a truthy content prop replaces the entire standard content region, including header, body and footer."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭的回调",
          "descriptionEn": "Callback when window closes"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调；返回 Promise 时关闭时机交给组件：resolve 后关窗，reject 只停 loading 并保持窗口打开",
          "descriptionEn": "Callback when OK is clicked; returning a Promise hands the closing timing to the component — resolve closes it, reject only stops loading and keeps it open"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调",
          "descriptionEn": "Callback when Cancel is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭时的回调；打开是调用方自己翻 `open`，不会再回传一次",
          "descriptionEn": "Fires when the window closes; opening is your own `open` flip, so it is never echoed back"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭动画结束后的回调",
          "descriptionEn": "Callback after the close animation finishes"
        }
      ],
      "renderProps": [
        "title",
        "footer",
        "content",
        "children"
      ],
      "behavior": {
        "rules": [
          "Use open and onOpenChange. open initializes local visibility; interactions update it internally, and changed open props synchronize it.",
          "onOk does not automatically save or close. Validate/save first, then set open=false. loading blocks user dismissal during saving.",
          "Use children or content and footer props, not Vue named slots."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/modal/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Button, Modal, Space } from \"react-kui\";\n\nexport default function App() {\n  const [visible, setVisible] = useState(false);\n  const [overlayVisible, setOverlayVisible] = useState(false);\n  return (\n    <Space vertical>\n      <Button onClick={() => setVisible(true)} type=\"primary\">\n        Open\n      </Button>\n      <Button onClick={() => setOverlayVisible(true)} type=\"primary\">\n        Click the overlay to close\n      </Button>\n      <Modal\n        title=\"Basic Modal\"\n        open={visible}\n        onOpenChange={setVisible}\n        onOk={() => setVisible(false)}\n      >\n        <p>This is the content of a basic modal.</p>\n        <p>More content...</p>\n      </Modal>\n      <Modal\n        title=\"Basic Modal\"\n        open={overlayVisible}\n        maskClosable\n        onOpenChange={setOverlayVisible}\n        onOk={() => setOverlayVisible(false)}\n      >\n        <p>This is the content of a basic modal.</p>\n        <p>More content...</p>\n      </Modal>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/custom.tsx",
          "title": "自定义",
          "source": "import { Save } from \"kui-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button, Input, Modal, Space } from \"react-kui\";\n\nexport default function App() {\n  const [open, setOpen] = useState<number | null>(null);\n  const [loading, setLoading] = useState(false);\n  const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const close = () => {\n    setOpen(null);\n    setLoading(false);\n  };\n  const submit = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => {\n      setLoading(false);\n      setOpen(null);\n    }, 2000);\n  };\n  const openChange = (id: number) => (next: boolean) => (next ? setOpen(id) : close());\n  // 组件卸载时把还没跑完的异步保存停掉。\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  return (\n    <Space vertical>\n      <Button onClick={() => setOpen(1)} type=\"primary\">\n        Width: 300px\n      </Button>\n      <Button onClick={() => setOpen(5)} type=\"primary\">\n        Width: 50%\n      </Button>\n      <Button onClick={() => setOpen(6)} type=\"primary\">\n        Width: calc(100% - 800px)\n      </Button>\n      <Button onClick={() => setOpen(2)} type=\"primary\">\n        Custom footer\n      </Button>\n      <Button onClick={() => setOpen(3)} type=\"primary\">\n        Internationalization\n      </Button>\n      <Button onClick={() => setOpen(4)} type=\"primary\">\n        Asynchronous shutdown\n      </Button>\n      <Modal\n        title=\"Width 300px\"\n        open={open === 1}\n        width={300}\n        onOpenChange={openChange(1)}\n        onOk={close}\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"Width 50%\"\n        open={open === 5}\n        width=\"50%\"\n        onOpenChange={openChange(5)}\n        onOk={close}\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"calc(100% - 800px)\"\n        open={open === 6}\n        width=\"calc(100% - 800px)\"\n        onOpenChange={openChange(6)}\n        onOk={close}\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"Custom footer\"\n        open={open === 2}\n        onOpenChange={openChange(2)}\n        footer={\n          <Button icon={Save} onClick={close} type=\"primary\">\n            Save\n          </Button>\n        }\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"Are you ok ?\"\n        open={open === 3}\n        okText=\"Ok\"\n        cancelText=\"Cancel\"\n        onOpenChange={openChange(3)}\n        onOk={close}\n      >\n        <p>Yes, I'm fine!</p>\n      </Modal>\n      <Modal\n        title=\"Submit forms\"\n        open={open === 4}\n        loading={loading}\n        onOpenChange={openChange(4)}\n        onOk={submit}\n      >\n        <p>\n          Name: <Input placeholder=\"Please input your name\" style={{ width: 200 }} />\n        </p>\n      </Modal>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/more.tsx",
          "title": "其它属性",
          "source": "import { useState } from \"react\";\nimport { Button, Modal, Space } from \"react-kui\";\n\nconst text = `A long time ago, In a beautiful kingdom,\nthere lived a young king and queen,\nthe people loved them so much;`;\nexport default function App() {\n  const [open, setOpen] = useState<number | null>(null);\n  const close = () => setOpen(null);\n  const openChange = (id: number) => (next: boolean) => setOpen(next ? id : null);\n  return (\n    <Space vertical>\n      <Button onClick={() => setOpen(1)} type=\"primary\">\n        Draggable\n      </Button>\n      <Button onClick={() => setOpen(2)} type=\"primary\">\n        Center-aligned\n      </Button>\n      <Button onClick={() => setOpen(3)} type=\"primary\">\n        Top 200px\n      </Button>\n      <Button onClick={() => setOpen(4)} type=\"primary\">\n        Maximize\n      </Button>\n      <Button onClick={() => setOpen(5)} type=\"primary\">\n        No overlay\n      </Button>\n      <Button onClick={() => setOpen(6)} type=\"primary\">\n        No footer\n      </Button>\n      <Modal\n        title=\"Draggable\"\n        open={open === 1}\n        width=\"50%\"\n        draggable\n        onOpenChange={openChange(1)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal title=\"Centered\" open={open === 2} centered onOpenChange={openChange(2)} onOk={close}>\n        {text}\n      </Modal>\n      <Modal\n        title=\"Top 200px\"\n        open={open === 3}\n        top={200}\n        onOpenChange={openChange(3)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal\n        title=\"Maximized\"\n        open={open === 4}\n        maximized\n        onOpenChange={openChange(4)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal\n        title=\"Click mask dont't be close\"\n        open={open === 5}\n        mask={false}\n        maskClosable={false}\n        onOpenChange={openChange(5)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal\n        title=\"No footer\"\n        open={open === 6}\n        footer={false}\n        onOpenChange={openChange(6)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/global.tsx",
          "title": "全局模式",
          "source": "import { Moon } from \"kui-icons\";\nimport { Button, message, Space, modal } from \"react-kui\";\n\nconst success = () =>\n  modal.success({\n    title: \"Successfully Done\",\n    content: \"Congratulations on your successful operation!\",\n    onOk: () => {\n      message.info(\"success\");\n    },\n  });\nconst error = () =>\n  modal.error({\n    title: \"Failed\",\n    content: \"Sorry, operation failed！\",\n    onOk: () => {\n      message.info(\"error\");\n    },\n  });\nconst warning = () =>\n  modal.warning({\n    title: \"Warning\",\n    content: \"This is a warning message.\",\n    onOk: () => {\n      message.info(\"warning\");\n    },\n  });\nconst info = () =>\n  modal.info({\n    title: \"Alert\",\n    content: \"You opened a modal.\",\n    onOk: () => {\n      message.info(\"info\");\n    },\n  });\nconst show = () =>\n  modal.show({\n    title: \"I am a modal\",\n    content: \"See the light through the mist.\",\n    icon: Moon,\n    color: \"#eccb23\",\n    onOk: () => {\n      message.info(\"show\");\n    },\n  });\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button onClick={success}>Success</Button>\n      <Button onClick={error} type=\"danger\">\n        Error\n      </Button>\n      <Button onClick={warning}>Warning</Button>\n      <Button onClick={info} type=\"primary\">\n        Info\n      </Button>\n      <Button onClick={show} icon={Moon}>\n        Custom icon\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/confirm.tsx",
          "title": "提示框",
          "source": "import { Button, message, Space, modal } from \"react-kui\";\n\nconst confirm = () =>\n  modal.confirm({\n    title: \"Are you sure to do this?\",\n    content: \"This operation is irreversible, proceed with caution!!!\",\n    onOk: () => {\n      message.success(\"you clicked ok\");\n    },\n    onCancel: () => {\n      message.info(\"you clicked cancel\");\n    },\n  });\nconst custom = () =>\n  modal.confirm({\n    title: \"Are you Ok?\",\n    content: \"Yes , I am fine, and you?\",\n    okText: \"OK\",\n    cancelText: \"Cancel\",\n  });\nconst asyncConfirm = () =>\n  modal.confirm({\n    title: \"Are you sure to do this?\",\n    content: \"This operation is irreversible, proceed with caution!!!\",\n    onOk: () => new Promise<void>((resolve) => setTimeout(resolve, 2000)),\n  });\nconst closeAll = () => {\n  for (let index = 0; index < 3; index += 1)\n    setTimeout(\n      () =>\n        modal.confirm({\n          title: \"Destroy All\",\n          content: \"A surprise of the universe\",\n          cancelText: \"Close all\",\n          onCancel: modal.destroyAll,\n          onOk: () => new Promise<void>((resolve) => setTimeout(resolve, 2000)),\n        }),\n      index * 500\n    );\n};\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button onClick={confirm}>Confirm</Button>\n      <Button onClick={custom}>Internationalization</Button>\n      <Button onClick={asyncConfirm}>Asynchronous shutdown</Button>\n      <Button onClick={closeAll}>Close All</Button>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "ModalPanel",
      "import": "import { ModalPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/modal",
      "props": [
        {
          "name": "className",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "追加到 k-modal-panel 根容器的 CSS 类名。",
          "descriptionEn": "Additional CSS classes on the k-modal-panel root container."
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "对话框标题，字符串之外可给任意节点",
          "descriptionEn": "Dialog title, accepts nodes as well as text"
        },
        {
          "name": "content",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "对话框内容，字符串之外可给任意节点",
          "descriptionEn": "Dialog content, accepts nodes as well as text"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "独立面板的标准正文；真值 content 会替换整个标准内容区。",
          "descriptionEn": "Standard body of the standalone panel; truthy content replaces the entire standard content region."
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "关闭后是否销毁窗口内容。默认销毁（重开时重新挂载）；设为 false 可保留窗口内已填写的表单状态，代价是打开过的窗口留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy dialog content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened dialog"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭时的回调；打开是调用方自己翻 `open`，不会再回传一次",
          "descriptionEn": "Fires when the window closes; opening is your own `open` flip, so it is never echoed back"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭动画结束后的回调",
          "descriptionEn": "Callback after the close animation finishes"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "只渲染弹窗面板本身，不包含遮罩、动画与全局事件",
          "descriptionEn": "Render only the modal panel, without mask, animation, or global events"
        },
        {
          "name": "top",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口距离顶部的距离",
          "descriptionEn": "Distance from the top of the window"
        },
        {
          "name": "footer",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "当`footer=false`时不展示底部按钮，给节点时用它替换整个底部",
          "descriptionEn": "When `footer=false` the footer is hidden; pass a node to replace the whole footer."
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "对话框宽度",
          "descriptionEn": "Dialog width"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "为`true`时此时确定按钮为加载状态",
          "descriptionEn": "When set to `true`, the confirm button will be in a loading state"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭的回调",
          "descriptionEn": "Callback when window closes"
        },
        {
          "name": "okText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "确定按钮文字",
          "descriptionEn": "OK button text"
        },
        {
          "name": "cancelText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "取消按钮文字",
          "descriptionEn": "Cancel button text"
        },
        {
          "name": "showClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否展示关闭按钮",
          "descriptionEn": "Whether to display the close button"
        },
        {
          "name": "escKey",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否支持按 Esc 关闭",
          "descriptionEn": "Whether to support closing with Esc key"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调；返回 Promise 时关闭时机交给组件：resolve 后关窗，reject 只停 loading 并保持窗口打开",
          "descriptionEn": "Callback when OK is clicked; returning a Promise hands the closing timing to the component — resolve closes it, reject only stops loading and keeps it open"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调",
          "descriptionEn": "Callback when Cancel is clicked"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭时的回调；打开是调用方自己翻 `open`，不会再回传一次",
          "descriptionEn": "Fires when the window closes; opening is your own `open` flip, so it is never echoed back"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭动画结束后的回调",
          "descriptionEn": "Callback after the close animation finishes"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "窗口关闭的回调",
          "descriptionEn": "Callback when window closes"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调；返回 Promise 时关闭时机交给组件：resolve 后关窗，reject 只停 loading 并保持窗口打开",
          "descriptionEn": "Callback when OK is clicked; returning a Promise hands the closing timing to the component — resolve closes it, reject only stops loading and keeps it open"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调",
          "descriptionEn": "Callback when Cancel is clicked"
        }
      ],
      "renderProps": [
        "title",
        "content",
        "children",
        "footer"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/modal/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Button, Modal, Space } from \"react-kui\";\n\nexport default function App() {\n  const [visible, setVisible] = useState(false);\n  const [overlayVisible, setOverlayVisible] = useState(false);\n  return (\n    <Space vertical>\n      <Button onClick={() => setVisible(true)} type=\"primary\">\n        Open\n      </Button>\n      <Button onClick={() => setOverlayVisible(true)} type=\"primary\">\n        Click the overlay to close\n      </Button>\n      <Modal\n        title=\"Basic Modal\"\n        open={visible}\n        onOpenChange={setVisible}\n        onOk={() => setVisible(false)}\n      >\n        <p>This is the content of a basic modal.</p>\n        <p>More content...</p>\n      </Modal>\n      <Modal\n        title=\"Basic Modal\"\n        open={overlayVisible}\n        maskClosable\n        onOpenChange={setOverlayVisible}\n        onOk={() => setOverlayVisible(false)}\n      >\n        <p>This is the content of a basic modal.</p>\n        <p>More content...</p>\n      </Modal>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/custom.tsx",
          "title": "自定义",
          "source": "import { Save } from \"kui-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button, Input, Modal, Space } from \"react-kui\";\n\nexport default function App() {\n  const [open, setOpen] = useState<number | null>(null);\n  const [loading, setLoading] = useState(false);\n  const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const close = () => {\n    setOpen(null);\n    setLoading(false);\n  };\n  const submit = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => {\n      setLoading(false);\n      setOpen(null);\n    }, 2000);\n  };\n  const openChange = (id: number) => (next: boolean) => (next ? setOpen(id) : close());\n  // 组件卸载时把还没跑完的异步保存停掉。\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  return (\n    <Space vertical>\n      <Button onClick={() => setOpen(1)} type=\"primary\">\n        Width: 300px\n      </Button>\n      <Button onClick={() => setOpen(5)} type=\"primary\">\n        Width: 50%\n      </Button>\n      <Button onClick={() => setOpen(6)} type=\"primary\">\n        Width: calc(100% - 800px)\n      </Button>\n      <Button onClick={() => setOpen(2)} type=\"primary\">\n        Custom footer\n      </Button>\n      <Button onClick={() => setOpen(3)} type=\"primary\">\n        Internationalization\n      </Button>\n      <Button onClick={() => setOpen(4)} type=\"primary\">\n        Asynchronous shutdown\n      </Button>\n      <Modal\n        title=\"Width 300px\"\n        open={open === 1}\n        width={300}\n        onOpenChange={openChange(1)}\n        onOk={close}\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"Width 50%\"\n        open={open === 5}\n        width=\"50%\"\n        onOpenChange={openChange(5)}\n        onOk={close}\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"calc(100% - 800px)\"\n        open={open === 6}\n        width=\"calc(100% - 800px)\"\n        onOpenChange={openChange(6)}\n        onOk={close}\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"Custom footer\"\n        open={open === 2}\n        onOpenChange={openChange(2)}\n        footer={\n          <Button icon={Save} onClick={close} type=\"primary\">\n            Save\n          </Button>\n        }\n      >\n        <p>content</p>\n      </Modal>\n      <Modal\n        title=\"Are you ok ?\"\n        open={open === 3}\n        okText=\"Ok\"\n        cancelText=\"Cancel\"\n        onOpenChange={openChange(3)}\n        onOk={close}\n      >\n        <p>Yes, I'm fine!</p>\n      </Modal>\n      <Modal\n        title=\"Submit forms\"\n        open={open === 4}\n        loading={loading}\n        onOpenChange={openChange(4)}\n        onOk={submit}\n      >\n        <p>\n          Name: <Input placeholder=\"Please input your name\" style={{ width: 200 }} />\n        </p>\n      </Modal>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/more.tsx",
          "title": "其它属性",
          "source": "import { useState } from \"react\";\nimport { Button, Modal, Space } from \"react-kui\";\n\nconst text = `A long time ago, In a beautiful kingdom,\nthere lived a young king and queen,\nthe people loved them so much;`;\nexport default function App() {\n  const [open, setOpen] = useState<number | null>(null);\n  const close = () => setOpen(null);\n  const openChange = (id: number) => (next: boolean) => setOpen(next ? id : null);\n  return (\n    <Space vertical>\n      <Button onClick={() => setOpen(1)} type=\"primary\">\n        Draggable\n      </Button>\n      <Button onClick={() => setOpen(2)} type=\"primary\">\n        Center-aligned\n      </Button>\n      <Button onClick={() => setOpen(3)} type=\"primary\">\n        Top 200px\n      </Button>\n      <Button onClick={() => setOpen(4)} type=\"primary\">\n        Maximize\n      </Button>\n      <Button onClick={() => setOpen(5)} type=\"primary\">\n        No overlay\n      </Button>\n      <Button onClick={() => setOpen(6)} type=\"primary\">\n        No footer\n      </Button>\n      <Modal\n        title=\"Draggable\"\n        open={open === 1}\n        width=\"50%\"\n        draggable\n        onOpenChange={openChange(1)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal title=\"Centered\" open={open === 2} centered onOpenChange={openChange(2)} onOk={close}>\n        {text}\n      </Modal>\n      <Modal\n        title=\"Top 200px\"\n        open={open === 3}\n        top={200}\n        onOpenChange={openChange(3)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal\n        title=\"Maximized\"\n        open={open === 4}\n        maximized\n        onOpenChange={openChange(4)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal\n        title=\"Click mask dont't be close\"\n        open={open === 5}\n        mask={false}\n        maskClosable={false}\n        onOpenChange={openChange(5)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n      <Modal\n        title=\"No footer\"\n        open={open === 6}\n        footer={false}\n        onOpenChange={openChange(6)}\n        onOk={close}\n      >\n        {text}\n      </Modal>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/global.tsx",
          "title": "全局模式",
          "source": "import { Moon } from \"kui-icons\";\nimport { Button, message, Space, modal } from \"react-kui\";\n\nconst success = () =>\n  modal.success({\n    title: \"Successfully Done\",\n    content: \"Congratulations on your successful operation!\",\n    onOk: () => {\n      message.info(\"success\");\n    },\n  });\nconst error = () =>\n  modal.error({\n    title: \"Failed\",\n    content: \"Sorry, operation failed！\",\n    onOk: () => {\n      message.info(\"error\");\n    },\n  });\nconst warning = () =>\n  modal.warning({\n    title: \"Warning\",\n    content: \"This is a warning message.\",\n    onOk: () => {\n      message.info(\"warning\");\n    },\n  });\nconst info = () =>\n  modal.info({\n    title: \"Alert\",\n    content: \"You opened a modal.\",\n    onOk: () => {\n      message.info(\"info\");\n    },\n  });\nconst show = () =>\n  modal.show({\n    title: \"I am a modal\",\n    content: \"See the light through the mist.\",\n    icon: Moon,\n    color: \"#eccb23\",\n    onOk: () => {\n      message.info(\"show\");\n    },\n  });\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button onClick={success}>Success</Button>\n      <Button onClick={error} type=\"danger\">\n        Error\n      </Button>\n      <Button onClick={warning}>Warning</Button>\n      <Button onClick={info} type=\"primary\">\n        Info\n      </Button>\n      <Button onClick={show} icon={Moon}>\n        Custom icon\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/modal/demo/confirm.tsx",
          "title": "提示框",
          "source": "import { Button, message, Space, modal } from \"react-kui\";\n\nconst confirm = () =>\n  modal.confirm({\n    title: \"Are you sure to do this?\",\n    content: \"This operation is irreversible, proceed with caution!!!\",\n    onOk: () => {\n      message.success(\"you clicked ok\");\n    },\n    onCancel: () => {\n      message.info(\"you clicked cancel\");\n    },\n  });\nconst custom = () =>\n  modal.confirm({\n    title: \"Are you Ok?\",\n    content: \"Yes , I am fine, and you?\",\n    okText: \"OK\",\n    cancelText: \"Cancel\",\n  });\nconst asyncConfirm = () =>\n  modal.confirm({\n    title: \"Are you sure to do this?\",\n    content: \"This operation is irreversible, proceed with caution!!!\",\n    onOk: () => new Promise<void>((resolve) => setTimeout(resolve, 2000)),\n  });\nconst closeAll = () => {\n  for (let index = 0; index < 3; index += 1)\n    setTimeout(\n      () =>\n        modal.confirm({\n          title: \"Destroy All\",\n          content: \"A surprise of the universe\",\n          cancelText: \"Close all\",\n          onCancel: modal.destroyAll,\n          onOk: () => new Promise<void>((resolve) => setTimeout(resolve, 2000)),\n        }),\n      index * 500\n    );\n};\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button onClick={confirm}>Confirm</Button>\n      <Button onClick={custom}>Internationalization</Button>\n      <Button onClick={asyncConfirm}>Asynchronous shutdown</Button>\n      <Button onClick={closeAll}>Close All</Button>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "NoticePanel",
      "import": "import { NoticePanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/notice",
      "props": [
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "通知提醒的标题",
          "descriptionEn": "Notification title"
        },
        {
          "name": "content",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "提示内容",
          "descriptionEn": "Prompt content"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标颜色",
          "descriptionEn": "Custom icon color"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标",
          "descriptionEn": "Custom icon"
        },
        {
          "name": "type",
          "type": "NoticeType | undefined",
          "required": false,
          "enumValues": [
            "info",
            "success",
            "warning",
            "error",
            "loading"
          ],
          "boolean": false,
          "descriptionZh": "消息语义类型，影响状态类名和默认图标；icon 可覆盖默认图标。",
          "descriptionEn": "Semantic message type controlling status classes and the default icon; icon can override that icon."
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closing"
        },
        {
          "name": "duration",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自动关闭的延时，单位秒，不关闭可以写 0",
          "descriptionEn": "Auto-close delay, in seconds, 0 means not closed"
        },
        {
          "name": "closable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "共享面板类型中的属性；当前 NoticePanel 始终显示关闭按钮，此属性不会隐藏它。",
          "descriptionEn": "A prop inherited from the shared panel type; NoticePanel currently always shows its close button, so this prop does not hide it."
        },
        {
          "name": "grouping",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "分组标识；相同标识的通知复用原条目并重新计时",
          "descriptionEn": "Group key; notices with the same key reuse the existing entry and reset its timer"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closing"
        }
      ],
      "renderProps": [
        "title",
        "content"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/notice/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Space, notice } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button\n        type=\"primary\"\n        onClick={() =>\n          notice.open({ title: \"Title\", content: \"The content of the notice.\", duration: 5 })\n        }\n      >\n        Notice\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/notice/demo/grouping.tsx",
          "title": "合并通知",
          "source": "import { useRef } from \"react\";\nimport { Button, notice } from \"react-kui\";\n\nexport default function App() {\n  const count = useRef(0);\n  return (\n    <Button\n      type=\"primary\"\n      onClick={() => {\n        count.current += 1;\n        notice.info({\n          title: \"Task Progress\",\n          content: `Processed ${count.current} batch${count.current > 1 ? \"es\" : \"\"}.`,\n          grouping: \"task-batch\",\n        });\n      }}\n    >\n      Update Notice\n    </Button>\n  );\n}"
        },
        {
          "id": "components/notice/demo/types.tsx",
          "title": "带图标的提醒",
          "source": "import { Button, Space, notice } from \"react-kui\";\nconst types = [\"info\", \"warning\", \"success\", \"error\"] as const;\nexport default function App() {\n  return (\n    <Space vertical>\n      {types.map((type) => (\n        <Button\n          key={type}\n          onClick={() => notice[type]({ title: \"Title\", content: \"Content message.\", duration: 5 })}\n        >\n          {type[0].toUpperCase() + type.slice(1)}\n        </Button>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/notice/demo/icon.tsx",
          "title": "自定义图标",
          "source": "import { LogoAlipay, LogoWechat } from \"kui-icons\";\nimport { Button, Space, notice } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <Button\n        icon={LogoAlipay}\n        onClick={() =>\n          notice.open({\n            icon: LogoAlipay,\n            color: \"#0082d9ff\",\n            title: \"Dear user, hello\",\n            content:\n              \"We are pleased to inform you that you don't need to repay your Huabei balance next month!\",\n            duration: 10,\n          })\n        }\n      />\n      <Button\n        icon={LogoWechat}\n        onClick={() =>\n          notice.open({\n            icon: LogoWechat,\n            color: \"#00c87b\",\n            title: \"Dear user, hello\",\n            content: (\n              <div>\n                <p style={{ margin: \"10px 0\" }}>\n                  WeChat has added some new features, and we invite you to try them out!\n                </p>\n                <Button type=\"primary\" size=\"small\">\n                  Go and see\n                </Button>\n              </div>\n            ),\n            duration: 10,\n          })\n        }\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/notice/demo/close.tsx",
          "title": "自定义时长",
          "source": "import { useRef } from \"react\";\nimport { Button, message, Space, notice } from \"react-kui\";\nexport default function App() {\n  const count = useRef(0);\n  return (\n    <Space vertical>\n      <Button\n        onClick={() =>\n          notice.open({ type: \"success\", duration: 10, title: \"Title\", content: \"Closing in 10s\" })\n        }\n      >\n        Closing in 10s\n      </Button>\n      <Button\n        type=\"primary\"\n        onClick={() =>\n          notice.open({\n            type: \"info\",\n            duration: 0,\n            title: \"Alert\",\n            content: `Manually close ${++count.current}`,\n            onClose: () => message.success(\"I am a callback.\"),\n          })\n        }\n      >\n        Manually close\n      </Button>\n      <Button type=\"primary\" onClick={notice.destroy}>\n        Destroy\n      </Button>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Page",
      "import": "import { Page } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/page",
      "props": [
        {
          "name": "simple",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否使用简单分页模式",
          "descriptionEn": "Whether to use simple pagination mode"
        },
        {
          "name": "responsive",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否根据容器可用宽度自动调整分页布局",
          "descriptionEn": "Adapt pagination to the available container width"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "禁用状态",
          "descriptionEn": "Disabled status"
        },
        {
          "name": "showSizer",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示每页条数选择器",
          "descriptionEn": "Whether to show page size selector"
        },
        {
          "name": "showTotal",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示总数",
          "descriptionEn": "Whether to show total count"
        },
        {
          "name": "showElevator",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示页码阶梯",
          "descriptionEn": "Whether to show page elevator"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"fill\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Surface theme"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "分页器形状",
          "descriptionEn": "Pagination shape"
        },
        {
          "name": "sizeData",
          "type": "number[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[10, 15, 20, 30, 40]",
          "descriptionZh": "自定义页码组数据",
          "descriptionEn": "Custom page size data"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "total",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "数据总数",
          "descriptionEn": "Total data count"
        },
        {
          "name": "pageSize",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "10",
          "descriptionZh": "每页条数",
          "descriptionEn": "number of items per page"
        },
        {
          "name": "page",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "1",
          "descriptionZh": "当前页码",
          "descriptionEn": "Current page number"
        },
        {
          "name": "onChange",
          "type": "((page: number, pageSize: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "页码、每页条数改变时的回调",
          "descriptionEn": "Called when the page or page size changes"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((page: number, pageSize: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "页码、每页条数改变时的回调",
          "descriptionEn": "Called when the page or page size changes"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": [
          "Pages are one-based. onChange(page, pageSize) reports both values. Update application page/pageSize state and fetch data explicitly."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/page/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { message, Space, Page } from \"react-kui\";\n\nexport default function App() {\n  const [page, setPage] = useState(1);\n  const [pageSize, setPageSize] = useState(15);\n  const onChange = (nextPage: number, nextPageSize: number) => {\n    setPage(nextPage);\n    setPageSize(nextPageSize);\n    message.info(`当前页: ${nextPage}, 每页: ${nextPageSize}`);\n  };\n\n  return (\n    <Space vertical>\n      <Page page={page} pageSize={pageSize} total={50} onChange={onChange} />\n      <Page page={page} pageSize={pageSize} total={50} onChange={onChange} disabled />\n      <code>theme &amp; shape</code>\n      <Page\n        page={page}\n        pageSize={pageSize}\n        total={50}\n        theme=\"outline\"\n        shape=\"round\"\n        onChange={onChange}\n      />\n      <Page page={page} pageSize={pageSize} total={50} shape=\"circle\" onChange={onChange} />\n      <Page page={page} pageSize={pageSize} total={50} shape=\"square\" onChange={onChange} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/page/demo/sizer-elevator.tsx",
          "title": "条目 / 跳转",
          "source": "import { useState } from \"react\";\nimport { Space, Page } from \"react-kui\";\n\nexport default function App() {\n  const [page, setPage] = useState(3);\n  const sizeData = [30, 50, 80, 100];\n  const onChange = (nextPage: number) => setPage(nextPage);\n\n  return (\n    <Space vertical>\n      <Page page={page} total={100} onChange={onChange} />\n      <code>showSizer</code>\n      <Page page={page} total={100} showSizer pageSize={20} onChange={onChange} />\n      <code>showElevator</code>\n      <Page\n        page={page}\n        total={100}\n        showSizer\n        showElevator\n        pageSize={30}\n        sizeData={sizeData}\n        onChange={onChange}\n      />\n      <code>disabled</code>\n      <Page\n        page={page}\n        total={100}\n        disabled\n        showSizer\n        showElevator\n        pageSize={30}\n        sizeData={sizeData}\n        onChange={onChange}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/page/demo/size.tsx",
          "title": "尺寸",
          "source": "import { useState } from \"react\";\nimport { Space, Page } from \"react-kui\";\n\nexport default function App() {\n  const [page, setPage] = useState(1);\n  return (\n    <Space vertical>\n      <Page page={page} total={50} onChange={setPage} />\n      <Page page={page} total={50} size=\"small\" showSizer onChange={setPage} />\n      <Page page={page} total={50} size=\"large\" showElevator showSizer onChange={setPage} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/page/demo/simple.tsx",
          "title": "简洁分页",
          "source": "import { useState } from \"react\";\nimport { Page, Space } from \"react-kui\";\n\nexport default function App() {\n  const [page, setPage] = useState(2);\n  return (\n    <Space vertical>\n      <Page\n        page={page}\n        onChange={(nextPage) => setPage(nextPage)}\n        simple\n        total={80}\n        pageSize={10}\n      />\n      <Page\n        page={page}\n        onChange={(nextPage) => setPage(nextPage)}\n        simple\n        showElevator\n        total={1000}\n        pageSize={10}\n      />\n      <Page\n        page={page}\n        onChange={(nextPage) => setPage(nextPage)}\n        simple\n        size=\"small\"\n        theme=\"outline\"\n        total={80}\n        pageSize={10}\n      />\n      <Page page={3} simple disabled total={80} pageSize={10} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/page/demo/responsive.tsx",
          "title": "自适应分页",
          "source": "import { Page } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <div\n      style={{\n        width: 720,\n        maxWidth: \"100%\",\n        minWidth: 180,\n        resize: \"horizontal\",\n        overflow: \"auto\",\n        padding: 16,\n        boxSizing: \"border-box\",\n        border: \"1px solid var(--kui-color-border)\",\n      }}\n    >\n      <Page total={10000} page={50} showSizer showElevator />\n    </div>\n  );\n}"
        },
        {
          "id": "components/page/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Page, type SurfaceThemeType } from \"react-kui\";\n\n// The tier lands on the page-number cells, not on the bar around them: `fill` — the pager's own look — gives\n// each cell a pale plate, `outline` and `dashed` edge them instead, `plain` leaves them bare, and `solid`\n// plates them on the primary and inverts the digits and the ellipsis. The current page flips to a white cell\n// with primary digits under `solid`, and the total line plus the previous/next arrows keep the bar's own\n// background in every tier — they are not cells.\nconst tiers: SurfaceThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <div style={{ display: \"grid\", gap: 12 }}>\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 6, justifyItems: \"start\" }}>\n          <code>theme: {tier}</code>\n          <Page page={2} pageSize={10} total={80} theme={tier} showTotal={false} />\n        </div>\n      ))}\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "PageHeader",
      "import": "import { PageHeader } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/page-header",
      "props": [
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题",
          "descriptionEn": "Title"
        },
        {
          "name": "description",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "描述",
          "descriptionEn": "Description"
        },
        {
          "name": "breadcrumb",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "面包屑区域",
          "descriptionEn": "Breadcrumb area"
        },
        {
          "name": "back",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "返回按钮区域",
          "descriptionEn": "Back button area"
        },
        {
          "name": "actions",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "操作区域",
          "descriptionEn": "Action area"
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "页面头部主体中的附加内容。",
          "descriptionEn": "Additional content in the page-header body."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "title",
        "description",
        "breadcrumb",
        "back",
        "actions",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/page-header/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { Button, PageHeader } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <PageHeader\n      title=\"Project overview\"\n      description=\"Track progress and recent activity.\"\n      actions={\n        <>\n          <Button>Export</Button>\n          <Button type=\"primary\">Create</Button>\n        </>\n      }\n    />\n  );\n}"
        },
        {
          "id": "components/page-header/demo/simple.tsx",
          "title": "简单模式",
          "source": "import { PageHeader } from \"react-kui\";\n\nexport default function App() {\n  return <PageHeader title=\"Team members\" description=\"Manage access and project roles.\" />;\n}"
        },
        {
          "id": "components/page-header/demo/slots.tsx",
          "title": "自定义内容",
          "source": "import { ArrowLeft, Plus, Search } from \"kui-icons\";\nimport {\n  Breadcrumb,\n  BreadcrumbItem,\n  Button,\n  Input,\n  ListPanel,\n  PageHeader,\n  Table,\n  Tag,\n} from \"react-kui\";\n\nconst columns = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Role\", key: \"role\" },\n  { title: \"Status\", key: \"status\" },\n];\nconst data = [\n  { key: 1, name: \"Alex\", role: \"Owner\", status: \"Active\" },\n  { key: 2, name: \"Mia\", role: \"Designer\", status: \"Active\" },\n  { key: 3, name: \"Leo\", role: \"Developer\", status: \"Invited\" },\n];\n\nexport default function App() {\n  return (\n    <>\n      <PageHeader\n        breadcrumb={\n          <Breadcrumb>\n            <BreadcrumbItem>Projects</BreadcrumbItem>\n            <BreadcrumbItem>Detail</BreadcrumbItem>\n          </Breadcrumb>\n        }\n        back={<Button icon={ArrowLeft} shape=\"circle\" />}\n        title={\n          <>\n            <span>Design system </span>\n            <Tag color=\"blue\">Active</Tag>\n          </>\n        }\n        description=\"Shared foundations and reusable components.\"\n        actions={<Button type=\"primary\">Edit project</Button>}\n      />\n\n      <ListPanel\n        summary=\"3 members\"\n        filters={<Input icon={Search} placeholder=\"Search members\" style={{ width: 220 }} />}\n        actions={<Button icon={Plus}>Add member</Button>}\n      >\n        <Table columns={columns} data={data} />\n      </ListPanel>\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "Poptip",
      "import": "import { Poptip } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/poptip",
      "props": [
        {
          "name": "dark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否使用暗色主题",
          "descriptionEn": "Use dark theme"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "显示状态",
          "descriptionEn": "visibility"
        },
        {
          "name": "show",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "已废弃，请使用 `open`",
          "descriptionEn": "Deprecated; use `open` instead"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的标题",
          "descriptionEn": "Displayed title"
        },
        {
          "name": "content",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的正文内容",
          "descriptionEn": "Displayed main content"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展示的宽度,默认为内容区域的大小",
          "descriptionEn": "Display width, defaults to content area size"
        },
        {
          "name": "trigger",
          "type": "\"hover\" | \"click\" | \"focus\" | undefined",
          "required": false,
          "enumValues": [
            "hover",
            "click",
            "focus"
          ],
          "boolean": false,
          "defaultExpression": "\"hover\"",
          "descriptionZh": "触发方式，可选值为 `hover`（悬停）`click`（点击）",
          "descriptionEn": "Trigger method, optional values: `hover` (hover) `click` (click)"
        },
        {
          "name": "placement",
          "type": "PlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right",
            "left",
            "left-bottom",
            "left-top",
            "right",
            "right-top",
            "right-bottom"
          ],
          "boolean": false,
          "defaultExpression": "\"top\"",
          "descriptionZh": "提示框出现的位置，可选值为`top`，`top-left`，`top-right`，`bottom`，`bottom-left`，`bottom-right`，`left`，`left-top`，`left-bottom`，`right`，`right-top`，`right-bottom`",
          "descriptionEn": "Position where the tooltip appears"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只渲染浮层本身，不包含触发元素、定位与动画",
          "descriptionEn": "Render only the popup itself, without trigger, positioning, or animation"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closed"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "气泡卡片的触发内容；卡片正文使用 content。",
          "descriptionEn": "Trigger content for the popover; supply its body through content."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closed"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "renderProps": [
        "title",
        "content",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/poptip/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Space, Poptip } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space>\n      <Poptip title=\"Title\" content={<p>See the light through the mist!</p>}>\n        <Button type=\"primary\">Hover me</Button>\n      </Poptip>\n      <Poptip\n        dark\n        content={\n          <>\n            <p>See the light through the mist!</p>\n            <p>See the light through the mist!</p>\n          </>\n        }\n      >\n        <Button type=\"primary\">No title</Button>\n      </Poptip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/poptip/demo/trigger.tsx",
          "title": "触发模式",
          "source": "import { Button, Space, Poptip } from \"react-kui\";\n\nconst content = (\n  <>\n    <p>See the light through the mist!</p>\n    <p>See the light through the mist!</p>\n  </>\n);\nexport default function App() {\n  return (\n    <Space>\n      <Poptip title=\"Title\" content={content}>\n        <Button type=\"primary\">Hover me</Button>\n      </Poptip>\n      <Poptip title=\"Title\" trigger=\"focus\" content={content}>\n        <Button type=\"primary\">Focus</Button>\n      </Poptip>\n      <Poptip title=\"Title\" trigger=\"click\" content={content}>\n        <Button type=\"primary\">Click me</Button>\n      </Poptip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/poptip/demo/closeinside.tsx",
          "title": "从浮层内关闭",
          "source": "import { useState } from \"react\";\nimport { Button, Poptip } from \"react-kui\";\n\nexport default function App() {\n  const [open, setOpen] = useState(false);\n  return (\n    <Poptip\n      title=\"Title\"\n      trigger=\"click\"\n      open={open}\n      onOpenChange={setOpen}\n      content={\n        <Button onClick={() => setOpen(false)} size=\"small\">\n          Close\n        </Button>\n      }\n    >\n      <Button type=\"primary\">Click me</Button>\n    </Poptip>\n  );\n}"
        },
        {
          "id": "components/poptip/demo/placement.tsx",
          "title": "位置",
          "source": "import { Button, Flex, Space, Poptip } from \"react-kui\";\n\nconst tip = \"See the light through the mist!\";\nconst item = (placement: Parameters<typeof Poptip>[0][\"placement\"], label: string) => (\n  <Poptip\n    key={placement}\n    placement={placement}\n    title=\"Title\"\n    content={\n      <>\n        <p>{tip}</p>\n        <p>{tip}</p>\n      </>\n    }\n  >\n    <Button>{label}</Button>\n  </Poptip>\n);\nexport default function App() {\n  return (\n    <Flex style={{ width: 300 }} vertical align=\"center\">\n      <Space compact>\n        {item(\"top-left\", \"TL\")}\n        {item(\"top\", \"Top\")}\n        {item(\"top-right\", \"TR\")}\n      </Space>\n      <Flex justify=\"space-between\" style={{ width: \"100%\", padding: \"10px 0\" }}>\n        <Space vertical compact>\n          {item(\"left-top\", \"LT\")}\n          {item(\"left\", \"Left\")}\n          {item(\"left-bottom\", \"LB\")}\n        </Space>\n        <Space vertical compact>\n          {item(\"right-top\", \"RT\")}\n          {item(\"right\", \"Right\")}\n          {item(\"right-bottom\", \"RB\")}\n        </Space>\n      </Flex>\n      <Space compact>\n        {item(\"bottom-left\", \"BL\")}\n        {item(\"bottom\", \"Bottom\")}\n        {item(\"bottom-right\", \"BR\")}\n      </Space>\n    </Flex>\n  );\n}"
        }
      ]
    },
    {
      "name": "PoptipPanel",
      "import": "import { PoptipPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/poptip",
      "props": [
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的标题",
          "descriptionEn": "Displayed title"
        },
        {
          "name": "content",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的正文内容",
          "descriptionEn": "Displayed main content"
        },
        {
          "name": "placement",
          "type": "PlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right",
            "left",
            "left-bottom",
            "left-top",
            "right",
            "right-top",
            "right-bottom"
          ],
          "boolean": false,
          "descriptionZh": "提示框出现的位置，可选值为`top`，`top-left`，`top-right`，`bottom`，`bottom-left`，`bottom-right`，`left`，`left-top`，`left-bottom`，`right`，`right-top`，`right-bottom`",
          "descriptionEn": "Position where the tooltip appears"
        },
        {
          "name": "trigger",
          "type": "\"hover\" | \"click\" | \"focus\" | undefined",
          "required": false,
          "enumValues": [
            "hover",
            "click",
            "focus"
          ],
          "boolean": false,
          "descriptionZh": "触发方式，可选值为 `hover`（悬停）`click`（点击）",
          "descriptionEn": "Trigger method, optional values: `hover` (hover) `click` (click)"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "只渲染浮层本身，不包含触发元素、定位与动画",
          "descriptionEn": "Render only the popup itself, without trigger, positioning, or animation"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展示的宽度,默认为内容区域的大小",
          "descriptionEn": "Display width, defaults to content area size"
        },
        {
          "name": "dark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否使用暗色主题",
          "descriptionEn": "Use dark theme"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closed"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "关闭时的回调",
          "descriptionEn": "Callback when closed"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "renderProps": [
        "title",
        "content"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/poptip/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Button, Space, Poptip } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space>\n      <Poptip title=\"Title\" content={<p>See the light through the mist!</p>}>\n        <Button type=\"primary\">Hover me</Button>\n      </Poptip>\n      <Poptip\n        dark\n        content={\n          <>\n            <p>See the light through the mist!</p>\n            <p>See the light through the mist!</p>\n          </>\n        }\n      >\n        <Button type=\"primary\">No title</Button>\n      </Poptip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/poptip/demo/trigger.tsx",
          "title": "触发模式",
          "source": "import { Button, Space, Poptip } from \"react-kui\";\n\nconst content = (\n  <>\n    <p>See the light through the mist!</p>\n    <p>See the light through the mist!</p>\n  </>\n);\nexport default function App() {\n  return (\n    <Space>\n      <Poptip title=\"Title\" content={content}>\n        <Button type=\"primary\">Hover me</Button>\n      </Poptip>\n      <Poptip title=\"Title\" trigger=\"focus\" content={content}>\n        <Button type=\"primary\">Focus</Button>\n      </Poptip>\n      <Poptip title=\"Title\" trigger=\"click\" content={content}>\n        <Button type=\"primary\">Click me</Button>\n      </Poptip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/poptip/demo/closeinside.tsx",
          "title": "从浮层内关闭",
          "source": "import { useState } from \"react\";\nimport { Button, Poptip } from \"react-kui\";\n\nexport default function App() {\n  const [open, setOpen] = useState(false);\n  return (\n    <Poptip\n      title=\"Title\"\n      trigger=\"click\"\n      open={open}\n      onOpenChange={setOpen}\n      content={\n        <Button onClick={() => setOpen(false)} size=\"small\">\n          Close\n        </Button>\n      }\n    >\n      <Button type=\"primary\">Click me</Button>\n    </Poptip>\n  );\n}"
        },
        {
          "id": "components/poptip/demo/placement.tsx",
          "title": "位置",
          "source": "import { Button, Flex, Space, Poptip } from \"react-kui\";\n\nconst tip = \"See the light through the mist!\";\nconst item = (placement: Parameters<typeof Poptip>[0][\"placement\"], label: string) => (\n  <Poptip\n    key={placement}\n    placement={placement}\n    title=\"Title\"\n    content={\n      <>\n        <p>{tip}</p>\n        <p>{tip}</p>\n      </>\n    }\n  >\n    <Button>{label}</Button>\n  </Poptip>\n);\nexport default function App() {\n  return (\n    <Flex style={{ width: 300 }} vertical align=\"center\">\n      <Space compact>\n        {item(\"top-left\", \"TL\")}\n        {item(\"top\", \"Top\")}\n        {item(\"top-right\", \"TR\")}\n      </Space>\n      <Flex justify=\"space-between\" style={{ width: \"100%\", padding: \"10px 0\" }}>\n        <Space vertical compact>\n          {item(\"left-top\", \"LT\")}\n          {item(\"left\", \"Left\")}\n          {item(\"left-bottom\", \"LB\")}\n        </Space>\n        <Space vertical compact>\n          {item(\"right-top\", \"RT\")}\n          {item(\"right\", \"Right\")}\n          {item(\"right-bottom\", \"RB\")}\n        </Space>\n      </Flex>\n      <Space compact>\n        {item(\"bottom-left\", \"BL\")}\n        {item(\"bottom\", \"Bottom\")}\n        {item(\"bottom-right\", \"BR\")}\n      </Space>\n    </Flex>\n  );\n}"
        }
      ]
    },
    {
      "name": "Popconfirm",
      "import": "import { Popconfirm } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/popconfirm",
      "props": [
        {
          "name": "dark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示暗色主题",
          "descriptionEn": "Whether to display dark theme"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "显示状态",
          "descriptionEn": "visibility"
        },
        {
          "name": "show",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "已废弃，请使用 `open`",
          "descriptionEn": "Deprecated; use `open` instead"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的标题",
          "descriptionEn": "Displayed title"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展示的宽度,默认为内容区域的大小",
          "descriptionEn": "Display width, defaults to content area size"
        },
        {
          "name": "okText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "确定按钮的文字，",
          "descriptionEn": "OK button text"
        },
        {
          "name": "cancelText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "取消按钮的文字，",
          "descriptionEn": "Cancel button text"
        },
        {
          "name": "placement",
          "type": "PlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right",
            "left",
            "left-bottom",
            "left-top",
            "right",
            "right-top",
            "right-bottom"
          ],
          "boolean": false,
          "defaultExpression": "\"top\"",
          "descriptionZh": "提示框出现的位置，可选值为`top`，`top-left`，`top-right`，`bottom`，`bottom-left`，`bottom-right`，`left`，`left-top`，`left-bottom`，`right`，`right-top`，`right-bottom`",
          "descriptionEn": "Position where the tooltip appears, optional values: `top`, `top-left`, `top-right`, `bottom`, `bottom-left`, `bottom-right`, `left`, `left-top`, `left-bottom`, `right`, `right-top`, `right-bottom`"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只渲染浮层本身，不包含触发元素、定位与动画",
          "descriptionEn": "Render only the popup itself, without trigger, positioning, or animation"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调，",
          "descriptionEn": "Callback when cancel is clicked"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调，",
          "descriptionEn": "Callback when OK is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "确认气泡的触发内容，不是气泡正文。",
          "descriptionEn": "Trigger content for the confirmation popup, not its body."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调，",
          "descriptionEn": "Callback when cancel is clicked"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调，",
          "descriptionEn": "Callback when OK is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "renderProps": [
        "title",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/popconfirm/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { message, Popconfirm } from \"react-kui\";\nexport default function App() {\n  return (\n    <Popconfirm\n      title=\"Are you sure delete this task?\"\n      onOk={() => message.success(\"Clicked on ok\")}\n      onCancel={() => message.info(\"Clicked on cancel\")}\n    >\n      <a>Delete</a>\n    </Popconfirm>\n  );\n}"
        },
        {
          "id": "components/popconfirm/demo/local.tsx",
          "title": "国际化",
          "source": "import { Button, message, Space, Popconfirm } from \"react-kui\";\nconst ok = () => message.success(\"Clicked on ok\"),\n  cancel = () => message.info(\"Clicked on cancel\");\nexport default function App() {\n  return (\n    <Space>\n      <Popconfirm title=\"Are you sure delete this content?\" onOk={ok} onCancel={cancel}>\n        <Button type=\"danger\">Delete</Button>\n      </Popconfirm>\n      <Popconfirm\n        title=\"Are you sure delete this task?\"\n        okText=\"Yes\"\n        cancelText=\"No\"\n        onOk={ok}\n        onCancel={cancel}\n      >\n        <Button type=\"primary\">Confirm</Button>\n      </Popconfirm>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/popconfirm/demo/placement.tsx",
          "title": "位置",
          "source": "import { Button, Flex, Space, Popconfirm } from \"react-kui\";\nconst title = \"Are you sure to delete this task?\";\nconst item = (placement: Parameters<typeof Popconfirm>[0][\"placement\"], label: string) => (\n  <Popconfirm key={placement} placement={placement} title={title}>\n    <Button>{label}</Button>\n  </Popconfirm>\n);\nexport default function App() {\n  return (\n    <Flex style={{ width: 300 }} vertical align=\"center\">\n      <Space compact>\n        {item(\"top-left\", \"TL\")}\n        {item(\"top\", \"Top\")}\n        {item(\"top-right\", \"TR\")}\n      </Space>\n      <Flex justify=\"space-between\" style={{ width: \"100%\", padding: \"10px 0\" }}>\n        <Space vertical compact>\n          {item(\"left-top\", \"LT\")}\n          {item(\"left\", \"Left\")}\n          {item(\"left-bottom\", \"LB\")}\n        </Space>\n        <Space vertical compact>\n          {item(\"right-top\", \"RT\")}\n          {item(\"right\", \"Right\")}\n          {item(\"right-bottom\", \"RB\")}\n        </Space>\n      </Flex>\n      <Space compact>\n        {item(\"bottom-left\", \"BL\")}\n        {item(\"bottom\", \"Bottom\")}\n        {item(\"bottom-right\", \"BR\")}\n      </Space>\n    </Flex>\n  );\n}"
        }
      ]
    },
    {
      "name": "PopconfirmPanel",
      "import": "import { PopconfirmPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/popconfirm",
      "props": [
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的标题",
          "descriptionEn": "Displayed title"
        },
        {
          "name": "placement",
          "type": "PlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right",
            "left",
            "left-bottom",
            "left-top",
            "right",
            "right-top",
            "right-bottom"
          ],
          "boolean": false,
          "descriptionZh": "提示框出现的位置，可选值为`top`，`top-left`，`top-right`，`bottom`，`bottom-left`，`bottom-right`，`left`，`left-top`，`left-bottom`，`right`，`right-top`，`right-bottom`",
          "descriptionEn": "Position where the tooltip appears, optional values: `top`, `top-left`, `top-right`, `bottom`, `bottom-left`, `bottom-right`, `left`, `left-top`, `left-bottom`, `right`, `right-top`, `right-bottom`"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "只渲染浮层本身，不包含触发元素、定位与动画",
          "descriptionEn": "Render only the popup itself, without trigger, positioning, or animation"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展示的宽度,默认为内容区域的大小",
          "descriptionEn": "Display width, defaults to content area size"
        },
        {
          "name": "dark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否展示暗色主题",
          "descriptionEn": "Whether to display dark theme"
        },
        {
          "name": "okText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "确定按钮的文字，",
          "descriptionEn": "OK button text"
        },
        {
          "name": "cancelText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "取消按钮的文字，",
          "descriptionEn": "Cancel button text"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调，",
          "descriptionEn": "Callback when OK is clicked"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调，",
          "descriptionEn": "Callback when cancel is clicked"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onOk",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击确定的回调，",
          "descriptionEn": "Callback when OK is clicked"
        },
        {
          "name": "onCancel",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击取消的回调，",
          "descriptionEn": "Callback when cancel is clicked"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "renderProps": [
        "title"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/popconfirm/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { message, Popconfirm } from \"react-kui\";\nexport default function App() {\n  return (\n    <Popconfirm\n      title=\"Are you sure delete this task?\"\n      onOk={() => message.success(\"Clicked on ok\")}\n      onCancel={() => message.info(\"Clicked on cancel\")}\n    >\n      <a>Delete</a>\n    </Popconfirm>\n  );\n}"
        },
        {
          "id": "components/popconfirm/demo/local.tsx",
          "title": "国际化",
          "source": "import { Button, message, Space, Popconfirm } from \"react-kui\";\nconst ok = () => message.success(\"Clicked on ok\"),\n  cancel = () => message.info(\"Clicked on cancel\");\nexport default function App() {\n  return (\n    <Space>\n      <Popconfirm title=\"Are you sure delete this content?\" onOk={ok} onCancel={cancel}>\n        <Button type=\"danger\">Delete</Button>\n      </Popconfirm>\n      <Popconfirm\n        title=\"Are you sure delete this task?\"\n        okText=\"Yes\"\n        cancelText=\"No\"\n        onOk={ok}\n        onCancel={cancel}\n      >\n        <Button type=\"primary\">Confirm</Button>\n      </Popconfirm>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/popconfirm/demo/placement.tsx",
          "title": "位置",
          "source": "import { Button, Flex, Space, Popconfirm } from \"react-kui\";\nconst title = \"Are you sure to delete this task?\";\nconst item = (placement: Parameters<typeof Popconfirm>[0][\"placement\"], label: string) => (\n  <Popconfirm key={placement} placement={placement} title={title}>\n    <Button>{label}</Button>\n  </Popconfirm>\n);\nexport default function App() {\n  return (\n    <Flex style={{ width: 300 }} vertical align=\"center\">\n      <Space compact>\n        {item(\"top-left\", \"TL\")}\n        {item(\"top\", \"Top\")}\n        {item(\"top-right\", \"TR\")}\n      </Space>\n      <Flex justify=\"space-between\" style={{ width: \"100%\", padding: \"10px 0\" }}>\n        <Space vertical compact>\n          {item(\"left-top\", \"LT\")}\n          {item(\"left\", \"Left\")}\n          {item(\"left-bottom\", \"LB\")}\n        </Space>\n        <Space vertical compact>\n          {item(\"right-top\", \"RT\")}\n          {item(\"right\", \"Right\")}\n          {item(\"right-bottom\", \"RB\")}\n        </Space>\n      </Flex>\n      <Space compact>\n        {item(\"bottom-left\", \"BL\")}\n        {item(\"bottom\", \"Bottom\")}\n        {item(\"bottom-right\", \"BR\")}\n      </Space>\n    </Flex>\n  );\n}"
        }
      ]
    },
    {
      "name": "Progress",
      "import": "import { Progress } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/progress",
      "props": [
        {
          "name": "percent",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "进度百分比",
          "descriptionEn": "Progress percentage"
        },
        {
          "name": "strokeWidth",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "6",
          "descriptionZh": "圆形进度条线的宽度",
          "descriptionEn": "Circular progress bar line width"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "进度条颜色",
          "descriptionEn": "Progress bar color"
        },
        {
          "name": "format",
          "type": "((percent: number) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义进度条文字",
          "descriptionEn": "Custom progress bar text"
        },
        {
          "name": "width",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "圆形进度条画布宽度，单位 px",
          "descriptionEn": "Circular progress bar canvas width, in px"
        },
        {
          "name": "strokeHeight",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "进度条线的高度",
          "descriptionEn": "Progress bar line height"
        },
        {
          "name": "gapDegree",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "75",
          "descriptionZh": "仪表盘进度条缺口角度，可取值 0 ~ 295",
          "descriptionEn": "Dashboard progress bar gap angle, can be 0 ~ 295"
        },
        {
          "name": "strokeLinecap",
          "type": "ProgressStroke | undefined",
          "required": false,
          "enumValues": [
            "round",
            "butt",
            "square"
          ],
          "boolean": false,
          "defaultExpression": "\"round\"",
          "descriptionZh": "进度条的样式",
          "descriptionEn": "Progress bar style"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "值为`small`，展示小尺寸",
          "descriptionEn": "When value is `small`, displays small size"
        },
        {
          "name": "status",
          "type": "ProgressStatus | undefined",
          "required": false,
          "enumValues": [
            "normal",
            "active",
            "success",
            "exception"
          ],
          "boolean": false,
          "defaultExpression": "\"normal\"",
          "descriptionZh": "进度条状态,提供四种类型: `active`,`exception`,`success`,`normal`",
          "descriptionEn": "Progress bar status, provides four types: `active`, `exception`, `success`, `normal`"
        },
        {
          "name": "type",
          "type": "ProgressType | undefined",
          "required": false,
          "enumValues": [
            "circle",
            "line",
            "dashboard"
          ],
          "boolean": false,
          "defaultExpression": "\"line\"",
          "descriptionZh": "进度条类型,提供三种类型: `line`,`circle`,`dashboard`",
          "descriptionEn": "Progress bar type, provides three types: `line`, `circle`, `dashboard`"
        },
        {
          "name": "showInfo",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示进度文字",
          "descriptionEn": "Whether to show progress text"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "format"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/progress/demo/basic.tsx",
          "title": "进度条",
          "source": "import { Progress } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <Progress percent={30} />\n      <Progress percent={50} status=\"active\" />\n      <Progress percent={70} status=\"exception\" />\n      <Progress percent={100} />\n      <Progress percent={50} showInfo={false} />\n    </>\n  );\n}"
        },
        {
          "id": "components/progress/demo/circle.tsx",
          "title": "进度圈",
          "source": "import { Progress } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <Progress type=\"circle\" percent={50} />\n      <Progress type=\"circle\" percent={70} status=\"exception\" />\n      <Progress type=\"circle\" percent={100} />\n      <Progress type=\"circle\" percent={50}>\n        <div>\n          <h2 style={{ margin: 0, fontSize: 23 }}>13389</h2>\n          <span style={{ fontSize: 14, color: \"#999\" }}>Steps</span>\n        </div>\n      </Progress>\n    </>\n  );\n}"
        },
        {
          "id": "components/progress/demo/dashboard.tsx",
          "title": "仪表盘进度条",
          "source": "import { useState } from \"react\";\nimport { Segmented, Slider, Progress, type ProgressStroke } from \"react-kui\";\nconst caps = [\n  { label: \"Butt\", value: \"butt\" },\n  { label: \"Round\", value: \"round\" },\n  { label: \"Square\", value: \"square\" },\n];\nexport default function App() {\n  const [gap, setGap] = useState(140),\n    [cap, setCap] = useState<ProgressStroke>(\"round\");\n  return (\n    <>\n      gapDegree：{gap}\n      <Slider value={gap} min={50} max={160} onChange={(v) => setGap(v as number)} />\n      <br />\n      <br />\n      <Segmented\n        options={caps}\n        value={cap}\n        onChange={(v) => setCap(v as ProgressStroke)}\n      />\n      <br />\n      <br />\n      <Progress type=\"dashboard\" percent={50} gapDegree={gap} strokeLinecap={cap} />\n      <Progress type=\"dashboard\" percent={100} gapDegree={gap} strokeLinecap={cap} />\n    </>\n  );\n}"
        },
        {
          "id": "components/progress/demo/dynamic.tsx",
          "title": "动态展示",
          "source": "import { Minus, Plus } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, ButtonGroup, Progress } from \"react-kui\";\nexport default function App() {\n  const [percent, setPercent] = useState(30),\n    change = (step: number) => setPercent((value) => Math.max(0, Math.min(100, value + step)));\n  return (\n    <>\n      <ButtonGroup>\n        <Button onClick={() => change(-5)} icon={Minus} />\n        <Button onClick={() => change(5)} icon={Plus} />\n      </ButtonGroup>\n      <Progress percent={percent} style={{ width: 300, marginBottom: 30 }} />\n      <Progress percent={percent} type=\"circle\" />\n      <Progress percent={percent} type=\"dashboard\" />\n    </>\n  );\n}"
        },
        {
          "id": "components/progress/demo/color.tsx",
          "title": "颜色和格式",
          "source": "import { Minus, Plus } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, ButtonGroup, Progress } from \"react-kui\";\nconst getColor = (v: number) =>\n  v >= 80 ? \"#f79e08\" : v >= 50 ? \"#c7b98d\" : v >= 30 ? \"#bdc78d\" : \"\";\nconst strength = (v: number) => (v < 30 ? \"Empty\" : v < 50 ? \"Weak\" : v < 80 ? \"Normal\" : \"Strong\");\nexport default function App() {\n  const [percent, setPercent] = useState(0),\n    change = (step: number) => setPercent((v) => Math.max(0, Math.min(100, v + step))),\n    color = getColor(percent);\n  return (\n    <>\n      <Progress\n        percent={percent}\n        format={strength}\n        color={color}\n        style={{ width: 300, marginBottom: 30 }}\n      />\n      <Progress percent={percent} type=\"circle\" format={(v) => `${v}℃`} color={color} />\n      <Progress percent={percent} type=\"dashboard\" format={(v) => `${v}L`} color={color} />\n      <br />\n      <ButtonGroup>\n        <Button onClick={() => change(-5)} icon={Minus} />\n        <Button onClick={() => change(5)} icon={Plus} />\n      </ButtonGroup>\n    </>\n  );\n}"
        },
        {
          "id": "components/progress/demo/size.tsx",
          "title": "尺寸",
          "source": "import { Progress } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      Custom:\n      <Progress strokeHeight={10} percent={50} />\n      <Progress strokeHeight={3} percent={50} />\n      <Progress strokeWidth={15} type=\"circle\" width={80} percent={50} />\n      <Progress strokeWidth={3} type=\"circle\" width={80} percent={50} />\n      <br />\n      Small:\n      <div style={{ width: 300, marginBottom: 30 }}>\n        <Progress size=\"small\" percent={50} />\n        <Progress size=\"small\" percent={70} status=\"exception\" />\n        <Progress size=\"small\" percent={10} />\n      </div>\n      <Progress type=\"circle\" width={80} percent={50} />\n      <Progress type=\"circle\" width={80} percent={70} status=\"exception\" />\n      <Progress type=\"circle\" width={80} percent={100} />\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "Ripple",
      "import": "import { Ripple } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/ripple",
      "props": [
        {
          "name": "children",
          "type": "ReactNode",
          "required": true,
          "boolean": false,
          "descriptionZh": "被水波效果包裹的内容",
          "descriptionEn": "Content wrapped by the effect"
        },
        {
          "name": "className",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "外层容器类名",
          "descriptionEn": "Wrapper class name"
        },
        {
          "name": "style",
          "type": "CSSProperties | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "外层容器样式",
          "descriptionEn": "Wrapper styles"
        },
        {
          "name": "amplitude",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "波纹高度，建议范围 0–3",
          "descriptionEn": "Wave height, recommended range 0–3"
        },
        {
          "name": "speed",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "波纹传播速度倍率",
          "descriptionEn": "Wave propagation speed multiplier"
        },
        {
          "name": "wavelength",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "波峰间距，单位 px",
          "descriptionEn": "Distance between wave crests in px"
        },
        {
          "name": "rings",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "每组水波的波峰数量，建议范围 1–8",
          "descriptionEn": "Crests in each wave train, recommended range 1–8"
        },
        {
          "name": "decay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "能量衰减速度，越大消失越快",
          "descriptionEn": "Energy decay rate; higher values fade faster"
        },
        {
          "name": "refraction",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "内容折射强度，单位 px",
          "descriptionEn": "Content refraction strength in px"
        },
        {
          "name": "dispersion",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "色散强度，建议范围 0–1",
          "descriptionEn": "Chromatic dispersion, recommended range 0–1"
        },
        {
          "name": "shine",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "波峰高光强度，建议范围 0–2",
          "descriptionEn": "Crest highlight intensity, recommended range 0–2"
        },
        {
          "name": "trigger",
          "type": "RippleTrigger | undefined",
          "required": false,
          "enumValues": [
            "none",
            "hover",
            "click"
          ],
          "boolean": false,
          "descriptionZh": "水波触发方式",
          "descriptionEn": "Ripple trigger"
        },
        {
          "name": "interval",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自动产生随机水波的间隔秒数，`0` 表示关闭",
          "descriptionEn": "Seconds between ambient ripples; `0` disables them"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/ripple/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { Button, Card, Ripple, Space, Tag } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Ripple\n      style={{\n        minHeight: 260,\n        borderRadius: \"var(--kui-card-radius, var(--kui-border-radius-card))\",\n      }}\n    >\n      <Card style={{ padding: 32 }}>\n        <Tag color=\"blue\">Interactive surface</Tag>\n        <h3 style={{ margin: \"18px 0 8px\" }}>点击任意位置，观察水波扩散</h3>\n        <p style={{ margin: \"0 0 24px\", color: \"var(--kui-color-text-secondary, var(--kui-color-text-description))\" }}>\n          在支持 HTML-in-Canvas 的浏览器中，水波会折射下方的实时 DOM 内容。\n        </p>\n        <Space>\n          <Button type=\"primary\">Primary</Button>\n          <Button>Default</Button>\n        </Space>\n      </Card>\n    </Ripple>\n  );\n}"
        },
        {
          "id": "components/ripple/demo/options.tsx",
          "title": "自定义效果",
          "source": "import { Card, Ripple } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Ripple\n      trigger=\"hover\"\n      amplitude={0.8}\n      rings={4}\n      wavelength={48}\n      refraction={72}\n      dispersion={0.35}\n    >\n      <Card style={{ padding: 32, height: 220 }}>\n        <h3 style={{ margin: \"0 0 8px\" }}>Hover Ripple</h3>\n        <p style={{ margin: 0, color: \"var(--kui-color-text-secondary, var(--kui-color-text-description))\" }}>\n          移动指针会连续产生较轻的水波轨迹。\n        </p>\n      </Card>\n    </Ripple>\n  );\n}"
        }
      ]
    },
    {
      "name": "QRCode",
      "import": "import { QRCode } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/qrcode",
      "props": [
        {
          "name": "value",
          "type": "string",
          "required": true,
          "boolean": false,
          "descriptionZh": "二维码解析的文本内容或跳转链接。",
          "descriptionEn": "Text content or redirect URL encoded in the QR code."
        },
        {
          "name": "size",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "160",
          "descriptionZh": "二维码的正方形边长，单位 `px`。组件内部已做高清屏适配，大屏拉伸不模糊。",
          "descriptionEn": "Side length of the square QR code in `px`. Optimized for high-DPI displays to prevent blurring on large screens."
        },
        {
          "name": "colorDark",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"var(--kui-color-reverse)\"",
          "descriptionZh": "前景色（二维码实点颜色）。支持十六进制、RGB 以及 CSS 变量，组件会自动监听根节点 `theme-mode` 属性进行动态重绘适配。",
          "descriptionEn": "Foreground color (the color of QR code modules). Supports hex, RGB, and CSS variables. Automatically re-renders when the root attribute `theme-mode` changes."
        },
        {
          "name": "colorLight",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"var(--kui-color-bg)\"",
          "descriptionZh": "背景色。支持十六进制、RGB 以及 CSS 变量。暗黑模式下建议设置为深色系，切勿设为完全透明以免影响扫码识别率。",
          "descriptionEn": "Background color. Supports hex, RGB, and CSS variables. For dark mode, use dark tones and avoid full transparency to ensure scan reliability."
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否保留外边框和它托住的 12px 内边距。只想去掉表面（不留底色、边框透明）请写 `theme=\"plain\"`，内边距会保留。",
          "descriptionEn": "Whether to keep the outer frame and the 12px padding it holds. To only drop the surface — no plate, a transparent frame — write `theme=\"plain\"` instead, which keeps the padding."
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "二维码形状",
          "descriptionEn": "Shape of the QR code"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"outline\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "status",
          "type": "QRCodeStatus | undefined",
          "required": false,
          "enumValues": [
            "active",
            "loading",
            "expired",
            "scanned"
          ],
          "boolean": false,
          "defaultExpression": "\"active\"",
          "descriptionZh": "二维码的当前业务状态。可选值：<br>• `'active'`: 正常可扫描状态<br>• `'loading'`: 安全链路加载中状态<br>• `'expired'`: 长期未扫码已失效状态（展示刷新按钮）<br>• `'scanned'`: 已成功扫描状态（可配合插槽定制遮罩）",
          "descriptionEn": "Current business state of the QR code. Options:<br>• `'active'`: Scannable<br>• `'loading'`: Loading secure link<br>• `'expired'`: Expired (shows refresh button)<br>• `'scanned'`: Successfully scanned (customizable overlay via ReactNode props)"
        },
        {
          "name": "logo",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"\"",
          "descriptionZh": "二维码正中心的 Logo 图片地址（支持网络 URL 或 Base64）。",
          "descriptionEn": "URL (network or Base64) of the logo displayed at the center of the QR code."
        },
        {
          "name": "logoSize",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "正中心 Logo 的尺寸大小，单位 `px`。如果不传，组件内部会自动计算为整个二维码尺寸的 `22%`。",
          "descriptionEn": "Size of the centered logo in `px`. If omitted, defaults to 22% of the QR code size."
        },
        {
          "name": "margin",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "二维码矩阵区域四周的空白边距（即白边格子的层数）。",
          "descriptionEn": "Quiet zone (white border) width around the QR code matrix, measured in module counts."
        },
        {
          "name": "logoRadius",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "4",
          "descriptionZh": "正中心 Logo 的圆角弧度，单位 `px`。",
          "descriptionEn": "Border radius of the centered logo in `px`."
        },
        {
          "name": "logoBorder",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "Logo 是否开启白色隔离保护边框。开启后会在 Logo 外围自动绘制一圈背景色保护带，防止二维码矩阵格子死死贴住 Logo 导致视觉杂乱。",
          "descriptionEn": "Whether to add a white protective border around the logo. Prevents visual clutter by separating QR modules from the logo."
        },
        {
          "name": "errorLevel",
          "type": "QRCodeErrorLevel | undefined",
          "required": false,
          "enumValues": [
            "L",
            "M",
            "Q",
            "H"
          ],
          "boolean": false,
          "defaultExpression": "\"M\"",
          "descriptionZh": "二维码的容错率纠错级别。可选值：`'L'` (7%), `'M'` (15%), `'Q'` (25%), `'H'` (30%)。<br>_注：如果需要在正中心嵌入 Logo，建议维持在 'M' 或强行改为 'H'，以确保中心被遮挡后依然能百分百被识别。_",
          "descriptionEn": "Error correction level. Options: `'L'` (7%), `'M'` (15%), `'Q'` (25%), `'H'` (30%).<br>_Note: When embedding a logo, it is recommended to use `'M'` or `'H'` to ensure reliable scanning even if the center is obscured._"
        },
        {
          "name": "loadingContent",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义 `loading` 状态的遮罩内容。",
          "descriptionEn": "Custom overlay content for the `loading` status."
        },
        {
          "name": "expiredContent",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义 `expired` 状态的遮罩内容。",
          "descriptionEn": "Custom overlay content for the `expired` status."
        },
        {
          "name": "scannedContent",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义 `scanned` 状态的遮罩内容。",
          "descriptionEn": "Custom overlay content for the `scanned` status."
        },
        {
          "name": "onRefresh",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击 `expired` 状态遮罩时触发。",
          "descriptionEn": "Called when the `expired` status overlay is clicked."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onRefresh",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击 `expired` 状态遮罩时触发。",
          "descriptionEn": "Called when the `expired` status overlay is clicked."
        }
      ],
      "renderProps": [
        "loadingContent",
        "expiredContent",
        "scannedContent"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/qrcode/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Input, QRCode, Space } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"https://react.k-ui.cn\");\n  return (\n    <Space vertical>\n      <Input value={value} onChange={setValue} />\n      <QRCode value={value} size={100} />\n      <QRCode value={value} size={100} logo=\"/favicon.svg\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/qrcode/demo/status.tsx",
          "title": "不同的状态",
          "source": "import { useState } from \"react\";\nimport { Space, QRCode, type QRCodeStatus } from \"react-kui\";\nexport default function App() {\n  const [url, setUrl] = useState(\"https://react.k-ui.cn\"),\n    [status, setStatus] = useState<QRCodeStatus>(\"expired\");\n  const refresh = () => {\n    setStatus(\"loading\");\n    setTimeout(() => {\n      setUrl(\"https://xxx.com/pay/order_new_1122\");\n      setStatus(\"active\");\n    }, 1000);\n  };\n  return (\n    <Space wrap>\n      <QRCode value={url} size={100} />\n      <QRCode value={url} status=\"loading\" size={100} />\n      <QRCode value={url} status={status} size={100} onRefresh={refresh} />\n      <QRCode value={url} status=\"scanned\" size={100} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/qrcode/demo/custom.tsx",
          "title": "自定义属性",
          "source": "import { useState } from \"react\";\nimport {\n  ColorPicker,\n  QRCode,\n  Segmented,\n  Slider,\n  Space,\n  Switch,\n  type QRCodeErrorLevel,\n} from \"react-kui\";\nexport default function App() {\n  const [color, setColor] = useState(\"#4CAF50\"),\n    [size, setSize] = useState(100),\n    [margin, setMargin] = useState(0),\n    [level, setLevel] = useState<QRCodeErrorLevel>(\"L\"),\n    [bordered, setBordered] = useState(true);\n  return (\n    <Space vertical block>\n      <QRCode\n        value=\"https://react.k-ui.cn\"\n        size={size}\n        colorDark={color}\n        errorLevel={level}\n        bordered={bordered}\n        margin={margin}\n      />\n      <Space>\n        Color: <ColorPicker value={color} onChange={setColor} />\n      </Space>\n      <Space>\n        Size:{\" \"}\n        <Slider\n          value={size}\n          min={100}\n          max={150}\n          style={{ width: 200 }}\n          onChange={(v) => setSize(v as number)}\n        />\n      </Space>\n      <Space>\n        Margin:{\" \"}\n        <Slider\n          value={margin}\n          max={10}\n          style={{ width: 200 }}\n          onChange={(v) => setMargin(v as number)}\n        />\n      </Space>\n      <Space>\n        ErrorLevel:\n        <Segmented\n          value={level}\n          options={([\"L\", \"M\", \"Q\", \"H\"] as QRCodeErrorLevel[]).map((value) => ({ label: value, value }))}\n          onChange={(v) => setLevel(v as QRCodeErrorLevel)}\n        />\n      </Space>\n      <Space>\n        Border: <Switch checked={bordered} onChange={(v) => setBordered(Boolean(v))} />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/qrcode/demo/download.tsx",
          "title": "卡片和下载",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Input, Poptip, QRCode, Space, type QRCodeRef } from \"react-kui\";\nexport default function App() {\n  const [url, setUrl] = useState(\"https://react.k-ui.cn\"),\n    ref = useRef<QRCodeRef>(null);\n  return (\n    <Space vertical>\n      <Space compact>\n        <Input value={url} onChange={setUrl} />\n        <Button type=\"primary\" onClick={() => ref.current?.download()}>\n          Download\n        </Button>\n      </Space>\n      <QRCode value={url} size={128} logo=\"/favicon.svg\" ref={ref} />\n      <Poptip content={<QRCode value={url} size={128} theme=\"plain\" logo=\"/favicon.svg\" />}>\n        <Button type=\"primary\">Hover me</Button>\n      </Poptip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/qrcode/demo/custom-status.tsx",
          "title": "自定义状态",
          "source": "import { CircleCheck } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Icon, Space, Spin, QRCode, type QRCodeStatus } from \"react-kui\";\nexport default function App() {\n  const [url, setUrl] = useState(\"https://react.k-ui.cn\"),\n    [status, setStatus] = useState<QRCodeStatus>(\"expired\");\n  const refresh = () => {\n    setStatus(\"loading\");\n    setTimeout(() => {\n      setUrl(\"https://xxx.com/pay\");\n      setStatus(\"active\");\n    }, 1000);\n  };\n  return (\n    <Space wrap>\n      <QRCode value={url} size={100} />\n      <QRCode\n        value={url}\n        status=\"loading\"\n        size={100}\n        loadingContent={\n          <>\n            <Spin mode=\"bounce\" />\n            <p>疯狂加载中...</p>\n          </>\n        }\n      />\n      <QRCode\n        value={url}\n        status={status}\n        size={100}\n        expiredContent={\n          <Button type=\"primary\" onClick={refresh} size=\"small\">\n            刷新二维码\n          </Button>\n        }\n      />\n      <QRCode\n        value={url}\n        status=\"scanned\"\n        size={100}\n        scannedContent={\n          <>\n            <Icon type={CircleCheck} color=\"green\" size={30} />\n            <div>支付成功</div>\n          </>\n        }\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/qrcode/demo/appearance.tsx",
          "title": "外观",
          "source": "import { QRCode, Space, type SurfaceThemeType } from \"react-kui\";\n\n// A code is a frame around a canvas, so its tiers read the same way an image's do, and its own look is\n// `outline` — the ring it draws when nobody writes a theme. The modules inside stay the same ink in every\n// tier; only the frame around them changes.\nconst tiers: SurfaceThemeType[] = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <Space wrap size={16}>\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 8, justifyItems: \"center\" }}>\n          <QRCode value=\"https://react.k-ui.cn\" size={104} theme={tier} />\n          <code>theme: {tier}</code>\n        </div>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Radio",
      "import": "import { Radio } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/radio",
      "props": [
        {
          "name": "checked",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "选中状态",
          "descriptionEn": "checked state"
        },
        {
          "name": "value",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组合使用时的值",
          "descriptionEn": "Value when used in combination"
        },
        {
          "name": "label",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文字提示",
          "descriptionEn": "Text prompt"
        },
        {
          "name": "theme",
          "type": "MarkThemeType | undefined",
          "required": false,
          "enumValues": [
            "fill",
            "outline"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? group?.theme ?? inheritedAppearance.theme, PAINTED_THEMES) ??\n      \"fill\"",
          "descriptionZh": "组件呈现主题",
          "descriptionEn": "Component theme"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "按钮尺寸",
          "descriptionEn": "Button size"
        },
        {
          "name": "onChange",
          "type": "((e: ChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时回调",
          "descriptionEn": "Callback when option state changes"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未设置 label 时的单选项标签内容。",
          "descriptionEn": "Radio label content used when label is null or undefined."
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用当前项",
          "descriptionEn": "Whether current item is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读当前项",
          "descriptionEn": "Whether current item is read-only"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((e: ChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时回调",
          "descriptionEn": "Callback when option state changes"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "RadioGroup",
      "examples": [
        {
          "id": "components/radio/demo/basic.tsx",
          "title": "单选",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Radio } from \"react-kui\";\nexport default function App() {\n  const [checked, setChecked] = useState(true);\n  return (\n    <Space vertical>\n      <code>value: {String(checked)}</code>\n      <Radio checked={checked} onChange={({ checked }) => setChecked(checked)}>\n        Radio\n      </Radio>\n      <Button onClick={() => setChecked((v) => !v)} size=\"small\">\n        {checked ? \"Checked\" : \"Unchecked\"}\n      </Button>\n      <Radio label=\"Radio\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/group.tsx",
          "title": "单选组",
          "source": "import { useEffect, useState } from \"react\";\nimport { Space, Radio, RadioGroup } from \"react-kui\";\nconst initial = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [value, setValue] = useState(\"apple\"),\n    [options, setOptions] = useState(initial);\n  useEffect(() => {\n    const timer = setTimeout(\n      () => setOptions(initial.map((item) => ({ ...item, label: `${item.label}1` }))),\n      1000,\n    );\n    return () => clearTimeout(timer);\n  }, []);\n  return (\n    <Space vertical>\n      use options<code>value: {value}</code>\n      <RadioGroup options={options} value={value} onChange={setValue} />\n      <br />\n      use children\n      <RadioGroup value={value} onChange={setValue}>\n        {options.map((item) => (\n          <Radio key={item.value} label={item.label} value={item.value} />\n        ))}\n      </RadioGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/vertical.tsx",
          "title": "组合布局",
          "source": "import { useState } from \"react\";\nimport { Space, RadioGroup } from \"react-kui\";\nconst directions = [\n    { label: \"Vertical\", value: \"vertical\" },\n    { label: \"Horizontal\", value: \"horizontal\" },\n  ],\n  options = [\"Beijing\", \"Shanghai\", \"Guangzhou\", \"Wuhan\", \"Other\"].map((label) => ({\n    label,\n    value: label.toLowerCase(),\n  }));\nexport default function App() {\n  const [direction, setDirection] = useState<\"vertical\" | \"horizontal\">(\"horizontal\"),\n    [city, setCity] = useState(\"wuhan\");\n  return (\n    <Space vertical>\n      <RadioGroup\n        options={directions}\n        value={direction}\n        type=\"button\"\n        onChange={(v) => setDirection(v)}\n      />\n      <code>direction: {direction}</code>\n      <code>value: {city}</code>\n      <RadioGroup\n        options={options}\n        value={city}\n        onChange={setCity}\n        direction={direction}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/disabled.tsx",
          "title": "可不用 / 可控",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Radio, RadioGroup } from \"react-kui\";\nconst options = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [checked, setChecked] = useState(false);\n  return (\n    <Space vertical>\n      <Radio disabled>disabled</Radio>\n      <Radio disabled checked>\n        disabled\n      </Radio>\n      <br />\n      <RadioGroup disabled options={options} />\n      <RadioGroup>\n        <Radio value=\"Apple\" label=\"apple\" />\n        <Radio value=\"Orange\" label=\"orange\" disabled />\n        <Radio value=\"Banana\" label=\"banana\" />\n        <Radio value=\"Pear\" label=\"pear\" disabled />\n        <Radio value=\"Grape\" label=\"grape\" />\n      </RadioGroup>\n      <br />\n      <Radio disabled={disabled} checked={checked} onChange={({ checked }) => setChecked(checked)}>\n        Radio\n      </Radio>\n      <Button onClick={() => setChecked((v) => !v)} size=\"small\">\n        {checked ? \"Checked\" : \"Uncheck\"}\n      </Button>\n      <Button onClick={() => setDisabled((v) => !v)} size=\"small\">\n        {disabled ? \"Enable\" : \"Disabled\"}\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/radio-buttons.tsx",
          "title": "组合Button使用",
          "source": "import { LogoApple } from \"kui-icons\";\nimport { useState } from \"react\";\nimport type {\n  DirectionType,\n  RadioType,\n  ShapeType,\n  SizeType,\n  SurfaceThemeType,\n} from \"react-kui\";\nimport { RadioGroup, Space } from \"react-kui\";\nconst dates = [\n    { label: \"1 week\", value: 0 },\n    { label: \"1 month\", value: 1 },\n    { label: \"Q1\", value: 2 },\n    { label: \"1 year\", value: 3 },\n    { label: \"5 years\", value: 4, disabled: true },\n  ],\n  sizes = [\n    { label: \"Large\", value: \"large\", icon: LogoApple },\n    { label: \"Medium\", value: \"medium\" },\n    { label: \"Small\", value: \"small\" },\n  ],\n  directions = [\n    { label: \"Horizontal\", value: \"horizontal\" },\n    { label: \"Vertical\", value: \"vertical\" },\n  ],\n  types = [\n    { label: \"Radio\", value: \"radio\" },\n    { label: \"Button\", value: \"button\" },\n  ],\n  shapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Circle\", value: \"circle\" },\n    { label: \"Square\", value: \"square\" },\n  ],\n  themes = [{ label: \"Fill\", value: \"fill\" }, { label: \"Outline\", value: \"outline\" }];\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [shape, setShape] = useState<ShapeType>(\"round\"),\n    [theme, setTheme] = useState<SurfaceThemeType>(\"fill\"),\n    [direction, setDirection] = useState<DirectionType>(\"horizontal\"),\n    [type, setType] = useState<RadioType>(\"button\"),\n    [value, setValue] = useState(0);\n  return (\n    <Space vertical>\n      <RadioGroup value={shape} size=\"small\" type=\"button\" options={shapes} onChange={setShape} />\n      <RadioGroup value={theme} size=\"small\" type=\"button\" options={themes} onChange={setTheme} />\n      <RadioGroup value={size} type=\"button\" size=\"small\" options={sizes} onChange={setSize} />\n      <RadioGroup\n        value={direction}\n        type=\"button\"\n        size=\"small\"\n        options={directions}\n        onChange={setDirection}\n      />\n      <RadioGroup value={type} type=\"button\" size=\"small\" options={types} onChange={setType} />\n      <br />\n      <RadioGroup\n        value={value}\n        onChange={setValue}\n        size={size}\n        theme={theme}\n        shape={shape}\n        options={dates}\n        direction={direction}\n        type={type}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/theme.tsx",
          "title": "外观档位",
          "source": "import { useState } from \"react\";\nimport { RadioGroup, Space, type MarkThemeType, type SurfaceThemeType } from \"react-kui\";\n\n// A radio dot paints the two tiers a mark has, and the tier lands on the dot rather than on the label: `fill`\n// — what it does when nobody writes a theme — gives it a pale plate, `outline` puts a border on it instead.\n// `type=\"button\"` is a different surface entirely: the group renders buttons, so it paints the five tiers a\n// button has, and writing no theme at all keeps the buttons' own type-driven look — the checked one primary,\n// the rest outlined. Only `fill` changes how the buttons are joined; the others keep their adjacent borders.\nconst marks: MarkThemeType[] = [\"fill\", \"outline\"];\nconst buttons: (SurfaceThemeType | undefined)[] = [\n  undefined,\n  \"fill\",\n  \"outline\",\n  \"plain\",\n  \"solid\",\n  \"dashed\",\n];\nconst fruits = [\"Apple\", \"Orange\", \"Banana\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\n\nexport default function App() {\n  const [dot, setDot] = useState(\"apple\");\n  const [button, setButton] = useState(\"apple\");\n  return (\n    <Space vertical block>\n      {marks.map((tier) => (\n        <Space key={`dot-${tier}`} vertical>\n          <code>theme: {tier}</code>\n          <RadioGroup options={fruits} value={dot} onChange={setDot} theme={tier} />\n        </Space>\n      ))}\n      {buttons.map((tier) => (\n        <Space key={`button-${tier}`} vertical>\n          <code>{tier ? `theme: ${tier}` : \"no theme\"}</code>\n          <RadioGroup\n            type=\"button\"\n            options={fruits}\n            value={button}\n            onChange={setButton}\n            theme={tier}\n          />\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "RadioButton",
      "import": "import { RadioButton } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/radio",
      "props": [
        {
          "name": "label",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文字提示",
          "descriptionEn": "Text prompt"
        },
        {
          "name": "value",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "的当前选中值",
          "descriptionEn": "selected value"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "descriptionZh": "按钮外观",
          "descriptionEn": "Button appearance"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用整个单选组",
          "descriptionEn": "Disable the entire group"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the group is read-only"
        },
        {
          "name": "checked",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "选中状态",
          "descriptionEn": "checked state"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "从 `kui-icons` 导入的图标定义",
          "descriptionEn": "Icon definition imported from `kui-icons`"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "按钮尺寸",
          "descriptionEn": "Button size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "按钮形状",
          "descriptionEn": "Button shape"
        },
        {
          "name": "onChange",
          "type": "((event: ChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回当前选中的项",
          "descriptionEn": "Triggered when option state changes, returns currently selected item"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未设置 label 时的按钮式单选标签，二者均无内容时回退到 value。",
          "descriptionEn": "Button-style radio label when label is null or undefined; falls back to value when both are absent."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((event: ChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回当前选中的项",
          "descriptionEn": "Triggered when option state changes, returns currently selected item"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "RadioGroup",
      "examples": [
        {
          "id": "components/radio/demo/basic.tsx",
          "title": "单选",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Radio } from \"react-kui\";\nexport default function App() {\n  const [checked, setChecked] = useState(true);\n  return (\n    <Space vertical>\n      <code>value: {String(checked)}</code>\n      <Radio checked={checked} onChange={({ checked }) => setChecked(checked)}>\n        Radio\n      </Radio>\n      <Button onClick={() => setChecked((v) => !v)} size=\"small\">\n        {checked ? \"Checked\" : \"Unchecked\"}\n      </Button>\n      <Radio label=\"Radio\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/group.tsx",
          "title": "单选组",
          "source": "import { useEffect, useState } from \"react\";\nimport { Space, Radio, RadioGroup } from \"react-kui\";\nconst initial = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [value, setValue] = useState(\"apple\"),\n    [options, setOptions] = useState(initial);\n  useEffect(() => {\n    const timer = setTimeout(\n      () => setOptions(initial.map((item) => ({ ...item, label: `${item.label}1` }))),\n      1000,\n    );\n    return () => clearTimeout(timer);\n  }, []);\n  return (\n    <Space vertical>\n      use options<code>value: {value}</code>\n      <RadioGroup options={options} value={value} onChange={setValue} />\n      <br />\n      use children\n      <RadioGroup value={value} onChange={setValue}>\n        {options.map((item) => (\n          <Radio key={item.value} label={item.label} value={item.value} />\n        ))}\n      </RadioGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/vertical.tsx",
          "title": "组合布局",
          "source": "import { useState } from \"react\";\nimport { Space, RadioGroup } from \"react-kui\";\nconst directions = [\n    { label: \"Vertical\", value: \"vertical\" },\n    { label: \"Horizontal\", value: \"horizontal\" },\n  ],\n  options = [\"Beijing\", \"Shanghai\", \"Guangzhou\", \"Wuhan\", \"Other\"].map((label) => ({\n    label,\n    value: label.toLowerCase(),\n  }));\nexport default function App() {\n  const [direction, setDirection] = useState<\"vertical\" | \"horizontal\">(\"horizontal\"),\n    [city, setCity] = useState(\"wuhan\");\n  return (\n    <Space vertical>\n      <RadioGroup\n        options={directions}\n        value={direction}\n        type=\"button\"\n        onChange={(v) => setDirection(v)}\n      />\n      <code>direction: {direction}</code>\n      <code>value: {city}</code>\n      <RadioGroup\n        options={options}\n        value={city}\n        onChange={setCity}\n        direction={direction}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/disabled.tsx",
          "title": "可不用 / 可控",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Radio, RadioGroup } from \"react-kui\";\nconst options = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [checked, setChecked] = useState(false);\n  return (\n    <Space vertical>\n      <Radio disabled>disabled</Radio>\n      <Radio disabled checked>\n        disabled\n      </Radio>\n      <br />\n      <RadioGroup disabled options={options} />\n      <RadioGroup>\n        <Radio value=\"Apple\" label=\"apple\" />\n        <Radio value=\"Orange\" label=\"orange\" disabled />\n        <Radio value=\"Banana\" label=\"banana\" />\n        <Radio value=\"Pear\" label=\"pear\" disabled />\n        <Radio value=\"Grape\" label=\"grape\" />\n      </RadioGroup>\n      <br />\n      <Radio disabled={disabled} checked={checked} onChange={({ checked }) => setChecked(checked)}>\n        Radio\n      </Radio>\n      <Button onClick={() => setChecked((v) => !v)} size=\"small\">\n        {checked ? \"Checked\" : \"Uncheck\"}\n      </Button>\n      <Button onClick={() => setDisabled((v) => !v)} size=\"small\">\n        {disabled ? \"Enable\" : \"Disabled\"}\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/radio-buttons.tsx",
          "title": "组合Button使用",
          "source": "import { LogoApple } from \"kui-icons\";\nimport { useState } from \"react\";\nimport type {\n  DirectionType,\n  RadioType,\n  ShapeType,\n  SizeType,\n  SurfaceThemeType,\n} from \"react-kui\";\nimport { RadioGroup, Space } from \"react-kui\";\nconst dates = [\n    { label: \"1 week\", value: 0 },\n    { label: \"1 month\", value: 1 },\n    { label: \"Q1\", value: 2 },\n    { label: \"1 year\", value: 3 },\n    { label: \"5 years\", value: 4, disabled: true },\n  ],\n  sizes = [\n    { label: \"Large\", value: \"large\", icon: LogoApple },\n    { label: \"Medium\", value: \"medium\" },\n    { label: \"Small\", value: \"small\" },\n  ],\n  directions = [\n    { label: \"Horizontal\", value: \"horizontal\" },\n    { label: \"Vertical\", value: \"vertical\" },\n  ],\n  types = [\n    { label: \"Radio\", value: \"radio\" },\n    { label: \"Button\", value: \"button\" },\n  ],\n  shapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Circle\", value: \"circle\" },\n    { label: \"Square\", value: \"square\" },\n  ],\n  themes = [{ label: \"Fill\", value: \"fill\" }, { label: \"Outline\", value: \"outline\" }];\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [shape, setShape] = useState<ShapeType>(\"round\"),\n    [theme, setTheme] = useState<SurfaceThemeType>(\"fill\"),\n    [direction, setDirection] = useState<DirectionType>(\"horizontal\"),\n    [type, setType] = useState<RadioType>(\"button\"),\n    [value, setValue] = useState(0);\n  return (\n    <Space vertical>\n      <RadioGroup value={shape} size=\"small\" type=\"button\" options={shapes} onChange={setShape} />\n      <RadioGroup value={theme} size=\"small\" type=\"button\" options={themes} onChange={setTheme} />\n      <RadioGroup value={size} type=\"button\" size=\"small\" options={sizes} onChange={setSize} />\n      <RadioGroup\n        value={direction}\n        type=\"button\"\n        size=\"small\"\n        options={directions}\n        onChange={setDirection}\n      />\n      <RadioGroup value={type} type=\"button\" size=\"small\" options={types} onChange={setType} />\n      <br />\n      <RadioGroup\n        value={value}\n        onChange={setValue}\n        size={size}\n        theme={theme}\n        shape={shape}\n        options={dates}\n        direction={direction}\n        type={type}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/theme.tsx",
          "title": "外观档位",
          "source": "import { useState } from \"react\";\nimport { RadioGroup, Space, type MarkThemeType, type SurfaceThemeType } from \"react-kui\";\n\n// A radio dot paints the two tiers a mark has, and the tier lands on the dot rather than on the label: `fill`\n// — what it does when nobody writes a theme — gives it a pale plate, `outline` puts a border on it instead.\n// `type=\"button\"` is a different surface entirely: the group renders buttons, so it paints the five tiers a\n// button has, and writing no theme at all keeps the buttons' own type-driven look — the checked one primary,\n// the rest outlined. Only `fill` changes how the buttons are joined; the others keep their adjacent borders.\nconst marks: MarkThemeType[] = [\"fill\", \"outline\"];\nconst buttons: (SurfaceThemeType | undefined)[] = [\n  undefined,\n  \"fill\",\n  \"outline\",\n  \"plain\",\n  \"solid\",\n  \"dashed\",\n];\nconst fruits = [\"Apple\", \"Orange\", \"Banana\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\n\nexport default function App() {\n  const [dot, setDot] = useState(\"apple\");\n  const [button, setButton] = useState(\"apple\");\n  return (\n    <Space vertical block>\n      {marks.map((tier) => (\n        <Space key={`dot-${tier}`} vertical>\n          <code>theme: {tier}</code>\n          <RadioGroup options={fruits} value={dot} onChange={setDot} theme={tier} />\n        </Space>\n      ))}\n      {buttons.map((tier) => (\n        <Space key={`button-${tier}`} vertical>\n          <code>{tier ? `theme: ${tier}` : \"no theme\"}</code>\n          <RadioGroup\n            type=\"button\"\n            options={fruits}\n            value={button}\n            onChange={setButton}\n            theme={tier}\n          />\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "RadioGroup",
      "import": "import { RadioGroup } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/radio",
      "props": [
        {
          "name": "value",
          "type": "T | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "的当前选中值",
          "descriptionEn": "selected value"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用整个单选组",
          "descriptionEn": "Disable the entire group"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the group is read-only"
        },
        {
          "name": "direction",
          "type": "DirectionType | undefined",
          "required": false,
          "enumValues": [
            "inline",
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "布局方向",
          "descriptionEn": "Layout direction"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "按钮尺寸",
          "descriptionEn": "Button size"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "descriptionZh": "单选项外观，`type=\"button\"` 时为按钮主题",
          "descriptionEn": "Radio option appearance; the button's theme when `type=\"button\"`"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "`button` 的形状",
          "descriptionEn": "Button shape"
        },
        {
          "name": "options",
          "type": "RadioOption[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可以指定子项 `radio`",
          "descriptionEn": "Can specify child `radio` items"
        },
        {
          "name": "type",
          "type": "RadioType | undefined",
          "required": false,
          "enumValues": [
            "button",
            "radio"
          ],
          "boolean": false,
          "descriptionZh": "使用按钮样式的单选项",
          "descriptionEn": "Use radio or button-style items"
        },
        {
          "name": "onChange",
          "type": "((value: T) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回当前选中的项",
          "descriptionEn": "Triggered when option state changes, returns currently selected item"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义 Radio 或 RadioButton 子节点，共享组的值和禁用状态。",
          "descriptionEn": "Custom Radio or RadioButton children sharing the group value and disabled state."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: T) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回当前选中的项",
          "descriptionEn": "Triggered when option state changes, returns currently selected item"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [
        "Radio",
        "RadioButton"
      ],
      "examples": [
        {
          "id": "components/radio/demo/basic.tsx",
          "title": "单选",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Radio } from \"react-kui\";\nexport default function App() {\n  const [checked, setChecked] = useState(true);\n  return (\n    <Space vertical>\n      <code>value: {String(checked)}</code>\n      <Radio checked={checked} onChange={({ checked }) => setChecked(checked)}>\n        Radio\n      </Radio>\n      <Button onClick={() => setChecked((v) => !v)} size=\"small\">\n        {checked ? \"Checked\" : \"Unchecked\"}\n      </Button>\n      <Radio label=\"Radio\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/group.tsx",
          "title": "单选组",
          "source": "import { useEffect, useState } from \"react\";\nimport { Space, Radio, RadioGroup } from \"react-kui\";\nconst initial = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [value, setValue] = useState(\"apple\"),\n    [options, setOptions] = useState(initial);\n  useEffect(() => {\n    const timer = setTimeout(\n      () => setOptions(initial.map((item) => ({ ...item, label: `${item.label}1` }))),\n      1000,\n    );\n    return () => clearTimeout(timer);\n  }, []);\n  return (\n    <Space vertical>\n      use options<code>value: {value}</code>\n      <RadioGroup options={options} value={value} onChange={setValue} />\n      <br />\n      use children\n      <RadioGroup value={value} onChange={setValue}>\n        {options.map((item) => (\n          <Radio key={item.value} label={item.label} value={item.value} />\n        ))}\n      </RadioGroup>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/vertical.tsx",
          "title": "组合布局",
          "source": "import { useState } from \"react\";\nimport { Space, RadioGroup } from \"react-kui\";\nconst directions = [\n    { label: \"Vertical\", value: \"vertical\" },\n    { label: \"Horizontal\", value: \"horizontal\" },\n  ],\n  options = [\"Beijing\", \"Shanghai\", \"Guangzhou\", \"Wuhan\", \"Other\"].map((label) => ({\n    label,\n    value: label.toLowerCase(),\n  }));\nexport default function App() {\n  const [direction, setDirection] = useState<\"vertical\" | \"horizontal\">(\"horizontal\"),\n    [city, setCity] = useState(\"wuhan\");\n  return (\n    <Space vertical>\n      <RadioGroup\n        options={directions}\n        value={direction}\n        type=\"button\"\n        onChange={(v) => setDirection(v)}\n      />\n      <code>direction: {direction}</code>\n      <code>value: {city}</code>\n      <RadioGroup\n        options={options}\n        value={city}\n        onChange={setCity}\n        direction={direction}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/disabled.tsx",
          "title": "可不用 / 可控",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Radio, RadioGroup } from \"react-kui\";\nconst options = [\"Apple\", \"Orange\", \"Banana\", \"Pear\", \"Grape\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [checked, setChecked] = useState(false);\n  return (\n    <Space vertical>\n      <Radio disabled>disabled</Radio>\n      <Radio disabled checked>\n        disabled\n      </Radio>\n      <br />\n      <RadioGroup disabled options={options} />\n      <RadioGroup>\n        <Radio value=\"Apple\" label=\"apple\" />\n        <Radio value=\"Orange\" label=\"orange\" disabled />\n        <Radio value=\"Banana\" label=\"banana\" />\n        <Radio value=\"Pear\" label=\"pear\" disabled />\n        <Radio value=\"Grape\" label=\"grape\" />\n      </RadioGroup>\n      <br />\n      <Radio disabled={disabled} checked={checked} onChange={({ checked }) => setChecked(checked)}>\n        Radio\n      </Radio>\n      <Button onClick={() => setChecked((v) => !v)} size=\"small\">\n        {checked ? \"Checked\" : \"Uncheck\"}\n      </Button>\n      <Button onClick={() => setDisabled((v) => !v)} size=\"small\">\n        {disabled ? \"Enable\" : \"Disabled\"}\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/radio-buttons.tsx",
          "title": "组合Button使用",
          "source": "import { LogoApple } from \"kui-icons\";\nimport { useState } from \"react\";\nimport type {\n  DirectionType,\n  RadioType,\n  ShapeType,\n  SizeType,\n  SurfaceThemeType,\n} from \"react-kui\";\nimport { RadioGroup, Space } from \"react-kui\";\nconst dates = [\n    { label: \"1 week\", value: 0 },\n    { label: \"1 month\", value: 1 },\n    { label: \"Q1\", value: 2 },\n    { label: \"1 year\", value: 3 },\n    { label: \"5 years\", value: 4, disabled: true },\n  ],\n  sizes = [\n    { label: \"Large\", value: \"large\", icon: LogoApple },\n    { label: \"Medium\", value: \"medium\" },\n    { label: \"Small\", value: \"small\" },\n  ],\n  directions = [\n    { label: \"Horizontal\", value: \"horizontal\" },\n    { label: \"Vertical\", value: \"vertical\" },\n  ],\n  types = [\n    { label: \"Radio\", value: \"radio\" },\n    { label: \"Button\", value: \"button\" },\n  ],\n  shapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Circle\", value: \"circle\" },\n    { label: \"Square\", value: \"square\" },\n  ],\n  themes = [{ label: \"Fill\", value: \"fill\" }, { label: \"Outline\", value: \"outline\" }];\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [shape, setShape] = useState<ShapeType>(\"round\"),\n    [theme, setTheme] = useState<SurfaceThemeType>(\"fill\"),\n    [direction, setDirection] = useState<DirectionType>(\"horizontal\"),\n    [type, setType] = useState<RadioType>(\"button\"),\n    [value, setValue] = useState(0);\n  return (\n    <Space vertical>\n      <RadioGroup value={shape} size=\"small\" type=\"button\" options={shapes} onChange={setShape} />\n      <RadioGroup value={theme} size=\"small\" type=\"button\" options={themes} onChange={setTheme} />\n      <RadioGroup value={size} type=\"button\" size=\"small\" options={sizes} onChange={setSize} />\n      <RadioGroup\n        value={direction}\n        type=\"button\"\n        size=\"small\"\n        options={directions}\n        onChange={setDirection}\n      />\n      <RadioGroup value={type} type=\"button\" size=\"small\" options={types} onChange={setType} />\n      <br />\n      <RadioGroup\n        value={value}\n        onChange={setValue}\n        size={size}\n        theme={theme}\n        shape={shape}\n        options={dates}\n        direction={direction}\n        type={type}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/radio/demo/theme.tsx",
          "title": "外观档位",
          "source": "import { useState } from \"react\";\nimport { RadioGroup, Space, type MarkThemeType, type SurfaceThemeType } from \"react-kui\";\n\n// A radio dot paints the two tiers a mark has, and the tier lands on the dot rather than on the label: `fill`\n// — what it does when nobody writes a theme — gives it a pale plate, `outline` puts a border on it instead.\n// `type=\"button\"` is a different surface entirely: the group renders buttons, so it paints the five tiers a\n// button has, and writing no theme at all keeps the buttons' own type-driven look — the checked one primary,\n// the rest outlined. Only `fill` changes how the buttons are joined; the others keep their adjacent borders.\nconst marks: MarkThemeType[] = [\"fill\", \"outline\"];\nconst buttons: (SurfaceThemeType | undefined)[] = [\n  undefined,\n  \"fill\",\n  \"outline\",\n  \"plain\",\n  \"solid\",\n  \"dashed\",\n];\nconst fruits = [\"Apple\", \"Orange\", \"Banana\"].map((label) => ({\n  label,\n  value: label.toLowerCase(),\n}));\n\nexport default function App() {\n  const [dot, setDot] = useState(\"apple\");\n  const [button, setButton] = useState(\"apple\");\n  return (\n    <Space vertical block>\n      {marks.map((tier) => (\n        <Space key={`dot-${tier}`} vertical>\n          <code>theme: {tier}</code>\n          <RadioGroup options={fruits} value={dot} onChange={setDot} theme={tier} />\n        </Space>\n      ))}\n      {buttons.map((tier) => (\n        <Space key={`button-${tier}`} vertical>\n          <code>{tier ? `theme: ${tier}` : \"no theme\"}</code>\n          <RadioGroup\n            type=\"button\"\n            options={fruits}\n            value={button}\n            onChange={setButton}\n            theme={tier}\n          />\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Segmented",
      "import": "import { Segmented } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/segmented",
      "props": [
        {
          "name": "value",
          "type": "SegmentedValue | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选项值",
          "descriptionEn": "Option value"
        },
        {
          "name": "options",
          "type": "SegmentedOption[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "选项数据",
          "descriptionEn": "Option data"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用",
          "descriptionEn": "Disable this option"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Read-only state"
        },
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否撑满父容器",
          "descriptionEn": "Fill the parent width"
        },
        {
          "name": "direction",
          "type": "\"horizontal\" | \"vertical\" | undefined",
          "required": false,
          "enumValues": [
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "排列方向",
          "descriptionEn": "Layout direction"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "onChange",
          "type": "((value: SegmentedValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中值改变时触发",
          "descriptionEn": "Triggered when selection changes"
        },
        {
          "name": "renderLabel",
          "type": "((option: SegmentedOption, selected: boolean) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义选项内容",
          "descriptionEn": "Custom option content"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: SegmentedValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中值改变时触发",
          "descriptionEn": "Triggered when selection changes"
        }
      ],
      "renderProps": [
        "renderLabel"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/segmented/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Segmented } from \"react-kui\";\n\nexport default function SegmentedBasicDemo() {\n  const [value, setValue] = useState(\"daily\");\n  return (\n    <Segmented\n      value={value}\n      onChange={(next) => setValue(String(next))}\n      options={[\n        { label: \"Daily\", value: \"daily\" },\n        { label: \"Weekly\", value: \"weekly\" },\n        { label: \"Monthly\", value: \"monthly\" },\n      ]}\n    />\n  );\n}"
        },
        {
          "id": "components/segmented/demo/options.tsx",
          "title": "尺寸与布局",
          "source": "import { useState } from \"react\";\nimport { Segmented, Space } from \"react-kui\";\n\nexport default function SegmentedOptionsDemo() {\n  const [value, setValue] = useState(\"react\");\n  const options = [\n    { label: \"Vue\", value: \"vue\" },\n    { label: \"React\", value: \"react\" },\n    { label: \"Disabled\", value: \"disabled\", disabled: true },\n  ];\n  return (\n    <Space direction=\"vertical\">\n      <Segmented\n        value={value}\n        onChange={(next) => setValue(String(next))}\n        options={options}\n        size=\"small\"\n      />\n      <Segmented\n        value={value}\n        onChange={(next) => setValue(String(next))}\n        options={options}\n        block\n      />\n      <Segmented\n        value={value}\n        onChange={(next) => setValue(String(next))}\n        options={options}\n        direction=\"vertical\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/segmented/demo/icon.tsx",
          "title": "带图标的选项",
          "source": "import { Monitor, Smartphone, Tablet } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Segmented } from \"react-kui\";\n\nconst options = [\n  { label: \"Desktop\", value: \"desktop\", icon: Monitor },\n  { label: \"Tablet\", value: \"tablet\", icon: Tablet },\n  { label: \"Mobile\", value: \"mobile\", icon: Smartphone },\n];\n\nexport default function SegmentedIconDemo() {\n  const [device, setDevice] = useState(\"desktop\");\n  return <Segmented value={device} options={options} onChange={(value) => setDevice(String(value))} />;\n}"
        },
        {
          "id": "components/segmented/demo/label.tsx",
          "title": "自定义标签",
          "source": "import { useState, type CSSProperties } from \"react\";\nimport { Segmented, type SegmentedOption } from \"react-kui\";\n\nconst options = [\n  { label: \"Edit\", value: \"edit\", shortcut: \"⌘1\", color: \"#7c5cff\" },\n  { label: \"Preview\", value: \"preview\", shortcut: \"⌘2\", color: \"#18a058\" },\n  { label: \"Compare\", value: \"compare\", shortcut: \"⌘3\", color: \"#f59e0b\" },\n];\n\nconst styles = {\n  label: { display: \"inline-flex\", gap: 7, alignItems: \"center\" },\n  dot: { width: 6, height: 6, borderRadius: \"50%\" },\n  shortcut: {\n    padding: \"1px 4px\",\n    color: \"var(--kui-color-text-description)\",\n    font: \"inherit\",\n    fontSize: 11,\n    lineHeight: \"16px\",\n    background: \"var(--kui-color-bg-2)\",\n    borderRadius: 3,\n  },\n} satisfies Record<string, CSSProperties>;\n\nconst renderLabel = (option: SegmentedOption, selected: boolean) => (\n  <span style={styles.label}>\n    <i style={{ ...styles.dot, background: String(option.color) }} />\n    {option.label}\n    <kbd\n      style={{\n        ...styles.shortcut,\n        color: selected ? \"var(--kui-color-primary)\" : styles.shortcut.color,\n      }}\n    >\n      {String(option.shortcut)}\n    </kbd>\n  </span>\n);\n\nexport default function SegmentedLabelDemo() {\n  const [value, setValue] = useState(\"preview\");\n  return (\n    <Segmented\n      value={value}\n      options={options}\n      renderLabel={renderLabel}\n      onChange={(next) => setValue(String(next))}\n    />\n  );\n}"
        }
      ]
    },
    {
      "name": "Rate",
      "import": "import { Rate } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/rate",
      "props": [
        {
          "name": "value",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前值，需配合 `onChange` 使用",
          "descriptionEn": "Current value, used with `onChange`"
        },
        {
          "name": "allowClear",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否允许再次点击后清除",
          "descriptionEn": "Whether to allow clearing by clicking again"
        },
        {
          "name": "allowHalf",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否允许半选",
          "descriptionEn": "Whether to allow half selection"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标颜色",
          "descriptionEn": "Icon color"
        },
        {
          "name": "size",
          "type": "number | SizeType | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图标尺寸",
          "descriptionEn": "Icon size"
        },
        {
          "name": "showScore",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示分数",
          "descriptionEn": "Whether to show score"
        },
        {
          "name": "tooltips",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "自定义每项的提示信息",
          "descriptionEn": "Custom prompt information for each item"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只读，无法进行交互",
          "descriptionEn": "Read-only, cannot interact"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只读，保持正常外观但无法修改",
          "descriptionEn": "Read-only with normal appearance"
        },
        {
          "name": "count",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "5",
          "descriptionZh": "star 总数",
          "descriptionEn": "Total number of stars"
        },
        {
          "name": "character",
          "type": "string | ((index: number) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义字符",
          "descriptionEn": "Custom character"
        },
        {
          "name": "icon",
          "type": "IconType[] | ((index: number) => IconType[]) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义展示的图标",
          "descriptionEn": "Custom display icon"
        },
        {
          "name": "symbolReverseFill",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "符号反相填充颜色",
          "descriptionEn": "Symbol Inverted Fill Color"
        },
        {
          "name": "strokeWidth",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "1",
          "descriptionZh": "符号边框单位",
          "descriptionEn": "Symbol Border Unit"
        },
        {
          "name": "onChange",
          "type": "((value: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择时的回调",
          "descriptionEn": "Callback when selecting"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择时的回调",
          "descriptionEn": "Callback when selecting"
        }
      ],
      "renderProps": [
        "character",
        "icon"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/rate/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Heart } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Space, Rate } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(3);\n  return (\n    <Space vertical>\n      <code>value: {value}</code>\n      <Rate value={value} onChange={setValue} />\n      <code>show score</code>\n      <Rate value={2.5} showScore />\n      <code>size = 30</code>\n      <Rate size={30} value={2} />\n      <code>custom icon</code>\n      <Rate icon={Heart} color=\"red\" value={2.5} size={30} symbolReverseFill />\n      <code>allowHalf = true</code>\n      <Rate icon={Heart} allowHalf color=\"red\" value={2.5} size={30} />\n      <code>disabled (readonly)</code>\n      <Rate value={3.7} disabled showScore />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/rate/demo/tips.tsx",
          "title": "文案展现 / 允许清除",
          "source": "import { useState } from \"react\";\nimport { Rate, Slider, Space } from \"react-kui\";\nconst descriptions = [\"terrible\", \"bad\", \"normal\", \"good\", \"wonderful\"];\nexport default function App() {\n  const [value, setValue] = useState(3);\n  return (\n    <Space vertical>\n      <Slider\n        min={0}\n        max={5}\n        value={value}\n        onChange={(v) => setValue(Number(v))}\n        style={{ width: \"300px\" }}\n      />\n      <Space>\n        <Rate tooltips={descriptions} value={value} onChange={setValue} />\n        {descriptions[value - 1]}\n      </Space>\n      <br />\n      <code>allowClear = true</code>\n      <Rate allowClear value={3} />\n      <code>allowClear = false</code>\n      <Rate allowClear={false} value={3} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/rate/demo/character.tsx",
          "title": "其他字符",
          "source": "import { Heart, Wifi, WifiHigh, WifiLow, WifiOff, WifiZero } from \"kui-icons\";\nimport { Space, Rate } from \"react-kui\";\nconst icons = [WifiOff, WifiZero, WifiLow, WifiHigh, Wifi];\nexport default function App() {\n  return (\n    <Space vertical>\n      <Rate icon={Heart} allowHalf value={1.5} />\n      <code>character = A</code>\n      <Rate character=\"A\" allowHalf value={2.5} />\n      <code>character = 龍</code>\n      <Rate character=\"龍\" allowHalf value={3.5} size={24} />\n      <br />\n      <code>count = 9</code>\n      <Rate character={(index) => index} value={2} count={9} />\n      <Rate icon={(index) => icons[index - 1]} value={3} />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Result",
      "import": "import { Result } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/result",
      "props": [
        {
          "name": "status",
          "type": "ResultStatus | undefined",
          "required": false,
          "enumValues": [
            "info",
            "success",
            "warning",
            "error",
            "403",
            "404",
            "500"
          ],
          "boolean": false,
          "defaultExpression": "\"info\"",
          "descriptionZh": "结果状态",
          "descriptionEn": "Result status"
        },
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标题",
          "descriptionEn": "Title"
        },
        {
          "name": "subTitle",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "副标题",
          "descriptionEn": "Subtitle"
        },
        {
          "name": "icon",
          "type": "ReactNode | IconType[]",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标或内容",
          "descriptionEn": "Custom icon or content"
        },
        {
          "name": "extra",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "操作区域",
          "descriptionEn": "Action content"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "title",
        "subTitle",
        "icon",
        "extra"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/result/demo/basic.tsx",
          "title": "成功",
          "source": "import { Button, Result, Space } from \"react-kui\";\nexport default function App() { return <Result status=\"success\" title=\"版本发布完成\" subTitle=\"新版本已经部署，所有服务运行正常。\" extra={<Space><Button type=\"primary\">查看版本</Button><Button>返回项目</Button></Space>} />; }"
        },
        {
          "id": "components/result/demo/error.tsx",
          "title": "错误",
          "source": "import { Result } from \"react-kui\";\nexport default function App() { return <Result status=\"error\" title=\"数据导入失败\" subTitle=\"文件格式不符合当前模板要求。\" />; }"
        },
        {
          "id": "components/result/demo/info.tsx",
          "title": "信息",
          "source": "import { Result } from \"react-kui\";\nexport default function App() { return <Result status=\"info\" title=\"资料正在审核\" subTitle=\"审核结果会通过站内消息通知你。\" />; }"
        },
        {
          "id": "components/result/demo/warning.tsx",
          "title": "警告",
          "source": "import { Result } from \"react-kui\";\nexport default function App() { return <Result status=\"warning\" title=\"存储空间不足\" subTitle=\"清理无用文件后可以继续上传。\" />; }"
        },
        {
          "id": "components/result/demo/403.tsx",
          "title": "403",
          "source": "import { Button, Result } from \"react-kui\";\nexport default function App() { return <Result status=\"403\" title=\"Access Denied\" subTitle=\"Sorry, you are not authorized to access this page.\" extra={<Button>Back Home</Button>} />; }"
        },
        {
          "id": "components/result/demo/404.tsx",
          "title": "404",
          "source": "import { Button, Result } from \"react-kui\";\nexport default function App() { return <Result status=\"404\" title=\"Not Found\" subTitle=\"Sorry, the page you visited got lost.\" extra={<Button type=\"primary\">Back Home</Button>} />; }"
        },
        {
          "id": "components/result/demo/500.tsx",
          "title": "500",
          "source": "import { Button, Result, Space } from \"react-kui\";\nexport default function App() { return <Result status=\"500\" title=\"Something Went Wrong\" subTitle=\"Sorry, please try again later.\" extra={<Space><Button type=\"primary\">Back Home</Button><Button>Try Again</Button></Space>} />; }"
        },
        {
          "id": "components/result/demo/custom.tsx",
          "title": "自定义",
          "source": "import { DatabaseZap } from \"kui-icons\";\nimport { Button, Icon, Result } from \"react-kui\";\nexport default function App() { return <Result title=\"迁移任务已就绪\" subTitle=\"确认信息后即可开始迁移。\" icon={<Icon type={DatabaseZap} />} extra={<Button type=\"primary\">开始迁移</Button>}>预计迁移 1,240 条记录，过程大约需要 3 分钟。</Result>; }"
        }
      ]
    },
    {
      "name": "Option",
      "import": "import { Option } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/select",
      "props": [
        {
          "name": "value",
          "type": "string | number",
          "required": true,
          "boolean": false,
          "descriptionZh": "选项值，默认根据此属性值进行筛选，必填",
          "descriptionEn": "Option value, used for filtering by default, required"
        },
        {
          "name": "label",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "选项显示的内容",
          "descriptionEn": "Option display content"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用当前项",
          "descriptionEn": "Whether current item is disabled"
        },
        {
          "name": "checked",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "选项是否选中，控制选中样式；通常由 Select 根据选中值注入。",
          "descriptionEn": "Whether the option is selected, controlling selected styling; normally injected by Select from its selected value."
        },
        {
          "name": "active",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "选项的活动高亮状态，与选中状态不同，通常由 Select 的键盘导航管理。",
          "descriptionEn": "Active highlight state, distinct from selection and normally managed by Select keyboard navigation."
        },
        {
          "name": "multiple",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否呈现多选模式",
          "descriptionEn": "Whether to display in multiple selection mode"
        },
        {
          "name": "onSelect",
          "type": "((event: OptionSelectEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中一项时触发",
          "descriptionEn": "Triggered when an item is selected"
        },
        {
          "name": "onMouseEnter",
          "type": "((e: React.MouseEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "鼠标进入可用选项时触发，接收 React 鼠标事件；禁用项不触发。",
          "descriptionEn": "Called with the React mouse event when the pointer enters an enabled option; disabled options do not trigger it."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onSelect",
          "type": "((event: OptionSelectEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中一项时触发",
          "descriptionEn": "Triggered when an item is selected"
        },
        {
          "name": "onMouseEnter",
          "type": "((e: React.MouseEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "鼠标进入可用选项时触发，接收 React 鼠标事件；禁用项不触发。",
          "descriptionEn": "Called with the React mouse event when the pointer enters an enabled option; disabled options do not trigger it."
        }
      ],
      "renderProps": [
        "label"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Select",
      "examples": [
        {
          "id": "components/select/demo/basic.tsx",
          "title": "单选",
          "source": "import { useEffect, useState } from \"react\";\nimport { Space, Option, Select } from \"react-kui\";\nimport { data as initial } from \"./data\";\nexport default function App() {\n  const [value1, setValue1] = useState<string | number>(2),\n    [value2, setValue2] = useState<string | number>(2),\n    [data, setData] = useState(initial);\n  useEffect(() => {\n    const timer = setTimeout(\n      () => setData(initial.map((item) => ({ ...item, label: `${item.label}1` }))),\n      1000,\n    );\n    return () => clearTimeout(timer);\n  }, []);\n  return (\n    <Space vertical>\n      use options: {value1}\n      <Select\n        value={value1}\n        options={data}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setValue1(next)}\n      />\n      <br />\n      use children: {value2}\n      <Select\n        value={value2}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setValue2(next)}\n      >\n        {data.map((item) => (\n          <Option key={item.value} value={item.value}>\n            {item.label}\n          </Option>\n        ))}\n      </Select>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/multiple.tsx",
          "title": "多选",
          "source": "import { useState } from \"react\";\nimport { Space, Option, Select } from \"react-kui\";\nimport { data } from \"./data\";\nexport default function App() {\n  const [v1, setV1] = useState<(string | number)[]>([0, 2]),\n    [v2, setV2] = useState<(string | number)[]>([0, 2]),\n    [v3, setV3] = useState<(string | number)[]>([0, 2, 3]);\n  return (\n    <Space vertical block>\n      <code>value: {v1.join(\", \")}</code>\n      <Select\n        value={v1}\n        onChange={(v) => Array.isArray(v) && setV1(v)}\n        block\n        options={data}\n        multiple\n      />\n      <br />\n      <code>value: {v2.join(\", \")}</code>\n      <Select value={v2} onChange={(v) => Array.isArray(v) && setV2(v)} block multiple>\n        {data.map((item) => (\n          <Option key={item.value} value={item.value} label={item.label} />\n        ))}\n      </Select>\n      <br />\n      <code>value: {v3.join(\", \")}</code>\n      <Select\n        value={v3}\n        onChange={(v) => Array.isArray(v) && setV3(v)}\n        block\n        maxTagCount={2}\n        options={data}\n        multiple\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/disabled.tsx",
          "title": "禁用和不可清除",
          "source": "import { useState } from \"react\";\nimport { Space, Select } from \"react-kui\";\nimport { data as source } from \"./data\";\nconst data = source.map((item) => (item.value === 1 ? { ...item, disabled: true } : item));\nexport default function App() {\n  const [v1, setV1] = useState<string | number>(2),\n    [v2, setV2] = useState<Array<string | number>>([0, 3]),\n    [v3] = useState<Array<string | number>>([0, 2, 3]);\n  return (\n    <Space vertical block>\n      Disabled\n      <Select value={v1} block disabled options={data} />\n      <Select value={v2} block disabled options={data} multiple />\n      <Select value={v3} disabled maxTagCount={2} options={data} multiple block />\n      <br />\n      Disabled item\n      <Select\n        value={v1}\n        onChange={(value) => !Array.isArray(value) && value !== undefined && setV1(value)}\n        block\n        options={data}\n      />\n      <br />\n      Clearable = false\n      <Select\n        value={v1}\n        onChange={(value) => !Array.isArray(value) && value !== undefined && setV1(value)}\n        block\n        clearable={false}\n        options={data}\n      />\n      <Select\n        value={v2}\n        onChange={(value) => setV2(value as Array<string | number>)}\n        block\n        clearable={false}\n        options={data}\n        multiple\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/filterable.tsx",
          "title": "过滤 和 搜索",
          "source": "import { useState } from \"react\";\nimport { Space, Select } from \"react-kui\";\nimport { fruits } from \"./data\";\nconst options = fruits.map((value) => ({ label: value, value }));\nexport default function App() {\n  const [v1, setV1] = useState<string | number>(\"\"),\n    [v2, setV2] = useState<(string | number)[]>([]),\n    [v3, setV3] = useState<string | number>(\"\"),\n    [v4, setV4] = useState<(string | number)[]>([]),\n    [remote, setRemote] = useState<typeof options>([]),\n    [loading, setLoading] = useState(false);\n  const search = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const query = e.target.value.trim().toLowerCase();\n    setLoading(true);\n    setTimeout(() => {\n      setRemote(options.filter((item) => item.value.includes(query)));\n      setLoading(false);\n    }, 1000);\n  };\n  return (\n    <Space vertical block>\n      <span>Filtering:</span>\n      <Select\n        value={v1}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setV1(next)}\n        block\n        placeholder=\"Filtering\"\n        filterable\n        options={options}\n      />\n      <br />\n      <span>Multiple Filtering:</span>\n      <Select\n        value={v2}\n        onChange={(next) => Array.isArray(next) && setV2(next)}\n        multiple\n        maxTagCount={3}\n        block\n        placeholder=\"Multiple Filtering\"\n        filterable\n        options={options}\n      />\n      <br />\n      <span>Search:</span>\n      <Select\n        value={v3}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setV3(next)}\n        onSearch={search}\n        block\n        loading={loading}\n        placeholder=\"Search\"\n        options={remote}\n      />\n      <br />\n      <span>Multiple Search:</span>\n      <Select\n        value={v4}\n        onChange={(next) => Array.isArray(next) && setV4(next)}\n        multiple\n        block\n        maxTagCount={3}\n        loading={loading}\n        onSearch={search}\n        placeholder=\"Multiple Search\"\n        options={remote}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/allow-create.tsx",
          "title": "创建选项",
          "source": "import { useState } from \"react\";\nimport { Select } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState<(string | number)[]>([]);\n  return (\n    <Select\n      multiple\n      allowCreate\n      filterable\n      block\n      value={value}\n      options={[\n        { label: \"React\", value: \"React\" },\n        { label: \"TypeScript\", value: \"TypeScript\" },\n      ]}\n      placeholder=\"输入内容后按回车创建\"\n      onChange={(next) => Array.isArray(next) && setValue(next)}\n    />\n  );\n}"
        },
        {
          "id": "components/select/demo/size.tsx",
          "title": "尺寸",
          "source": "import { useState } from \"react\";\nimport { RadioGroup, Select, Space } from \"react-kui\";\nimport type { SizeType } from \"react-kui\";\nimport { data } from \"./data\";\nconst sizes = [\"large\", \"medium\", \"small\"].map((value) => ({ label: value, value }));\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [v1, setV1] = useState<number>(0),\n    [v2, setV2] = useState<number[]>([0, 1]),\n    [v3, setV3] = useState<number[]>([0, 1, 2]);\n  return (\n    <Space vertical block>\n      <RadioGroup value={size} onChange={setSize} type=\"button\" options={sizes} />\n      <br />\n      <Select\n        value={v1}\n        onChange={(v) => typeof v === \"number\" && setV1(v)}\n        size={size}\n        filterable\n        block\n        options={data}\n      />\n      <Select\n        value={v2}\n        onChange={(v) => Array.isArray(v) && setV2(v.map(Number))}\n        size={size}\n        block\n        options={data}\n        multiple\n      />\n      <Select\n        value={v3}\n        onChange={(v) => Array.isArray(v) && setV3(v.map(Number))}\n        size={size}\n        maxTagCount={2}\n        options={data}\n        multiple\n        block\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/theme.tsx",
          "title": "奇葩的定义",
          "source": "import { ArrowDown, Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Space, Select } from \"react-kui\";\nconst options = [\"Apple\", \"Orange\", \"Banana\", \"Pear\"].map((label, index) => ({\n  label,\n  value: String(index + 1),\n}));\nexport default function App() {\n  const [value, setValue] = useState<(string | number)[]>([\"1\", \"3\"]);\n  return (\n    <Space vertical align=\"start\" block style={{ width: 300, maxWidth: \"100%\" }}>\n      <Select shape=\"circle\" options={options} placeholder=\"A circle Input\" />\n      <Select\n        shape=\"circle\"\n        icon={Search}\n        options={options}\n        placeholder=\"A circle Input with icon\"\n      />\n      <Select options={options} placeholder=\"No Arrow\" showArrow={false} />\n      <Select options={options} placeholder=\"Custom Arrow\" arrowIcon={ArrowDown} />\n      <Select\n        multiple\n        value={value}\n        onChange={(v) => Array.isArray(v) && setValue(v)}\n        filterable\n        options={options}\n      />\n      <Select filterable theme=\"outline\" options={options} placeholder=\"Outline theme\" />\n      <Select theme=\"plain\" options={options} placeholder=\"Plain\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/virtual.tsx",
          "title": "虚拟滚动",
          "source": "import { useState } from \"react\";\nimport { Select } from \"react-kui\";\n\nconst options = Array.from({ length: 10000 }, (_, index) => ({\n  value: index + 1,\n  label: `Option ${index + 1}`,\n}));\nexport default function App() {\n  const [value, setValue] = useState<string | number>();\n  return (\n    <Select\n      value={value}\n      onChange={(next) =>\n        setValue(typeof next === \"string\" || typeof next === \"number\" ? next : undefined)\n      }\n      virtual\n      filterable\n      block\n      options={options}\n      itemHeight={33}\n      overscan={6}\n      placeholder=\"Select from 10,000 options\"\n    />\n  );\n}"
        }
      ]
    },
    {
      "name": "Select",
      "import": "import { Select } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/select",
      "props": [
        {
          "name": "placeholder",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择框默认文字",
          "descriptionEn": "Default text of selector"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "组件尺寸大小,提供`small`,`large`两种尺寸，默认为正常",
          "descriptionEn": "Component size, provides two sizes: `small`, `large`, default is normal"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "下拉框弹出位置",
          "descriptionEn": "Dropdown placement"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "width",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件宽度",
          "descriptionEn": "Component width"
        },
        {
          "name": "maxTagCount",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "多选时最多展示的标签数，超出部分通过 Tooltip 展示",
          "descriptionEn": "Maximum visible tags in multiple mode; excess tags are shown in a Tooltip"
        },
        {
          "name": "value",
          "type": "SelectValue",
          "required": false,
          "boolean": false,
          "descriptionZh": "的选中值",
          "descriptionEn": "selected value"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下拉框显示状态",
          "descriptionEn": "dropdown visibility"
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否可以清空选项",
          "descriptionEn": "Whether options can be cleared"
        },
        {
          "name": "filterable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否允许搜索过滤",
          "descriptionEn": "Whether search filtering is enabled"
        },
        {
          "name": "allowCreate",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "多选时是否允许输入并创建新选项",
          "descriptionEn": "Allow creating a unique option from input in multiple mode"
        },
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否撑满父容器宽度",
          "descriptionEn": "Whether to fill the parent width"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用当前项",
          "descriptionEn": "Whether current item is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the component is read-only"
        },
        {
          "name": "multiple",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否呈现多选模式",
          "descriptionEn": "Whether to display in multiple selection mode"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示异步加载",
          "descriptionEn": "Whether to show asynchronous loading"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示边框",
          "descriptionEn": "Whether to show border"
        },
        {
          "name": "extendWidth",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "下拉框的宽度是否与input一致",
          "descriptionEn": "Whether dropdown width matches input width"
        },
        {
          "name": "showArrow",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示下拉按钮",
          "descriptionEn": "Whether to show dropdown button"
        },
        {
          "name": "options",
          "type": "SelectOption[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "options 数据，如果设置则不需要手动构造 Option 节点",
          "descriptionEn": "options data, if set, no need to manually construct Option nodes"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "emptyText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "没有数据时展示的提示",
          "descriptionEn": "Prompt displayed when no data"
        },
        {
          "name": "loadingText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "加载状态提示文字",
          "descriptionEn": "Loading-state text"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标",
          "descriptionEn": "Custom icon"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "shape='circle' 时呈现圆角",
          "descriptionEn": "When shape='circle', displays rounded corners"
        },
        {
          "name": "virtual",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否开启虚拟滚动，用于高效渲染大量选项",
          "descriptionEn": "Whether to enable virtual scrolling for large option lists"
        },
        {
          "name": "itemHeight",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "33",
          "descriptionZh": "虚拟滚动时每个选项的高度，单位 `px`",
          "descriptionEn": "Height of each option in pixels when virtual scrolling is enabled"
        },
        {
          "name": "overscan",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "5",
          "descriptionZh": "虚拟滚动时视口外额外渲染的选项数量",
          "descriptionEn": "Number of extra options rendered outside the viewport"
        },
        {
          "name": "arrowIcon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义下拉箭头图标",
          "descriptionEn": "Custom dropdown arrow icon"
        },
        {
          "name": "onSearch",
          "type": "((e: React.ChangeEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索时触发",
          "descriptionEn": "Triggered during search"
        },
        {
          "name": "onChange",
          "type": "((value: SelectValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回选择的值",
          "descriptionEn": "Triggered when option state changes, returns selected value"
        },
        {
          "name": "onSelect",
          "type": "((option: SelectOption & { selected: boolean; }) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中一项时触发",
          "descriptionEn": "Triggered when an item is selected"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮时触发",
          "descriptionEn": "Triggered when the clear button is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when dropdown expands or collapses"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "以 Option 子节点声明的选项；使用 options 数据源时无需重复声明。",
          "descriptionEn": "Options declared as Option children; do not duplicate options already supplied through the options data source."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onSearch",
          "type": "((e: React.ChangeEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索时触发",
          "descriptionEn": "Triggered during search"
        },
        {
          "name": "onChange",
          "type": "((value: SelectValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在选项状态发生改变时触发，返回选择的值",
          "descriptionEn": "Triggered when option state changes, returns selected value"
        },
        {
          "name": "onSelect",
          "type": "((option: SelectOption & { selected: boolean; }) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中一项时触发",
          "descriptionEn": "Triggered when an item is selected"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击清除按钮时触发",
          "descriptionEn": "Triggered when the clear button is clicked"
        },
        {
          "name": "onOpenChange",
          "type": "((opened: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when dropdown expands or collapses"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": [
          "Use value and onChange(value), not v-model. Multiple selection uses an array.",
          "onSelect(option) supplies the selected option and selected flag; onChange does not supply an option as a second argument."
        ]
      },
      "children": [
        "Option"
      ],
      "examples": [
        {
          "id": "components/select/demo/basic.tsx",
          "title": "单选",
          "source": "import { useEffect, useState } from \"react\";\nimport { Space, Option, Select } from \"react-kui\";\nimport { data as initial } from \"./data\";\nexport default function App() {\n  const [value1, setValue1] = useState<string | number>(2),\n    [value2, setValue2] = useState<string | number>(2),\n    [data, setData] = useState(initial);\n  useEffect(() => {\n    const timer = setTimeout(\n      () => setData(initial.map((item) => ({ ...item, label: `${item.label}1` }))),\n      1000,\n    );\n    return () => clearTimeout(timer);\n  }, []);\n  return (\n    <Space vertical>\n      use options: {value1}\n      <Select\n        value={value1}\n        options={data}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setValue1(next)}\n      />\n      <br />\n      use children: {value2}\n      <Select\n        value={value2}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setValue2(next)}\n      >\n        {data.map((item) => (\n          <Option key={item.value} value={item.value}>\n            {item.label}\n          </Option>\n        ))}\n      </Select>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/multiple.tsx",
          "title": "多选",
          "source": "import { useState } from \"react\";\nimport { Space, Option, Select } from \"react-kui\";\nimport { data } from \"./data\";\nexport default function App() {\n  const [v1, setV1] = useState<(string | number)[]>([0, 2]),\n    [v2, setV2] = useState<(string | number)[]>([0, 2]),\n    [v3, setV3] = useState<(string | number)[]>([0, 2, 3]);\n  return (\n    <Space vertical block>\n      <code>value: {v1.join(\", \")}</code>\n      <Select\n        value={v1}\n        onChange={(v) => Array.isArray(v) && setV1(v)}\n        block\n        options={data}\n        multiple\n      />\n      <br />\n      <code>value: {v2.join(\", \")}</code>\n      <Select value={v2} onChange={(v) => Array.isArray(v) && setV2(v)} block multiple>\n        {data.map((item) => (\n          <Option key={item.value} value={item.value} label={item.label} />\n        ))}\n      </Select>\n      <br />\n      <code>value: {v3.join(\", \")}</code>\n      <Select\n        value={v3}\n        onChange={(v) => Array.isArray(v) && setV3(v)}\n        block\n        maxTagCount={2}\n        options={data}\n        multiple\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/disabled.tsx",
          "title": "禁用和不可清除",
          "source": "import { useState } from \"react\";\nimport { Space, Select } from \"react-kui\";\nimport { data as source } from \"./data\";\nconst data = source.map((item) => (item.value === 1 ? { ...item, disabled: true } : item));\nexport default function App() {\n  const [v1, setV1] = useState<string | number>(2),\n    [v2, setV2] = useState<Array<string | number>>([0, 3]),\n    [v3] = useState<Array<string | number>>([0, 2, 3]);\n  return (\n    <Space vertical block>\n      Disabled\n      <Select value={v1} block disabled options={data} />\n      <Select value={v2} block disabled options={data} multiple />\n      <Select value={v3} disabled maxTagCount={2} options={data} multiple block />\n      <br />\n      Disabled item\n      <Select\n        value={v1}\n        onChange={(value) => !Array.isArray(value) && value !== undefined && setV1(value)}\n        block\n        options={data}\n      />\n      <br />\n      Clearable = false\n      <Select\n        value={v1}\n        onChange={(value) => !Array.isArray(value) && value !== undefined && setV1(value)}\n        block\n        clearable={false}\n        options={data}\n      />\n      <Select\n        value={v2}\n        onChange={(value) => setV2(value as Array<string | number>)}\n        block\n        clearable={false}\n        options={data}\n        multiple\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/filterable.tsx",
          "title": "过滤 和 搜索",
          "source": "import { useState } from \"react\";\nimport { Space, Select } from \"react-kui\";\nimport { fruits } from \"./data\";\nconst options = fruits.map((value) => ({ label: value, value }));\nexport default function App() {\n  const [v1, setV1] = useState<string | number>(\"\"),\n    [v2, setV2] = useState<(string | number)[]>([]),\n    [v3, setV3] = useState<string | number>(\"\"),\n    [v4, setV4] = useState<(string | number)[]>([]),\n    [remote, setRemote] = useState<typeof options>([]),\n    [loading, setLoading] = useState(false);\n  const search = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const query = e.target.value.trim().toLowerCase();\n    setLoading(true);\n    setTimeout(() => {\n      setRemote(options.filter((item) => item.value.includes(query)));\n      setLoading(false);\n    }, 1000);\n  };\n  return (\n    <Space vertical block>\n      <span>Filtering:</span>\n      <Select\n        value={v1}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setV1(next)}\n        block\n        placeholder=\"Filtering\"\n        filterable\n        options={options}\n      />\n      <br />\n      <span>Multiple Filtering:</span>\n      <Select\n        value={v2}\n        onChange={(next) => Array.isArray(next) && setV2(next)}\n        multiple\n        maxTagCount={3}\n        block\n        placeholder=\"Multiple Filtering\"\n        filterable\n        options={options}\n      />\n      <br />\n      <span>Search:</span>\n      <Select\n        value={v3}\n        onChange={(next) => !Array.isArray(next) && next !== undefined && setV3(next)}\n        onSearch={search}\n        block\n        loading={loading}\n        placeholder=\"Search\"\n        options={remote}\n      />\n      <br />\n      <span>Multiple Search:</span>\n      <Select\n        value={v4}\n        onChange={(next) => Array.isArray(next) && setV4(next)}\n        multiple\n        block\n        maxTagCount={3}\n        loading={loading}\n        onSearch={search}\n        placeholder=\"Multiple Search\"\n        options={remote}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/allow-create.tsx",
          "title": "创建选项",
          "source": "import { useState } from \"react\";\nimport { Select } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState<(string | number)[]>([]);\n  return (\n    <Select\n      multiple\n      allowCreate\n      filterable\n      block\n      value={value}\n      options={[\n        { label: \"React\", value: \"React\" },\n        { label: \"TypeScript\", value: \"TypeScript\" },\n      ]}\n      placeholder=\"输入内容后按回车创建\"\n      onChange={(next) => Array.isArray(next) && setValue(next)}\n    />\n  );\n}"
        },
        {
          "id": "components/select/demo/size.tsx",
          "title": "尺寸",
          "source": "import { useState } from \"react\";\nimport { RadioGroup, Select, Space } from \"react-kui\";\nimport type { SizeType } from \"react-kui\";\nimport { data } from \"./data\";\nconst sizes = [\"large\", \"medium\", \"small\"].map((value) => ({ label: value, value }));\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [v1, setV1] = useState<number>(0),\n    [v2, setV2] = useState<number[]>([0, 1]),\n    [v3, setV3] = useState<number[]>([0, 1, 2]);\n  return (\n    <Space vertical block>\n      <RadioGroup value={size} onChange={setSize} type=\"button\" options={sizes} />\n      <br />\n      <Select\n        value={v1}\n        onChange={(v) => typeof v === \"number\" && setV1(v)}\n        size={size}\n        filterable\n        block\n        options={data}\n      />\n      <Select\n        value={v2}\n        onChange={(v) => Array.isArray(v) && setV2(v.map(Number))}\n        size={size}\n        block\n        options={data}\n        multiple\n      />\n      <Select\n        value={v3}\n        onChange={(v) => Array.isArray(v) && setV3(v.map(Number))}\n        size={size}\n        maxTagCount={2}\n        options={data}\n        multiple\n        block\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/theme.tsx",
          "title": "奇葩的定义",
          "source": "import { ArrowDown, Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Space, Select } from \"react-kui\";\nconst options = [\"Apple\", \"Orange\", \"Banana\", \"Pear\"].map((label, index) => ({\n  label,\n  value: String(index + 1),\n}));\nexport default function App() {\n  const [value, setValue] = useState<(string | number)[]>([\"1\", \"3\"]);\n  return (\n    <Space vertical align=\"start\" block style={{ width: 300, maxWidth: \"100%\" }}>\n      <Select shape=\"circle\" options={options} placeholder=\"A circle Input\" />\n      <Select\n        shape=\"circle\"\n        icon={Search}\n        options={options}\n        placeholder=\"A circle Input with icon\"\n      />\n      <Select options={options} placeholder=\"No Arrow\" showArrow={false} />\n      <Select options={options} placeholder=\"Custom Arrow\" arrowIcon={ArrowDown} />\n      <Select\n        multiple\n        value={value}\n        onChange={(v) => Array.isArray(v) && setValue(v)}\n        filterable\n        options={options}\n      />\n      <Select filterable theme=\"outline\" options={options} placeholder=\"Outline theme\" />\n      <Select theme=\"plain\" options={options} placeholder=\"Plain\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/select/demo/virtual.tsx",
          "title": "虚拟滚动",
          "source": "import { useState } from \"react\";\nimport { Select } from \"react-kui\";\n\nconst options = Array.from({ length: 10000 }, (_, index) => ({\n  value: index + 1,\n  label: `Option ${index + 1}`,\n}));\nexport default function App() {\n  const [value, setValue] = useState<string | number>();\n  return (\n    <Select\n      value={value}\n      onChange={(next) =>\n        setValue(typeof next === \"string\" || typeof next === \"number\" ? next : undefined)\n      }\n      virtual\n      filterable\n      block\n      options={options}\n      itemHeight={33}\n      overscan={6}\n      placeholder=\"Select from 10,000 options\"\n    />\n  );\n}"
        }
      ]
    },
    {
      "name": "ConfigProvider",
      "import": "import { ConfigProvider } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/config",
      "props": [
        {
          "name": "locale",
          "type": "Locale | null | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件语言包",
          "descriptionEn": "Component locale"
        },
        {
          "name": "getPopupContainer",
          "type": "(() => HTMLElement | null | undefined) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定弹层挂载容器",
          "descriptionEn": "Returns the popup mount container"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "兼容组件的默认尺寸",
          "descriptionEn": "Default size for compatible components"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "兼容组件的默认形状",
          "descriptionEn": "Default shape for compatible components"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "兼容组件的默认主题",
          "descriptionEn": "Default theme for compatible components"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "接收 locale、尺寸、主题和形状配置的后代组件。",
          "descriptionEn": "Descendant components receiving locale, size, theme and shape configuration."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "getPopupContainer",
        "children"
      ],
      "behavior": {
        "rules": [
          "Wrap children to supply locale, size, theme and shape. Explicit component props override provider values. Import locales from react-kui/locale/<locale>."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/config/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { useCallback, useRef, useState, type CSSProperties } from \"react\";\nimport en from \"react-kui/locale/en\";\nimport zhCN from \"react-kui/locale/zh-CN\";\nimport {\n  Button,\n  Card,\n  ConfigProvider,\n  DatePicker,\n  Form,\n  FormItem,\n  Input,\n  Page,\n  Select,\n  Space,\n  Tag,\n  type ShapeType,\n  type SizeType,\n  type ThemeType,\n} from \"react-kui\";\n\nconst options = [\n  { label: \"Vue\", value: \"vue\" },\n  { label: \"React\", value: \"react\" },\n];\n\nconst styles = {\n  toolbar: { marginBottom: 16 },\n  scope: {\n    position: \"relative\",\n    padding: 16,\n    border: \"1px dashed var(--kui-color-border)\",\n    borderRadius: \"var(--kui-border-radius)\",\n  },\n  heading: { marginBottom: 12 },\n  form: {\n    display: \"grid\",\n    gridTemplateColumns: \"repeat(var(--config-demo-columns, 3), minmax(0, 1fr))\",\n    gap: 12,\n  },\n  control: { width: \"100%\" },\n  card: { maxWidth: 560 },\n  description: { marginBottom: 12, color: \"var(--kui-color-text-description)\" },\n  nested: {\n    padding: 16,\n    background: \"var(--kui-color-bg-component)\",\n    borderRadius: \"var(--kui-border-radius)\",\n  },\n} satisfies Record<string, CSSProperties>;\n\nexport default function App() {\n  const popupHost = useRef<HTMLDivElement>(null);\n  const [language, setLanguage] = useState<\"zh\" | \"en\">(\"zh\");\n  const [size, setSize] = useState<SizeType>(\"small\");\n  const [theme, setTheme] = useState<ThemeType>(\"outline\");\n  const [shape, setShape] = useState<ShapeType>(\"square\");\n  const [model, setModel] = useState<Record<string, unknown>>({ keyword: \"\" });\n  const getPopupContainer = useCallback(() => popupHost.current ?? document.body, []);\n\n  const cycle = <T,>(current: T, values: T[], update: (value: T) => void) => {\n    update(values[(values.indexOf(current) + 1) % values.length]);\n  };\n\n  return (\n    <>\n      <div className=\"config-demo\">\n        <Space wrap style={styles.toolbar}>\n          <Button onClick={() => setLanguage((value) => (value === \"zh\" ? \"en\" : \"zh\"))}>\n            locale: {language === \"zh\" ? \"zh-CN\" : \"en\"}\n          </Button>\n          <Button onClick={() => cycle(size, [\"small\", \"medium\", \"large\"], setSize)}>\n            size: {size}\n          </Button>\n          <Button onClick={() => cycle(theme, [\"outline\", \"fill\", \"plain\"], setTheme)}>\n            theme: {theme}\n          </Button>\n          <Button onClick={() => cycle(shape, [\"square\", \"round\", \"circle\"], setShape)}>\n            shape: {shape}\n          </Button>\n        </Space>\n\n        <div ref={popupHost} style={styles.scope}>\n          <ConfigProvider\n            locale={language === \"zh\" ? zhCN : en}\n            size={size}\n            theme={theme}\n            shape={shape}\n            getPopupContainer={getPopupContainer}\n          >\n            <Space vertical>\n              <section>\n                <h4 style={styles.heading}>Global appearance and locale</h4>\n                <Form style={styles.form} model={model} layout=\"vertical\" onChange={setModel}>\n                  <FormItem label=\"Keyword\" prop=\"keyword\">\n                    <Input style={styles.control} placeholder=\"Inherited Input\" />\n                  </FormItem>\n                  <FormItem label=\"Framework\">\n                    <Select style={styles.control} options={[]} />\n                  </FormItem>\n                  <FormItem label=\"Date\">\n                    <DatePicker style={styles.control} />\n                  </FormItem>\n                </Form>\n                <Space wrap>\n                  <Button>Button</Button>\n                  <Tag>Tag</Tag>\n                  <Page total={80} page={2} showSizer showElevator />\n                </Space>\n              </section>\n\n              <Card style={styles.card} title=\"Popup container\">\n                <p style={styles.description}>\n                  The Select overlay is mounted in this dashed area instead of document.body.\n                </p>\n                <Select\n                  style={styles.control}\n                  value={model.popup as string | undefined}\n                  options={options}\n                  placeholder=\"Open popup\"\n                  onChange={(value) => setModel((current) => ({ ...current, popup: value }))}\n                />\n              </Card>\n\n              <ConfigProvider size=\"large\" theme=\"fill\" shape=\"round\">\n                <section style={styles.nested}>\n                  <h4 style={styles.heading}>嵌套 ConfigProvider</h4>\n                  <Space wrap>\n                    <Button>Nested Button</Button>\n                    <Input style={styles.control} placeholder=\"Large fill round\" />\n                    <Tag>Nested Tag</Tag>\n                  </Space>\n                </section>\n              </ConfigProvider>\n\n              <section>\n                <h4 style={styles.heading}>组件属性优先</h4>\n                <Button size=\"large\" theme=\"fill\" shape=\"circle\">\n                  Local\n                </Button>\n              </section>\n            </Space>\n          </ConfigProvider>\n        </div>\n      </div>\n      <style>{`\n        .config-demo .k-form-item { margin-bottom: 8px; }\n        @media (max-width: 720px) {\n          .config-demo { --config-demo-columns: 1; }\n        }\n      `}</style>\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "Skeleton",
      "import": "import { Skeleton } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/skeleton",
      "props": [
        {
          "name": "animated",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示动画效果",
          "descriptionEn": "Whether to show animation effect"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "为 true 时，显示占位图。反之则直接展示子组件",
          "descriptionEn": "When true, show placeholder. Otherwise directly display child components"
        },
        {
          "name": "delay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "500",
          "descriptionZh": "延迟显示骨架，避免快速加载时闪烁，单位毫秒",
          "descriptionEn": "Delay showing the skeleton to avoid flickering, in milliseconds"
        },
        {
          "name": "title",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `titleWidth`",
          "descriptionEn": "Deprecated. Use `titleWidth` instead"
        },
        {
          "name": "titleWidth",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "35",
          "descriptionZh": "标题占位图宽度，取值范围 0-100",
          "descriptionEn": "Title placeholder width, from 0 to 100"
        },
        {
          "name": "rows",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "3",
          "descriptionZh": "设置段落占位图的行数",
          "descriptionEn": "Set the number of paragraph placeholder lines"
        },
        {
          "name": "avatar",
          "type": "boolean | SkeletonAvatarConfig | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "是否显示头像占位图",
          "descriptionEn": "Whether to show avatar placeholder"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "骨架不再显示时展示的实际内容；加载期间展示骨架占位。",
          "descriptionEn": "Actual content displayed after the skeleton is hidden; loading displays the skeleton placeholder."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/skeleton/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton />;\n}"
        },
        {
          "id": "components/skeleton/demo/group.tsx",
          "title": "组合",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton avatar rows={4} />;\n}"
        },
        {
          "id": "components/skeleton/demo/animated.tsx",
          "title": "动画效果",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton animated />;\n}"
        },
        {
          "id": "components/skeleton/demo/child.tsx",
          "title": "子组件",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Skeleton } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Skeleton loading={loading} rows={2} animated>\n        <div>\n          <h4 style={{ fontWeight: \"bold\", marginBottom: 15 }}>\n            KUI is a desktop UI component library based on React\n          </h4>\n          <p>\n            Dozens of useful and aesthetically pleasing components, a very user-friendly API\n            suitable for developers of any skill level, comprehensive documentation, and support for\n            modern React applications.\n          </p>\n        </div>\n      </Skeleton>\n      <br />\n      <br />\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/list.tsx",
          "title": "列表",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Avatar, Button, Card, CardMeta, Space, Skeleton } from \"react-kui\";\nconst item = {\n  name: \"KUI Design\",\n  intro: \"KUI is a desktop UI component library based on React\",\n  desc: \"Dozens of useful and aesthetically pleasing components, a very user-friendly API suitable for developers of any skill level, and comprehensive documentation.\",\n};\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      <Space vertical block style={{ fontSize: 13 }}>\n        {[1, 2, 3].map((i) => (\n          <Card\n            key={i}\n            style={{ padding: \"15px 20px\", borderBottom: \"1px solid var(--kui-color-border)\" }}\n          >\n            <Skeleton avatar loading={loading} rows={2} animated>\n              <CardMeta\n                avatar={<Avatar size=\"large\">{item.name}</Avatar>}\n                title={item.name}\n                description={item.intro}\n              />\n              <p style={{ margin: 0, marginTop: 15, lineHeight: \"25px\" }}>{item.desc}</p>\n            </Skeleton>\n          </Card>\n        ))}\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/items.tsx",
          "title": "按钮/头像/图像",
          "source": "import { useState } from \"react\";\nimport {\n  Checkbox,\n  type ShapeType,\n  type SizeType,\n  RadioGroup,\n  Slider,\n  Space,\n  SkeletonAvatar,\n  SkeletonButton,\n  SkeletonImage,\n  SkeletonText,\n} from \"react-kui\";\nconst sizes = [\n    { label: \"Small\", value: \"small\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Large\", value: \"large\" },\n  ],\n  btnShapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Circle\", value: \"circle\" },\n  ],\n  avatarShapes = [\n    { label: \"Square\", value: \"square\" },\n    { label: \"Circle\", value: \"circle\" },\n  ];\nexport default function App() {\n  const [animated, setAnimated] = useState(false),\n    [block, setBlock] = useState(false),\n    [size, setSize] = useState<SizeType | \"default\">(\"default\"),\n    [btnShape, setBtnShape] = useState<ShapeType>(\"round\"),\n    [avatarShape, setAvatarShape] = useState<ShapeType>(\"square\"),\n    [radius, setRadius] = useState(10),\n    [imgSize, setImgSize] = useState<number[]>([196, 96]);\n  return (\n    <>\n      <Space size={15}>\n        <Checkbox\n          checked={animated}\n          onChange={(event) => setAnimated(event.checked)}\n          label=\"Animated\"\n        />\n        <Checkbox\n          checked={block}\n          onChange={(event) => setBlock(event.checked)}\n          label=\"Button block\"\n        />\n        Size: <RadioGroup options={sizes} value={size} onChange={setSize} type=\"button\" />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Button Shape:{\" \"}\n        <RadioGroup options={btnShapes} value={btnShape} onChange={setBtnShape} type=\"button\" />\n        Avatar Shape:{\" \"}\n        <RadioGroup\n          options={avatarShapes}\n          value={avatarShape}\n          onChange={setAvatarShape}\n          type=\"button\"\n        />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Image radius:{\" \"}\n        <Slider value={radius} onChange={(v) => setRadius(v as number)} style={{ width: 300 }} />\n      </Space>\n      <br />\n      <Space size={15}>\n        Image Size:{\" \"}\n        <Slider\n          value={imgSize}\n          onChange={(v) => setImgSize(v as number[])}\n          range\n          min={96}\n          max={320}\n          style={{ width: 300 }}\n        />\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <SkeletonButton animated={animated} size={size} shape={btnShape} />\n        <SkeletonAvatar animated={animated} size={size} shape={avatarShape} />\n        <SkeletonText animated={animated} size={size} style={{ width: 200 }} />\n      </Space>\n      <br />\n      <br />\n      <SkeletonButton animated={animated} size={size} shape={btnShape} block={block} />\n      <br />\n      <br />\n      <SkeletonImage animated={animated} radius={radius} size={imgSize} />\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/custom.tsx",
          "title": "自定义",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Card, SkeletonImage, SkeletonText } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      {[1, 2, 3].map((x) => (\n        <Card\n          key={x}\n          title=\"A Poem\"\n          style={{ width: 200, marginBottom: 10, display: \"inline-block\", marginRight: 20 }}\n        >\n          <SkeletonImage animated loading={loading} radius={8} style={{ width: 166, height: 100 }}>\n            <div\n              style={{\n                height: 100,\n                width: 166,\n                borderRadius: 8,\n                background:\n                  'url(\"https://cdn.chuchur.com/upload/demo/test_300.jpg\") no-repeat center/cover',\n              }}\n            />\n          </SkeletonImage>\n          <SkeletonText\n            animated\n            loading={loading}\n            size=\"small\"\n            style={{ minWidth: 80, margin: \"8px 0\" }}\n          >\n            <p>Tony Stack</p>\n          </SkeletonText>\n          <SkeletonText animated loading={loading} size=\"small\" style={{ minWidth: 130 }}>\n            <span style={{ fontSize: 13, color: \"#999\" }}>I am Iron Man.</span>\n          </SkeletonText>\n        </Card>\n      ))}\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "SkeletonAvatar",
      "import": "import { SkeletonAvatar } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/skeleton",
      "props": [
        {
          "name": "animated",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示动画效果",
          "descriptionEn": "Whether to show animation effect"
        },
        {
          "name": "radius",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定图片的圆角大小",
          "descriptionEn": "Specify the border radius of the image"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "为 true 时，显示占位图。反之则直接展示子组件",
          "descriptionEn": "When true, show placeholder. Otherwise directly display child components"
        },
        {
          "name": "delay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "500",
          "descriptionZh": "延迟显示骨架，单位毫秒",
          "descriptionEn": "Delay showing the skeleton, in milliseconds"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "指定按钮的形状",
          "descriptionEn": "Specify the shape of the button"
        },
        {
          "name": "size",
          "type": "number | \"default\" | SizeType | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片的宽(高)度",
          "descriptionEn": "Image width (height)"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "骨架不再显示时展示的实际内容；加载期间展示骨架占位。",
          "descriptionEn": "Actual content displayed after the skeleton is hidden; loading displays the skeleton placeholder."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/skeleton/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton />;\n}"
        },
        {
          "id": "components/skeleton/demo/group.tsx",
          "title": "组合",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton avatar rows={4} />;\n}"
        },
        {
          "id": "components/skeleton/demo/animated.tsx",
          "title": "动画效果",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton animated />;\n}"
        },
        {
          "id": "components/skeleton/demo/child.tsx",
          "title": "子组件",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Skeleton } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Skeleton loading={loading} rows={2} animated>\n        <div>\n          <h4 style={{ fontWeight: \"bold\", marginBottom: 15 }}>\n            KUI is a desktop UI component library based on React\n          </h4>\n          <p>\n            Dozens of useful and aesthetically pleasing components, a very user-friendly API\n            suitable for developers of any skill level, comprehensive documentation, and support for\n            modern React applications.\n          </p>\n        </div>\n      </Skeleton>\n      <br />\n      <br />\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/list.tsx",
          "title": "列表",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Avatar, Button, Card, CardMeta, Space, Skeleton } from \"react-kui\";\nconst item = {\n  name: \"KUI Design\",\n  intro: \"KUI is a desktop UI component library based on React\",\n  desc: \"Dozens of useful and aesthetically pleasing components, a very user-friendly API suitable for developers of any skill level, and comprehensive documentation.\",\n};\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      <Space vertical block style={{ fontSize: 13 }}>\n        {[1, 2, 3].map((i) => (\n          <Card\n            key={i}\n            style={{ padding: \"15px 20px\", borderBottom: \"1px solid var(--kui-color-border)\" }}\n          >\n            <Skeleton avatar loading={loading} rows={2} animated>\n              <CardMeta\n                avatar={<Avatar size=\"large\">{item.name}</Avatar>}\n                title={item.name}\n                description={item.intro}\n              />\n              <p style={{ margin: 0, marginTop: 15, lineHeight: \"25px\" }}>{item.desc}</p>\n            </Skeleton>\n          </Card>\n        ))}\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/items.tsx",
          "title": "按钮/头像/图像",
          "source": "import { useState } from \"react\";\nimport {\n  Checkbox,\n  type ShapeType,\n  type SizeType,\n  RadioGroup,\n  Slider,\n  Space,\n  SkeletonAvatar,\n  SkeletonButton,\n  SkeletonImage,\n  SkeletonText,\n} from \"react-kui\";\nconst sizes = [\n    { label: \"Small\", value: \"small\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Large\", value: \"large\" },\n  ],\n  btnShapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Circle\", value: \"circle\" },\n  ],\n  avatarShapes = [\n    { label: \"Square\", value: \"square\" },\n    { label: \"Circle\", value: \"circle\" },\n  ];\nexport default function App() {\n  const [animated, setAnimated] = useState(false),\n    [block, setBlock] = useState(false),\n    [size, setSize] = useState<SizeType | \"default\">(\"default\"),\n    [btnShape, setBtnShape] = useState<ShapeType>(\"round\"),\n    [avatarShape, setAvatarShape] = useState<ShapeType>(\"square\"),\n    [radius, setRadius] = useState(10),\n    [imgSize, setImgSize] = useState<number[]>([196, 96]);\n  return (\n    <>\n      <Space size={15}>\n        <Checkbox\n          checked={animated}\n          onChange={(event) => setAnimated(event.checked)}\n          label=\"Animated\"\n        />\n        <Checkbox\n          checked={block}\n          onChange={(event) => setBlock(event.checked)}\n          label=\"Button block\"\n        />\n        Size: <RadioGroup options={sizes} value={size} onChange={setSize} type=\"button\" />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Button Shape:{\" \"}\n        <RadioGroup options={btnShapes} value={btnShape} onChange={setBtnShape} type=\"button\" />\n        Avatar Shape:{\" \"}\n        <RadioGroup\n          options={avatarShapes}\n          value={avatarShape}\n          onChange={setAvatarShape}\n          type=\"button\"\n        />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Image radius:{\" \"}\n        <Slider value={radius} onChange={(v) => setRadius(v as number)} style={{ width: 300 }} />\n      </Space>\n      <br />\n      <Space size={15}>\n        Image Size:{\" \"}\n        <Slider\n          value={imgSize}\n          onChange={(v) => setImgSize(v as number[])}\n          range\n          min={96}\n          max={320}\n          style={{ width: 300 }}\n        />\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <SkeletonButton animated={animated} size={size} shape={btnShape} />\n        <SkeletonAvatar animated={animated} size={size} shape={avatarShape} />\n        <SkeletonText animated={animated} size={size} style={{ width: 200 }} />\n      </Space>\n      <br />\n      <br />\n      <SkeletonButton animated={animated} size={size} shape={btnShape} block={block} />\n      <br />\n      <br />\n      <SkeletonImage animated={animated} radius={radius} size={imgSize} />\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/custom.tsx",
          "title": "自定义",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Card, SkeletonImage, SkeletonText } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      {[1, 2, 3].map((x) => (\n        <Card\n          key={x}\n          title=\"A Poem\"\n          style={{ width: 200, marginBottom: 10, display: \"inline-block\", marginRight: 20 }}\n        >\n          <SkeletonImage animated loading={loading} radius={8} style={{ width: 166, height: 100 }}>\n            <div\n              style={{\n                height: 100,\n                width: 166,\n                borderRadius: 8,\n                background:\n                  'url(\"https://cdn.chuchur.com/upload/demo/test_300.jpg\") no-repeat center/cover',\n              }}\n            />\n          </SkeletonImage>\n          <SkeletonText\n            animated\n            loading={loading}\n            size=\"small\"\n            style={{ minWidth: 80, margin: \"8px 0\" }}\n          >\n            <p>Tony Stack</p>\n          </SkeletonText>\n          <SkeletonText animated loading={loading} size=\"small\" style={{ minWidth: 130 }}>\n            <span style={{ fontSize: 13, color: \"#999\" }}>I am Iron Man.</span>\n          </SkeletonText>\n        </Card>\n      ))}\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "SkeletonButton",
      "import": "import { SkeletonButton } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/skeleton",
      "props": [
        {
          "name": "animated",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示动画效果",
          "descriptionEn": "Whether to show animation effect"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "为 true 时，显示占位图。反之则直接展示子组件",
          "descriptionEn": "When true, show placeholder. Otherwise directly display child components"
        },
        {
          "name": "delay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "500",
          "descriptionZh": "延迟显示骨架，单位毫秒",
          "descriptionEn": "Delay showing the skeleton, in milliseconds"
        },
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "将按钮宽度调整为其父宽度的选项",
          "descriptionEn": "Option to adjust button width to its parent width"
        },
        {
          "name": "width",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本宽度",
          "descriptionEn": "Text width"
        },
        {
          "name": "size",
          "type": "\"default\" | SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "default",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "图片的宽(高)度",
          "descriptionEn": "Image width (height)"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "指定按钮的形状",
          "descriptionEn": "Specify the shape of the button"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "骨架不再显示时展示的实际内容；加载期间展示骨架占位。",
          "descriptionEn": "Actual content displayed after the skeleton is hidden; loading displays the skeleton placeholder."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/skeleton/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton />;\n}"
        },
        {
          "id": "components/skeleton/demo/group.tsx",
          "title": "组合",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton avatar rows={4} />;\n}"
        },
        {
          "id": "components/skeleton/demo/animated.tsx",
          "title": "动画效果",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton animated />;\n}"
        },
        {
          "id": "components/skeleton/demo/child.tsx",
          "title": "子组件",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Skeleton } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Skeleton loading={loading} rows={2} animated>\n        <div>\n          <h4 style={{ fontWeight: \"bold\", marginBottom: 15 }}>\n            KUI is a desktop UI component library based on React\n          </h4>\n          <p>\n            Dozens of useful and aesthetically pleasing components, a very user-friendly API\n            suitable for developers of any skill level, comprehensive documentation, and support for\n            modern React applications.\n          </p>\n        </div>\n      </Skeleton>\n      <br />\n      <br />\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/list.tsx",
          "title": "列表",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Avatar, Button, Card, CardMeta, Space, Skeleton } from \"react-kui\";\nconst item = {\n  name: \"KUI Design\",\n  intro: \"KUI is a desktop UI component library based on React\",\n  desc: \"Dozens of useful and aesthetically pleasing components, a very user-friendly API suitable for developers of any skill level, and comprehensive documentation.\",\n};\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      <Space vertical block style={{ fontSize: 13 }}>\n        {[1, 2, 3].map((i) => (\n          <Card\n            key={i}\n            style={{ padding: \"15px 20px\", borderBottom: \"1px solid var(--kui-color-border)\" }}\n          >\n            <Skeleton avatar loading={loading} rows={2} animated>\n              <CardMeta\n                avatar={<Avatar size=\"large\">{item.name}</Avatar>}\n                title={item.name}\n                description={item.intro}\n              />\n              <p style={{ margin: 0, marginTop: 15, lineHeight: \"25px\" }}>{item.desc}</p>\n            </Skeleton>\n          </Card>\n        ))}\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/items.tsx",
          "title": "按钮/头像/图像",
          "source": "import { useState } from \"react\";\nimport {\n  Checkbox,\n  type ShapeType,\n  type SizeType,\n  RadioGroup,\n  Slider,\n  Space,\n  SkeletonAvatar,\n  SkeletonButton,\n  SkeletonImage,\n  SkeletonText,\n} from \"react-kui\";\nconst sizes = [\n    { label: \"Small\", value: \"small\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Large\", value: \"large\" },\n  ],\n  btnShapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Circle\", value: \"circle\" },\n  ],\n  avatarShapes = [\n    { label: \"Square\", value: \"square\" },\n    { label: \"Circle\", value: \"circle\" },\n  ];\nexport default function App() {\n  const [animated, setAnimated] = useState(false),\n    [block, setBlock] = useState(false),\n    [size, setSize] = useState<SizeType | \"default\">(\"default\"),\n    [btnShape, setBtnShape] = useState<ShapeType>(\"round\"),\n    [avatarShape, setAvatarShape] = useState<ShapeType>(\"square\"),\n    [radius, setRadius] = useState(10),\n    [imgSize, setImgSize] = useState<number[]>([196, 96]);\n  return (\n    <>\n      <Space size={15}>\n        <Checkbox\n          checked={animated}\n          onChange={(event) => setAnimated(event.checked)}\n          label=\"Animated\"\n        />\n        <Checkbox\n          checked={block}\n          onChange={(event) => setBlock(event.checked)}\n          label=\"Button block\"\n        />\n        Size: <RadioGroup options={sizes} value={size} onChange={setSize} type=\"button\" />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Button Shape:{\" \"}\n        <RadioGroup options={btnShapes} value={btnShape} onChange={setBtnShape} type=\"button\" />\n        Avatar Shape:{\" \"}\n        <RadioGroup\n          options={avatarShapes}\n          value={avatarShape}\n          onChange={setAvatarShape}\n          type=\"button\"\n        />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Image radius:{\" \"}\n        <Slider value={radius} onChange={(v) => setRadius(v as number)} style={{ width: 300 }} />\n      </Space>\n      <br />\n      <Space size={15}>\n        Image Size:{\" \"}\n        <Slider\n          value={imgSize}\n          onChange={(v) => setImgSize(v as number[])}\n          range\n          min={96}\n          max={320}\n          style={{ width: 300 }}\n        />\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <SkeletonButton animated={animated} size={size} shape={btnShape} />\n        <SkeletonAvatar animated={animated} size={size} shape={avatarShape} />\n        <SkeletonText animated={animated} size={size} style={{ width: 200 }} />\n      </Space>\n      <br />\n      <br />\n      <SkeletonButton animated={animated} size={size} shape={btnShape} block={block} />\n      <br />\n      <br />\n      <SkeletonImage animated={animated} radius={radius} size={imgSize} />\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/custom.tsx",
          "title": "自定义",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Card, SkeletonImage, SkeletonText } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      {[1, 2, 3].map((x) => (\n        <Card\n          key={x}\n          title=\"A Poem\"\n          style={{ width: 200, marginBottom: 10, display: \"inline-block\", marginRight: 20 }}\n        >\n          <SkeletonImage animated loading={loading} radius={8} style={{ width: 166, height: 100 }}>\n            <div\n              style={{\n                height: 100,\n                width: 166,\n                borderRadius: 8,\n                background:\n                  'url(\"https://cdn.chuchur.com/upload/demo/test_300.jpg\") no-repeat center/cover',\n              }}\n            />\n          </SkeletonImage>\n          <SkeletonText\n            animated\n            loading={loading}\n            size=\"small\"\n            style={{ minWidth: 80, margin: \"8px 0\" }}\n          >\n            <p>Tony Stack</p>\n          </SkeletonText>\n          <SkeletonText animated loading={loading} size=\"small\" style={{ minWidth: 130 }}>\n            <span style={{ fontSize: 13, color: \"#999\" }}>I am Iron Man.</span>\n          </SkeletonText>\n        </Card>\n      ))}\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "SkeletonImage",
      "import": "import { SkeletonImage } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/skeleton",
      "props": [
        {
          "name": "animated",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示动画效果",
          "descriptionEn": "Whether to show animation effect"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "为 true 时，显示占位图。反之则直接展示子组件",
          "descriptionEn": "When true, show placeholder. Otherwise directly display child components"
        },
        {
          "name": "delay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "500",
          "descriptionZh": "延迟显示骨架，单位毫秒",
          "descriptionEn": "Delay showing the skeleton, in milliseconds"
        },
        {
          "name": "radius",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定图片的圆角大小",
          "descriptionEn": "Specify the border radius of the image"
        },
        {
          "name": "size",
          "type": "number | number[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "图片的宽(高)度",
          "descriptionEn": "Image width (height)"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "骨架不再显示时展示的实际内容；加载期间展示骨架占位。",
          "descriptionEn": "Actual content displayed after the skeleton is hidden; loading displays the skeleton placeholder."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/skeleton/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton />;\n}"
        },
        {
          "id": "components/skeleton/demo/group.tsx",
          "title": "组合",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton avatar rows={4} />;\n}"
        },
        {
          "id": "components/skeleton/demo/animated.tsx",
          "title": "动画效果",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton animated />;\n}"
        },
        {
          "id": "components/skeleton/demo/child.tsx",
          "title": "子组件",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Skeleton } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Skeleton loading={loading} rows={2} animated>\n        <div>\n          <h4 style={{ fontWeight: \"bold\", marginBottom: 15 }}>\n            KUI is a desktop UI component library based on React\n          </h4>\n          <p>\n            Dozens of useful and aesthetically pleasing components, a very user-friendly API\n            suitable for developers of any skill level, comprehensive documentation, and support for\n            modern React applications.\n          </p>\n        </div>\n      </Skeleton>\n      <br />\n      <br />\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/list.tsx",
          "title": "列表",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Avatar, Button, Card, CardMeta, Space, Skeleton } from \"react-kui\";\nconst item = {\n  name: \"KUI Design\",\n  intro: \"KUI is a desktop UI component library based on React\",\n  desc: \"Dozens of useful and aesthetically pleasing components, a very user-friendly API suitable for developers of any skill level, and comprehensive documentation.\",\n};\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      <Space vertical block style={{ fontSize: 13 }}>\n        {[1, 2, 3].map((i) => (\n          <Card\n            key={i}\n            style={{ padding: \"15px 20px\", borderBottom: \"1px solid var(--kui-color-border)\" }}\n          >\n            <Skeleton avatar loading={loading} rows={2} animated>\n              <CardMeta\n                avatar={<Avatar size=\"large\">{item.name}</Avatar>}\n                title={item.name}\n                description={item.intro}\n              />\n              <p style={{ margin: 0, marginTop: 15, lineHeight: \"25px\" }}>{item.desc}</p>\n            </Skeleton>\n          </Card>\n        ))}\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/items.tsx",
          "title": "按钮/头像/图像",
          "source": "import { useState } from \"react\";\nimport {\n  Checkbox,\n  type ShapeType,\n  type SizeType,\n  RadioGroup,\n  Slider,\n  Space,\n  SkeletonAvatar,\n  SkeletonButton,\n  SkeletonImage,\n  SkeletonText,\n} from \"react-kui\";\nconst sizes = [\n    { label: \"Small\", value: \"small\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Large\", value: \"large\" },\n  ],\n  btnShapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Circle\", value: \"circle\" },\n  ],\n  avatarShapes = [\n    { label: \"Square\", value: \"square\" },\n    { label: \"Circle\", value: \"circle\" },\n  ];\nexport default function App() {\n  const [animated, setAnimated] = useState(false),\n    [block, setBlock] = useState(false),\n    [size, setSize] = useState<SizeType | \"default\">(\"default\"),\n    [btnShape, setBtnShape] = useState<ShapeType>(\"round\"),\n    [avatarShape, setAvatarShape] = useState<ShapeType>(\"square\"),\n    [radius, setRadius] = useState(10),\n    [imgSize, setImgSize] = useState<number[]>([196, 96]);\n  return (\n    <>\n      <Space size={15}>\n        <Checkbox\n          checked={animated}\n          onChange={(event) => setAnimated(event.checked)}\n          label=\"Animated\"\n        />\n        <Checkbox\n          checked={block}\n          onChange={(event) => setBlock(event.checked)}\n          label=\"Button block\"\n        />\n        Size: <RadioGroup options={sizes} value={size} onChange={setSize} type=\"button\" />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Button Shape:{\" \"}\n        <RadioGroup options={btnShapes} value={btnShape} onChange={setBtnShape} type=\"button\" />\n        Avatar Shape:{\" \"}\n        <RadioGroup\n          options={avatarShapes}\n          value={avatarShape}\n          onChange={setAvatarShape}\n          type=\"button\"\n        />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Image radius:{\" \"}\n        <Slider value={radius} onChange={(v) => setRadius(v as number)} style={{ width: 300 }} />\n      </Space>\n      <br />\n      <Space size={15}>\n        Image Size:{\" \"}\n        <Slider\n          value={imgSize}\n          onChange={(v) => setImgSize(v as number[])}\n          range\n          min={96}\n          max={320}\n          style={{ width: 300 }}\n        />\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <SkeletonButton animated={animated} size={size} shape={btnShape} />\n        <SkeletonAvatar animated={animated} size={size} shape={avatarShape} />\n        <SkeletonText animated={animated} size={size} style={{ width: 200 }} />\n      </Space>\n      <br />\n      <br />\n      <SkeletonButton animated={animated} size={size} shape={btnShape} block={block} />\n      <br />\n      <br />\n      <SkeletonImage animated={animated} radius={radius} size={imgSize} />\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/custom.tsx",
          "title": "自定义",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Card, SkeletonImage, SkeletonText } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      {[1, 2, 3].map((x) => (\n        <Card\n          key={x}\n          title=\"A Poem\"\n          style={{ width: 200, marginBottom: 10, display: \"inline-block\", marginRight: 20 }}\n        >\n          <SkeletonImage animated loading={loading} radius={8} style={{ width: 166, height: 100 }}>\n            <div\n              style={{\n                height: 100,\n                width: 166,\n                borderRadius: 8,\n                background:\n                  'url(\"https://cdn.chuchur.com/upload/demo/test_300.jpg\") no-repeat center/cover',\n              }}\n            />\n          </SkeletonImage>\n          <SkeletonText\n            animated\n            loading={loading}\n            size=\"small\"\n            style={{ minWidth: 80, margin: \"8px 0\" }}\n          >\n            <p>Tony Stack</p>\n          </SkeletonText>\n          <SkeletonText animated loading={loading} size=\"small\" style={{ minWidth: 130 }}>\n            <span style={{ fontSize: 13, color: \"#999\" }}>I am Iron Man.</span>\n          </SkeletonText>\n        </Card>\n      ))}\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "SkeletonText",
      "import": "import { SkeletonText } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/skeleton",
      "props": [
        {
          "name": "animated",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否展示动画效果",
          "descriptionEn": "Whether to show animation effect"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "为 true 时，显示占位图。反之则直接展示子组件",
          "descriptionEn": "When true, show placeholder. Otherwise directly display child components"
        },
        {
          "name": "delay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "500",
          "descriptionZh": "延迟显示骨架，单位毫秒",
          "descriptionEn": "Delay showing the skeleton, in milliseconds"
        },
        {
          "name": "width",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本宽度",
          "descriptionEn": "Text width"
        },
        {
          "name": "size",
          "type": "\"default\" | SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "default",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "图片的宽(高)度",
          "descriptionEn": "Image width (height)"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "骨架不再显示时展示的实际内容；加载期间展示骨架占位。",
          "descriptionEn": "Actual content displayed after the skeleton is hidden; loading displays the skeleton placeholder."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/skeleton/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton />;\n}"
        },
        {
          "id": "components/skeleton/demo/group.tsx",
          "title": "组合",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton avatar rows={4} />;\n}"
        },
        {
          "id": "components/skeleton/demo/animated.tsx",
          "title": "动画效果",
          "source": "import { Skeleton } from \"react-kui\";\nexport default function App() {\n  return <Skeleton animated />;\n}"
        },
        {
          "id": "components/skeleton/demo/child.tsx",
          "title": "子组件",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Skeleton } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Skeleton loading={loading} rows={2} animated>\n        <div>\n          <h4 style={{ fontWeight: \"bold\", marginBottom: 15 }}>\n            KUI is a desktop UI component library based on React\n          </h4>\n          <p>\n            Dozens of useful and aesthetically pleasing components, a very user-friendly API\n            suitable for developers of any skill level, comprehensive documentation, and support for\n            modern React applications.\n          </p>\n        </div>\n      </Skeleton>\n      <br />\n      <br />\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/list.tsx",
          "title": "列表",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Avatar, Button, Card, CardMeta, Space, Skeleton } from \"react-kui\";\nconst item = {\n  name: \"KUI Design\",\n  intro: \"KUI is a desktop UI component library based on React\",\n  desc: \"Dozens of useful and aesthetically pleasing components, a very user-friendly API suitable for developers of any skill level, and comprehensive documentation.\",\n};\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      <Space vertical block style={{ fontSize: 13 }}>\n        {[1, 2, 3].map((i) => (\n          <Card\n            key={i}\n            style={{ padding: \"15px 20px\", borderBottom: \"1px solid var(--kui-color-border)\" }}\n          >\n            <Skeleton avatar loading={loading} rows={2} animated>\n              <CardMeta\n                avatar={<Avatar size=\"large\">{item.name}</Avatar>}\n                title={item.name}\n                description={item.intro}\n              />\n              <p style={{ margin: 0, marginTop: 15, lineHeight: \"25px\" }}>{item.desc}</p>\n            </Skeleton>\n          </Card>\n        ))}\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/items.tsx",
          "title": "按钮/头像/图像",
          "source": "import { useState } from \"react\";\nimport {\n  Checkbox,\n  type ShapeType,\n  type SizeType,\n  RadioGroup,\n  Slider,\n  Space,\n  SkeletonAvatar,\n  SkeletonButton,\n  SkeletonImage,\n  SkeletonText,\n} from \"react-kui\";\nconst sizes = [\n    { label: \"Small\", value: \"small\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Large\", value: \"large\" },\n  ],\n  btnShapes = [\n    { label: \"Round\", value: \"round\" },\n    { label: \"Default\", value: \"default\" },\n    { label: \"Circle\", value: \"circle\" },\n  ],\n  avatarShapes = [\n    { label: \"Square\", value: \"square\" },\n    { label: \"Circle\", value: \"circle\" },\n  ];\nexport default function App() {\n  const [animated, setAnimated] = useState(false),\n    [block, setBlock] = useState(false),\n    [size, setSize] = useState<SizeType | \"default\">(\"default\"),\n    [btnShape, setBtnShape] = useState<ShapeType>(\"round\"),\n    [avatarShape, setAvatarShape] = useState<ShapeType>(\"square\"),\n    [radius, setRadius] = useState(10),\n    [imgSize, setImgSize] = useState<number[]>([196, 96]);\n  return (\n    <>\n      <Space size={15}>\n        <Checkbox\n          checked={animated}\n          onChange={(event) => setAnimated(event.checked)}\n          label=\"Animated\"\n        />\n        <Checkbox\n          checked={block}\n          onChange={(event) => setBlock(event.checked)}\n          label=\"Button block\"\n        />\n        Size: <RadioGroup options={sizes} value={size} onChange={setSize} type=\"button\" />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Button Shape:{\" \"}\n        <RadioGroup options={btnShapes} value={btnShape} onChange={setBtnShape} type=\"button\" />\n        Avatar Shape:{\" \"}\n        <RadioGroup\n          options={avatarShapes}\n          value={avatarShape}\n          onChange={setAvatarShape}\n          type=\"button\"\n        />\n      </Space>\n      <br />\n      <br />\n      <Space size={15}>\n        Image radius:{\" \"}\n        <Slider value={radius} onChange={(v) => setRadius(v as number)} style={{ width: 300 }} />\n      </Space>\n      <br />\n      <Space size={15}>\n        Image Size:{\" \"}\n        <Slider\n          value={imgSize}\n          onChange={(v) => setImgSize(v as number[])}\n          range\n          min={96}\n          max={320}\n          style={{ width: 300 }}\n        />\n      </Space>\n      <br />\n      <br />\n      <Space>\n        <SkeletonButton animated={animated} size={size} shape={btnShape} />\n        <SkeletonAvatar animated={animated} size={size} shape={avatarShape} />\n        <SkeletonText animated={animated} size={size} style={{ width: 200 }} />\n      </Space>\n      <br />\n      <br />\n      <SkeletonButton animated={animated} size={size} shape={btnShape} block={block} />\n      <br />\n      <br />\n      <SkeletonImage animated={animated} radius={radius} size={imgSize} />\n    </>\n  );\n}"
        },
        {
          "id": "components/skeleton/demo/custom.tsx",
          "title": "自定义",
          "source": "import { useEffect, useRef, useState } from \"react\";\nimport { Button, Card, SkeletonImage, SkeletonText } from \"react-kui\";\nexport default function App() {\n  const [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  useEffect(\n    () => () => {\n      if (timer.current) clearTimeout(timer.current);\n    },\n    [],\n  );\n  const reload = () => {\n    setLoading(true);\n    timer.current = setTimeout(() => setLoading(false), 3000);\n  };\n  return (\n    <>\n      <Button disabled={loading} onClick={reload}>\n        Reload\n      </Button>\n      <br />\n      <br />\n      {[1, 2, 3].map((x) => (\n        <Card\n          key={x}\n          title=\"A Poem\"\n          style={{ width: 200, marginBottom: 10, display: \"inline-block\", marginRight: 20 }}\n        >\n          <SkeletonImage animated loading={loading} radius={8} style={{ width: 166, height: 100 }}>\n            <div\n              style={{\n                height: 100,\n                width: 166,\n                borderRadius: 8,\n                background:\n                  'url(\"https://cdn.chuchur.com/upload/demo/test_300.jpg\") no-repeat center/cover',\n              }}\n            />\n          </SkeletonImage>\n          <SkeletonText\n            animated\n            loading={loading}\n            size=\"small\"\n            style={{ minWidth: 80, margin: \"8px 0\" }}\n          >\n            <p>Tony Stack</p>\n          </SkeletonText>\n          <SkeletonText animated loading={loading} size=\"small\" style={{ minWidth: 130 }}>\n            <span style={{ fontSize: 13, color: \"#999\" }}>I am Iron Man.</span>\n          </SkeletonText>\n        </Card>\n      ))}\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "StatCard",
      "import": "import { StatCard } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/stat-card",
      "props": [
        {
          "name": "title",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "卡片标题；传 `false`、空字符串等空内容时不渲染标题行",
          "descriptionEn": "Card title; empty content such as `false` or an empty string renders no title row"
        },
        {
          "name": "precision",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "数值精度",
          "descriptionEn": "Numerical precision"
        },
        {
          "name": "items",
          "type": "StatNumberItem[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "展示的数据",
          "descriptionEn": "Data to display"
        },
        {
          "name": "separator",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "分隔符",
          "descriptionEn": "Separator"
        },
        {
          "name": "statNumberType",
          "type": "\"rollup\" | \"countup\" | undefined",
          "required": false,
          "enumValues": [
            "rollup",
            "countup"
          ],
          "boolean": false,
          "defaultExpression": "\"countup\"",
          "descriptionZh": "数值变化类型",
          "descriptionEn": "Numerical change type"
        },
        {
          "name": "reverse",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "数值/数值描述是否反相排列",
          "descriptionEn": "Whether to reverse number/number description arrangement"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示边框",
          "descriptionEn": "Show border or not"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"fill\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "卡片形状，只支持 `square` / `round`；圆形会裁掉内容，继承到 `circle` 时按 `round` 处理",
          "descriptionEn": "Card shape; only `square` / `round` apply — a circle would clip the content, so an inherited `circle` falls back to `round`"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"medium\"",
          "descriptionZh": "尺寸",
          "descriptionEn": "Size"
        },
        {
          "name": "prefix",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "数值的前置内容",
          "descriptionEn": "Prefix content of numerical value"
        },
        {
          "name": "suffix",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "数值的后置内容",
          "descriptionEn": "Suffix content of numerical value"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "title",
        "prefix",
        "suffix"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/stat-card/demo/card.tsx",
          "title": "卡片展示",
          "source": "import { Heart, Star } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Checkbox,\n  Grid,\n  GridItem,\n  Icon,\n  Segmented,\n  Space,\n  StatCard,\n  type SizeType,\n  type StatNumberItem,\n  type StatCardProps,\n} from \"react-kui\";\nconst sizes = [\"small\", \"medium\", \"large\"].map((value) => ({ value, label: value }));\nconst themeOptions = [\"outline\", \"fill\", \"plain\", \"solid\", \"dashed\"].map((value) => ({ value, label: value }));\nconst items = [\n  { value: 5872, desc: \"Number of orders\" },\n  { value: 9873672, desc: \"Total Order Amount\", prefix: \"￥\" },\n];\nconst items1 = [\n  { value: 5872, desc: \"Alipay Revenue\", prefix: \"$\", precision: 2 },\n  { value: 9873672, desc: \"WeChat Revenue\", prefix: \"￥\", precision: 2 },\n];\nconst items2: StatNumberItem[] = [\n  { value: 5872, desc: \"Number of likes\", prefix: <Icon type={Heart} /> },\n  { value: 9873672, desc: \"Number of Favorites\", prefix: <Icon type={Star} /> },\n];\nexport default function App() {\n  const [showTitle, setShowTitle] = useState(true),\n    [theme, setTheme] = useState<NonNullable<StatCardProps[\"theme\"]>>(\"fill\"),\n    [reverse, setReverse] = useState(false),\n    [size, setSize] = useState<SizeType>(\"medium\");\n  const check =\n    (setter: (value: boolean) => void) =>\n    ({ checked }: { checked: boolean }) =>\n      setter(checked);\n  return (\n    <Space vertical block>\n      <Space>\n        <Checkbox checked={showTitle} onChange={check(setShowTitle)}>\n          Show Title\n        </Checkbox>\n        <Checkbox checked={reverse} onChange={check(setReverse)}>\n          Reverse\n        </Checkbox>\n        <Segmented value={size} options={sizes} onChange={(value) => setSize(value as SizeType)} />\n        <Segmented\n          value={theme}\n          options={themeOptions}\n          onChange={(value) => setTheme(value as typeof theme)}\n        />\n      </Space>\n      <Grid cols={{ xs: 1, sm: 2, md: 3 }} xGap={16} yGap={16}>\n        <GridItem>\n          <StatCard\n            title={showTitle ? \"Today's Orders\" : undefined}\n            reverse={reverse}\n            items={items}\n            theme={theme}\n            size={size}\n          />\n        </GridItem>\n        <GridItem>\n          <StatCard\n            statNumberType=\"rollup\"\n            title={showTitle ? \"Today's income\" : undefined}\n            items={items1}\n            theme={theme}\n            reverse={reverse}\n            size={size}\n          />\n        </GridItem>\n        <GridItem span={{ xs: 1, sm: 2, md: 1 }}>\n          <StatCard\n            reverse={reverse}\n            statNumberType=\"rollup\"\n            title={showTitle ? \"Media data\" : undefined}\n            items={items2}\n            theme={theme}\n            size={size}\n          />\n        </GridItem>\n      </Grid>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/stat-card/demo/trend.tsx",
          "title": "趋势信息",
          "source": "import { Grid, GridItem, StatCard, type StatNumberItem } from \"react-kui\";\n\nconst cards: Array<{ title: string; data: StatNumberItem }> = [\n  {\n    title: \"请求数\",\n    data: {\n      value: 12840,\n      separator: \",\",\n      desc: \"本月累计\",\n      trend: \"+18.2% 较上月\",\n      trendStatus: \"success\",\n    },\n  },\n  {\n    title: \"转化率\",\n    data: {\n      value: 8.6,\n      precision: 1,\n      suffix: \"%\",\n      desc: \"本周平均\",\n      trend: \"接近目标值\",\n      trendStatus: \"warning\",\n    },\n  },\n  {\n    title: \"退款率\",\n    data: {\n      value: 2.4,\n      precision: 1,\n      suffix: \"%\",\n      desc: \"近 30 天\",\n      trend: \"+0.6% 需要关注\",\n      trendStatus: \"danger\",\n    },\n  },\n  {\n    title: \"在线用户\",\n    data: { value: 3268, separator: \",\", desc: \"当前数据\" },\n  },\n];\n\nexport default function App() {\n  return (\n    <Grid cols={{ xs: 1, sm: 2, md: 4 }} xGap={16} yGap={16}>\n      {cards.map((item) => (\n        <GridItem key={item.title}>\n          <StatCard title={item.title} items={[item.data]} reverse bordered />\n        </GridItem>\n      ))}\n    </Grid>\n  );\n}"
        },
        {
          "id": "components/stat-card/demo/with-card.tsx",
          "title": "组合展示",
          "source": "import { ArrowDown, ArrowUp } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Card, Icon, Space, StatNumber } from \"react-kui\";\nconst initialValue = Math.random() * 100000;\n\nexport default function App() {\n  const [value, setValue] = useState(initialValue);\n  return (\n    <Space vertical className=\"demo-view-fill\">\n      <Card>\n        <StatNumber value={value} prefix=\"$\" suffix=\"%\" style={{ fontSize: \"2em\" }} />\n      </Card>\n      <Card title=\"Today's Trends\">\n        <StatNumber\n          value={value}\n          suffix=\"%\"\n          style={{ fontSize: \"2em\", color: \"green\" }}\n          prefix={<Icon type={ArrowUp} />}\n        />\n      </Card>\n      <Card title=\"Yesterday's Trend\">\n        <StatNumber\n          value={value}\n          suffix=\"%\"\n          style={{ fontSize: \"2em\", color: \"red\" }}\n          type=\"rollup\"\n          prefix={<Icon type={ArrowDown} />}\n        />\n      </Card>\n      <Button onClick={() => setValue(Math.random() * 100000)}>change</Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/stat-card/demo/appearance.tsx",
          "title": "外观",
          "source": "import { StatCard, Grid, type StatNumberItem, type SurfaceThemeType } from \"react-kui\";\n\n// The stat card takes the same five tiers as the other cards and starts on `fill`. `solid` is the tier worth\n// looking at here: the numbers and their captions both go to the light ink of the plate, and `plain` leaves\n// them with no box at all. One short item list, so the only thing moving down the row is the surface.\nconst tiers: SurfaceThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\"];\nconst items: StatNumberItem[] = [{ value: 5872, desc: \"订单数\" }];\n\nexport default function App() {\n  return (\n    <Grid cols={5} xGap={12} yGap={12}>\n      {tiers.map((tier) => (\n        <StatCard key={tier} title={`theme: ${tier}`} items={items} theme={tier} size=\"small\" />\n      ))}\n    </Grid>\n  );\n}"
        }
      ]
    },
    {
      "name": "StatNumber",
      "import": "import { StatNumber } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/stat-number",
      "props": [
        {
          "name": "value",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "数值",
          "descriptionEn": "Numerical value"
        },
        {
          "name": "separator",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "分隔符",
          "descriptionEn": "Separator"
        },
        {
          "name": "duration",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "数值动态展示时间(秒)",
          "descriptionEn": "Numerical dynamic display time (seconds)"
        },
        {
          "name": "precision",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "数值精度",
          "descriptionEn": "Numerical precision"
        },
        {
          "name": "type",
          "type": "\"rollup\" | \"countup\" | undefined",
          "required": false,
          "enumValues": [
            "rollup",
            "countup"
          ],
          "boolean": false,
          "defaultExpression": "\"countup\"",
          "descriptionZh": "数值变化类型",
          "descriptionEn": "Numerical change type"
        },
        {
          "name": "prefix",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "数值的前置内容",
          "descriptionEn": "Prefix content of numerical value"
        },
        {
          "name": "suffix",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "数值的后置内容",
          "descriptionEn": "Suffix content of numerical value"
        },
        {
          "name": "autoAnimate",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "当目标可见时触发动画",
          "descriptionEn": "Trigger animation when target becomes visible"
        },
        {
          "name": "autoAnimateOnce",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "自动动画触发器仅运行一次动画",
          "descriptionEn": "Run animation only once for auto-animate triggers"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "prefix",
        "suffix"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/stat-number/demo/basic.tsx",
          "title": "动画与格式化",
          "source": "import { useState } from \"react\";\nimport { Button, Space, StatNumber } from \"react-kui\";\nconst initValue = 12345;\nexport default function App() {\n  const [value, setValue] = useState(initValue);\n  return (\n    <Space vertical>\n      <Space wrap>\n        <Button onClick={() => setValue(12345)} size=\"small\">\n          12,345\n        </Button>\n        <Button onClick={() => setValue(54321)} size=\"small\">\n          54,321\n        </Button>\n        <Button onClick={() => setValue((current) => current - 100)} size=\"small\">\n          -100\n        </Button>\n        <Button onClick={() => setValue((current) => current + 100)} size=\"small\">\n          +100\n        </Button>\n        <Button onClick={() => setValue(Math.random() * 10000000)} size=\"small\">\n          change\n        </Button>\n      </Space>\n      <code>default:</code>\n      <StatNumber value={value} />\n      <code>type=`rollup`:</code>\n      <StatNumber value={value} type=\"rollup\" />\n      <code>precision=`3`:</code>\n      <StatNumber value={value} precision={3} />\n      <StatNumber value={value} type=\"rollup\" precision={3} />\n      <code>prefix & suffix:</code>\n      <StatNumber value={value} prefix=\"$\" />\n      <StatNumber value={value} type=\"rollup\" suffix=\"元\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/stat-number/demo/duration.tsx",
          "title": "动画时长",
          "source": "import { useState } from \"react\";\nimport { Button, Space, StatNumber } from \"react-kui\";\n\nexport default function App() {\n  const [value, setValue] = useState(12345);\n  return (\n    <Space vertical>\n      <Button onClick={() => setValue((current) => (current === 12345 ? 54321 : 12345))}>\n        12,345 ↔ 54,321\n      </Button>\n      {[0, 0.6, 1.2, 2].map((duration) => (\n        <Space key={duration}>\n          <code>{duration}s</code>\n          <StatNumber value={value} type=\"rollup\" duration={duration} autoAnimate={false} />\n        </Space>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Slider",
      "import": "import { Slider } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/slider",
      "props": [
        {
          "name": "value",
          "type": "number | number[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "的当前值",
          "descriptionEn": "current value"
        },
        {
          "name": "min",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "最小值",
          "descriptionEn": "Minimum value"
        },
        {
          "name": "max",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "100",
          "descriptionZh": "最大值",
          "descriptionEn": "Maximum value"
        },
        {
          "name": "step",
          "type": "number | null | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "1",
          "descriptionZh": "间距大小 , 步长，取值必须大于 0，并且可被 (max - min) 整除",
          "descriptionEn": "Step size, must be greater than 0 and divisible by (max - min)"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "滑块是否禁用",
          "descriptionEn": "Whether the slider is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "滑块是否只读",
          "descriptionEn": "Whether the slider is read-only"
        },
        {
          "name": "vertical",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否设置方向为垂直",
          "descriptionEn": "Whether to set direction to vertical"
        },
        {
          "name": "reverse",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否倒序排列",
          "descriptionEn": "Sort in reverse order"
        },
        {
          "name": "range",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否支持两边同时可滑动",
          "descriptionEn": "Whether to support sliding on both sides simultaneously"
        },
        {
          "name": "marks",
          "type": "Record<number, string> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "刻度，key 的类型必须为 number 且取值在闭区间 [min, max] 内",
          "descriptionEn": "Scale marks, key type must be number and value in closed interval [min, max]"
        },
        {
          "name": "size",
          "type": "number | \"small\" | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件显示的尺寸大小",
          "descriptionEn": "The size of Slider"
        },
        {
          "name": "included",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "marks 不为空对象时有效，值为 true 时表示值为包含关系，false 表示并列",
          "descriptionEn": "Effective when marks is not empty object, true means inclusive relationship, false means parallel"
        },
        {
          "name": "tipFormatter",
          "type": "((value: number) => string | number) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "设置Tooltip的展示格式，默认显示当前选值",
          "descriptionEn": "Set Tooltip display format, defaults to current value"
        },
        {
          "name": "tooltipVisible",
          "type": "boolean | null | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "null",
          "descriptionZh": "值为true时，Tooltip 将会始终显示；否则始终不显示，哪怕在拖拽及移入时。",
          "descriptionEn": "When true, Tooltip will always display; otherwise never display, even when dragging and hovering"
        },
        {
          "name": "onChange",
          "type": "((value: number | number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当 Slider 的值发生改变时，会触发 change 事件，并把改变后的值作为参数传入。",
          "descriptionEn": "Triggered when Slider value changes, passes the changed value as parameter"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: number | number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当 Slider 的值发生改变时，会触发 change 事件，并把改变后的值作为参数传入。",
          "descriptionEn": "Triggered when Slider value changes, passes the changed value as parameter"
        }
      ],
      "renderProps": [
        "tipFormatter"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/slider/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, Switch, Slider } from \"react-kui\";\nexport default function App() {\n  const [v, setV] = useState(10),\n    [v1, setV1] = useState(30),\n    [v2, setV2] = useState<number[]>([30, 50]),\n    [disabled, setDisabled] = useState(false);\n  return (\n    <Space style={{ maxWidth: 520 }} vertical block>\n      <code>\n        Disabled: <Switch checked={disabled} onChange={(value) => setDisabled(Boolean(value))} />\n      </code>\n      <code>value: {v}</code>\n      <Slider value={v} onChange={(x) => setV(x as number)} step={1} disabled={disabled} />\n      <code>value: {v1}</code>\n      <Slider\n        value={v1}\n        onChange={(x) => setV1(x as number)}\n        step={10}\n        disabled={disabled}\n        min={20}\n      />\n      <code>value: {v2.join(\", \")}</code>\n      <Slider\n        value={v2}\n        onChange={(x) => setV2(x as number[])}\n        range\n        disabled={disabled}\n        min={10}\n        max={80}\n      />\n      <Slider\n        marks={{ 0: \"0°C\", 25: \"25°C\", 36: \"36°C\", 100: \"100°C\" }}\n        step={null}\n        disabled={disabled}\n        value={25}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/slider/demo/size.tsx",
          "title": "尺寸/自定义",
          "source": "import { useState } from \"react\";\nimport { Space, Switch, Slider } from \"react-kui\";\nexport default function App() {\n  const [disabled, setDisabled] = useState(false),\n    [v1, setV1] = useState(80),\n    [v2, setV2] = useState<number[]>([30, 50]);\n  return (\n    <>\n      <Space style={{ maxWidth: 520 }} vertical block>\n        <code>\n          Disabled: <Switch checked={disabled} onChange={(value) => setDisabled(Boolean(value))} />\n        </code>\n        <Slider\n          value={v1}\n          onChange={(v) => setV1(v as number)}\n          step={10}\n          disabled={disabled}\n          min={20}\n          size=\"small\"\n        />\n        <Slider\n          value={v2}\n          onChange={(v) => setV2(v as number[])}\n          range\n          disabled={disabled}\n          min={10}\n          max={80}\n          size=\"small\"\n        />\n        <Slider\n          value={v1}\n          onChange={(v) => setV1(v as number)}\n          step={10}\n          disabled={disabled}\n          min={20}\n          size=\"small\"\n          className=\"slider-demo-custom\"\n        />\n        <Slider\n          value={v2}\n          onChange={(v) => setV2(v as number[])}\n          range\n          disabled={disabled}\n          min={10}\n          max={80}\n          size=\"small\"\n          className=\"slider-demo-custom\"\n        />\n        <Slider\n          marks={{ 0: \"0°C\", 25: \"25°C\", 36: \"36°C\", 100: \"100°C\" }}\n          step={null}\n          disabled={disabled}\n          size=\"small\"\n          value={25}\n        />\n      </Space>\n      <style>{`\n      .slider-demo-custom .k-slider-track {\n        background: linear-gradient(270deg, green 5.56%, orange);\n      }\n    `}</style>\n    </>\n  );\n}"
        },
        {
          "id": "components/slider/demo/with-number.tsx",
          "title": "受控",
          "source": "import { useState } from \"react\";\nimport { InputNumber, Col, Row, Slider } from \"react-kui\";\nexport default function App() {\n  const [n1, setN1] = useState(1),\n    [n2, setN2] = useState(0);\n  return (\n    <div>\n      <Row gutter={8}>\n        <Col span={12}>\n          <Slider value={n1} onChange={(v) => setN1(v as number)} min={1} max={20} />\n        </Col>\n        <Col span={7}>\n          <InputNumber value={n1} onChange={(value) => setN1(value ?? 1)} min={1} max={20} />\n        </Col>\n      </Row>\n      <Row gutter={8}>\n        <Col span={12}>\n          <Slider value={n2} onChange={(v) => setN2(v as number)} min={0} max={1} step={0.01} />\n        </Col>\n        <Col span={7}>\n          <InputNumber\n            value={n2}\n            onChange={(value) => setN2(value ?? 0)}\n            min={0}\n            max={1}\n            step={0.01}\n          />\n        </Col>\n      </Row>\n    </div>\n  );\n}"
        },
        {
          "id": "components/slider/demo/formatter.tsx",
          "title": "自定义提示",
          "source": "import { Space, Slider } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space style={{ maxWidth: 520 }} vertical block>\n      <code>format %</code>\n      <Slider tipFormatter={(v) => `${v}%`} value={20} />\n      <code>hide tooltip</code>\n      <Slider tooltipVisible={false} value={20} />\n      <code>show tooltip forever</code>\n      <Slider value={70} tooltipVisible />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/slider/demo/marks.tsx",
          "title": "带标签的",
          "source": "import { Space, Slider } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space style={{ maxWidth: 520 }} vertical block>\n      <code>step=10</code>\n      <Slider\n        step={10}\n        marks={{ 10: \"10\", 20: \"20\", 30: \"30\", 40: \"40\", 50: \"50\", 80: \"80\" }}\n        value={[10, 80]}\n        max={80}\n        min={10}\n        range\n      />\n      <br />\n      <code>step=0.1</code>\n      <Slider\n        step={0.1}\n        marks={{ 0.1: \"0.1\", 0.2: \"0.2\", 0.3: \"0.3\", 0.4: \"0.4\", 0.5: \"0.5\" }}\n        min={0}\n        max={1}\n        value={[0.1, 0.5]}\n        range\n      />\n      <br />\n      <code>Marks & step=10</code>\n      <Slider marks={{ 25: \"25°C\", 36: \"36°C\" }} step={10} value={[0, 100]} range />\n      <br />\n      <code>step=null</code>\n      <Slider\n        marks={{ 0: \"0°C\", 25: \"25°C\", 36: \"36°C\", 100: \"100°C\" }}\n        step={null}\n        value={[0, 100]}\n        range\n      />\n      <Slider marks={{ 0: \"0°C\", 25: \"25°C\", 36: \"36°C\", 100: \"100°C\" }} step={null} value={25} />\n      <br />\n      <code>Included</code>\n      <Slider marks={{ 20: \"20°C\", 40: \"40°C\" }} included={false} value={[0, 100]} range />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/slider/demo/vertical.tsx",
          "title": "垂直",
          "source": "import { Slider, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space style={{ height: 300 }} block size={35}>\n      <Slider style={{ height: 300 }} vertical value={35} size=\"small\" />\n      <Slider style={{ height: 300 }} vertical reverse value={35} />\n      <Slider style={{ height: 300 }} vertical range value={[20, 60]} />\n      <Slider\n        style={{ height: 300 }}\n        vertical\n        range\n        marks={{ 20: \"20°C\", 40: \"40°C\" }}\n        step={10}\n        value={[20, 60]}\n      />\n      <Slider\n        style={{ height: 300 }}\n        vertical\n        reverse\n        size=\"small\"\n        range\n        marks={{ 0: \"0°C\", 25: \"25°C\", 36: \"36°C\", 100: \"100°C\" }}\n        step={10}\n        value={[20, 60]}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/slider/demo/reverse.tsx",
          "title": "反向",
          "source": "import { useState } from \"react\";\nimport { Space, Switch, Slider } from \"react-kui\";\nexport default function App() {\n  const [v1, setV1] = useState(30),\n    [v2, setV2] = useState<number[]>([35, 60]),\n    [reverse, setReverse] = useState(true);\n  return (\n    <Space style={{ maxWidth: 520 }} vertical block>\n      <code>\n        Reversed:{\" \"}\n        <Switch checked={reverse} onChange={(value) => setReverse(Boolean(value))} size=\"small\" />\n      </code>\n      <Slider value={v1} onChange={(v) => setV1(v as number)} reverse={reverse} />\n      <Slider\n        value={v2}\n        onChange={(v) => setV2(v as number[])}\n        range\n        reverse={reverse}\n        marks={{ 40: \"40°C\", 50: \"50°C\" }}\n      />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Space",
      "import": "import { Space } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/space",
      "props": [
        {
          "name": "align",
          "type": "\"center\" | \"end\" | \"start\" | \"baseline\" | undefined",
          "required": false,
          "enumValues": [
            "center",
            "end",
            "start",
            "baseline"
          ],
          "boolean": false,
          "descriptionZh": "对齐方式",
          "descriptionEn": "Alignment method"
        },
        {
          "name": "vertical",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否垂直显示",
          "descriptionEn": "Whether to display vertically"
        },
        {
          "name": "direction",
          "type": "\"horizontal\" | \"vertical\" | undefined",
          "required": false,
          "enumValues": [
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "descriptionZh": "排列方向；设置后优先于 `vertical`",
          "descriptionEn": "Layout direction; takes priority over `vertical`"
        },
        {
          "name": "wrap",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否换行",
          "descriptionEn": "Whether to wrap"
        },
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否撑满父元素宽度",
          "descriptionEn": "Whether to fill the parent width"
        },
        {
          "name": "compact",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否使用紧凑模式",
          "descriptionEn": "Whether to use compact mode"
        },
        {
          "name": "size",
          "type": "number | SizeType | (string | number)[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "间距大小；数组依次表示水平、垂直间距",
          "descriptionEn": "Spacing; array values are horizontal and vertical gaps"
        },
        {
          "name": "split",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "相邻元素间的分隔内容",
          "descriptionEn": "Content rendered between adjacent children"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "按配置的间距和方向排列的内容；compact 时组合相邻控件。",
          "descriptionEn": "Content arranged with the configured spacing and direction; compact combines adjacent controls."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "split",
        "children"
      ],
      "behavior": {
        "rules": [
          "Use children and compact. Vertical compact layout supports Button groups. Use className, not class."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/space/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Search } from \"kui-icons\";\nimport { Button, Space, Tooltip } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space>\n      <Button>Button</Button>\n      <Button icon={Search}>Button</Button>\n      <Tooltip placement=\"top\" title={<p style={{ margin: 0 }}>I am space</p>}>\n        <Button>Space</Button>\n      </Tooltip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/space/demo/vertical.tsx",
          "title": "垂直间距",
          "source": "import { Heart } from \"kui-icons\";\nimport { Card, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space direction=\"vertical\">\n      <Card title=\"Card\" icon={Heart} style={{ width: 256 }}>\n        <p>card content</p>\n        <p>card content</p>\n      </Card>\n      <Card title=\"Card\" icon={Heart} style={{ width: 256 }}>\n        <p>card content</p>\n        <p>card content</p>\n      </Card>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/space/demo/size.tsx",
          "title": "间距大小",
          "source": "import { useState } from \"react\";\nimport { Button, Space, TabPanel, Tabs } from \"react-kui\";\n\nexport default function App() {\n  const [current, setCurrent] = useState(\"1\");\n  return (\n    <Tabs value={current} onChange={setCurrent} style={{ width: 350 }}>\n      <TabPanel key=\"1\" title=\"Small\">\n        <Space size=\"small\">\n          {Array.from({ length: 5 }, (_, index) => (\n            <Button key={index}>Small</Button>\n          ))}\n        </Space>\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Medium \">\n        <Space size=\"medium\">\n          {Array.from({ length: 5 }, (_, index) => (\n            <Button size=\"small\" key={index}>\n              Middle\n            </Button>\n          ))}\n        </Space>\n      </TabPanel>\n      <TabPanel key=\"3\" title=\"Large\">\n        <Space size=\"large\">\n          {Array.from({ length: 5 }, (_, index) => (\n            <Button size=\"small\" key={index}>\n              Large\n            </Button>\n          ))}\n        </Space>\n      </TabPanel>\n      <TabPanel key=\"4\" title=\"Wrap\">\n        <Space size={[8, 20]} wrap>\n          {Array.from({ length: 10 }, (_, index) => (\n            <Button size=\"small\" key={index}>\n              Wrap\n            </Button>\n          ))}\n        </Space>\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/space/demo/align.tsx",
          "title": "对齐",
          "source": "import { Button, Flex, Space, Tag } from \"react-kui\";\nexport default function App() {\n  return (\n    <Flex className=\"demo-space-align\" wrap size=\"small\">\n      {([\"start\", \"end\", \"center\", \"baseline\"] as const).map((align) => (\n        <Space\n          align={align}\n          key={align}\n          style={{\n            border: \"1px solid var(--kui-color-border)\",\n            width: \"calc(50% - 8px)\",\n            borderRadius: 4,\n          }}\n        >\n          <div\n            style={{\n              height: 60,\n              width: 80,\n              display: \"grid\",\n              placeItems: \"center\",\n              background: \"#92929252\",\n              border: \"1px solid var(--kui-color-border)\",\n            }}\n          >\n            block\n          </div>\n          <Button>button</Button>\n          <Tag color=\"blue\">{align}</Tag>\n        </Space>\n      ))}\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/space/demo/custom-size.tsx",
          "title": "自定义尺寸",
          "source": "import { useState } from \"react\";\nimport { Button, Slider, Space } from \"react-kui\";\n\nexport default function App() {\n  const [size, setSize] = useState(12);\n  return (\n    <div>\n      <Slider value={size} max={50} onChange={(value) => setSize(value as number)} />\n      <Space size={size}>\n        <Button type=\"primary\">Primary</Button>\n        <Button type=\"danger\">Danger</Button>\n        <Button>Default</Button>\n        <Button type=\"text\">Text</Button>\n        <Button type=\"link\">Link</Button>\n      </Space>\n    </div>\n  );\n}"
        },
        {
          "id": "components/space/demo/wrap.tsx",
          "title": "设置换行",
          "source": "import { Button, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space size={[8, 20]} wrap>\n      {Array.from({ length: 25 }, (_, index) => (\n        <Button size=\"small\" key={index}>\n          Wrap\n        </Button>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/space/demo/split.tsx",
          "title": "分隔符",
          "source": "import { Divider, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space split={<Divider type=\"vertical\" />}>\n      <a href=\"#\">Edit</a>\n      <a href=\"#\">Save</a>\n      <a href=\"#\">Delete</a>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/space/demo/compact.tsx",
          "title": "紧凑布局组合",
          "source": "import { Copy } from \"kui-icons\";\nimport {\n  Button,\n  ColorPicker,\n  DatePicker,\n  Input,\n  InputNumber,\n  Option,\n  Select,\n  Space,\n  Tooltip,\n  TreeSelect,\n} from \"react-kui\";\n\nconst treeData = [\n  {\n    title: \"fruit\",\n    key: \"1\",\n    children: [\n      { title: \"apple\", key: \"11\" },\n      { title: \"orange\", key: \"12\" },\n    ],\n  },\n];\n\nexport default function App() {\n  return (\n    <Space vertical size=\"medium\" block style={{ maxWidth: 520 }}>\n      <Space compact style={{ width: \"50%\" }}>\n        <Input style={{ width: \"50%\" }} value=\"027\" readOnly />\n        <Input style={{ width: \"50%\" }} value=\"28398987\" readOnly />\n      </Space>\n      <Space compact size=\"small\" block>\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" readOnly />\n        <Button type=\"primary\">Submit</Button>\n      </Space>\n      <Space compact block>\n        <Input style={{ width: \"calc(100% - 200px)\" }} value=\"https://k-ui.cn\" readOnly />\n        <Button type=\"primary\">Submit</Button>\n      </Space>\n      <Space compact block>\n        <Input\n          style={{ width: \"calc(100% - 200px)\" }}\n          value=\"git@github.com:smallerqiu/react-kui.git\"\n          readOnly\n        />\n        <Tooltip title=\"copy git url\">\n          <Button icon={Copy} />\n        </Tooltip>\n      </Space>\n      <Space compact block>\n        <Select value=\"Shenzheng\" clearable>\n          <Option value=\"Wuhan\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" readOnly />\n      </Space>\n      <Space compact block>\n        <Select clearable multiple value={[\"Wuhan001\"]} style={{ width: \"50%\" }}>\n          <Option value=\"Wuhan001\">Wuhan001</Option>\n          <Option value=\"Shenzheng\">Shenzheng</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"Nanshan District, Shenzheng\" readOnly />\n      </Space>\n      <Space compact block>\n        <Input style={{ width: \"30%\" }} value=\"0755\" readOnly />\n        <Input clearable style={{ width: \"50%\" }} value=\"28398987\" readOnly />\n        <Input style={{ width: \"20%\" }} value=\"+1\" readOnly />\n      </Space>\n      <Space compact block>\n        <Select value=\"Option1\">\n          <Option value=\"Option1\">Option1</Option>\n          <Option value=\"Option2\">Option2</Option>\n        </Select>\n        <Input style={{ width: \"50%\" }} value=\"input content\" readOnly />\n        <InputNumber value={12} />\n      </Space>\n      <Space compact block>\n        <Input style={{ width: \"50%\" }} value=\"input content\" readOnly />\n        <DatePicker />\n      </Space>\n      <Space compact block>\n        <DatePicker mode=\"dateRange\" />\n        <Input style={{ width: \"30%\" }} value=\"input content\" readOnly />\n        <Button type=\"primary\">Query</Button>\n      </Space>\n      <Space compact block>\n        <Input style={{ width: \"30%\" }} value=\"input content\" readOnly />\n        <DatePicker mode=\"dateRange\" />\n      </Space>\n      <Space compact>\n        <Select value=\"Option1-1\">\n          <Option value=\"Option1-1\">Option1-1</Option>\n          <Option value=\"Option1-2\">Option1-2</Option>\n        </Select>\n        <Select value=\"Option2-2\">\n          <Option value=\"Option2-1\">Option2-1</Option>\n          <Option value=\"Option2-2\">Option2-2</Option>\n        </Select>\n      </Space>\n      <Space compact>\n        <Select value=\"1\">\n          <Option value=\"1\">Between</Option>\n          <Option value=\"2\">Except</Option>\n        </Select>\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Minimum\" />\n        <Input\n          style={{ width: 30, borderLeft: 0, borderRight: 0, pointerEvents: \"none\" }}\n          placeholder=\"~\"\n          disabled\n        />\n        <Input style={{ width: 100, textAlign: \"center\" }} placeholder=\"Maximum\" />\n      </Space>\n      <Space compact>\n        <Select value=\"Option1-1\">\n          <Option value=\"Option1-1\">Option1-1</Option>\n          <Option value=\"Option1-2\">Option1-2</Option>\n        </Select>\n        <TreeSelect treeData={treeData} clearable style={{ width: 200 }} />\n      </Space>\n      <Space compact>\n        <Select value=\"Option1-1\">\n          <Option value=\"Option1-1\">Option1-1</Option>\n          <Option value=\"Option1-2\">Option1-2</Option>\n        </Select>\n        <ColorPicker />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/space/demo/compact-button.tsx",
          "title": "Button 紧凑布局",
          "source": "import { Download, Ellipsis, Gamepad2, Heart, Mail, Shirt } from \"kui-icons\";\nimport { Button, Dropdown, Menu, MenuItem, Space, Tooltip } from \"react-kui\";\nconst iconButtons = [Download, Gamepad2, Heart, Mail, Shirt];\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a href=\"javascript:;\">1st menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"javascript:;\">2nd menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"javascript:;\">3rd menu item</a>\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  return (\n    <Space vertical size=\"medium\">\n      <Space compact>\n        {iconButtons.map((icon, index) =>\n          index === 0 ? (\n            <Tooltip placement=\"top\" title=\"Copy\" key={index}>\n              <Button icon={icon} />\n            </Tooltip>\n          ) : (\n            <Button icon={icon} key={index} />\n          )\n        )}\n        <Dropdown placement=\"bottom-right\" overlay={overlay}>\n          <Button icon={Ellipsis} />\n        </Dropdown>\n      </Space>\n      <Space compact>\n        {Array.from({ length: 4 }, (_, index) => (\n          <Button type=\"primary\" key={index}>\n            Button{index + 1}\n          </Button>\n        ))}\n      </Space>\n      <Space compact>\n        <Button>Button1</Button>\n        <Button>Button2</Button>\n        <Button>Button3</Button>\n        <Button icon={Shirt} disabled />\n        <Button icon={Shirt} />\n        <Button>Button4</Button>\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/space/demo/compact-vertical.tsx",
          "title": "垂直方向紧凑布局",
          "source": "import { Download, Ellipsis, Gamepad2, Heart, Mail, Shirt } from \"kui-icons\";\nimport { Button, Dropdown, Menu, MenuItem, Space } from \"react-kui\";\nconst overlay = (\n  <Menu>\n    <MenuItem>\n      <a href=\"javascript:;\">1st menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"javascript:;\">2nd menu item</a>\n    </MenuItem>\n    <MenuItem>\n      <a href=\"javascript:;\">3rd menu item</a>\n    </MenuItem>\n  </Menu>\n);\nexport default function App() {\n  const icons = [Download, Gamepad2, Heart, Mail, Shirt];\n  return (\n    <Space size=\"medium\">\n      <Space compact vertical>\n        {icons.map((icon, index) => (\n          <Button icon={icon} key={index} />\n        ))}\n        <Dropdown placement=\"bottom-left\" overlay={overlay}>\n          <Button icon={Ellipsis} />\n        </Dropdown>\n      </Space>\n      <Space compact vertical>\n        {Array.from({ length: 4 }, (_, index) => (\n          <Button theme=\"dashed\" key={index}>\n            Button{index + 1}\n          </Button>\n        ))}\n      </Space>\n      <Space compact vertical>\n        {Array.from({ length: 4 }, (_, index) => (\n          <Button key={index}>Button{index + 1}</Button>\n        ))}\n      </Space>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Spin",
      "import": "import { Spin } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/spin",
      "props": [
        {
          "name": "spinning",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否处于加载状态",
          "descriptionEn": "Whether the component is loading"
        },
        {
          "name": "delay",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "延迟显示加载效果的时间（防止闪烁）",
          "descriptionEn": "Delay before showing to prevent flickering"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "加载效果的尺寸",
          "descriptionEn": "Loading indicator size"
        },
        {
          "name": "mode",
          "type": "SpinModeType | undefined",
          "required": false,
          "enumValues": [
            "flip",
            "zoom",
            "bounce",
            "rotate"
          ],
          "boolean": false,
          "defaultExpression": "\"rotate\"",
          "descriptionZh": "加载动画类型",
          "descriptionEn": "Loading animation type"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "加载状态覆盖的内容；省略内容时作为独立加载指示器使用。",
          "descriptionEn": "Content covered by the loading state; omit it for a standalone loading indicator."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/spin/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Space, Spin } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space>\n      <Spin size=\"large\" />\n      <Spin />\n      <Spin size=\"small\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/spin/demo/container.tsx",
          "title": "卡片加载中",
          "source": "import { useState } from \"react\";\nimport { Switch, Spin } from \"react-kui\";\nexport default function App() {\n  const [spinning, setSpinning] = useState(false);\n  return (\n    <div>\n      <Spin spinning={spinning}>\n        <div style={{ padding: \"100px 50px\" }}>\n          See the light through the mist.\n          <br />\n          See the light through the mist.\n        </div>\n      </Spin>\n      <br />\n      <br />\n      Loading state：\n      <Switch checked={spinning} onChange={(value) => setSpinning(Boolean(value))} />\n    </div>\n  );\n}"
        },
        {
          "id": "components/spin/demo/mode.tsx",
          "title": "Spin类型",
          "source": "import { useState } from \"react\";\nimport { Radio, RadioGroup, Switch, Spin, type SpinModeType } from \"react-kui\";\nexport default function App() {\n  const [spinning, setSpinning] = useState(false),\n    [mode, setMode] = useState<SpinModeType>(\"bounce\");\n  return (\n    <div>\n      <Spin spinning={spinning} mode={mode}>\n        <div style={{ padding: \"100px 50px\" }}>\n          See the light through the mist.\n          <br />\n          See the light through the mist.\n        </div>\n      </Spin>\n      <br />\n      <br />\n      Loading state：\n      <Switch checked={spinning} onChange={(value) => setSpinning(Boolean(value))} />\n      <br />\n      <br />\n      <RadioGroup value={mode} onChange={(value) => setMode(value as SpinModeType)}>\n        {([\"bounce\", \"flip\", \"rotate\", \"zoom\"] as SpinModeType[]).map((value) => (\n          <Radio key={value} value={value} label={value[0].toUpperCase() + value.slice(1)} />\n        ))}\n      </RadioGroup>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Step",
      "import": "import { Step } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/steps",
      "props": [
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": true,
          "boolean": false,
          "descriptionZh": "步骤标题",
          "descriptionEn": "Step title"
        },
        {
          "name": "description",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "补充描述",
          "descriptionEn": "Step details"
        },
        {
          "name": "icon",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义节点",
          "descriptionEn": "Custom marker"
        },
        {
          "name": "status",
          "type": "StepStatus | undefined",
          "required": false,
          "enumValues": [
            "wait",
            "error",
            "process",
            "finish"
          ],
          "boolean": false,
          "descriptionZh": "单步状态",
          "descriptionEn": "Step status"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "禁止点击",
          "descriptionEn": "Disable clicking"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [],
      "renderProps": [
        "title",
        "description",
        "icon"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Steps",
      "examples": [
        {
          "id": "components/steps/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { useState } from \"react\";\nimport { Steps } from \"react-kui\";\nexport default function App() {\n  const [current, setCurrent] = useState(1);\n  return (\n    <Steps\n      current={current}\n      onChange={setCurrent}\n      items={[\n        { title: \"填写信息\", description: \"完善基本资料\" },\n        { title: \"确认内容\", description: \"检查提交内容\" },\n        { title: \"完成\" },\n      ]}\n    />\n  );\n}"
        },
        {
          "id": "components/steps/demo/vertical.tsx",
          "title": "纵向步骤",
          "source": "import { Steps } from \"react-kui\";\nexport default function App() {\n  return (\n    <Steps\n      direction=\"vertical\"\n      current={1}\n      items={[\n        { title: \"创建任务\", description: \"填写任务名称与负责人\" },\n        { title: \"执行中\", description: \"团队正在处理任务\" },\n        { title: \"完成\", description: \"归档处理结果\" },\n      ]}\n    />\n  );\n}"
        },
        {
          "id": "components/steps/demo/status.tsx",
          "title": "步骤状态",
          "source": "import { Space, Steps } from \"react-kui\";\nconst items = [{ title: \"提交\" }, { title: \"校验失败\" }, { title: \"完成\" }];\nconst customStatusItems = [\n  { title: \"已完成\", status: \"finish\" as const },\n  { title: \"已跳过\", status: \"wait\" as const },\n  { title: \"处理中\", status: \"process\" as const },\n];\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Steps current={1} status=\"error\" items={items} />\n      <Steps current={2} items={customStatusItems} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/steps/demo/clickable.tsx",
          "title": "可点击步骤",
          "source": "import { Space, Steps } from \"react-kui\";\nimport { useState } from \"react\";\nexport default function App() {\n  const [current, setCurrent] = useState(0);\n  return (\n    <Space vertical block>\n      <Steps\n        current={current}\n        onChange={setCurrent}\n        items={[{ title: \"购物车\" }, { title: \"确认订单\" }, { title: \"支付\" }]}\n      />\n      <span>当前步骤：{current + 1}</span>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/steps/demo/icon.tsx",
          "title": "自定义图标",
          "source": "import { CircleCheck, CreditCard, User } from \"kui-icons\";\nimport { Icon, Steps } from \"react-kui\";\nexport default function App() {\n  return (\n    <Steps\n      current={1}\n      items={[\n        { title: \"账号信息\", icon: <Icon type={User} /> },\n        { title: \"支付方式\", icon: <Icon type={CreditCard} /> },\n        { title: \"完成\", icon: <Icon type={CircleCheck} /> },\n      ]}\n    />\n  );\n}"
        },
        {
          "id": "components/steps/demo/controlled.tsx",
          "title": "受控模式",
          "source": "import { Button, Space, Steps } from \"react-kui\";\nimport { useState } from \"react\";\nconst items = [{ title: \"填写信息\" }, { title: \"确认内容\" }, { title: \"完成\" }];\nexport default function App() {\n  const [current, setCurrent] = useState(0);\n  return (\n    <Space vertical block>\n      <Steps current={current} items={items} />\n      <Space>\n        <Button disabled={!current} onClick={() => setCurrent(current - 1)}>\n          上一步\n        </Button>\n        <Button\n          type=\"primary\"\n          disabled={current === items.length - 1}\n          onClick={() => setCurrent(current + 1)}\n        >\n          下一步\n        </Button>\n      </Space>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Steps",
      "import": "import { Steps } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/steps",
      "props": [
        {
          "name": "current",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "当前步骤",
          "descriptionEn": "Current step"
        },
        {
          "name": "direction",
          "type": "\"horizontal\" | \"vertical\" | undefined",
          "required": false,
          "enumValues": [
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "排列方向",
          "descriptionEn": "Direction"
        },
        {
          "name": "status",
          "type": "\"error\" | \"process\" | undefined",
          "required": false,
          "enumValues": [
            "error",
            "process"
          ],
          "boolean": false,
          "defaultExpression": "\"process\"",
          "descriptionZh": "当前状态",
          "descriptionEn": "Current status"
        },
        {
          "name": "items",
          "type": "StepProps[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "步骤数据",
          "descriptionEn": "Step data"
        },
        {
          "name": "onChange",
          "type": "((current: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击步骤",
          "descriptionEn": "Step click"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "步骤子节点；容器根据 current 等属性分配步骤序号与状态。",
          "descriptionEn": "Step children whose indices and statuses are assigned by the container using current and related props."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((current: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击步骤",
          "descriptionEn": "Step click"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [
        "Step"
      ],
      "examples": [
        {
          "id": "components/steps/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { useState } from \"react\";\nimport { Steps } from \"react-kui\";\nexport default function App() {\n  const [current, setCurrent] = useState(1);\n  return (\n    <Steps\n      current={current}\n      onChange={setCurrent}\n      items={[\n        { title: \"填写信息\", description: \"完善基本资料\" },\n        { title: \"确认内容\", description: \"检查提交内容\" },\n        { title: \"完成\" },\n      ]}\n    />\n  );\n}"
        },
        {
          "id": "components/steps/demo/vertical.tsx",
          "title": "纵向步骤",
          "source": "import { Steps } from \"react-kui\";\nexport default function App() {\n  return (\n    <Steps\n      direction=\"vertical\"\n      current={1}\n      items={[\n        { title: \"创建任务\", description: \"填写任务名称与负责人\" },\n        { title: \"执行中\", description: \"团队正在处理任务\" },\n        { title: \"完成\", description: \"归档处理结果\" },\n      ]}\n    />\n  );\n}"
        },
        {
          "id": "components/steps/demo/status.tsx",
          "title": "步骤状态",
          "source": "import { Space, Steps } from \"react-kui\";\nconst items = [{ title: \"提交\" }, { title: \"校验失败\" }, { title: \"完成\" }];\nconst customStatusItems = [\n  { title: \"已完成\", status: \"finish\" as const },\n  { title: \"已跳过\", status: \"wait\" as const },\n  { title: \"处理中\", status: \"process\" as const },\n];\nexport default function App() {\n  return (\n    <Space vertical block>\n      <Steps current={1} status=\"error\" items={items} />\n      <Steps current={2} items={customStatusItems} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/steps/demo/clickable.tsx",
          "title": "可点击步骤",
          "source": "import { Space, Steps } from \"react-kui\";\nimport { useState } from \"react\";\nexport default function App() {\n  const [current, setCurrent] = useState(0);\n  return (\n    <Space vertical block>\n      <Steps\n        current={current}\n        onChange={setCurrent}\n        items={[{ title: \"购物车\" }, { title: \"确认订单\" }, { title: \"支付\" }]}\n      />\n      <span>当前步骤：{current + 1}</span>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/steps/demo/icon.tsx",
          "title": "自定义图标",
          "source": "import { CircleCheck, CreditCard, User } from \"kui-icons\";\nimport { Icon, Steps } from \"react-kui\";\nexport default function App() {\n  return (\n    <Steps\n      current={1}\n      items={[\n        { title: \"账号信息\", icon: <Icon type={User} /> },\n        { title: \"支付方式\", icon: <Icon type={CreditCard} /> },\n        { title: \"完成\", icon: <Icon type={CircleCheck} /> },\n      ]}\n    />\n  );\n}"
        },
        {
          "id": "components/steps/demo/controlled.tsx",
          "title": "受控模式",
          "source": "import { Button, Space, Steps } from \"react-kui\";\nimport { useState } from \"react\";\nconst items = [{ title: \"填写信息\" }, { title: \"确认内容\" }, { title: \"完成\" }];\nexport default function App() {\n  const [current, setCurrent] = useState(0);\n  return (\n    <Space vertical block>\n      <Steps current={current} items={items} />\n      <Space>\n        <Button disabled={!current} onClick={() => setCurrent(current - 1)}>\n          上一步\n        </Button>\n        <Button\n          type=\"primary\"\n          disabled={current === items.length - 1}\n          onClick={() => setCurrent(current + 1)}\n        >\n          下一步\n        </Button>\n      </Space>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Switch",
      "import": "import { Switch } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/switch",
      "props": [
        {
          "name": "checked",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "开关状态",
          "descriptionEn": "switch state"
        },
        {
          "name": "valueType",
          "type": "ValueType | undefined",
          "required": false,
          "enumValues": [
            "string",
            "number",
            "boolean"
          ],
          "boolean": false,
          "defaultExpression": "\"boolean\"",
          "descriptionZh": "输出值类型",
          "descriptionEn": "Output value type"
        },
        {
          "name": "type",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "主题颜色 可传入 `success`，`warning`，`danger`，`primary`",
          "descriptionEn": "Theme color, can pass `success`, `warning`, `danger`, `primary`"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义选中状态颜色，优先级高于 `type`",
          "descriptionEn": "Custom checked color; takes precedence over `type`"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "禁用开关",
          "descriptionEn": "Disable switch"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只读开关",
          "descriptionEn": "Make the switch read-only"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "加载状态，加载时不可操作",
          "descriptionEn": "Loading state; interaction is disabled while loading"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "组件尺寸，值为`small`展示小尺寸",
          "descriptionEn": "Component size, when value is `small` displays small size"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "defaultExpression": "shapeProp ?? inheritedAppearance.shape ?? \"round\"",
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "trueText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当 `checked` 为 `true` 时显示的文字",
          "descriptionEn": "Text displayed when `checked` is `true`"
        },
        {
          "name": "falseText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当 `checked` 为 `false` 时显示的文字",
          "descriptionEn": "Text displayed when `checked` is `false`"
        },
        {
          "name": "checkedChildren",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中时的自定义内容",
          "descriptionEn": "Custom content for the checked state"
        },
        {
          "name": "unCheckedChildren",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未选中时的自定义内容",
          "descriptionEn": "Custom content for the unchecked state"
        },
        {
          "name": "onChange",
          "type": "((value: boolean | number | string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "状态改变时触发，返回值类型由 `valueType` 决定",
          "descriptionEn": "Triggered on change; output type is determined by `valueType`"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "form",
        "value",
        "formAction",
        "formEncType",
        "formMethod",
        "formNoValidate",
        "formTarget",
        "name"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string",
        "form": "string",
        "formEncType": "string",
        "formMethod": "string",
        "formNoValidate": "boolean",
        "formTarget": "string",
        "name": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: boolean | number | string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "状态改变时触发，返回值类型由 `valueType` 决定",
          "descriptionEn": "Triggered on change; output type is determined by `valueType`"
        }
      ],
      "renderProps": [
        "checkedChildren",
        "unCheckedChildren"
      ],
      "behavior": {
        "rules": [
          "Use checked and onChange. checked initializes local state; interactions update it internally, and changed checked props synchronize it.",
          "checked is boolean. onChange returns boolean/string/number according to valueType; default valueType is boolean."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/switch/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Switch } from \"react-kui\";\nexport default function App() {\n  const [v1, setV1] = useState(true),\n    [v2, setV2] = useState(true),\n    [v3, setV3] = useState(true),\n    [checked, setChecked] = useState(true);\n  return (\n    <Space vertical>\n      <code>value(boolean): {String(v1)}</code>\n      <Switch checked={v1} onChange={(v) => setV1(Boolean(v))} />\n      <code>value(string): {v2 ? \"1\" : \"0\"}</code>\n      <Switch checked={v2} valueType=\"string\" onChange={(v) => setV2(Boolean(Number(v)))} />\n      <code>value(number): {v3 ? 1 : 0}</code>\n      <Switch checked={v3} valueType=\"number\" onChange={(v) => setV3(Boolean(v))} />\n      <Button onClick={() => setChecked((v) => !v)} size=\"small\">\n        {checked ? \"Checked\" : \"Unchecked\"}\n      </Button>\n      <Switch checked={checked} onChange={(v) => setChecked(Boolean(v))} />\n      <Space>\n        <Switch checked type=\"primary\" />\n        <Switch checked type=\"success\" />\n        <Switch checked type=\"warning\" />\n        <Switch checked type=\"danger\" />\n        <Switch checked color=\"#8b5cf6\" />\n        <Switch checked shape=\"square\" />\n      </Space>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/switch/demo/with-text.tsx",
          "title": "文字 / 图标",
          "source": "import { Check, LogoApple, LogoMicrosoft, Plane, Wifi, X } from \"kui-icons\";\nimport { Icon, Space, Switch } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical align=\"start\">\n      <Switch trueText=\"Yes\" falseText=\"No\" />\n      <Switch trueText=\"｜\" falseText=\"〇\" />\n      <Switch trueText=\"｜\" falseText=\"〇\" checked />\n      <Switch trueText=\"On\" falseText=\"Off\" />\n      <Switch checkedChildren={<Icon type={Check} />} unCheckedChildren={<Icon type={X} />} />\n      <Switch\n        checkedChildren={<Icon type={LogoApple} />}\n        unCheckedChildren={<Icon type={LogoMicrosoft} />}\n      />\n      <Switch checkedChildren={<Icon type={Wifi} />} unCheckedChildren={<Icon type={Plane} />} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/switch/demo/disabled.tsx",
          "title": "禁用 / 可控",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Switch } from \"react-kui\";\nexport default function App() {\n  const [checked, setChecked] = useState(false),\n    [disabled, setDisabled] = useState(false);\n  return (\n    <Space vertical align=\"start\">\n      <Switch disabled />\n      <Space>\n        <Switch disabled={disabled} checked={checked} onChange={(v) => setChecked(Boolean(v))} />\n        <Button size=\"small\" onClick={() => setChecked((v) => !v)}>\n          {checked ? \"Uncheck\" : \"Check\"}\n        </Button>\n        <Button size=\"small\" onClick={() => setDisabled((v) => !v)}>\n          {disabled ? \"Enable\" : \"Disabled\"}\n        </Button>\n      </Space>\n      <Switch disabled trueText=\"Yes\" falseText=\"No\" />\n      <Switch disabled trueText=\"Yes\" falseText=\"No\" checked />\n      <Switch disabled trueText=\"Yes\" falseText=\"No\" checked size=\"small\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/switch/demo/size.tsx",
          "title": "两种大小",
          "source": "import { Space, Switch } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <Switch />\n      <Switch size=\"small\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/switch/demo/loading.tsx",
          "title": "加载中",
          "source": "import { Space, Switch } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical>\n      <Switch loading checked />\n      <Switch loading checked size=\"small\" />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Splitter",
      "import": "import { Splitter } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/splitter",
      "props": [
        {
          "name": "direction",
          "type": "DirectionType | undefined",
          "required": false,
          "enumValues": [
            "inline",
            "horizontal",
            "vertical"
          ],
          "boolean": false,
          "defaultExpression": "\"horizontal\"",
          "descriptionZh": "布局方向",
          "descriptionEn": "Layout direction"
        },
        {
          "name": "onResize",
          "type": "((sizes: number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "面板大小变化回调",
          "descriptionEn": "Callback when panel size changes"
        },
        {
          "name": "onResizeEnd",
          "type": "((sizes: number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "拖拽结束回调",
          "descriptionEn": "Callback when dragging ends"
        },
        {
          "name": "onResizeStart",
          "type": "((sizes: number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "开始拖拽之前回调",
          "descriptionEn": "Callback before dragging starts"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onResize",
          "type": "((sizes: number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "面板大小变化回调",
          "descriptionEn": "Callback when panel size changes"
        },
        {
          "name": "onResizeEnd",
          "type": "((sizes: number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "拖拽结束回调",
          "descriptionEn": "Callback when dragging ends"
        },
        {
          "name": "onResizeStart",
          "type": "((sizes: number[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "开始拖拽之前回调",
          "descriptionEn": "Callback before dragging starts"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [
        "SplitterPanel"
      ],
      "examples": [
        {
          "id": "components/splitter/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Flex, Splitter, SplitterPanel } from \"react-kui\";\nconst Panel = ({ children }: { children: string }) => (\n  <Flex align=\"center\" justify=\"center\" style={{ height: \"100%\", color: \"#888\" }}>\n    {children}\n  </Flex>\n);\nexport default function App() {\n  const [sizes, setSizes] = useState<number[]>([]);\n  return (\n    <>\n      <code>size: {sizes.map((x) => Math.round(x)).join(\", \")}</code>\n      <Splitter style={{ height: 200, width: \"100%\" }} onResize={setSizes}>\n        <SplitterPanel>\n          <Panel>Left</Panel>\n        </SplitterPanel>\n        <SplitterPanel>\n          <Panel>Center</Panel>\n        </SplitterPanel>\n        <SplitterPanel>\n          <Panel>Right</Panel>\n        </SplitterPanel>\n      </Splitter>\n    </>\n  );\n}"
        },
        {
          "id": "components/splitter/demo/vertical.tsx",
          "title": "垂直方向",
          "source": "import { Flex, Splitter, SplitterPanel } from \"react-kui\";\nconst Panel = ({ children }: { children: string }) => (\n  <Flex align=\"center\" justify=\"center\" style={{ height: \"100%\", color: \"#888\" }}>\n    {children}\n  </Flex>\n);\nexport default function App() {\n  return (\n    <Splitter direction=\"horizontal\" style={{ height: 240 }}>\n      <SplitterPanel size=\"20%\" min=\"10%\" max=\"30%\">\n        <Panel>Folders</Panel>\n      </SplitterPanel>\n      <SplitterPanel>\n        <Splitter direction=\"vertical\">\n          <SplitterPanel>\n            <Panel>Editor</Panel>\n          </SplitterPanel>\n          <SplitterPanel size=\"50px\">\n            <Panel>Console</Panel>\n          </SplitterPanel>\n        </Splitter>\n      </SplitterPanel>\n    </Splitter>\n  );\n}"
        }
      ]
    },
    {
      "name": "SplitterPanel",
      "import": "import { SplitterPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/splitter",
      "props": [
        {
          "name": "size",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "初始尺寸；数字为 px，字符串支持 px 或百分比",
          "descriptionEn": "Initial size; numbers are px, strings support px or percentages"
        },
        {
          "name": "min",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "最小尺寸；数字为 px，字符串支持 px 或百分比",
          "descriptionEn": "Minimum size; numbers are px, strings support px or percentages"
        },
        {
          "name": "max",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "最大尺寸；数字为 px，字符串支持 px 或百分比",
          "descriptionEn": "Maximum size; numbers are px, strings support px or percentages"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Splitter",
      "examples": [
        {
          "id": "components/splitter/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Flex, Splitter, SplitterPanel } from \"react-kui\";\nconst Panel = ({ children }: { children: string }) => (\n  <Flex align=\"center\" justify=\"center\" style={{ height: \"100%\", color: \"#888\" }}>\n    {children}\n  </Flex>\n);\nexport default function App() {\n  const [sizes, setSizes] = useState<number[]>([]);\n  return (\n    <>\n      <code>size: {sizes.map((x) => Math.round(x)).join(\", \")}</code>\n      <Splitter style={{ height: 200, width: \"100%\" }} onResize={setSizes}>\n        <SplitterPanel>\n          <Panel>Left</Panel>\n        </SplitterPanel>\n        <SplitterPanel>\n          <Panel>Center</Panel>\n        </SplitterPanel>\n        <SplitterPanel>\n          <Panel>Right</Panel>\n        </SplitterPanel>\n      </Splitter>\n    </>\n  );\n}"
        },
        {
          "id": "components/splitter/demo/vertical.tsx",
          "title": "垂直方向",
          "source": "import { Flex, Splitter, SplitterPanel } from \"react-kui\";\nconst Panel = ({ children }: { children: string }) => (\n  <Flex align=\"center\" justify=\"center\" style={{ height: \"100%\", color: \"#888\" }}>\n    {children}\n  </Flex>\n);\nexport default function App() {\n  return (\n    <Splitter direction=\"horizontal\" style={{ height: 240 }}>\n      <SplitterPanel size=\"20%\" min=\"10%\" max=\"30%\">\n        <Panel>Folders</Panel>\n      </SplitterPanel>\n      <SplitterPanel>\n        <Splitter direction=\"vertical\">\n          <SplitterPanel>\n            <Panel>Editor</Panel>\n          </SplitterPanel>\n          <SplitterPanel size=\"50px\">\n            <Panel>Console</Panel>\n          </SplitterPanel>\n        </Splitter>\n      </SplitterPanel>\n    </Splitter>\n  );\n}"
        }
      ]
    },
    {
      "name": "Table",
      "import": "import { Table } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/table",
      "props": [
        {
          "name": "data",
          "type": "T[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_DATA",
          "descriptionZh": "显示的结构化数据",
          "descriptionEn": "Structured data to be displayed"
        },
        {
          "name": "columns",
          "type": "Column<T>[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_COLUMNS",
          "descriptionZh": "表格列的配置描述，",
          "descriptionEn": "Configuration description of table columns"
        },
        {
          "name": "ellipsis",
          "type": "number | boolean | TableEllipsisOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "一次给所有列打开省略号，省得一列列写 `ellipsis`；`true` 单行，数字或 `rows` 是多行，`tooltip` 定制悬停提示。某一列想显示完整内容，就在那列写 `ellipsis: false` 单独关掉。",
          "descriptionEn": "Turn on the ellipsis for every column at once, so you do not have to write `ellipsis` on each one; `true` is a single line, a number or `rows` clamps to several lines, and `tooltip` customizes the hover tip. A column that must show its full content opts out with `ellipsis: false`."
        },
        {
          "name": "selectedKeys",
          "type": "TableKey[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "勾选的key集合",
          "descriptionEn": "Collection of selected keys"
        },
        {
          "name": "disabledKeys",
          "type": "TableKey[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_KEYS",
          "descriptionZh": "禁用的key集合",
          "descriptionEn": "Disabled key set"
        },
        {
          "name": "rowKey",
          "type": "string | ((record: T) => TableKey) | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"key\"",
          "descriptionZh": "行的唯一标识，勾选与展开都以它为准；可传字段名，或传函数从记录中取值",
          "descriptionEn": "Unique row identity used by selection and expansion; a field name or an accessor function reading the key from a record"
        },
        {
          "name": "childrenColumnName",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"children\"",
          "descriptionZh": "子节点字段名",
          "descriptionEn": "Field containing child records"
        },
        {
          "name": "expandedKeys",
          "type": "TableKey[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开行 key 集合",
          "descriptionEn": "expanded row keys"
        },
        {
          "name": "expandAllRows",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "初始化时展开所有树节点；`data` 后续变化时只补新增的父行，用户手动展开或折叠过的行保持不变（expandedKeys 优先）",
          "descriptionEn": "Expand every tree node on initialization; when `data` changes later only newly arrived parent rows are expanded, while rows the user expanded or collapsed by hand are kept (explicit expandedKeys takes precedence)"
        },
        {
          "name": "expandRowByClick",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "点击行时展开或收起",
          "descriptionEn": "Toggle expansion by clicking a row"
        },
        {
          "name": "indentSize",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "20",
          "descriptionZh": "每级树节点缩进距离",
          "descriptionEn": "Indentation per tree level"
        },
        {
          "name": "scroll",
          "type": "{ x?: number | string; y?: number | string; } | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_SCROLL",
          "descriptionZh": "滚动配置；`x` 为内容最小宽度，`y` 为表体的纵向滚动区域高度",
          "descriptionEn": "Scroll configuration; `x` is the minimum content width and `y` is the vertical viewport height of the body"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "值为`small`时展示紧凑模式",
          "descriptionEn": "Display compact mode when the value is `small`"
        },
        {
          "name": "striped",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否展示斑马条纹",
          "descriptionEn": "Whether to display zebra stripes"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示边框",
          "descriptionEn": "Whether to display borders"
        },
        {
          "name": "shape",
          "type": "SurfaceShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "square"
          ],
          "boolean": false,
          "descriptionZh": "形状",
          "descriptionEn": "Shape"
        },
        {
          "name": "checkable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否显示勾选框",
          "descriptionEn": "Whether to show checkboxes"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "表格异步加载模式",
          "descriptionEn": "Table asynchronous loading mode"
        },
        {
          "name": "emptyText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "没有数据时展示的提示",
          "descriptionEn": "Prompt displayed when there is no data"
        },
        {
          "name": "header",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义表头内容",
          "descriptionEn": "Custom table header content"
        },
        {
          "name": "footer",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义表尾内容",
          "descriptionEn": "Custom table footer content"
        },
        {
          "name": "virtual",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否启用虚拟滚动",
          "descriptionEn": "Whether to enable virtual scrolling"
        },
        {
          "name": "itemHeight",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "44",
          "descriptionZh": "虚拟滚动行高度",
          "descriptionEn": "Virtual row height"
        },
        {
          "name": "overscan",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "5",
          "descriptionZh": "虚拟滚动视口外预渲染行数",
          "descriptionEn": "Extra virtual rows rendered outside the viewport"
        },
        {
          "name": "hiddenColumnKeys",
          "type": "(string | number)[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_KEYS",
          "descriptionZh": "隐藏的列 key 集合",
          "descriptionEn": "Hidden column key collection"
        },
        {
          "name": "onSort",
          "type": "((state: SortState) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击排序时触发",
          "descriptionEn": "Triggered when clicking to sort"
        },
        {
          "name": "onRowClick",
          "type": "((record: T, index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "单击某一行时触发",
          "descriptionEn": "Triggered when clicking a row"
        },
        {
          "name": "onSelect",
          "type": "((record: T, selected: boolean, selectedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击复选框时触发",
          "descriptionEn": "Triggered when clicking the checkbox"
        },
        {
          "name": "onSelectAll",
          "type": "((selected: boolean, selectedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击Table头部复选框时触发",
          "descriptionEn": "Triggered when clicking the header checkbox of the Table"
        },
        {
          "name": "onSelectedKeysChange",
          "type": "((selectedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "勾选 key 集合变化时触发",
          "descriptionEn": "Called when selected keys change"
        },
        {
          "name": "onExpand",
          "type": "((expanded: boolean, record: T) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开状态变化时触发",
          "descriptionEn": "Called when a row expands or collapses"
        },
        {
          "name": "onExpandedKeysChange",
          "type": "((expandedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开 key 集合变化时触发",
          "descriptionEn": "Called when expanded keys change"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onSort",
          "type": "((state: SortState) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击排序时触发",
          "descriptionEn": "Triggered when clicking to sort"
        },
        {
          "name": "onRowClick",
          "type": "((record: T, index: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "单击某一行时触发",
          "descriptionEn": "Triggered when clicking a row"
        },
        {
          "name": "onSelect",
          "type": "((record: T, selected: boolean, selectedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击复选框时触发",
          "descriptionEn": "Triggered when clicking the checkbox"
        },
        {
          "name": "onSelectAll",
          "type": "((selected: boolean, selectedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击Table头部复选框时触发",
          "descriptionEn": "Triggered when clicking the header checkbox of the Table"
        },
        {
          "name": "onSelectedKeysChange",
          "type": "((selectedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "勾选 key 集合变化时触发",
          "descriptionEn": "Called when selected keys change"
        },
        {
          "name": "onExpand",
          "type": "((expanded: boolean, record: T) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开状态变化时触发",
          "descriptionEn": "Called when a row expands or collapses"
        },
        {
          "name": "onExpandedKeysChange",
          "type": "((expandedKeys: TableKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开 key 集合变化时触发",
          "descriptionEn": "Called when expanded keys change"
        }
      ],
      "renderProps": [
        "rowKey",
        "header",
        "footer"
      ],
      "behavior": {
        "rules": [
          "Pass data and columns. Set rowKey to a stable unique field; the default is key.",
          "The component does not call your backend. For remote paging, combine Page with explicit loading/error state and protect against stale responses.",
          "Use render callbacks/ReactNode props from the API; Vue slot syntax is invalid."
        ]
      },
      "children": [],
      "examples": [
        {
          "id": "components/table/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { ArrowDown, ArrowUp, Moon, Sun, Trash2 } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Icon, message, modal, Space, Table, Tag, type Column } from \"react-kui\";\nimport { people, type Person } from \"./data\";\nexport default function App() {\n  const [data, setData] = useState([...people]);\n  const move = (index: number, offset: number) => {\n    const target = index + offset;\n    if (target < 0 || target >= data.length) return;\n    const next = [...data];\n    [next[index], next[target]] = [next[target], next[index]];\n    setData(next);\n  };\n  const columns: Column<Person>[] = [\n    { title: \"Name\", key: \"name\" },\n    { title: \"Age\", key: \"age\" },\n    {\n      title: \"Gender\",\n      key: \"gender\",\n      render: (v) => (\n        <Icon type={v === 1 ? Sun : Moon} color={v === 1 ? \"blue\" : \"#f50cff\"} size={15} />\n      ),\n    },\n    { title: \"Address\", key: \"address\" },\n    {\n      title: \"Tags\",\n      key: \"tags\",\n      render: (tags: string[]) => (\n        <Space>\n          {tags.map((tag) => (\n            <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n              {tag}\n            </Tag>\n          ))}\n        </Space>\n      ),\n    },\n    {\n      title: \"Operate\",\n      key: \"action\",\n      width: 200,\n      render: (_, record, index) => (\n        <Space>\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              move(index, -1);\n            }}\n            icon={ArrowUp}\n          />\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              move(index, 1);\n            }}\n            icon={ArrowDown}\n          />\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              setData(data.filter((_, i) => i !== index));\n            }}\n            icon={Trash2}\n          />\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              modal.info({ title: \"Hi\", content: `My name is ${record.name}` });\n            }}\n          >\n            more\n          </Button>\n        </Space>\n      ),\n    },\n  ];\n  return (\n    <Table\n      data={data}\n      columns={columns}\n      onRowClick={(record) => message.info(\"Test row click: \" + record.name)}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/tree.tsx",
          "title": "树形数据",
          "source": "import { Tag, Table, type Column } from \"react-kui\";\n\ninterface Department {\n  key: string;\n  name: string;\n  owner: string;\n  members: number;\n  status: \"active\" | \"planning\";\n  children?: Department[];\n}\n\nconst data: Department[] = [\n  {\n    key: \"product\",\n    name: \"Product Center\",\n    owner: \"Alice\",\n    members: 24,\n    status: \"active\",\n    children: [\n      { key: \"design\", name: \"Design Team\", owner: \"Mia\", members: 8, status: \"active\" },\n      {\n        key: \"research\",\n        name: \"Research Team\",\n        owner: \"Leo\",\n        members: 6,\n        status: \"planning\",\n        children: [\n          { key: \"ai-lab\", name: \"AI Lab\", owner: \"Noah\", members: 3, status: \"planning\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"engineering\",\n    name: \"Engineering Center\",\n    owner: \"Jack\",\n    members: 36,\n    status: \"active\",\n    children: [\n      { key: \"frontend\", name: \"Frontend Team\", owner: \"Emma\", members: 12, status: \"active\" },\n      { key: \"backend\", name: \"Backend Team\", owner: \"Ethan\", members: 16, status: \"active\" },\n    ],\n  },\n];\n\nconst columns: Column<Department>[] = [\n  { key: \"name\", title: \"Department\", width: 240 },\n  { key: \"owner\", title: \"Owner\" },\n  { key: \"members\", title: \"Members\", sorter: true },\n  {\n    key: \"status\",\n    title: \"Status\",\n    render: (status) => <Tag color={status === \"active\" ? \"green\" : \"gold\"}>{String(status)}</Tag>,\n  },\n];\n\nexport default function App() {\n  return (\n    <Table\n      bordered\n      checkable\n      expandRowByClick\n      expandedKeys={[\"product\"]}\n      data={data}\n      columns={columns}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/base-render.tsx",
          "title": "基本用法(使用render)",
          "source": "import { Moon, Sun } from \"kui-icons\";\nimport { Button, Icon, modal, Space, Tag, Table, type Column } from \"react-kui\";\nimport { people, type Person } from \"./data\";\nconst columns: Column<Person>[] = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Age\", key: \"age\" },\n  {\n    title: \"Gender\",\n    key: \"gender\",\n    render: (value) => (\n      <Icon type={value === 1 ? Sun : Moon} color={value === 1 ? \"blue\" : \"#f50cff\"} size={15} />\n    ),\n  },\n  { title: \"Address\", key: \"address\" },\n  {\n    title: \"Tags\",\n    key: \"tags\",\n    render: (tags: string[]) => (\n      <Space>\n        {tags.map((tag) => (\n          <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n            {tag}\n          </Tag>\n        ))}\n      </Space>\n    ),\n  },\n  {\n    title: \"Operate\",\n    key: \"action\",\n    render: (_, record) => (\n      <Button\n        size=\"small\"\n        onClick={() => modal.info({ title: \"More\", content: `My name is ${record.name}` })}\n      >\n        more\n      </Button>\n    ),\n  },\n];\nexport default function App() {\n  return <Table data={people} columns={columns} />;\n}"
        },
        {
          "id": "components/table/demo/custom-header.tsx",
          "title": "自定义表头",
          "source": "import { CircleAlert } from \"kui-icons\";\nimport { Button, Flex, Icon, modal, Tooltip, Table, type Column } from \"react-kui\";\nconst data = [\n  { key: \"0\", name: \"Li Lei\", age: 32, address: \"Wu Han Guanggu No. 328\" },\n  { key: \"1\", name: \"Liu Hao\", age: 28, address: \"Wu Han Hongshan No. 128\" },\n  { key: \"2\", name: \"Hu Cong\", age: 28, address: \"Wu Han Nanhu No. 198\" },\n  { key: \"3\", name: \"Qiu\", age: 28, address: \"Wu Han Nanhu No. 188\" },\n];\ntype Row = (typeof data)[number];\nconst header = (tip: string) => (column: Column<Row>) => (\n  <Flex size=\"small\">\n    {column.title}\n    <Tooltip title={tip}>\n      <Icon type={CircleAlert} size={18} color=\"#777\" />\n    </Tooltip>\n  </Flex>\n);\nconst columns: Column<Row>[] = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Age\", key: \"age\", renderHeader: header(\"How old are you?\") },\n  { title: \"Address\", key: \"address\", renderHeader: header(\"Where are you from?\") },\n  {\n    title: \"Operate\",\n    key: \"action\",\n    width: 90,\n    render: (_, record) => (\n      <Button\n        size=\"small\"\n        onClick={() => modal.info({ title: \"More\", content: `My name is ${record.name}` })}\n      >\n        more\n      </Button>\n    ),\n  },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} />;\n}"
        },
        {
          "id": "components/table/demo/bordered.tsx",
          "title": "自定义页头和页脚",
          "source": "import { Table, type Column } from \"react-kui\";\nconst data = [\n  { key: \"0\", fullname: \"Li Lei\", price: 18990, address: \"Wu Han Guanggu No. 328\" },\n  { key: \"1\", fullname: \"Liu Hao\", price: 23900, address: \"Wu Han Hongshan No. 128\" },\n  { key: \"2\", fullname: \"Hu Cong\", price: 12000, address: \"Wu Han Nanhu No. 198\" },\n  { key: \"3\", fullname: \"Qiu\", price: 28000, address: \"Wu Han Nanhu No. 188\" },\n];\nconst columns: Column<(typeof data)[number]>[] = [\n  { title: \"Name\", key: \"fullname\", render: (value) => <a>{String(value ?? \"\")}</a> },\n  {\n    title: \"Housing price\",\n    key: \"price\",\n    render: (value) => (\n      <span style={{ color: Number(value) > 20000 ? \"red\" : undefined }}>\n        ￥{Number(value)}/㎡\n      </span>\n    ),\n  },\n  { title: \"Address\", key: \"address\" },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} bordered header=\"Header\" footer=\"Footer\" />;\n}"
        },
        {
          "id": "components/table/demo/table-sorter.tsx",
          "title": "排序",
          "source": "import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Table, type Column, type SortState } from \"react-kui\";\ninterface Row {\n  key: string;\n  name: string;\n  age: number;\n  mail: string;\n}\nconst source: Row[] = [\n  { key: \"0\", name: \"Qiu\", age: 32, mail: \"chuchur@qq.com\" },\n  { key: \"3\", name: \"Wang Kang\", age: 26, mail: \"wangkang@gmail.com\" },\n  { key: \"2\", name: \"Liu Hao\", age: 27, mail: \"liuhao@162.com\" },\n  { key: \"1\", name: \"Li Lei\", age: 33, mail: \"hanlin@hotmail.com\" },\n  { key: \"4\", name: \"Hu Cong\", age: 25, mail: \"hucong@163.com\" },\n];\nexport default function App() {\n  const [data, setData] = useState<Row[]>([]),\n    [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const fetchData = useCallback((key?: string, order?: SortState[\"order\"]) => {\n    console.log(key, order);\n    setLoading(true);\n    if (timer.current) clearTimeout(timer.current);\n    timer.current = setTimeout(() => {\n      setData([...source]);\n      setLoading(false);\n    }, 2000);\n  }, []);\n  useEffect(() => {\n    const initialTimer = setTimeout(fetchData, 0);\n    return () => {\n      clearTimeout(initialTimer);\n      if (timer.current) clearTimeout(timer.current);\n    };\n  }, [fetchData]);\n  const columns: Column<Row>[] = [\n    { title: \"Name\", key: \"name\", sorter: true },\n    { title: \"Age\", key: \"age\", sorter: true },\n    { title: \"Email\", key: \"mail\", sorter: (state) => fetchData(\"mail\", state.order) },\n  ];\n  return (\n    <Table\n      data={data}\n      columns={columns}\n      loading={loading}\n      onSort={({ key, order }) => console.log(key, order)}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/col-row-span.tsx",
          "title": "表格行/列合并",
          "source": "import { Table, type Column } from \"react-kui\";\nconst data = [\n  { key: \"1\", name: \"Jim\", age: 25, city: \"Beijing\" },\n  { key: \"2\", name: \"Allen\", age: 30, city: \"Wuhan\" },\n  { key: \"3\", name: \"Qiu\", age: 35, city: \"Wuhan\" },\n  { key: \"4\", name: \"Jake\", age: 40, city: \"Shanghai\" },\n  { key: \"5\", name: \"Mask\", age: 38, city: \"Wuhan\" },\n];\nconst columns: Column<(typeof data)[number]>[] = [\n  { title: \"Name\", key: \"name\", width: 100, rowSpan: (_, index) => (index === 2 ? 2 : 1) },\n  { title: \"Age\", key: \"age\", width: 100, colSpan: (_, index) => (index === 1 ? 2 : 1) },\n  { title: \"City\", key: \"city\", width: 100 },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} bordered />;\n}"
        },
        {
          "id": "components/table/demo/table-edit.tsx",
          "title": "可编辑单元格",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Input, message, Popconfirm, Space, Table, type Column } from \"react-kui\";\ninterface Row {\n  key: string;\n  name: string;\n  age: number | string;\n  address: string;\n  isEdit: boolean;\n}\nconst initial: Row[] = [\n  { key: \"0\", name: \"Li Lei\", age: 28, address: \"Wu Han Guanggu No. 328\", isEdit: false },\n  { key: \"1\", name: \"Liu Hao\", age: 30, address: \"Wu Han Hongshan No. 128\", isEdit: false },\n  { key: \"2\", name: \"Hu Cong\", age: 28, address: \"Wu Han Nanhu No. 198\", isEdit: false },\n  { key: \"3\", name: \"Qiu\", age: 32, address: \"Wu Han Nanhu No. 188\", isEdit: false },\n];\nexport default function App() {\n  const [data, setData] = useState(initial),\n    count = useRef(4);\n  const patch = (key: string, values: Partial<Row>) =>\n    setData((rows) => rows.map((row) => (row.key === key ? { ...row, ...values } : row)));\n  const field = (key: keyof Row) => (value: unknown, record: Row) =>\n    record.isEdit ? (\n      <Input\n        value={typeof value === \"string\" || typeof value === \"number\" ? value : \"\"}\n        onChange={(next) => patch(record.key, { [key]: next })}\n        size=\"small\"\n      />\n    ) : (\n      String(value)\n    );\n  const columns: Column<Row>[] = [\n    { title: \"Name\", key: \"name\", render: field(\"name\") },\n    { title: \"House price\", key: \"age\", render: field(\"age\") },\n    { title: \"Address\", key: \"address\", render: field(\"address\") },\n    {\n      title: \"Operate\",\n      key: \"action\",\n      render: (_, record) => (\n        <Space>\n          {!record.isEdit ? (\n            <Button size=\"small\" type=\"primary\" onClick={() => patch(record.key, { isEdit: true })}>\n              Edit\n            </Button>\n          ) : (\n            <>\n              <Button\n                size=\"small\"\n                type=\"primary\"\n                onClick={() => {\n                  patch(record.key, { isEdit: false });\n                  message.success(\"Save successfully!\");\n                }}\n              >\n                Save\n              </Button>\n              <Button size=\"small\" onClick={() => patch(record.key, { isEdit: false })}>\n                Cancel\n              </Button>\n            </>\n          )}{\" \"}\n          {!record.isEdit && (\n            <Popconfirm\n              title=\"Are you sure delete this content?\"\n              onOk={() => setData((rows) => rows.filter((row) => row.key !== record.key))}\n            >\n              <Button size=\"small\" type=\"danger\">\n                Delete\n              </Button>\n            </Popconfirm>\n          )}\n        </Space>\n      ),\n    },\n  ];\n  const add = () => {\n    const key = String(count.current++);\n    setData((rows) => [\n      ...rows,\n      { key, name: `Name ${key}`, age: 30, address: `China Wuhan no.${key}`, isEdit: false },\n    ]);\n  };\n  return (\n    <>\n      <Button onClick={add}>Add</Button>\n      <Table data={data} columns={columns} bordered />\n    </>\n  );\n}"
        },
        {
          "id": "components/table/demo/fixed-col-header.tsx",
          "title": "固定头/列",
          "source": "import { Button, Table, type Column } from \"react-kui\";\nconst middle: Column[] = [];\nconst values: Record<string, string> = {};\nfor (let i = 0; i < 20; i++) {\n  middle.push({ title: `Col${i}`, key: `address${i}`, width: 150 });\n  values[`address${i}`] = \"Hubei Wuhan SoftBase No.128\";\n}\nconst data = Array.from({ length: 10 }, (_, i) => ({\n  key: i,\n  name: \"Han Mei\",\n  age: 28,\n  ...values,\n}));\nconst columns: Column[] = [\n  { title: \"Name\", key: \"name\", fixed: \"left\" },\n  { title: \"Age\", key: \"age\", fixed: \"left\" },\n  ...middle,\n  // 分组父列上的 `fixed` 会继承给它的每个叶子列，整组一起固定\n  {\n    title: \"Operate\",\n    key: \"operate\",\n    fixed: \"right\",\n    children: [\n      {\n        title: \"Edit\",\n        key: \"action\",\n        render: () => <Button size=\"small\">test</Button>,\n      },\n      {\n        title: \"More\",\n        key: \"action1\",\n        render: () => <Button size=\"small\">test2</Button>,\n      },\n    ],\n  },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} scroll={{ y: 300 }} />;\n}"
        },
        {
          "id": "components/table/demo/header-span.tsx",
          "title": "表头分组",
          "source": "import { Table, type Column } from \"react-kui\";\nconst data = Array.from({ length: 10 }, (_, i) => ({\n  key: i,\n  name: \"John Brown\",\n  age: i + 1,\n  street: \"Lake Park\",\n  building: \"C\",\n  number: 2035,\n  companyAddress: \"Lake Street 42\",\n  companyName: \"SoftLake Co\",\n  gender: \"M\",\n}));\nconst columns: Column[] = [\n  { title: \"Name\", key: \"name\", width: 120, fixed: \"left\" },\n  {\n    title: \"Other\",\n    key: \"other\",\n    children: [\n      { title: \"Age\", key: \"age\", width: 100, sorter: true },\n      {\n        title: \"Address\",\n        key: \"address\",\n        children: [\n          { title: \"Street\", key: \"street\", width: 140 },\n          {\n            title: \"Block\",\n            key: \"block\",\n            children: [\n              { title: \"Building\", key: \"building\", width: 120 },\n              { title: \"Door No.\", key: \"number\", width: 120 },\n            ],\n          },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Company\",\n    key: \"company\",\n    children: [\n      { title: \"Company Address\", key: \"companyAddress\", width: 200 },\n      { title: \"Company Name\", key: \"companyName\", width: 200 },\n    ],\n  },\n  { title: \"Gender\", key: \"gender\", width: 100, fixed: \"right\" },\n];\nexport default function App() {\n  // `scroll.x` 按叶子列宽度之和给（120+100+140+120+120+200+200+100 = 1_100）。\n  // 不给的话这些窄列会被挤到十几个像素，表头文字竖排换行，四层表头能长到 400 多 px，\n  // 比 `scroll.y` 的可视高度还高，等于把表体整个顶出可视区。\n  return <Table data={data} columns={columns} bordered scroll={{ x: 1_100, y: 300 }} />;\n}"
        },
        {
          "id": "components/table/demo/table-check.tsx",
          "title": "勾选",
          "source": "import { useState } from \"react\";\nimport { Space, Tag, Table, type Column } from \"react-kui\";\nimport { basicColumns, people, type Person } from \"./data\";\nconst columns: Column<Person>[] = [\n  ...basicColumns.map((column) =>\n    column.key === \"tags\"\n      ? {\n          ...column,\n          render: (tags: string[]) => (\n            <Space>\n              {tags.map((tag) => (\n                <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n                  {tag}\n                </Tag>\n              ))}\n            </Space>\n          ),\n        }\n      : column\n  ),\n  {\n    title: \"Operate\",\n    key: \"action\",\n    render: () => (\n      <Space>\n        <a href=\"#\">Edit</a>\n        <a href=\"#\">Delete</a>\n      </Space>\n    ),\n  },\n];\nexport default function App() {\n  const [selectedKeys, setSelectedKeys] = useState<Array<string | number>>([]);\n  return (\n    <>\n      <code>selectedKeys: {selectedKeys.join(\", \")}</code>\n      <Table\n        data={people}\n        columns={columns}\n        checkable\n        selectedKeys={selectedKeys}\n        onSelectedKeysChange={setSelectedKeys}\n      />\n    </>\n  );\n}"
        },
        {
          "id": "components/table/demo/nested-value.tsx",
          "title": "嵌套取值",
          "source": "import { Table, type Column } from \"react-kui\";\n\n/**\n * 嵌套数据不需要先拍平：列 `key`、`rowKey`、`childrenColumnName` 都可以写成 `a.b` 点路径。\n * 整名优先，所以字段名本身带点号时仍按整名取值；下钻途中缺字段只会渲染成空，不会抛错。\n */\ninterface Member {\n  meta: { uid: string };\n  profile: { name: string; city?: string };\n  tags?: string[];\n  rows?: { items: Member[] };\n}\n\nconst data: Member[] = [\n  {\n    meta: { uid: \"design\" },\n    profile: { name: \"Design Guild\", city: \"Hangzhou\" },\n    tags: [\"Studio\", \"Brand\"],\n    rows: {\n      items: [\n        { meta: { uid: \"ann\" }, profile: { name: \"Ann\", city: \"Hangzhou\" }, tags: [\"Studio\"] },\n        { meta: { uid: \"bob\" }, profile: { name: \"Bob\" } },\n      ],\n    },\n  },\n  {\n    meta: { uid: \"front-end\" },\n    profile: { name: \"Front-end Guild\", city: \"Shanghai\" },\n    tags: [\"Kui\"],\n    rows: {\n      items: [\n        {\n          meta: { uid: \"cara\" },\n          profile: { name: \"Cara\", city: \"Shanghai\" },\n          tags: [\"Kui\", \"Charts\"],\n        },\n      ],\n    },\n  },\n];\n\nconst columns: Column<Member>[] = [\n  { title: \"Name\", key: \"profile.name\", sorter: true },\n  { title: \"City\", key: \"profile.city\" },\n  { title: \"Primary tag\", key: \"tags.0\" },\n  { title: \"Secondary tag\", key: \"tags.1\" },\n];\n\nexport default function NestedValueDemo() {\n  return (\n    <Table\n      data={data}\n      columns={columns}\n      rowKey=\"meta.uid\"\n      childrenColumnName=\"rows.items\"\n      expandAllRows\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/control.tsx",
          "title": "动态控制表格属性",
          "source": "import { Moon, Sun } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Button,\n  type SizeType,\n  Icon,\n  RadioGroup,\n  Space,\n  Switch,\n  Tag,\n  Table,\n  type Column,\n} from \"react-kui\";\nimport { people, type Person } from \"./data\";\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [bordered, setBordered] = useState(true),\n    [loading, setLoading] = useState(false),\n    [checkable, setCheckable] = useState(false),\n    [empty, setEmpty] = useState(false),\n    [striped, setStriped] = useState(false);\n  const columns: Column<Person>[] = [\n    { title: \"Name\", key: \"name\" },\n    { title: \"Age\", key: \"age\", sorter: true },\n    {\n      title: \"Gender\",\n      key: \"gender\",\n      render: (value) => (\n        <Icon type={value === 1 ? Moon : Sun} color={value === 1 ? \"blue\" : \"#f50cff\"} size={15} />\n      ),\n    },\n    { title: \"Address\", key: \"address\" },\n    {\n      title: \"Tags\",\n      key: \"tags\",\n      render: (tags: string[]) => (\n        <Space>\n          {tags.map((tag) => (\n            <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n              {tag}\n            </Tag>\n          ))}\n        </Space>\n      ),\n    },\n    { title: \"Operate\", key: \"action\", render: () => <Button size=\"small\">test</Button> },\n  ];\n  return (\n    <div>\n      <Space wrap>\n        Size:{\" \"}\n        <RadioGroup\n          value={size}\n          onChange={setSize}\n          size=\"small\"\n          type=\"button\"\n          options={[\"large\", \"medium\", \"small\"].map((value) => ({ value, label: value }))}\n        />\n        Border: <Switch checked={bordered} onChange={(value) => setBordered(Boolean(value))} />\n        Loading: <Switch checked={loading} onChange={(value) => setLoading(Boolean(value))} />\n        Checkbox: <Switch checked={checkable} onChange={(value) => setCheckable(Boolean(value))} />\n        Empty: <Switch checked={empty} onChange={(value) => setEmpty(Boolean(value))} />\n        Striped: <Switch checked={striped} onChange={(value) => setStriped(Boolean(value))} />\n      </Space>\n      <Table\n        data={empty ? [] : people}\n        columns={columns}\n        loading={loading}\n        size={size}\n        striped={striped}\n        bordered={bordered}\n        checkable={checkable}\n        header={<div>header</div>}\n        footer={<div>footer</div>}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/table/demo/virtual.tsx",
          "title": "虚拟滚动",
          "source": "import { Table, type Column } from \"react-kui\";\n\nconst data = Array.from({ length: 10000 }, (_, index) => ({\n  key: index + 1,\n  name: `User ${index + 1}`,\n  email: `user${index + 1}@example.com`,\n  status: index % 3 === 0 ? \"Active\" : \"Pending\",\n}));\n\nconst columns: Column[] = [\n  { title: \"ID\", key: \"key\", width: 100 },\n  { title: \"Name\", key: \"name\", width: 200 },\n  { title: \"Email\", key: \"email\", width: 200 },\n  { title: \"Email1\", key: \"email1\", width: 100 },\n  { title: \"Email2\", key: \"email2\", width: 100 },\n  { title: \"Email3\", key: \"email3\", width: 100 },\n  { title: \"Email4\", key: \"email4\", width: 100 },\n  { title: \"Email5\", key: \"email5\", width: 100 },\n  { title: \"Status\", key: \"status\", width: 140, fixed: \"right\" },\n];\n\nexport default function VirtualDemo() {\n  return (\n    <Table\n      virtual\n      striped\n      data={data}\n      columns={columns}\n      scroll={{ x: 900, y: 360 }}\n      itemHeight={44}\n      overscan={6}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/column-setting.tsx",
          "title": "列设置",
          "source": "import { useState } from \"react\";\nimport { Space, Table, TableColumnSetting, type Column } from \"react-kui\";\n\nconst columns: Column[] = [\n  { title: \"姓名\", key: \"name\" },\n  { title: \"部门\", key: \"department\" },\n  { title: \"状态\", key: \"status\" },\n];\n\nconst data = [\n  { key: 1, name: \"林晓\", department: \"产品中心\", status: \"正常\" },\n  { key: 2, name: \"张三\", department: \"技术中心\", status: \"正常\" },\n  { key: 3, name: \"李四\", department: \"市场中心\", status: \"暂停\" },\n];\n\nexport default function ColumnSettingDemo() {\n  const [hiddenKeys, setHiddenKeys] = useState<(string | number)[]>([]);\n\n  return (\n    <Space vertical>\n      <TableColumnSetting\n        columns={columns}\n        hiddenKeys={hiddenKeys}\n        onHiddenKeysChange={setHiddenKeys}\n        disabledKeys={[\"name\"]}\n        title=\"显示列\"\n        resetText=\"重置\"\n      />\n      <Table data={data} columns={columns} hiddenColumnKeys={hiddenKeys} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/table/demo/ellipsis.tsx",
          "title": "省略号",
          "source": "import { Space, Switch, Table, type Column } from \"react-kui\";\nimport { useState } from \"react\";\n\n/**\n * 单元格内容超出列宽时截断成省略号：表格级 `ellipsis` 一次管所有列，列上的 `ellipsis` 覆盖它，\n * 那一列想留完整内容就写 `ellipsis: false`。\n *\n * 悬停提示默认就有，但只在真的被截断时才弹（没截断的格子不会多出气泡），内容默认是截断的那段文本。\n */\ninterface Task {\n  key: string;\n  title: string;\n  owner: string;\n  note: string;\n}\n\nconst data: Task[] = [\n  {\n    key: \"1\",\n    title: \"把双仓的表格样式对齐到同一份 LESS\",\n    owner: \"Qiu\",\n    note: \"固定列的宽度基准、相邻固定列的 sticky 偏移、滚动条槽位的占位三处必须用同一份数据，少同步一处就会在临界宽度上露馅，横向能滚的距离也会跟着变。\",\n  },\n  {\n    key: \"2\",\n    title: \"分组表头 + 固定列 + scroll.y\",\n    owner: \"Ann\",\n    note: \"分组表头配上固定列和纵向滚动时，边框、圆角和右下角的空白块最容易出问题，表头分栏之后每格的裁剪范围不同，得逐个组合回归。\",\n  },\n  {\n    key: \"3\",\n    title: \"虚拟滚动窗口\",\n    owner: \"Bob\",\n    note: \"虚拟滚动的窗口起点要按总行数钳上界，否则滚过头会渲染出一段空窗口，保留区高度也会算错，滚动条跟着突然抖动一下。\",\n  },\n];\n\nconst columns: Column<Task>[] = [\n  // 没有 `ellipsis`：跟着表格级走，单行截断。\n  { title: \"任务\", key: \"title\", width: 160 },\n  // 这一列单独关掉：负责人一般很短，被截断反而难看。\n  { title: \"负责人\", key: \"owner\", width: 100, ellipsis: false },\n  // 说明截到三行，提示换成指定内容。\n  {\n    title: \"说明\",\n    key: \"note\",\n    width: 200,\n    ellipsis: { rows: 3, tooltip: \"完整说明请进需求单\" },\n  },\n];\n\nexport default function EllipsisDemo() {\n  const [global, setGlobal] = useState(true);\n  return (\n    <Space vertical>\n      <Space>\n        <Switch checked={global} onChange={(value) => setGlobal(Boolean(value))} />\n        <span>表格级 ellipsis</span>\n      </Space>\n      {/* 容器压到 480px，列宽不够才看得到省略号。 */}\n      <div style={{ maxWidth: 480 }}>\n        <Table data={data} columns={columns} ellipsis={global} rowKey=\"key\" />\n      </div>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "TableColumnSetting",
      "import": "import { TableColumnSetting } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/table",
      "props": [
        {
          "name": "columns",
          "type": "Column<T>[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "列定义；设置面板递归列出所有叶子列，包含分组表头下的子列。",
          "descriptionEn": "Column definitions; the settings list every leaf column recursively, including children of grouped headers."
        },
        {
          "name": "hiddenKeys",
          "type": "(string | number)[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "隐藏列的 key 集合；在变更回调中更新，并把同一值传给 Table 的 `hiddenColumnKeys`。",
          "descriptionEn": "Hidden column keys. Update this value in the change callback and pass the same value to Table's `hiddenColumnKeys`."
        },
        {
          "name": "onHiddenKeysChange",
          "type": "((keys: (string | number)[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "切换列或点击重置时触发，返回新的隐藏列 key 集合。",
          "descriptionEn": "Called with the new hidden keys when a column is toggled or Reset is clicked."
        },
        {
          "name": "disabledKeys",
          "type": "(string | number)[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "不参与设置的列 key；重置时保留这些列的隐藏状态。",
          "descriptionEn": "Column keys excluded from the settings; their hidden state is preserved on reset."
        },
        {
          "name": "title",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "titleProp || locale?.k?.table?.columnSettings || \"Column settings\"",
          "descriptionZh": "弹层标题及默认触发按钮文案。",
          "descriptionEn": "Popup title and default trigger button text."
        },
        {
          "name": "resetText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "resetTextProp || locale?.k?.table?.resetColumns || \"Reset\"",
          "descriptionZh": "重置按钮文案；重置会显示所有可配置列。",
          "descriptionEn": "Reset button text. Reset shows all configurable columns."
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "默认触发按钮及勾选框的尺寸。",
          "descriptionEn": "Size of the default trigger button and checkboxes."
        },
        {
          "name": "showReset",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示重置按钮。",
          "descriptionEn": "Show the reset button."
        },
        {
          "name": "children",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义触发器内容。",
          "descriptionEn": "Custom trigger content."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onHiddenKeysChange",
          "type": "((keys: (string | number)[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "切换列或点击重置时触发，返回新的隐藏列 key 集合。",
          "descriptionEn": "Called with the new hidden keys when a column is toggled or Reset is clicked."
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/table/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { ArrowDown, ArrowUp, Moon, Sun, Trash2 } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, Icon, message, modal, Space, Table, Tag, type Column } from \"react-kui\";\nimport { people, type Person } from \"./data\";\nexport default function App() {\n  const [data, setData] = useState([...people]);\n  const move = (index: number, offset: number) => {\n    const target = index + offset;\n    if (target < 0 || target >= data.length) return;\n    const next = [...data];\n    [next[index], next[target]] = [next[target], next[index]];\n    setData(next);\n  };\n  const columns: Column<Person>[] = [\n    { title: \"Name\", key: \"name\" },\n    { title: \"Age\", key: \"age\" },\n    {\n      title: \"Gender\",\n      key: \"gender\",\n      render: (v) => (\n        <Icon type={v === 1 ? Sun : Moon} color={v === 1 ? \"blue\" : \"#f50cff\"} size={15} />\n      ),\n    },\n    { title: \"Address\", key: \"address\" },\n    {\n      title: \"Tags\",\n      key: \"tags\",\n      render: (tags: string[]) => (\n        <Space>\n          {tags.map((tag) => (\n            <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n              {tag}\n            </Tag>\n          ))}\n        </Space>\n      ),\n    },\n    {\n      title: \"Operate\",\n      key: \"action\",\n      width: 200,\n      render: (_, record, index) => (\n        <Space>\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              move(index, -1);\n            }}\n            icon={ArrowUp}\n          />\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              move(index, 1);\n            }}\n            icon={ArrowDown}\n          />\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              setData(data.filter((_, i) => i !== index));\n            }}\n            icon={Trash2}\n          />\n          <Button\n            size=\"small\"\n            onClick={(e) => {\n              e.stopPropagation();\n              modal.info({ title: \"Hi\", content: `My name is ${record.name}` });\n            }}\n          >\n            more\n          </Button>\n        </Space>\n      ),\n    },\n  ];\n  return (\n    <Table\n      data={data}\n      columns={columns}\n      onRowClick={(record) => message.info(\"Test row click: \" + record.name)}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/tree.tsx",
          "title": "树形数据",
          "source": "import { Tag, Table, type Column } from \"react-kui\";\n\ninterface Department {\n  key: string;\n  name: string;\n  owner: string;\n  members: number;\n  status: \"active\" | \"planning\";\n  children?: Department[];\n}\n\nconst data: Department[] = [\n  {\n    key: \"product\",\n    name: \"Product Center\",\n    owner: \"Alice\",\n    members: 24,\n    status: \"active\",\n    children: [\n      { key: \"design\", name: \"Design Team\", owner: \"Mia\", members: 8, status: \"active\" },\n      {\n        key: \"research\",\n        name: \"Research Team\",\n        owner: \"Leo\",\n        members: 6,\n        status: \"planning\",\n        children: [\n          { key: \"ai-lab\", name: \"AI Lab\", owner: \"Noah\", members: 3, status: \"planning\" },\n        ],\n      },\n    ],\n  },\n  {\n    key: \"engineering\",\n    name: \"Engineering Center\",\n    owner: \"Jack\",\n    members: 36,\n    status: \"active\",\n    children: [\n      { key: \"frontend\", name: \"Frontend Team\", owner: \"Emma\", members: 12, status: \"active\" },\n      { key: \"backend\", name: \"Backend Team\", owner: \"Ethan\", members: 16, status: \"active\" },\n    ],\n  },\n];\n\nconst columns: Column<Department>[] = [\n  { key: \"name\", title: \"Department\", width: 240 },\n  { key: \"owner\", title: \"Owner\" },\n  { key: \"members\", title: \"Members\", sorter: true },\n  {\n    key: \"status\",\n    title: \"Status\",\n    render: (status) => <Tag color={status === \"active\" ? \"green\" : \"gold\"}>{String(status)}</Tag>,\n  },\n];\n\nexport default function App() {\n  return (\n    <Table\n      bordered\n      checkable\n      expandRowByClick\n      expandedKeys={[\"product\"]}\n      data={data}\n      columns={columns}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/base-render.tsx",
          "title": "基本用法(使用render)",
          "source": "import { Moon, Sun } from \"kui-icons\";\nimport { Button, Icon, modal, Space, Tag, Table, type Column } from \"react-kui\";\nimport { people, type Person } from \"./data\";\nconst columns: Column<Person>[] = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Age\", key: \"age\" },\n  {\n    title: \"Gender\",\n    key: \"gender\",\n    render: (value) => (\n      <Icon type={value === 1 ? Sun : Moon} color={value === 1 ? \"blue\" : \"#f50cff\"} size={15} />\n    ),\n  },\n  { title: \"Address\", key: \"address\" },\n  {\n    title: \"Tags\",\n    key: \"tags\",\n    render: (tags: string[]) => (\n      <Space>\n        {tags.map((tag) => (\n          <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n            {tag}\n          </Tag>\n        ))}\n      </Space>\n    ),\n  },\n  {\n    title: \"Operate\",\n    key: \"action\",\n    render: (_, record) => (\n      <Button\n        size=\"small\"\n        onClick={() => modal.info({ title: \"More\", content: `My name is ${record.name}` })}\n      >\n        more\n      </Button>\n    ),\n  },\n];\nexport default function App() {\n  return <Table data={people} columns={columns} />;\n}"
        },
        {
          "id": "components/table/demo/custom-header.tsx",
          "title": "自定义表头",
          "source": "import { CircleAlert } from \"kui-icons\";\nimport { Button, Flex, Icon, modal, Tooltip, Table, type Column } from \"react-kui\";\nconst data = [\n  { key: \"0\", name: \"Li Lei\", age: 32, address: \"Wu Han Guanggu No. 328\" },\n  { key: \"1\", name: \"Liu Hao\", age: 28, address: \"Wu Han Hongshan No. 128\" },\n  { key: \"2\", name: \"Hu Cong\", age: 28, address: \"Wu Han Nanhu No. 198\" },\n  { key: \"3\", name: \"Qiu\", age: 28, address: \"Wu Han Nanhu No. 188\" },\n];\ntype Row = (typeof data)[number];\nconst header = (tip: string) => (column: Column<Row>) => (\n  <Flex size=\"small\">\n    {column.title}\n    <Tooltip title={tip}>\n      <Icon type={CircleAlert} size={18} color=\"#777\" />\n    </Tooltip>\n  </Flex>\n);\nconst columns: Column<Row>[] = [\n  { title: \"Name\", key: \"name\" },\n  { title: \"Age\", key: \"age\", renderHeader: header(\"How old are you?\") },\n  { title: \"Address\", key: \"address\", renderHeader: header(\"Where are you from?\") },\n  {\n    title: \"Operate\",\n    key: \"action\",\n    width: 90,\n    render: (_, record) => (\n      <Button\n        size=\"small\"\n        onClick={() => modal.info({ title: \"More\", content: `My name is ${record.name}` })}\n      >\n        more\n      </Button>\n    ),\n  },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} />;\n}"
        },
        {
          "id": "components/table/demo/bordered.tsx",
          "title": "自定义页头和页脚",
          "source": "import { Table, type Column } from \"react-kui\";\nconst data = [\n  { key: \"0\", fullname: \"Li Lei\", price: 18990, address: \"Wu Han Guanggu No. 328\" },\n  { key: \"1\", fullname: \"Liu Hao\", price: 23900, address: \"Wu Han Hongshan No. 128\" },\n  { key: \"2\", fullname: \"Hu Cong\", price: 12000, address: \"Wu Han Nanhu No. 198\" },\n  { key: \"3\", fullname: \"Qiu\", price: 28000, address: \"Wu Han Nanhu No. 188\" },\n];\nconst columns: Column<(typeof data)[number]>[] = [\n  { title: \"Name\", key: \"fullname\", render: (value) => <a>{String(value ?? \"\")}</a> },\n  {\n    title: \"Housing price\",\n    key: \"price\",\n    render: (value) => (\n      <span style={{ color: Number(value) > 20000 ? \"red\" : undefined }}>\n        ￥{Number(value)}/㎡\n      </span>\n    ),\n  },\n  { title: \"Address\", key: \"address\" },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} bordered header=\"Header\" footer=\"Footer\" />;\n}"
        },
        {
          "id": "components/table/demo/table-sorter.tsx",
          "title": "排序",
          "source": "import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Table, type Column, type SortState } from \"react-kui\";\ninterface Row {\n  key: string;\n  name: string;\n  age: number;\n  mail: string;\n}\nconst source: Row[] = [\n  { key: \"0\", name: \"Qiu\", age: 32, mail: \"chuchur@qq.com\" },\n  { key: \"3\", name: \"Wang Kang\", age: 26, mail: \"wangkang@gmail.com\" },\n  { key: \"2\", name: \"Liu Hao\", age: 27, mail: \"liuhao@162.com\" },\n  { key: \"1\", name: \"Li Lei\", age: 33, mail: \"hanlin@hotmail.com\" },\n  { key: \"4\", name: \"Hu Cong\", age: 25, mail: \"hucong@163.com\" },\n];\nexport default function App() {\n  const [data, setData] = useState<Row[]>([]),\n    [loading, setLoading] = useState(false),\n    timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const fetchData = useCallback((key?: string, order?: SortState[\"order\"]) => {\n    console.log(key, order);\n    setLoading(true);\n    if (timer.current) clearTimeout(timer.current);\n    timer.current = setTimeout(() => {\n      setData([...source]);\n      setLoading(false);\n    }, 2000);\n  }, []);\n  useEffect(() => {\n    const initialTimer = setTimeout(fetchData, 0);\n    return () => {\n      clearTimeout(initialTimer);\n      if (timer.current) clearTimeout(timer.current);\n    };\n  }, [fetchData]);\n  const columns: Column<Row>[] = [\n    { title: \"Name\", key: \"name\", sorter: true },\n    { title: \"Age\", key: \"age\", sorter: true },\n    { title: \"Email\", key: \"mail\", sorter: (state) => fetchData(\"mail\", state.order) },\n  ];\n  return (\n    <Table\n      data={data}\n      columns={columns}\n      loading={loading}\n      onSort={({ key, order }) => console.log(key, order)}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/col-row-span.tsx",
          "title": "表格行/列合并",
          "source": "import { Table, type Column } from \"react-kui\";\nconst data = [\n  { key: \"1\", name: \"Jim\", age: 25, city: \"Beijing\" },\n  { key: \"2\", name: \"Allen\", age: 30, city: \"Wuhan\" },\n  { key: \"3\", name: \"Qiu\", age: 35, city: \"Wuhan\" },\n  { key: \"4\", name: \"Jake\", age: 40, city: \"Shanghai\" },\n  { key: \"5\", name: \"Mask\", age: 38, city: \"Wuhan\" },\n];\nconst columns: Column<(typeof data)[number]>[] = [\n  { title: \"Name\", key: \"name\", width: 100, rowSpan: (_, index) => (index === 2 ? 2 : 1) },\n  { title: \"Age\", key: \"age\", width: 100, colSpan: (_, index) => (index === 1 ? 2 : 1) },\n  { title: \"City\", key: \"city\", width: 100 },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} bordered />;\n}"
        },
        {
          "id": "components/table/demo/table-edit.tsx",
          "title": "可编辑单元格",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Input, message, Popconfirm, Space, Table, type Column } from \"react-kui\";\ninterface Row {\n  key: string;\n  name: string;\n  age: number | string;\n  address: string;\n  isEdit: boolean;\n}\nconst initial: Row[] = [\n  { key: \"0\", name: \"Li Lei\", age: 28, address: \"Wu Han Guanggu No. 328\", isEdit: false },\n  { key: \"1\", name: \"Liu Hao\", age: 30, address: \"Wu Han Hongshan No. 128\", isEdit: false },\n  { key: \"2\", name: \"Hu Cong\", age: 28, address: \"Wu Han Nanhu No. 198\", isEdit: false },\n  { key: \"3\", name: \"Qiu\", age: 32, address: \"Wu Han Nanhu No. 188\", isEdit: false },\n];\nexport default function App() {\n  const [data, setData] = useState(initial),\n    count = useRef(4);\n  const patch = (key: string, values: Partial<Row>) =>\n    setData((rows) => rows.map((row) => (row.key === key ? { ...row, ...values } : row)));\n  const field = (key: keyof Row) => (value: unknown, record: Row) =>\n    record.isEdit ? (\n      <Input\n        value={typeof value === \"string\" || typeof value === \"number\" ? value : \"\"}\n        onChange={(next) => patch(record.key, { [key]: next })}\n        size=\"small\"\n      />\n    ) : (\n      String(value)\n    );\n  const columns: Column<Row>[] = [\n    { title: \"Name\", key: \"name\", render: field(\"name\") },\n    { title: \"House price\", key: \"age\", render: field(\"age\") },\n    { title: \"Address\", key: \"address\", render: field(\"address\") },\n    {\n      title: \"Operate\",\n      key: \"action\",\n      render: (_, record) => (\n        <Space>\n          {!record.isEdit ? (\n            <Button size=\"small\" type=\"primary\" onClick={() => patch(record.key, { isEdit: true })}>\n              Edit\n            </Button>\n          ) : (\n            <>\n              <Button\n                size=\"small\"\n                type=\"primary\"\n                onClick={() => {\n                  patch(record.key, { isEdit: false });\n                  message.success(\"Save successfully!\");\n                }}\n              >\n                Save\n              </Button>\n              <Button size=\"small\" onClick={() => patch(record.key, { isEdit: false })}>\n                Cancel\n              </Button>\n            </>\n          )}{\" \"}\n          {!record.isEdit && (\n            <Popconfirm\n              title=\"Are you sure delete this content?\"\n              onOk={() => setData((rows) => rows.filter((row) => row.key !== record.key))}\n            >\n              <Button size=\"small\" type=\"danger\">\n                Delete\n              </Button>\n            </Popconfirm>\n          )}\n        </Space>\n      ),\n    },\n  ];\n  const add = () => {\n    const key = String(count.current++);\n    setData((rows) => [\n      ...rows,\n      { key, name: `Name ${key}`, age: 30, address: `China Wuhan no.${key}`, isEdit: false },\n    ]);\n  };\n  return (\n    <>\n      <Button onClick={add}>Add</Button>\n      <Table data={data} columns={columns} bordered />\n    </>\n  );\n}"
        },
        {
          "id": "components/table/demo/fixed-col-header.tsx",
          "title": "固定头/列",
          "source": "import { Button, Table, type Column } from \"react-kui\";\nconst middle: Column[] = [];\nconst values: Record<string, string> = {};\nfor (let i = 0; i < 20; i++) {\n  middle.push({ title: `Col${i}`, key: `address${i}`, width: 150 });\n  values[`address${i}`] = \"Hubei Wuhan SoftBase No.128\";\n}\nconst data = Array.from({ length: 10 }, (_, i) => ({\n  key: i,\n  name: \"Han Mei\",\n  age: 28,\n  ...values,\n}));\nconst columns: Column[] = [\n  { title: \"Name\", key: \"name\", fixed: \"left\" },\n  { title: \"Age\", key: \"age\", fixed: \"left\" },\n  ...middle,\n  // 分组父列上的 `fixed` 会继承给它的每个叶子列，整组一起固定\n  {\n    title: \"Operate\",\n    key: \"operate\",\n    fixed: \"right\",\n    children: [\n      {\n        title: \"Edit\",\n        key: \"action\",\n        render: () => <Button size=\"small\">test</Button>,\n      },\n      {\n        title: \"More\",\n        key: \"action1\",\n        render: () => <Button size=\"small\">test2</Button>,\n      },\n    ],\n  },\n];\nexport default function App() {\n  return <Table data={data} columns={columns} scroll={{ y: 300 }} />;\n}"
        },
        {
          "id": "components/table/demo/header-span.tsx",
          "title": "表头分组",
          "source": "import { Table, type Column } from \"react-kui\";\nconst data = Array.from({ length: 10 }, (_, i) => ({\n  key: i,\n  name: \"John Brown\",\n  age: i + 1,\n  street: \"Lake Park\",\n  building: \"C\",\n  number: 2035,\n  companyAddress: \"Lake Street 42\",\n  companyName: \"SoftLake Co\",\n  gender: \"M\",\n}));\nconst columns: Column[] = [\n  { title: \"Name\", key: \"name\", width: 120, fixed: \"left\" },\n  {\n    title: \"Other\",\n    key: \"other\",\n    children: [\n      { title: \"Age\", key: \"age\", width: 100, sorter: true },\n      {\n        title: \"Address\",\n        key: \"address\",\n        children: [\n          { title: \"Street\", key: \"street\", width: 140 },\n          {\n            title: \"Block\",\n            key: \"block\",\n            children: [\n              { title: \"Building\", key: \"building\", width: 120 },\n              { title: \"Door No.\", key: \"number\", width: 120 },\n            ],\n          },\n        ],\n      },\n    ],\n  },\n  {\n    title: \"Company\",\n    key: \"company\",\n    children: [\n      { title: \"Company Address\", key: \"companyAddress\", width: 200 },\n      { title: \"Company Name\", key: \"companyName\", width: 200 },\n    ],\n  },\n  { title: \"Gender\", key: \"gender\", width: 100, fixed: \"right\" },\n];\nexport default function App() {\n  // `scroll.x` 按叶子列宽度之和给（120+100+140+120+120+200+200+100 = 1_100）。\n  // 不给的话这些窄列会被挤到十几个像素，表头文字竖排换行，四层表头能长到 400 多 px，\n  // 比 `scroll.y` 的可视高度还高，等于把表体整个顶出可视区。\n  return <Table data={data} columns={columns} bordered scroll={{ x: 1_100, y: 300 }} />;\n}"
        },
        {
          "id": "components/table/demo/table-check.tsx",
          "title": "勾选",
          "source": "import { useState } from \"react\";\nimport { Space, Tag, Table, type Column } from \"react-kui\";\nimport { basicColumns, people, type Person } from \"./data\";\nconst columns: Column<Person>[] = [\n  ...basicColumns.map((column) =>\n    column.key === \"tags\"\n      ? {\n          ...column,\n          render: (tags: string[]) => (\n            <Space>\n              {tags.map((tag) => (\n                <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n                  {tag}\n                </Tag>\n              ))}\n            </Space>\n          ),\n        }\n      : column\n  ),\n  {\n    title: \"Operate\",\n    key: \"action\",\n    render: () => (\n      <Space>\n        <a href=\"#\">Edit</a>\n        <a href=\"#\">Delete</a>\n      </Space>\n    ),\n  },\n];\nexport default function App() {\n  const [selectedKeys, setSelectedKeys] = useState<Array<string | number>>([]);\n  return (\n    <>\n      <code>selectedKeys: {selectedKeys.join(\", \")}</code>\n      <Table\n        data={people}\n        columns={columns}\n        checkable\n        selectedKeys={selectedKeys}\n        onSelectedKeysChange={setSelectedKeys}\n      />\n    </>\n  );\n}"
        },
        {
          "id": "components/table/demo/nested-value.tsx",
          "title": "嵌套取值",
          "source": "import { Table, type Column } from \"react-kui\";\n\n/**\n * 嵌套数据不需要先拍平：列 `key`、`rowKey`、`childrenColumnName` 都可以写成 `a.b` 点路径。\n * 整名优先，所以字段名本身带点号时仍按整名取值；下钻途中缺字段只会渲染成空，不会抛错。\n */\ninterface Member {\n  meta: { uid: string };\n  profile: { name: string; city?: string };\n  tags?: string[];\n  rows?: { items: Member[] };\n}\n\nconst data: Member[] = [\n  {\n    meta: { uid: \"design\" },\n    profile: { name: \"Design Guild\", city: \"Hangzhou\" },\n    tags: [\"Studio\", \"Brand\"],\n    rows: {\n      items: [\n        { meta: { uid: \"ann\" }, profile: { name: \"Ann\", city: \"Hangzhou\" }, tags: [\"Studio\"] },\n        { meta: { uid: \"bob\" }, profile: { name: \"Bob\" } },\n      ],\n    },\n  },\n  {\n    meta: { uid: \"front-end\" },\n    profile: { name: \"Front-end Guild\", city: \"Shanghai\" },\n    tags: [\"Kui\"],\n    rows: {\n      items: [\n        {\n          meta: { uid: \"cara\" },\n          profile: { name: \"Cara\", city: \"Shanghai\" },\n          tags: [\"Kui\", \"Charts\"],\n        },\n      ],\n    },\n  },\n];\n\nconst columns: Column<Member>[] = [\n  { title: \"Name\", key: \"profile.name\", sorter: true },\n  { title: \"City\", key: \"profile.city\" },\n  { title: \"Primary tag\", key: \"tags.0\" },\n  { title: \"Secondary tag\", key: \"tags.1\" },\n];\n\nexport default function NestedValueDemo() {\n  return (\n    <Table\n      data={data}\n      columns={columns}\n      rowKey=\"meta.uid\"\n      childrenColumnName=\"rows.items\"\n      expandAllRows\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/control.tsx",
          "title": "动态控制表格属性",
          "source": "import { Moon, Sun } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Button,\n  type SizeType,\n  Icon,\n  RadioGroup,\n  Space,\n  Switch,\n  Tag,\n  Table,\n  type Column,\n} from \"react-kui\";\nimport { people, type Person } from \"./data\";\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [bordered, setBordered] = useState(true),\n    [loading, setLoading] = useState(false),\n    [checkable, setCheckable] = useState(false),\n    [empty, setEmpty] = useState(false),\n    [striped, setStriped] = useState(false);\n  const columns: Column<Person>[] = [\n    { title: \"Name\", key: \"name\" },\n    { title: \"Age\", key: \"age\", sorter: true },\n    {\n      title: \"Gender\",\n      key: \"gender\",\n      render: (value) => (\n        <Icon type={value === 1 ? Moon : Sun} color={value === 1 ? \"blue\" : \"#f50cff\"} size={15} />\n      ),\n    },\n    { title: \"Address\", key: \"address\" },\n    {\n      title: \"Tags\",\n      key: \"tags\",\n      render: (tags: string[]) => (\n        <Space>\n          {tags.map((tag) => (\n            <Tag key={tag} color={tag === \"Python\" ? \"green\" : \"blue\"}>\n              {tag}\n            </Tag>\n          ))}\n        </Space>\n      ),\n    },\n    { title: \"Operate\", key: \"action\", render: () => <Button size=\"small\">test</Button> },\n  ];\n  return (\n    <div>\n      <Space wrap>\n        Size:{\" \"}\n        <RadioGroup\n          value={size}\n          onChange={setSize}\n          size=\"small\"\n          type=\"button\"\n          options={[\"large\", \"medium\", \"small\"].map((value) => ({ value, label: value }))}\n        />\n        Border: <Switch checked={bordered} onChange={(value) => setBordered(Boolean(value))} />\n        Loading: <Switch checked={loading} onChange={(value) => setLoading(Boolean(value))} />\n        Checkbox: <Switch checked={checkable} onChange={(value) => setCheckable(Boolean(value))} />\n        Empty: <Switch checked={empty} onChange={(value) => setEmpty(Boolean(value))} />\n        Striped: <Switch checked={striped} onChange={(value) => setStriped(Boolean(value))} />\n      </Space>\n      <Table\n        data={empty ? [] : people}\n        columns={columns}\n        loading={loading}\n        size={size}\n        striped={striped}\n        bordered={bordered}\n        checkable={checkable}\n        header={<div>header</div>}\n        footer={<div>footer</div>}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/table/demo/virtual.tsx",
          "title": "虚拟滚动",
          "source": "import { Table, type Column } from \"react-kui\";\n\nconst data = Array.from({ length: 10000 }, (_, index) => ({\n  key: index + 1,\n  name: `User ${index + 1}`,\n  email: `user${index + 1}@example.com`,\n  status: index % 3 === 0 ? \"Active\" : \"Pending\",\n}));\n\nconst columns: Column[] = [\n  { title: \"ID\", key: \"key\", width: 100 },\n  { title: \"Name\", key: \"name\", width: 200 },\n  { title: \"Email\", key: \"email\", width: 200 },\n  { title: \"Email1\", key: \"email1\", width: 100 },\n  { title: \"Email2\", key: \"email2\", width: 100 },\n  { title: \"Email3\", key: \"email3\", width: 100 },\n  { title: \"Email4\", key: \"email4\", width: 100 },\n  { title: \"Email5\", key: \"email5\", width: 100 },\n  { title: \"Status\", key: \"status\", width: 140, fixed: \"right\" },\n];\n\nexport default function VirtualDemo() {\n  return (\n    <Table\n      virtual\n      striped\n      data={data}\n      columns={columns}\n      scroll={{ x: 900, y: 360 }}\n      itemHeight={44}\n      overscan={6}\n    />\n  );\n}"
        },
        {
          "id": "components/table/demo/column-setting.tsx",
          "title": "列设置",
          "source": "import { useState } from \"react\";\nimport { Space, Table, TableColumnSetting, type Column } from \"react-kui\";\n\nconst columns: Column[] = [\n  { title: \"姓名\", key: \"name\" },\n  { title: \"部门\", key: \"department\" },\n  { title: \"状态\", key: \"status\" },\n];\n\nconst data = [\n  { key: 1, name: \"林晓\", department: \"产品中心\", status: \"正常\" },\n  { key: 2, name: \"张三\", department: \"技术中心\", status: \"正常\" },\n  { key: 3, name: \"李四\", department: \"市场中心\", status: \"暂停\" },\n];\n\nexport default function ColumnSettingDemo() {\n  const [hiddenKeys, setHiddenKeys] = useState<(string | number)[]>([]);\n\n  return (\n    <Space vertical>\n      <TableColumnSetting\n        columns={columns}\n        hiddenKeys={hiddenKeys}\n        onHiddenKeysChange={setHiddenKeys}\n        disabledKeys={[\"name\"]}\n        title=\"显示列\"\n        resetText=\"重置\"\n      />\n      <Table data={data} columns={columns} hiddenColumnKeys={hiddenKeys} />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/table/demo/ellipsis.tsx",
          "title": "省略号",
          "source": "import { Space, Switch, Table, type Column } from \"react-kui\";\nimport { useState } from \"react\";\n\n/**\n * 单元格内容超出列宽时截断成省略号：表格级 `ellipsis` 一次管所有列，列上的 `ellipsis` 覆盖它，\n * 那一列想留完整内容就写 `ellipsis: false`。\n *\n * 悬停提示默认就有，但只在真的被截断时才弹（没截断的格子不会多出气泡），内容默认是截断的那段文本。\n */\ninterface Task {\n  key: string;\n  title: string;\n  owner: string;\n  note: string;\n}\n\nconst data: Task[] = [\n  {\n    key: \"1\",\n    title: \"把双仓的表格样式对齐到同一份 LESS\",\n    owner: \"Qiu\",\n    note: \"固定列的宽度基准、相邻固定列的 sticky 偏移、滚动条槽位的占位三处必须用同一份数据，少同步一处就会在临界宽度上露馅，横向能滚的距离也会跟着变。\",\n  },\n  {\n    key: \"2\",\n    title: \"分组表头 + 固定列 + scroll.y\",\n    owner: \"Ann\",\n    note: \"分组表头配上固定列和纵向滚动时，边框、圆角和右下角的空白块最容易出问题，表头分栏之后每格的裁剪范围不同，得逐个组合回归。\",\n  },\n  {\n    key: \"3\",\n    title: \"虚拟滚动窗口\",\n    owner: \"Bob\",\n    note: \"虚拟滚动的窗口起点要按总行数钳上界，否则滚过头会渲染出一段空窗口，保留区高度也会算错，滚动条跟着突然抖动一下。\",\n  },\n];\n\nconst columns: Column<Task>[] = [\n  // 没有 `ellipsis`：跟着表格级走，单行截断。\n  { title: \"任务\", key: \"title\", width: 160 },\n  // 这一列单独关掉：负责人一般很短，被截断反而难看。\n  { title: \"负责人\", key: \"owner\", width: 100, ellipsis: false },\n  // 说明截到三行，提示换成指定内容。\n  {\n    title: \"说明\",\n    key: \"note\",\n    width: 200,\n    ellipsis: { rows: 3, tooltip: \"完整说明请进需求单\" },\n  },\n];\n\nexport default function EllipsisDemo() {\n  const [global, setGlobal] = useState(true);\n  return (\n    <Space vertical>\n      <Space>\n        <Switch checked={global} onChange={(value) => setGlobal(Boolean(value))} />\n        <span>表格级 ellipsis</span>\n      </Space>\n      {/* 容器压到 480px，列宽不够才看得到省略号。 */}\n      <div style={{ maxWidth: 480 }}>\n        <Table data={data} columns={columns} ellipsis={global} rowKey=\"key\" />\n      </div>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Tooltip",
      "import": "import { Tooltip } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tooltip",
      "props": [
        {
          "name": "trigger",
          "type": "\"manual\" | \"hover\" | undefined",
          "required": false,
          "enumValues": [
            "manual",
            "hover"
          ],
          "boolean": false,
          "defaultExpression": "\"hover\"",
          "descriptionZh": "自动悬停触发或手动控制显隐",
          "descriptionEn": "Automatic hover or manual visibility"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "显示状态",
          "descriptionEn": "visibility"
        },
        {
          "name": "show",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "已废弃，请使用 `open`",
          "descriptionEn": "Deprecated; use `open` instead"
        },
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的标题",
          "descriptionEn": "Displayed title"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "背景颜色",
          "descriptionEn": "Background color"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "禁用状态",
          "descriptionEn": "Disabled status"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展示的宽度,默认为内容区域的大小",
          "descriptionEn": "Display width, defaults to content area size"
        },
        {
          "name": "placement",
          "type": "PlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right",
            "left",
            "left-bottom",
            "left-top",
            "right",
            "right-top",
            "right-bottom"
          ],
          "boolean": false,
          "defaultExpression": "\"top\"",
          "descriptionZh": "提示框出现的位置，可选值为`top`，`top-left`，`top-right`，`bottom`，`bottom-left`，`bottom-right`，`left`，`left-top`，`left-bottom`，`right`，`right-top`，`right-bottom`",
          "descriptionEn": "Position where tooltip appears, optional values: `top`, `top-left`, `top-right`, `bottom`, `bottom-left`, `bottom-right`, `left`, `left-top`, `left-bottom`, `right`, `right-top`, `right-bottom`"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "只渲染浮层本身，不包含触发元素、定位与动画",
          "descriptionEn": "Render only the tooltip itself, without trigger, positioning, or animation"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "提示的触发内容；提示文本使用 title。",
          "descriptionEn": "Tooltip trigger content; provide tooltip text through title."
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "renderProps": [
        "title",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/tooltip/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, Tooltip } from \"react-kui\";\nexport default function App() {\n  const [clicked, setClicked] = useState(false);\n  return (\n    <Space vertical>\n      <Tooltip title=\"How to behave?\">\n        <a href=\"#\">Hover me</a>\n      </Tooltip>\n      <Tooltip title={clicked ? \"How are you?\" : \"I'm fine!\"}>\n        <a\n          href=\"#\"\n          onClick={(event) => {\n            event.preventDefault();\n            setClicked((value) => !value);\n          }}\n        >\n          Click me!\n        </a>\n      </Tooltip>\n      <Tooltip title=\"Default show\" open>\n        <a href=\"#\">Default show</a>\n      </Tooltip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tooltip/demo/placement.tsx",
          "title": "位置",
          "source": "import { Button, Flex, Space, Tooltip } from \"react-kui\";\nconst title = \"Title\";\nconst item = (placement: Parameters<typeof Tooltip>[0][\"placement\"], label: string) => (\n  <Tooltip key={placement} placement={placement} title={title}>\n    <Button>{label}</Button>\n  </Tooltip>\n);\nexport default function App() {\n  return (\n    <Flex style={{ width: 300 }} vertical align=\"center\">\n      <Space compact>\n        {item(\"top-left\", \"TL\")}\n        {item(\"top\", \"Top\")}\n        {item(\"top-right\", \"TR\")}\n      </Space>\n      <Flex justify=\"space-between\" style={{ width: \"100%\", padding: \"10px 0\" }}>\n        <Space vertical compact>\n          {item(\"left-top\", \"LT\")}\n          {item(\"left\", \"Left\")}\n          {item(\"left-bottom\", \"LB\")}\n        </Space>\n        <Space vertical compact>\n          {item(\"right-top\", \"RT\")}\n          {item(\"right\", \"Right\")}\n          {item(\"right-bottom\", \"RB\")}\n        </Space>\n      </Flex>\n      <Space compact>\n        {item(\"bottom-left\", \"BL\")}\n        {item(\"bottom\", \"Bottom\")}\n        {item(\"bottom-right\", \"BR\")}\n      </Space>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/tooltip/demo/color.tsx",
          "title": "多彩文字提示",
          "source": "import { Divider, Space, Tag, Tooltip } from \"react-kui\";\nconst custom = [\"#c20\", \"#39f\", \"#e3f\", \"#6c0\"],\n  colors = [\n    \"pink\",\n    \"red\",\n    \"yellow\",\n    \"orange\",\n    \"cyan\",\n    \"green\",\n    \"blue\",\n    \"purple\",\n    \"magenta\",\n    \"volcano\",\n    \"gold\",\n    \"lime\",\n  ];\nconst list = (values: string[]) =>\n  values.map((color) => (\n    <Tooltip key={color} color={color} title={color}>\n      <Tag color={color}>{color}</Tag>\n    </Tooltip>\n  ));\nexport default function App() {\n  return (\n    <div className=\"demo-tooltip-color\">\n      <Divider orientation=\"left\">Presets:</Divider>\n      <Space wrap>{list(colors)}</Space>\n      <Divider orientation=\"left\">Custom:</Divider>\n      <Space>{list(custom)}</Space>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "TooltipPanel",
      "import": "import { TooltipPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tooltip",
      "props": [
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示的标题",
          "descriptionEn": "Displayed title"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "背景颜色",
          "descriptionEn": "Background color"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "禁用状态",
          "descriptionEn": "Disabled status"
        },
        {
          "name": "placement",
          "type": "PlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right",
            "left",
            "left-bottom",
            "left-top",
            "right",
            "right-top",
            "right-bottom"
          ],
          "boolean": false,
          "descriptionZh": "提示框出现的位置，可选值为`top`，`top-left`，`top-right`，`bottom`，`bottom-left`，`bottom-right`，`left`，`left-top`，`left-bottom`，`right`，`right-top`，`right-bottom`",
          "descriptionEn": "Position where tooltip appears, optional values: `top`, `top-left`, `top-right`, `bottom`, `bottom-left`, `bottom-right`, `left`, `left-top`, `left-bottom`, `right`, `right-top`, `right-bottom`"
        },
        {
          "name": "trigger",
          "type": "\"manual\" | \"hover\" | undefined",
          "required": false,
          "enumValues": [
            "manual",
            "hover"
          ],
          "boolean": false,
          "descriptionZh": "自动悬停触发或手动控制显隐",
          "descriptionEn": "Automatic hover or manual visibility"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "panelOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "只渲染浮层本身，不包含触发元素、定位与动画",
          "descriptionEn": "Render only the tooltip itself, without trigger, positioning, or animation"
        },
        {
          "name": "width",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展示的宽度,默认为内容区域的大小",
          "descriptionEn": "Display width, defaults to content area size"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化时触发",
          "descriptionEn": "Called when visibility is requested to change"
        },
        {
          "name": "onShowChange",
          "type": "((show: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "已废弃，请使用 `onOpenChange`",
          "descriptionEn": "Deprecated; use `onOpenChange` instead"
        }
      ],
      "renderProps": [
        "title"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/tooltip/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, Tooltip } from \"react-kui\";\nexport default function App() {\n  const [clicked, setClicked] = useState(false);\n  return (\n    <Space vertical>\n      <Tooltip title=\"How to behave?\">\n        <a href=\"#\">Hover me</a>\n      </Tooltip>\n      <Tooltip title={clicked ? \"How are you?\" : \"I'm fine!\"}>\n        <a\n          href=\"#\"\n          onClick={(event) => {\n            event.preventDefault();\n            setClicked((value) => !value);\n          }}\n        >\n          Click me!\n        </a>\n      </Tooltip>\n      <Tooltip title=\"Default show\" open>\n        <a href=\"#\">Default show</a>\n      </Tooltip>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tooltip/demo/placement.tsx",
          "title": "位置",
          "source": "import { Button, Flex, Space, Tooltip } from \"react-kui\";\nconst title = \"Title\";\nconst item = (placement: Parameters<typeof Tooltip>[0][\"placement\"], label: string) => (\n  <Tooltip key={placement} placement={placement} title={title}>\n    <Button>{label}</Button>\n  </Tooltip>\n);\nexport default function App() {\n  return (\n    <Flex style={{ width: 300 }} vertical align=\"center\">\n      <Space compact>\n        {item(\"top-left\", \"TL\")}\n        {item(\"top\", \"Top\")}\n        {item(\"top-right\", \"TR\")}\n      </Space>\n      <Flex justify=\"space-between\" style={{ width: \"100%\", padding: \"10px 0\" }}>\n        <Space vertical compact>\n          {item(\"left-top\", \"LT\")}\n          {item(\"left\", \"Left\")}\n          {item(\"left-bottom\", \"LB\")}\n        </Space>\n        <Space vertical compact>\n          {item(\"right-top\", \"RT\")}\n          {item(\"right\", \"Right\")}\n          {item(\"right-bottom\", \"RB\")}\n        </Space>\n      </Flex>\n      <Space compact>\n        {item(\"bottom-left\", \"BL\")}\n        {item(\"bottom\", \"Bottom\")}\n        {item(\"bottom-right\", \"BR\")}\n      </Space>\n    </Flex>\n  );\n}"
        },
        {
          "id": "components/tooltip/demo/color.tsx",
          "title": "多彩文字提示",
          "source": "import { Divider, Space, Tag, Tooltip } from \"react-kui\";\nconst custom = [\"#c20\", \"#39f\", \"#e3f\", \"#6c0\"],\n  colors = [\n    \"pink\",\n    \"red\",\n    \"yellow\",\n    \"orange\",\n    \"cyan\",\n    \"green\",\n    \"blue\",\n    \"purple\",\n    \"magenta\",\n    \"volcano\",\n    \"gold\",\n    \"lime\",\n  ];\nconst list = (values: string[]) =>\n  values.map((color) => (\n    <Tooltip key={color} color={color} title={color}>\n      <Tag color={color}>{color}</Tag>\n    </Tooltip>\n  ));\nexport default function App() {\n  return (\n    <div className=\"demo-tooltip-color\">\n      <Divider orientation=\"left\">Presets:</Divider>\n      <Space wrap>{list(colors)}</Space>\n      <Divider orientation=\"left\">Custom:</Divider>\n      <Space>{list(custom)}</Space>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Tour",
      "import": "import { Tour } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tour",
      "props": [
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "显示状态",
          "descriptionEn": "visibility"
        },
        {
          "name": "current",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前步骤",
          "descriptionEn": "step"
        },
        {
          "name": "steps",
          "type": "TourStep[]",
          "required": true,
          "boolean": false,
          "descriptionZh": "引导步骤",
          "descriptionEn": "Tour steps"
        },
        {
          "name": "mask",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "显示遮罩",
          "descriptionEn": "Show mask"
        },
        {
          "name": "closable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "显示关闭按钮",
          "descriptionEn": "Show close action"
        },
        {
          "name": "onChange",
          "type": "((current: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "步骤变化",
          "descriptionEn": "Step change"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化",
          "descriptionEn": "Visibility change"
        },
        {
          "name": "onFinish",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "完成引导",
          "descriptionEn": "Tour completed"
        }
      ],
      "nativeProps": [],
      "nativeValueTypes": {},
      "events": [
        {
          "name": "onChange",
          "type": "((current: number) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "步骤变化",
          "descriptionEn": "Step change"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "显示状态变化",
          "descriptionEn": "Visibility change"
        },
        {
          "name": "onFinish",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "完成引导",
          "descriptionEn": "Tour completed"
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/tour/demo/basic.tsx",
          "title": "基础用法",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Space, Tour } from \"react-kui\";\nexport default function App() {\n  const first = useRef<HTMLButtonElement>(null);\n  const second = useRef<HTMLButtonElement>(null);\n  const [open, setOpen] = useState(false);\n  return (\n    <>\n      <Space>\n        <Button ref={first}>创建项目</Button>\n        <Button ref={second}>发布</Button>\n        <Button onClick={() => setOpen(true)}>开始引导</Button>\n      </Space>\n      <Tour\n        open={open}\n        onOpenChange={setOpen}\n        steps={[\n          { target: () => first.current, title: \"创建\", description: \"从这里建立一个新项目。\" },\n          {\n            target: () => second.current,\n            title: \"发布\",\n            description: \"准备好以后将内容发布。\",\n            placement: \"left\",\n          },\n        ]}\n      />\n    </>\n  );\n}"
        },
        {
          "id": "components/tour/demo/controlled.tsx",
          "title": "受控模式",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Tour } from \"react-kui\";\n\nexport default function App() {\n  const [open, setOpen] = useState(false);\n  const [current, setCurrent] = useState(0);\n  const steps = [\n    { title: \"欢迎\", description: \"Tour 也可以不绑定页面目标。\" },\n    { title: \"受控步骤\", description: \"current 与 change 由业务状态管理。\" },\n    { title: \"完成\", description: \"完成后将步骤重置。\" },\n  ];\n\n  return (\n    <>\n      <Space vertical>\n        <Button onClick={() => setOpen(true)}>从当前步骤开始</Button>\n        <span>当前步骤：{current + 1}</span>\n      </Space>\n      <Tour\n        open={open}\n        current={current}\n        onChange={setCurrent}\n        onOpenChange={setOpen}\n        onFinish={() => setCurrent(0)}\n        steps={steps}\n      />\n    </>\n  );\n}"
        },
        {
          "id": "components/tour/demo/mask.tsx",
          "title": "蒙层",
          "source": "import { useState } from \"react\";\nimport { Button, Tour } from \"react-kui\";\n\nexport default function App() {\n  const [open, setOpen] = useState(false);\n  const steps = [\n    { title: \"无遮罩模式\", description: \"适合不希望打断用户当前操作的轻量提示。\" },\n    { title: \"继续浏览\", description: \"背景内容保持可见。\" },\n  ];\n\n  return (\n    <>\n      <Button onClick={() => setOpen(true)}>无遮罩引导</Button>\n      <Tour open={open} mask={false} onOpenChange={setOpen} steps={steps} />\n    </>\n  );\n}"
        },
        {
          "id": "components/tour/demo/placement.tsx",
          "title": "弹出位置",
          "source": "import { useRef, useState } from \"react\";\nimport { Button, Space, Tour } from \"react-kui\";\n\nexport default function App() {\n  const leftTarget = useRef<HTMLButtonElement>(null);\n  const rightTarget = useRef<HTMLButtonElement>(null);\n  const [open, setOpen] = useState(false);\n\n  return (\n    <>\n      <Space>\n        <Button ref={leftTarget}>左侧目标</Button>\n        <Button ref={rightTarget}>右侧目标</Button>\n        <Button type=\"primary\" onClick={() => setOpen(true)}>\n          查看定位\n        </Button>\n      </Space>\n      <Tour\n        open={open}\n        onOpenChange={setOpen}\n        steps={[\n          {\n            target: () => leftTarget.current,\n            title: \"底部\",\n            description: \"默认显示在目标底部。\",\n          },\n          {\n            target: () => rightTarget.current,\n            title: \"左侧\",\n            description: \"空间不足时可调整方向。\",\n            placement: \"left\",\n          },\n        ]}\n      />\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "TabPanel",
      "import": "import { TabPanel } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tabs",
      "props": [
        {
          "name": "title",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "选项卡头内容",
          "descriptionEn": "Content displayed in tab header"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选项卡头显示的图标",
          "descriptionEn": "Icon displayed in tab header"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "tab是否被禁用",
          "descriptionEn": "Whether tab is disabled"
        },
        {
          "name": "closable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "tab是否显示关闭按钮",
          "descriptionEn": "Whether tab shows close button"
        },
        {
          "name": "tabKey",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "injected by Tabs",
          "descriptionEn": "injected by Tabs"
        },
        {
          "name": "activeKey",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "injected by Tabs",
          "descriptionEn": "injected by Tabs"
        },
        {
          "name": "tabsId",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "injected by Tabs",
          "descriptionEn": "injected by Tabs"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前标签页的内容区域。",
          "descriptionEn": "Content of this tab pane."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "title",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Tabs",
      "examples": [
        {
          "id": "components/tabs/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Switch, TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  const [animated, setAnimated] = useState(false);\n  return (\n    <>\n      Animated: <Switch checked={animated} onChange={(value) => setAnimated(Boolean(value))} />\n      <Tabs value={value} animated={animated} onChange={setValue}>\n        <TabPanel key=\"1\" title=\"Tab 1\">\n          Content of Tab Pane 1\n        </TabPanel>\n        <TabPanel key=\"2\" title=\"Tab 2\">\n          Content of Tab Pane 2\n        </TabPanel>\n        <TabPanel key=\"3\" title=\"Tab 3\">\n          Content of Tab Pane 3\n        </TabPanel>\n      </Tabs>\n    </>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/disabled.tsx",
          "title": "禁用",
          "source": "import { useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  const [disabled, setDisabled] = useState(true);\n  return (\n    <>\n      <Button size=\"small\" onClick={() => setDisabled((x) => !x)}>\n        {disabled ? \"Enable\" : \"Disable\"} Tab 2\n      </Button>\n      <Tabs value={value} onChange={setValue}>\n        <TabPanel key=\"1\" title=\"Tab 1\">\n          Content of Tab Pane 1\n        </TabPanel>\n        <TabPanel key=\"2\" title=\"Tab 2\" disabled={disabled}>\n          Content of Tab Pane 2\n        </TabPanel>\n        <TabPanel key=\"3\" title=\"Tab 3\">\n          Content of Tab Pane 3\n        </TabPanel>\n      </Tabs>\n    </>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/centered.tsx",
          "title": "居中",
          "source": "import { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue} centered>\n      <TabPanel key=\"1\" title=\"Tab 1\">\n        Content of Tab Pane 1\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Tab 2\">\n        Content of Tab Pane 2\n      </TabPanel>\n      <TabPanel key=\"3\" title=\"Tab 3\">\n        Content of Tab Pane 3\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/icon.tsx",
          "title": "图标",
          "source": "import { LogoApple, LogoMicrosoft } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue}>\n      <TabPanel key=\"1\" title=\"Apple\" icon={LogoApple}>\n        Content of Apple tab\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Microsoft\" icon={LogoMicrosoft}>\n        Content of Microsoft tab\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/extra.tsx",
          "title": "附加内容",
          "source": "import { useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue} extra={<Button>Extra Operate</Button>}>\n      <TabPanel key=\"1\" title=\"Tab 1\">\n        Content of Tab Pane 1\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Tab 2\">\n        Content of Tab Pane 2\n      </TabPanel>\n      <TabPanel key=\"3\" title=\"Tab 3\">\n        Content of Tab Pane 3\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/card.tsx",
          "title": "卡片式页签",
          "source": "import { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue} card>\n      <TabPanel key=\"1\" title=\"Tab 1\">\n        Content of Tab Pane 1\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Tab 2\">\n        Content of Tab Pane 2\n      </TabPanel>\n      <TabPanel key=\"3\" title=\"Tab 3\">\n        Content of Tab Pane 3\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/browser.tsx",
          "title": "浏览器式页签",
          "source": "import { Plus } from \"kui-icons\";\nimport { useRef, useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\n\ninterface Panel {\n  key: string;\n  title: string;\n  content: string;\n  closable: boolean;\n}\n\nconst initialPanels: Panel[] = [\n  { key: \"1\", title: \"Welcome\", content: \"Welcome page\", closable: false },\n  { key: \"2\", title: \"Components\", content: \"Components page\", closable: true },\n  { key: \"3\", title: \"Settings\", content: \"Settings page\", closable: true },\n];\n\nexport default function App() {\n  const [panels, setPanels] = useState(initialPanels);\n  const [activeKey, setActiveKey] = useState(\"1\");\n  const index = useRef(3);\n\n  const add = () => {\n    const key = String(++index.current);\n    setPanels((items) => [\n      ...items,\n      { key, title: `New Tab ${key}`, content: `Content of new Tab ${key}`, closable: true },\n    ]);\n    setActiveKey(key);\n  };\n\n  const remove = (key: string) => {\n    const targetIndex = panels.findIndex((panel) => panel.key === key);\n    const nextPanels = panels.filter((panel) => panel.key !== key);\n    setPanels(nextPanels);\n    if (activeKey === key) {\n      setActiveKey(nextPanels[Math.max(0, targetIndex - 1)]?.key ?? \"\");\n    }\n  };\n\n  return (\n    <Tabs\n      value={activeKey}\n      variant=\"browser\"\n      onChange={setActiveKey}\n      onRemove={remove}\n      extra={<Button icon={Plus} onClick={add} />}\n    >\n      {panels.map((panel) => (\n        <TabPanel key={panel.key} title={panel.title} closable={panel.closable}>\n          {panel.content}\n        </TabPanel>\n      ))}\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/closable.tsx",
          "title": "新增和关闭页签",
          "source": "import { Plus } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\ninterface Pane {\n  key: string;\n  title: string;\n  content: string;\n  closable?: boolean;\n}\nconst initial: Pane[] = [\n  { key: \"1\", title: \"Tab 1\", content: \"Content of Tab 1\" },\n  { key: \"2\", title: \"Tab 2\", content: \"Content of Tab 2\", closable: true },\n  { key: \"3\", title: \"Tab 3\", content: \"Content of Tab 3\", closable: true },\n];\nexport default function App() {\n  const [panes, setPanes] = useState(initial);\n  const [active, setActive] = useState(\"1\");\n  const [index, setIndex] = useState(0);\n  const add = () => {\n    const next = index + 1,\n      key = `A${next}`;\n    setIndex(next);\n    setPanes((x) => [\n      ...x,\n      { key, title: `New Tab ${next}`, content: `Content of new Tab ${next}`, closable: true },\n    ]);\n    setActive(key);\n  };\n  const remove = (key: string) => {\n    const at = panes.findIndex((x) => x.key === key);\n    const next = panes.filter((x) => x.key !== key);\n    setPanes(next);\n    if (active === key) setActive(next[Math.max(0, at - 1)]?.key ?? \"\");\n  };\n  return (\n    <Tabs\n      value={active}\n      onChange={setActive}\n      card\n      onRemove={remove}\n      extra={<Button icon={Plus} onClick={add} />}\n    >\n      {panes.map((x) => (\n        <TabPanel key={x.key} title={x.title} closable={x.closable}>\n          {x.content}\n        </TabPanel>\n      ))}\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/sample.tsx",
          "title": "极简式页签",
          "source": "import { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <div className=\"demo-view-fill\">\n      <Tabs value={value} onChange={setValue} sample>\n        <TabPanel key=\"1\" title=\"Tab 1\">\n          <p>Content of Tab Pane 1</p>\n          <p>Content of Tab Pane 1</p>\n          <p>Content of Tab Pane 1</p>\n        </TabPanel>\n        <TabPanel key=\"2\" title=\"Tab 2\">\n          <p>Content of Tab Pane 2</p>\n          <p>Content of Tab Pane 2</p>\n          <p>Content of Tab Pane 2</p>\n        </TabPanel>\n        <TabPanel key=\"3\" title=\"Tab 3\">\n          <p>Content of Tab Pane 3</p>\n          <p>Content of Tab Pane 3</p>\n          <p>Content of Tab Pane 3</p>\n        </TabPanel>\n      </Tabs>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "Tabs",
      "import": "import { Tabs } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tabs",
      "props": [
        {
          "name": "value",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当前激活 tab 面板的 key",
          "descriptionEn": "Currently active tab panel's key"
        },
        {
          "name": "variant",
          "type": "\"line\" | \"card\" | \"sample\" | \"browser\" | undefined",
          "required": false,
          "enumValues": [
            "line",
            "card",
            "sample",
            "browser"
          ],
          "boolean": false,
          "descriptionZh": "页签形态",
          "descriptionEn": "Tab presentation"
        },
        {
          "name": "card",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否为卡片式，兼容旧版本",
          "descriptionEn": "Whether to use card style; retained for compatibility"
        },
        {
          "name": "sample",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否为极简式，兼容旧版本",
          "descriptionEn": "Whether to use sample style; retained for compatibility"
        },
        {
          "name": "centered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否居中显示标签",
          "descriptionEn": "Whether to center the label"
        },
        {
          "name": "animated",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否使用动画切换 Tabs",
          "descriptionEn": "Whether to use animation to switch Tabs"
        },
        {
          "name": "extra",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签栏右侧的额外内容",
          "descriptionEn": "Extra content displayed on the right side of the tab bar"
        },
        {
          "name": "onTabClick",
          "type": "((key: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "tab点击时的回调",
          "descriptionEn": "Callback when tab is clicked"
        },
        {
          "name": "onChange",
          "type": "((key: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "切换面板的回调",
          "descriptionEn": "Callback when switching panels"
        },
        {
          "name": "onRemove",
          "type": "((key: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "tab关闭时的回调，返回关闭的tab的key值",
          "descriptionEn": "Callback when tab is closed, returns the closed tab's key value"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "TabPanel 子节点，用于生成页签导航和对应面板。",
          "descriptionEn": "TabPanel children used to build tab navigation and panes."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onTabClick",
          "type": "((key: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "tab点击时的回调",
          "descriptionEn": "Callback when tab is clicked"
        },
        {
          "name": "onChange",
          "type": "((key: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "切换面板的回调",
          "descriptionEn": "Callback when switching panels"
        },
        {
          "name": "onRemove",
          "type": "((key: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "tab关闭时的回调，返回关闭的tab的key值",
          "descriptionEn": "Callback when tab is closed, returns the closed tab's key value"
        }
      ],
      "renderProps": [
        "extra",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [
        "TabPanel"
      ],
      "examples": [
        {
          "id": "components/tabs/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Switch, TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  const [animated, setAnimated] = useState(false);\n  return (\n    <>\n      Animated: <Switch checked={animated} onChange={(value) => setAnimated(Boolean(value))} />\n      <Tabs value={value} animated={animated} onChange={setValue}>\n        <TabPanel key=\"1\" title=\"Tab 1\">\n          Content of Tab Pane 1\n        </TabPanel>\n        <TabPanel key=\"2\" title=\"Tab 2\">\n          Content of Tab Pane 2\n        </TabPanel>\n        <TabPanel key=\"3\" title=\"Tab 3\">\n          Content of Tab Pane 3\n        </TabPanel>\n      </Tabs>\n    </>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/disabled.tsx",
          "title": "禁用",
          "source": "import { useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  const [disabled, setDisabled] = useState(true);\n  return (\n    <>\n      <Button size=\"small\" onClick={() => setDisabled((x) => !x)}>\n        {disabled ? \"Enable\" : \"Disable\"} Tab 2\n      </Button>\n      <Tabs value={value} onChange={setValue}>\n        <TabPanel key=\"1\" title=\"Tab 1\">\n          Content of Tab Pane 1\n        </TabPanel>\n        <TabPanel key=\"2\" title=\"Tab 2\" disabled={disabled}>\n          Content of Tab Pane 2\n        </TabPanel>\n        <TabPanel key=\"3\" title=\"Tab 3\">\n          Content of Tab Pane 3\n        </TabPanel>\n      </Tabs>\n    </>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/centered.tsx",
          "title": "居中",
          "source": "import { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue} centered>\n      <TabPanel key=\"1\" title=\"Tab 1\">\n        Content of Tab Pane 1\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Tab 2\">\n        Content of Tab Pane 2\n      </TabPanel>\n      <TabPanel key=\"3\" title=\"Tab 3\">\n        Content of Tab Pane 3\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/icon.tsx",
          "title": "图标",
          "source": "import { LogoApple, LogoMicrosoft } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue}>\n      <TabPanel key=\"1\" title=\"Apple\" icon={LogoApple}>\n        Content of Apple tab\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Microsoft\" icon={LogoMicrosoft}>\n        Content of Microsoft tab\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/extra.tsx",
          "title": "附加内容",
          "source": "import { useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue} extra={<Button>Extra Operate</Button>}>\n      <TabPanel key=\"1\" title=\"Tab 1\">\n        Content of Tab Pane 1\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Tab 2\">\n        Content of Tab Pane 2\n      </TabPanel>\n      <TabPanel key=\"3\" title=\"Tab 3\">\n        Content of Tab Pane 3\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/card.tsx",
          "title": "卡片式页签",
          "source": "import { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <Tabs value={value} onChange={setValue} card>\n      <TabPanel key=\"1\" title=\"Tab 1\">\n        Content of Tab Pane 1\n      </TabPanel>\n      <TabPanel key=\"2\" title=\"Tab 2\">\n        Content of Tab Pane 2\n      </TabPanel>\n      <TabPanel key=\"3\" title=\"Tab 3\">\n        Content of Tab Pane 3\n      </TabPanel>\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/browser.tsx",
          "title": "浏览器式页签",
          "source": "import { Plus } from \"kui-icons\";\nimport { useRef, useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\n\ninterface Panel {\n  key: string;\n  title: string;\n  content: string;\n  closable: boolean;\n}\n\nconst initialPanels: Panel[] = [\n  { key: \"1\", title: \"Welcome\", content: \"Welcome page\", closable: false },\n  { key: \"2\", title: \"Components\", content: \"Components page\", closable: true },\n  { key: \"3\", title: \"Settings\", content: \"Settings page\", closable: true },\n];\n\nexport default function App() {\n  const [panels, setPanels] = useState(initialPanels);\n  const [activeKey, setActiveKey] = useState(\"1\");\n  const index = useRef(3);\n\n  const add = () => {\n    const key = String(++index.current);\n    setPanels((items) => [\n      ...items,\n      { key, title: `New Tab ${key}`, content: `Content of new Tab ${key}`, closable: true },\n    ]);\n    setActiveKey(key);\n  };\n\n  const remove = (key: string) => {\n    const targetIndex = panels.findIndex((panel) => panel.key === key);\n    const nextPanels = panels.filter((panel) => panel.key !== key);\n    setPanels(nextPanels);\n    if (activeKey === key) {\n      setActiveKey(nextPanels[Math.max(0, targetIndex - 1)]?.key ?? \"\");\n    }\n  };\n\n  return (\n    <Tabs\n      value={activeKey}\n      variant=\"browser\"\n      onChange={setActiveKey}\n      onRemove={remove}\n      extra={<Button icon={Plus} onClick={add} />}\n    >\n      {panels.map((panel) => (\n        <TabPanel key={panel.key} title={panel.title} closable={panel.closable}>\n          {panel.content}\n        </TabPanel>\n      ))}\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/closable.tsx",
          "title": "新增和关闭页签",
          "source": "import { Plus } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, TabPanel, Tabs } from \"react-kui\";\ninterface Pane {\n  key: string;\n  title: string;\n  content: string;\n  closable?: boolean;\n}\nconst initial: Pane[] = [\n  { key: \"1\", title: \"Tab 1\", content: \"Content of Tab 1\" },\n  { key: \"2\", title: \"Tab 2\", content: \"Content of Tab 2\", closable: true },\n  { key: \"3\", title: \"Tab 3\", content: \"Content of Tab 3\", closable: true },\n];\nexport default function App() {\n  const [panes, setPanes] = useState(initial);\n  const [active, setActive] = useState(\"1\");\n  const [index, setIndex] = useState(0);\n  const add = () => {\n    const next = index + 1,\n      key = `A${next}`;\n    setIndex(next);\n    setPanes((x) => [\n      ...x,\n      { key, title: `New Tab ${next}`, content: `Content of new Tab ${next}`, closable: true },\n    ]);\n    setActive(key);\n  };\n  const remove = (key: string) => {\n    const at = panes.findIndex((x) => x.key === key);\n    const next = panes.filter((x) => x.key !== key);\n    setPanes(next);\n    if (active === key) setActive(next[Math.max(0, at - 1)]?.key ?? \"\");\n  };\n  return (\n    <Tabs\n      value={active}\n      onChange={setActive}\n      card\n      onRemove={remove}\n      extra={<Button icon={Plus} onClick={add} />}\n    >\n      {panes.map((x) => (\n        <TabPanel key={x.key} title={x.title} closable={x.closable}>\n          {x.content}\n        </TabPanel>\n      ))}\n    </Tabs>\n  );\n}"
        },
        {
          "id": "components/tabs/demo/sample.tsx",
          "title": "极简式页签",
          "source": "import { useState } from \"react\";\nimport { TabPanel, Tabs } from \"react-kui\";\nexport default function App() {\n  const [value, setValue] = useState(\"1\");\n  return (\n    <div className=\"demo-view-fill\">\n      <Tabs value={value} onChange={setValue} sample>\n        <TabPanel key=\"1\" title=\"Tab 1\">\n          <p>Content of Tab Pane 1</p>\n          <p>Content of Tab Pane 1</p>\n          <p>Content of Tab Pane 1</p>\n        </TabPanel>\n        <TabPanel key=\"2\" title=\"Tab 2\">\n          <p>Content of Tab Pane 2</p>\n          <p>Content of Tab Pane 2</p>\n          <p>Content of Tab Pane 2</p>\n        </TabPanel>\n        <TabPanel key=\"3\" title=\"Tab 3\">\n          <p>Content of Tab Pane 3</p>\n          <p>Content of Tab Pane 3</p>\n          <p>Content of Tab Pane 3</p>\n        </TabPanel>\n      </Tabs>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "TimeLine",
      "import": "import { TimeLine } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/time-line",
      "props": [
        {
          "name": "mode",
          "type": "TimelineMode | undefined",
          "required": false,
          "enumValues": [
            "left",
            "right",
            "center",
            "alternate"
          ],
          "boolean": false,
          "defaultExpression": "\"left\"",
          "descriptionZh": "时间轴和内容的相对位置",
          "descriptionEn": "Relative position of the timeline and its content"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/time-line/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { TimeLine, TimeLineItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <TimeLine>\n      <TimeLineItem time=\"2020-11-03\">Release version 3.0</TimeLineItem>\n      <TimeLineItem time=\"2019-10-25\">Release version 2.0</TimeLineItem>\n      <TimeLineItem time=\"2018-10-08\">Release version 1.0</TimeLineItem>\n    </TimeLine>\n  );\n}"
        },
        {
          "id": "components/time-line/demo/icon.tsx",
          "title": "图标",
          "source": "import { Hammer, Ribbon } from \"kui-icons\";\nimport { TimeLine, TimeLineItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <TimeLine>\n      <TimeLineItem color=\"green\" time=\"2020-11-03\">\n        Optimized tons of improvements and experiences\n      </TimeLineItem>\n      <TimeLineItem color=\"orange\" time=\"2020-11-02\">\n        <p>Added some very user-friendly features</p>\n        <p>Added some very user-friendly features</p>\n        <p>Added some very user-friendly features</p>\n      </TimeLineItem>\n      <TimeLineItem icon={Ribbon} color=\"#3593ff\" time=\"2020-11-01\">\n        Release version 2.0\n      </TimeLineItem>\n      <TimeLineItem icon={Hammer} color=\"red\" time=\"2020-10-03\">\n        Fix bugs\n      </TimeLineItem>\n      <TimeLineItem time=\"2020-10-01\">Release version 1.0</TimeLineItem>\n    </TimeLine>\n  );\n}"
        },
        {
          "id": "components/time-line/demo/mode.tsx",
          "title": "呈现方向",
          "source": "import { Hammer } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Radio, RadioGroup, TimeLine, TimeLineItem, type TimelineMode } from \"react-kui\";\nconst modes: TimelineMode[] = [\"left\", \"center\", \"alternate\", \"right\"];\nexport default function App() {\n  const [mode, setMode] = useState<TimelineMode>(\"left\");\n  return (\n    <>\n      <RadioGroup value={mode} onChange={(value) => setMode(value as TimelineMode)}>\n        {modes.map((value) => (\n          <Radio key={value} label={value} value={value} />\n        ))}\n      </RadioGroup>\n      <br />\n      <br />\n      <TimeLine mode={mode}>\n        <TimeLineItem color=\"green\" time=\"2020-11-03\" extra=\"More auxiliary details\">\n          Optimized tons of improvements and experiences\n        </TimeLineItem>\n        <TimeLineItem color=\"orange\" time=\"2020-11-02\" extra=\"More auxiliary details\">\n          <div>Added some very user-friendly features</div>\n          <div>Added some very user-friendly features</div>\n        </TimeLineItem>\n        <TimeLineItem icon={Hammer} color=\"red\" time=\"2020-10-03\" extra=\"More auxiliary details\">\n          Fix bug\n        </TimeLineItem>\n        <TimeLineItem time=\"2020-10-01\" extra=\"More auxiliary details\">\n          Release version 1.0\n        </TimeLineItem>\n      </TimeLine>\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "TimeLineItem",
      "import": "import { TimeLineItem } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/time-line",
      "props": [
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "时间轴节点颜色",
          "descriptionEn": "Timeline node color"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "时间轴节点图标",
          "descriptionEn": "Timeline node icon"
        },
        {
          "name": "time",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "时间内容",
          "descriptionEn": "Time content"
        },
        {
          "name": "extra",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "辅助内容",
          "descriptionEn": "Auxiliary content"
        },
        {
          "name": "dot",
          "type": "ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义时间轴节点",
          "descriptionEn": "Custom timeline node"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "time",
        "extra",
        "dot"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/time-line/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { TimeLine, TimeLineItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <TimeLine>\n      <TimeLineItem time=\"2020-11-03\">Release version 3.0</TimeLineItem>\n      <TimeLineItem time=\"2019-10-25\">Release version 2.0</TimeLineItem>\n      <TimeLineItem time=\"2018-10-08\">Release version 1.0</TimeLineItem>\n    </TimeLine>\n  );\n}"
        },
        {
          "id": "components/time-line/demo/icon.tsx",
          "title": "图标",
          "source": "import { Hammer, Ribbon } from \"kui-icons\";\nimport { TimeLine, TimeLineItem } from \"react-kui\";\nexport default function App() {\n  return (\n    <TimeLine>\n      <TimeLineItem color=\"green\" time=\"2020-11-03\">\n        Optimized tons of improvements and experiences\n      </TimeLineItem>\n      <TimeLineItem color=\"orange\" time=\"2020-11-02\">\n        <p>Added some very user-friendly features</p>\n        <p>Added some very user-friendly features</p>\n        <p>Added some very user-friendly features</p>\n      </TimeLineItem>\n      <TimeLineItem icon={Ribbon} color=\"#3593ff\" time=\"2020-11-01\">\n        Release version 2.0\n      </TimeLineItem>\n      <TimeLineItem icon={Hammer} color=\"red\" time=\"2020-10-03\">\n        Fix bugs\n      </TimeLineItem>\n      <TimeLineItem time=\"2020-10-01\">Release version 1.0</TimeLineItem>\n    </TimeLine>\n  );\n}"
        },
        {
          "id": "components/time-line/demo/mode.tsx",
          "title": "呈现方向",
          "source": "import { Hammer } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Radio, RadioGroup, TimeLine, TimeLineItem, type TimelineMode } from \"react-kui\";\nconst modes: TimelineMode[] = [\"left\", \"center\", \"alternate\", \"right\"];\nexport default function App() {\n  const [mode, setMode] = useState<TimelineMode>(\"left\");\n  return (\n    <>\n      <RadioGroup value={mode} onChange={(value) => setMode(value as TimelineMode)}>\n        {modes.map((value) => (\n          <Radio key={value} label={value} value={value} />\n        ))}\n      </RadioGroup>\n      <br />\n      <br />\n      <TimeLine mode={mode}>\n        <TimeLineItem color=\"green\" time=\"2020-11-03\" extra=\"More auxiliary details\">\n          Optimized tons of improvements and experiences\n        </TimeLineItem>\n        <TimeLineItem color=\"orange\" time=\"2020-11-02\" extra=\"More auxiliary details\">\n          <div>Added some very user-friendly features</div>\n          <div>Added some very user-friendly features</div>\n        </TimeLineItem>\n        <TimeLineItem icon={Hammer} color=\"red\" time=\"2020-10-03\" extra=\"More auxiliary details\">\n          Fix bug\n        </TimeLineItem>\n        <TimeLineItem time=\"2020-10-01\" extra=\"More auxiliary details\">\n          Release version 1.0\n        </TimeLineItem>\n      </TimeLine>\n    </>\n  );\n}"
        }
      ]
    },
    {
      "name": "Tree",
      "import": "import { Tree } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tree",
      "props": [
        {
          "name": "data",
          "type": "TreeNodeData[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[]",
          "descriptionZh": "可嵌套的节点属性的数组，生成 `tree` 的数据",
          "descriptionEn": "Array of nestable node properties, data to generate `tree`"
        },
        {
          "name": "selectedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中的节点",
          "descriptionEn": "Selected nodes"
        },
        {
          "name": "expandedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定展开的节点",
          "descriptionEn": "Specify expanded nodes"
        },
        {
          "name": "checkedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中复选框的树节点",
          "descriptionEn": "Tree nodes with checked checkboxes"
        },
        {
          "name": "directory",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否显示为目录树",
          "descriptionEn": "Whether to display a directory tree"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用节点",
          "descriptionEn": "Whether node is disabled"
        },
        {
          "name": "checkable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否显示多选框",
          "descriptionEn": "Whether to show checkbox"
        },
        {
          "name": "draggable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否可以拖拽",
          "descriptionEn": "Whether it can be dragged"
        },
        {
          "name": "showLine",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否展示连接线",
          "descriptionEn": "Whether to show connecting lines"
        },
        {
          "name": "showIcon",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否展示图标",
          "descriptionEn": "Whether to show icons"
        },
        {
          "name": "showExtra",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否默认展示扩展元素",
          "descriptionEn": "Whether to show extension elements by default"
        },
        {
          "name": "multiple",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否支持多选",
          "descriptionEn": "Whether to support multiple selection"
        },
        {
          "name": "checkStrictly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "checkable 状态下节点选择完全受控（父子节点选中状态不再关联）",
          "descriptionEn": "In checkable state, node selection is completely controlled (parent-child node selection state no longer related)"
        },
        {
          "name": "selectAsCheck",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "点击节点时同步切换勾选状态",
          "descriptionEn": "Toggle checked state when selecting a node"
        },
        {
          "name": "queryKey",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "用于过滤或高亮的查询关键字",
          "descriptionEn": "Query key used for filtering or highlighting"
        },
        {
          "name": "virtual",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否启用虚拟滚动",
          "descriptionEn": "Whether to enable virtual scrolling"
        },
        {
          "name": "height",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "300",
          "descriptionZh": "虚拟滚动视口高度",
          "descriptionEn": "Virtual scrolling viewport height"
        },
        {
          "name": "itemHeight",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "28",
          "descriptionZh": "虚拟滚动节点高度",
          "descriptionEn": "Virtual node height"
        },
        {
          "name": "overscan",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "5",
          "descriptionZh": "可视区域外预渲染的节点数量",
          "descriptionEn": "Extra nodes rendered outside the viewport"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "异步加载状态",
          "descriptionEn": "Asynchronous loading state"
        },
        {
          "name": "fieldNames",
          "type": "TreeFieldNames | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义节点字段名称",
          "descriptionEn": "Custom node field names"
        },
        {
          "name": "renderTitle",
          "type": "((node: TreeNode) => ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义节点标题",
          "descriptionEn": "Custom node title renderer"
        },
        {
          "name": "renderExtra",
          "type": "((node: TreeNode) => ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义节点扩展区域",
          "descriptionEn": "Custom node extra-content renderer"
        },
        {
          "name": "onExpand",
          "type": "((result: TreeExpandEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开和收起子节点时触发",
          "descriptionEn": "Called when a node expands or collapses"
        },
        {
          "name": "onExpandedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开节点集合变化时触发",
          "descriptionEn": "Called when expanded keys change"
        },
        {
          "name": "onCheck",
          "type": "((node: TreeNode, checked: boolean, checkedKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击复选框时触发",
          "descriptionEn": "Called when a checkbox changes"
        },
        {
          "name": "onCheckedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "勾选节点集合变化时触发",
          "descriptionEn": "Called when checked keys change"
        },
        {
          "name": "onSelect",
          "type": "((node: TreeNode, selectedKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击树节点时触发",
          "descriptionEn": "Called when a node is selected"
        },
        {
          "name": "onSelectedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中节点集合变化时触发",
          "descriptionEn": "Called when selected keys change"
        },
        {
          "name": "onDragStart",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "开始拖拽时调用",
          "descriptionEn": "Called when dragging starts"
        },
        {
          "name": "onDragEnter",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "dragenter 触发时调用",
          "descriptionEn": "Called when a dragged node enters"
        },
        {
          "name": "onDragLeave",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "dragleave 触发时调用",
          "descriptionEn": "Called when a dragged node leaves"
        },
        {
          "name": "onDrop",
          "type": "((nodes: TreeDropEvent, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "drop 触发时调用",
          "descriptionEn": "Called when a node is dropped"
        },
        {
          "name": "onLoadError",
          "type": "((error: unknown, node: TreeNode) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "异步加载失败时触发",
          "descriptionEn": "Called when asynchronous loading fails"
        },
        {
          "name": "onDragEnd",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "dragend 触发时调用",
          "descriptionEn": "Called when dragging ends"
        },
        {
          "name": "loadData",
          "type": "((node: TreeNode) => Promise<unknown>) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "异步加载数据的方法；成功后同一节点不会重复加载",
          "descriptionEn": "Method to asynchronously load data; a successfully loaded node is not requested again"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEndCapture",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStartCapture",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onExpand",
          "type": "((result: TreeExpandEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开和收起子节点时触发",
          "descriptionEn": "Called when a node expands or collapses"
        },
        {
          "name": "onExpandedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开节点集合变化时触发",
          "descriptionEn": "Called when expanded keys change"
        },
        {
          "name": "onCheck",
          "type": "((node: TreeNode, checked: boolean, checkedKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击复选框时触发",
          "descriptionEn": "Called when a checkbox changes"
        },
        {
          "name": "onCheckedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "勾选节点集合变化时触发",
          "descriptionEn": "Called when checked keys change"
        },
        {
          "name": "onSelect",
          "type": "((node: TreeNode, selectedKeys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击树节点时触发",
          "descriptionEn": "Called when a node is selected"
        },
        {
          "name": "onSelectedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中节点集合变化时触发",
          "descriptionEn": "Called when selected keys change"
        },
        {
          "name": "onDragStart",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "开始拖拽时调用",
          "descriptionEn": "Called when dragging starts"
        },
        {
          "name": "onDragEnter",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "dragenter 触发时调用",
          "descriptionEn": "Called when a dragged node enters"
        },
        {
          "name": "onDragLeave",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "dragleave 触发时调用",
          "descriptionEn": "Called when a dragged node leaves"
        },
        {
          "name": "onDrop",
          "type": "((nodes: TreeDropEvent, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "drop 触发时调用",
          "descriptionEn": "Called when a node is dropped"
        },
        {
          "name": "onLoadError",
          "type": "((error: unknown, node: TreeNode) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "异步加载失败时触发",
          "descriptionEn": "Called when asynchronous loading fails"
        },
        {
          "name": "onDragEnd",
          "type": "((node: TreeNode, event: DragEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "dragend 触发时调用",
          "descriptionEn": "Called when dragging ends"
        }
      ],
      "renderProps": [
        "renderTitle",
        "renderExtra",
        "loadData"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/tree/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Tree } from \"react-kui\";\nimport { expanded, treeData } from \"./data\";\nexport default function App() {\n  const [keys, setKeys] = useState(expanded);\n  return <Tree data={treeData} expandedKeys={keys} onExpandedKeysChange={setKeys} />;\n}"
        },
        {
          "id": "components/tree/demo/checkable.tsx",
          "title": "可勾选",
          "source": "import { useState } from \"react\";\nimport { Checkbox, Tree, type TreeNode } from \"react-kui\";\nconst data: TreeNode[] = [\n  {\n    title: \"tree 1\",\n    key: \"0-1\",\n    children: [\n      {\n        title: \"tree 1-1\",\n        key: \"1-1\",\n        disabled: true,\n        children: [\n          { title: \"leaf 1-1-1\", key: \"1-1-1\" },\n          { title: \"leaf 1-1-2\", key: \"1-1-2\" },\n        ],\n      },\n      {\n        title: \"tree 1-2\",\n        key: \"1-2\",\n        children: [\n          { title: \"leaf 1-2-1\", key: \"aa\" },\n          { title: \"leaf 1-2-2\", key: \"bb\" },\n        ],\n      },\n    ],\n  },\n];\nexport default function App() {\n  const [strict, setStrict] = useState(false),\n    [checked, setChecked] = useState([\"1-1\", \"aa\"]),\n    [expanded, setExpanded] = useState([\"1-1\", \"1-1-2\", \"1-2\", \"0-1\"]);\n  return (\n    <>\n      <Checkbox checked={strict} onChange={(event) => setStrict(event.checked)}>\n        父子节点不关联\n      </Checkbox>\n      <br />\n      <br />\n      <Tree\n        data={data}\n        checkable\n        checkedKeys={checked}\n        onCheckedKeysChange={setChecked}\n        expandedKeys={expanded}\n        onExpandedKeysChange={setExpanded}\n        onCheck={(node) => console.log(node)}\n        checkStrictly={strict}\n      />\n    </>\n  );\n}"
        },
        {
          "id": "components/tree/demo/custom-render.tsx",
          "title": "扩展节点",
          "source": "import { useState } from \"react\";\nimport { Button, message, Tree, type TreeNode } from \"react-kui\";\nconst data: TreeNode[] = [\n  {\n    title: \"tree 1\",\n    key: \"0-0\",\n    children: [\n      {\n        title: \"tree 1-1\",\n        key: \"0-0-1\",\n        children: [\n          { title: \"leaf 1-1-1\", key: \"0-0-1-1\" },\n          {\n            title: \"leaf 1-1-2\",\n            key: \"0-0-1-2\",\n            children: [\n              { title: \"leaf 1-1-2-1\", key: \"1-1-2-1\" },\n              { title: \"leaf 1-1-2-2\", key: \"1-1-2-2\" },\n            ],\n          },\n        ],\n      },\n    ],\n  },\n];\nexport default function App() {\n  const [expanded, setExpanded] = useState([\"0-0\"]);\n  return (\n    <Tree\n      data={data}\n      expandedKeys={expanded}\n      onExpandedKeysChange={setExpanded}\n      onExpand={console.log}\n      showExtra\n      renderExtra={(node) => (\n        <Button\n          size=\"small\"\n          onClick={(e) => {\n            e.stopPropagation();\n            message.info(String(node.title));\n          }}\n          style={{ marginRight: 5 }}\n        >\n          test\n        </Button>\n      )}\n    />\n  );\n}"
        },
        {
          "id": "components/tree/demo/disabled.tsx",
          "title": "禁用节点",
          "source": "import { useState } from \"react\";\nimport { Tree, type TreeNode } from \"react-kui\";\nconst data: TreeNode[] = [\n  {\n    title: \"tree 1\",\n    key: \"0-0\",\n    children: [\n      {\n        title: \"tree 1-1\",\n        key: \"1-0\",\n        disabled: true,\n        children: [\n          { title: \"leaf 1-1-1\", key: \"1-0-0\", disabled: true },\n          { title: \"leaf 1-1-2\", key: \"1-0-1\" },\n        ],\n      },\n      {\n        title: \"tree 1-2\",\n        key: \"1-1\",\n        children: [\n          { title: \"leaf 1-2-1\", key: \"1-2-1\" },\n          { title: \"leaf 1-2-2\", key: \"1-2-2\" },\n        ],\n      },\n    ],\n  },\n];\nexport default function App() {\n  const [expanded, setExpanded] = useState([\"0-0\", \"1-0\", \"1-1\"]),\n    [checked, setChecked] = useState([\"1-0-0\"]);\n  return (\n    <Tree\n      data={data}\n      checkable\n      checkedKeys={checked}\n      onCheckedKeysChange={setChecked}\n      expandedKeys={expanded}\n      onExpandedKeysChange={setExpanded}\n      onCheck={(node) => console.log(node)}\n    />\n  );\n}"
        },
        {
          "id": "components/tree/demo/sync.tsx",
          "title": "异步加载",
          "source": "import { useRef, useState } from \"react\";\nimport { Tree, type TreeNode } from \"react-kui\";\nconst insert = (nodes: TreeNode[], key: string, children: TreeNode[]): boolean => {\n  for (const node of nodes) {\n    if (node.key === key) {\n      node.children = children;\n      return true;\n    }\n    if (node.children && insert(node.children, key, children)) return true;\n  }\n  return false;\n};\nexport default function App() {\n  const [data, setData] = useState<TreeNode[]>([\n      { title: \"Expand to load\", key: \"0-0\" },\n      { title: \"Expand to load\", key: \"0-1\" },\n      { title: \"Tree Node\", isLeaf: true, key: \"0-2\" },\n    ]),\n    count = useRef(0);\n  const loadData = (node: TreeNode) =>\n    new Promise<void>((resolve) => {\n      count.current += 1;\n      setTimeout(() => {\n        setData((current) => {\n          const next = structuredClone(current);\n          insert(next, node.key, [\n            { title: \"Child Node\", isLeaf: count.current >= 2, key: `${node.key}-0` },\n            { title: \"Child Node\", isLeaf: count.current >= 3, key: `${node.key}-1` },\n          ]);\n          return next;\n        });\n        resolve();\n      }, 1000);\n    });\n  return <Tree data={data} loadData={loadData} onExpand={console.log} />;\n}"
        },
        {
          "id": "components/tree/demo/icon.tsx",
          "title": "自定义图标",
          "source": "import {\n  Folder,\n  FolderOpen,\n  LogoAndroid,\n  LogoApple,\n  LogoFeishu,\n  LogoQq,\n  LogoTwitter,\n  LogoWechat,\n} from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Tree, type TreeNode } from \"react-kui\";\nconst data: TreeNode[] = [\n  {\n    title: \"src\",\n    key: \"0-0\",\n    icon: FolderOpen,\n    children: [\n      {\n        title: \"assets\",\n        key: \"1-0\",\n        icon: FolderOpen,\n        children: [\n          { title: \"main.js\", icon: LogoTwitter, disabled: true, key: \"1-0-0\" },\n          { title: \"test.py\", icon: LogoQq, key: \"1-0-1\" },\n        ],\n      },\n      {\n        title: \"pages\",\n        key: \"1-1\",\n        icon: FolderOpen,\n        children: [\n          { title: \"index.html\", icon: LogoFeishu, key: \"1-1-0\" },\n          { title: \"index.md\", icon: LogoWechat, key: \"1-1-1\" },\n        ],\n      },\n      {\n        title: \"app\",\n        key: \"1-2\",\n        icon: FolderOpen,\n        children: [\n          { title: \"zen.apk\", icon: LogoAndroid, key: \"1-2-0\" },\n          { title: \"zen.ipa\", icon: LogoApple, key: \"1-2-1\" },\n        ],\n      },\n    ],\n  },\n];\nexport default function App() {\n  const [expanded, setExpanded] = useState([\"0-0\", \"1-0\", \"1-1\", \"1-2\"]);\n  return (\n    <Tree\n      data={data}\n      expandedKeys={expanded}\n      onExpandedKeysChange={setExpanded}\n      onExpand={({ expanded, node }) => {\n        node.icon = expanded ? FolderOpen : Folder;\n      }}\n    />\n  );\n}"
        },
        {
          "id": "components/tree/demo/directory.tsx",
          "title": "群控",
          "source": "import {\n  Folder,\n  FolderOpen,\n  LogoAndroid,\n  LogoApple,\n  LogoFeishu,\n  LogoQq,\n  LogoTwitter,\n  LogoWechat,\n  Plus,\n  SquarePen,\n  Trash,\n} from \"kui-icons\";\nimport { useRef, useState } from \"react\";\nimport { Button, Checkbox, message, Space, Tree, type TreeNode } from \"react-kui\";\nconst initial: TreeNode[] = [\n  {\n    title: \"src\",\n    key: \"0-0\",\n    icon: FolderOpen,\n    children: [\n      {\n        title: \"assets\",\n        key: \"1-0\",\n        icon: FolderOpen,\n        children: [\n          { title: \"main.js\", icon: LogoTwitter, disabled: true, key: \"1-0-0\" },\n          { title: \"test.py\", icon: LogoQq, key: \"1-0-1\" },\n        ],\n      },\n      {\n        title: \"pages\",\n        key: \"1-1\",\n        icon: FolderOpen,\n        children: [\n          { title: \"index.html\", icon: LogoFeishu, key: \"1-1-1\" },\n          { title: \"index.md\", icon: LogoWechat, key: \"1-1-2\" },\n        ],\n      },\n      {\n        title: \"app\",\n        key: \"1-2\",\n        icon: FolderOpen,\n        children: [\n          { title: \"zen.apk\", icon: LogoAndroid, key: \"1-2-1\" },\n          { title: \"zen.ipa\", icon: LogoApple, key: \"1-2-2\" },\n        ],\n      },\n    ],\n  },\n  { title: \"src11\", key: \"0-1\", icon: FolderOpen },\n];\nconst find = (nodes: TreeNode[], key: string): TreeNode | undefined => {\n  for (const node of nodes) {\n    if (node.key === key) return node;\n    const child = node.children && find(node.children, key);\n    if (child) return child;\n  }\n};\nconst remove = (nodes: TreeNode[], key: string): boolean => {\n  const i = nodes.findIndex((n) => n.key === key);\n  if (i >= 0) {\n    nodes.splice(i, 1);\n    return true;\n  }\n  return nodes.some((n) => !!n.children && remove(n.children, key));\n};\nexport default function App() {\n  const [data, setData] = useState(initial),\n    [expanded, setExpanded] = useState([\"0-0\", \"1-0\", \"1-1\", \"1-2\"]),\n    [selected, setSelected] = useState([\"0-0\"]),\n    [directory, setDirectory] = useState(true),\n    [showLine, setShowLine] = useState(true),\n    [draggable, setDraggable] = useState(true),\n    [checkable, setCheckable] = useState(true),\n    [showIcon, setShowIcon] = useState(true),\n    [showExtra, setShowExtra] = useState(true),\n    [multiple, setMultiple] = useState(false),\n    [strict, setStrict] = useState(false);\n  const count = useRef(0);\n  const mutate = (fn: (next: TreeNode[]) => void) => {\n    const next = structuredClone(data);\n    fn(next);\n    setData(next);\n  };\n  const controls = [\n    [\"Directory\", directory, setDirectory],\n    [\"showLine\", showLine, setShowLine],\n    [\"Draggable\", draggable, setDraggable],\n    [\"Checkable\", checkable, setCheckable],\n    [\"ShowIcon\", showIcon, setShowIcon],\n    [\"ShowExtra\", showExtra, setShowExtra],\n    [\"Multiple\", multiple, setMultiple],\n    [\"checkStrictly\", strict, setStrict],\n  ] as const;\n  const extra = (node: TreeNode) => (\n    <Space>\n      <Button\n        size=\"small\"\n        type=\"text\"\n        icon={Plus}\n        onClick={(e) => {\n          e.stopPropagation();\n          mutate((next) => {\n            const target = find(next, node.key);\n            if (target) {\n              target.icon = FolderOpen;\n              (target.children ??= []).push({\n                title: \"Append Node\",\n                key: `${node.key}-append-${++count.current}`,\n              });\n            }\n          });\n          setExpanded((keys) => (keys.includes(node.key) ? keys : [...keys, node.key]));\n        }}\n      />\n      {node.key !== \"0-0\" && (\n        <Button\n          size=\"small\"\n          type=\"text\"\n          icon={Trash}\n          onClick={(e) => {\n            e.stopPropagation();\n            mutate((next) => {\n              remove(next, node.key);\n            });\n          }}\n        />\n      )}\n      <Button\n        size=\"small\"\n        type=\"text\"\n        icon={SquarePen}\n        onClick={(e) => {\n          e.stopPropagation();\n          const title = prompt(\"修改节点名称\", String(node.title));\n          if (title?.trim())\n            mutate((next) => {\n              const target = find(next, node.key);\n              if (target) target.title = title;\n            });\n        }}\n      />\n    </Space>\n  );\n  return (\n    <div>\n      <Space wrap>\n        {controls.map(([label, value, set]) => (\n          <Checkbox\n            key={label}\n            checked={value}\n            onChange={(event) => set(event.checked)}\n            label={label}\n          />\n        ))}\n      </Space>\n      <br />\n      <br />\n      <Tree\n        data={data}\n        directory={directory}\n        draggable={draggable}\n        checkable={checkable}\n        multiple={multiple}\n        showLine={showLine}\n        showIcon={showIcon}\n        showExtra={showExtra}\n        selectedKeys={selected}\n        onSelectedKeysChange={setSelected}\n        expandedKeys={expanded}\n        onExpandedKeysChange={setExpanded}\n        checkStrictly={strict}\n        renderExtra={extra}\n        onExpand={({ expanded, node }) => {\n          node.icon = expanded ? FolderOpen : Folder;\n          console.log(node);\n        }}\n        onCheck={(node, checked) =>\n          message.info(`${String(node.title)}: ${checked ? \"checked\" : \"unchecked\"}`)\n        }\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/tree/demo/virtual.tsx",
          "title": "虚拟滚动",
          "source": "import { Tree } from \"react-kui\";\n\nconst data = Array.from({ length: 5000 }, (_, index) => ({\n  key: `node-${index}`,\n  title: `Node ${index + 1}`,\n}));\n\nexport default function VirtualDemo() {\n  return <Tree virtual data={data} height={320} itemHeight={28} />;\n}"
        },
        {
          "id": "components/tree/demo/advanced.tsx",
          "title": "字段映射与实例方法",
          "source": "import { useRef } from \"react\";\nimport { Button, Space, Tag, Tree, type TreeExpose, type TreeFieldNames } from \"react-kui\";\n\nconst fieldNames: TreeFieldNames = { key: \"id\", title: \"name\", children: \"items\" };\nconst data = [\n  {\n    id: \"guide\",\n    name: \"Guide\",\n    kind: \"group\",\n    items: [\n      { id: \"start\", name: \"Quick Start\" },\n      { id: \"theme\", name: \"Theme\" },\n    ],\n  },\n  {\n    id: \"components\",\n    name: \"Components\",\n    kind: \"group\",\n    items: [\n      { id: \"button\", name: \"Button\" },\n      { id: \"tree\", name: \"Tree\" },\n      { id: \"api\", name: \"API\" },\n    ],\n  },\n];\n\nexport default function App() {\n  const treeRef = useRef<TreeExpose>(null);\n  return (\n    <Space vertical>\n      <Space>\n        <Button onClick={() => treeRef.current?.expandAll()}>Expand all</Button>\n        <Button onClick={() => treeRef.current?.collapseAll()}>Collapse all</Button>\n        <Button onClick={() => treeRef.current?.scrollTo(\"api\")}>Scroll to API</Button>\n      </Space>\n      <Tree\n        ref={treeRef}\n        data={data}\n        fieldNames={fieldNames}\n        height={180}\n        renderTitle={(node) => (\n          <>\n            <span>{String(node.name)}</span>\n            {node.kind ? <Tag size=\"small\">{String(node.kind)}</Tag> : null}\n          </>\n        )}\n      />\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "TreeSelect",
      "import": "import { TreeSelect } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tree-select",
      "props": [
        {
          "name": "placeholder",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择框默认文字",
          "descriptionEn": "Default text of selector"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "组件尺寸大小,提供`small`,`large`两种尺寸，默认为正常",
          "descriptionEn": "Component size, provides two sizes: `small`, `large`, default is normal"
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "下拉框弹出位置",
          "descriptionEn": "Dropdown placement"
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "width",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "组件宽度",
          "descriptionEn": "Component width"
        },
        {
          "name": "maxTagCount",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "多选时最多展示的标签数量，超出部分通过 Tooltip 展示",
          "descriptionEn": "Maximum visible tags in multiple mode; excess tags are shown in a Tooltip"
        },
        {
          "name": "value",
          "type": "TreeSelectValue",
          "required": false,
          "boolean": false,
          "descriptionZh": "的选中值",
          "descriptionEn": "selected value"
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下拉框显示状态",
          "descriptionEn": "dropdown visibility"
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否可以清空选项",
          "descriptionEn": "Whether options can be cleared"
        },
        {
          "name": "filterable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否允许搜索过滤",
          "descriptionEn": "Whether search filtering is enabled"
        },
        {
          "name": "block",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否撑满父容器宽度",
          "descriptionEn": "Whether to fill the parent width"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用当前项",
          "descriptionEn": "Whether current item is disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether the component is read-only"
        },
        {
          "name": "multiple",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否呈现多选模式",
          "descriptionEn": "Whether to display in multiple selection mode"
        },
        {
          "name": "loading",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "异步加载状态",
          "descriptionEn": "Asynchronous loading state"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示边框",
          "descriptionEn": "Whether to show border"
        },
        {
          "name": "showArrow",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示下拉按钮",
          "descriptionEn": "Whether to show dropdown button"
        },
        {
          "name": "options",
          "type": "TreeNode[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "`treeData` 的兼容数据源属性",
          "descriptionEn": "Compatibility data source alias for `treeData`"
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "emptyText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "没有数据时展示的提示",
          "descriptionEn": "Prompt displayed when no data"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义图标",
          "descriptionEn": "Custom icon"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "shape='circle' 时呈现圆角",
          "descriptionEn": "When shape='circle', displays rounded corners"
        },
        {
          "name": "arrowIcon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "ChevronDown",
          "descriptionZh": "自定义下拉箭头图标",
          "descriptionEn": "Custom dropdown arrow icon"
        },
        {
          "name": "treeData",
          "type": "TreeNode[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可嵌套的节点属性的数组，生成 `tree` 的数据",
          "descriptionEn": "Array of nestable node properties, data to generate `tree`"
        },
        {
          "name": "treeCheckable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否显示多选框",
          "descriptionEn": "Whether to show checkbox"
        },
        {
          "name": "treeShowLine",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否展示连接线",
          "descriptionEn": "Whether to show connecting lines"
        },
        {
          "name": "treeShowIcon",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否展示图标",
          "descriptionEn": "Whether to show icons"
        },
        {
          "name": "treeCheckStrictly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "父子节点勾选状态是否相互独立",
          "descriptionEn": "Whether parent and child checked states are independent"
        },
        {
          "name": "treeExpandedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "指定展开的节点",
          "descriptionEn": "Specify expanded nodes"
        },
        {
          "name": "treeDefaultExpandedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "非受控模式下默认展开的节点",
          "descriptionEn": "Initially expanded nodes in uncontrolled mode"
        },
        {
          "name": "treeCheckedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "受控的 Tree 勾选节点",
          "descriptionEn": "Controlled checked Tree nodes"
        },
        {
          "name": "treeSelectedKeys",
          "type": "string[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "受控的 Tree 选中节点",
          "descriptionEn": "Controlled selected Tree nodes"
        },
        {
          "name": "treeExpandedAll",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否默认展开全部非叶子节点",
          "descriptionEn": "Whether all non-leaf nodes are expanded initially"
        },
        {
          "name": "treeLoadData",
          "type": "((node: TreeNode) => Promise<unknown>) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "异步加载数据的方法",
          "descriptionEn": "Method to asynchronously load data"
        },
        {
          "name": "virtual",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否启用虚拟滚动",
          "descriptionEn": "Whether to enable virtual scrolling"
        },
        {
          "name": "virtualHeight",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "260",
          "descriptionZh": "虚拟滚动视口高度",
          "descriptionEn": "Virtual scrolling viewport height"
        },
        {
          "name": "itemHeight",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "28",
          "descriptionZh": "虚拟滚动节点高度",
          "descriptionEn": "Virtual node height"
        },
        {
          "name": "overscan",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "5",
          "descriptionZh": "可视区域外预渲染的节点数量",
          "descriptionEn": "Extra nodes rendered outside the viewport"
        },
        {
          "name": "onChange",
          "type": "((value: TreeSelectValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值改变时触发",
          "descriptionEn": "Triggered when the value changes"
        },
        {
          "name": "onTreeSelect",
          "type": "((value: string, label: string, selected: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击树节点时触发",
          "descriptionEn": "Triggered when tree node is clicked"
        },
        {
          "name": "onSearch",
          "type": "((event: ChangeEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索时触发",
          "descriptionEn": "Triggered during search"
        },
        {
          "name": "onTreeExpand",
          "type": "((value: TreeExpandEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "Tree节点展开时触发",
          "descriptionEn": "Triggered when a tree node is expanded"
        },
        {
          "name": "onTreeExpandedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "Tree 展开 key 集合变化时触发",
          "descriptionEn": "Called when Tree expanded keys change"
        },
        {
          "name": "onTreeCheckedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "Tree 勾选 key 集合变化时触发",
          "descriptionEn": "Called when Tree checked keys change"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when the dropdown expands or collapses"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "清空时触发",
          "descriptionEn": "Triggered when cleared"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: TreeSelectValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "值改变时触发",
          "descriptionEn": "Triggered when the value changes"
        },
        {
          "name": "onTreeSelect",
          "type": "((value: string, label: string, selected: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击树节点时触发",
          "descriptionEn": "Triggered when tree node is clicked"
        },
        {
          "name": "onSearch",
          "type": "((event: ChangeEvent<HTMLInputElement>) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索时触发",
          "descriptionEn": "Triggered during search"
        },
        {
          "name": "onTreeExpand",
          "type": "((value: TreeExpandEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "Tree节点展开时触发",
          "descriptionEn": "Triggered when a tree node is expanded"
        },
        {
          "name": "onTreeExpandedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "Tree 展开 key 集合变化时触发",
          "descriptionEn": "Called when Tree expanded keys change"
        },
        {
          "name": "onTreeCheckedKeysChange",
          "type": "((keys: string[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "Tree 勾选 key 集合变化时触发",
          "descriptionEn": "Called when Tree checked keys change"
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框展开或收起时触发",
          "descriptionEn": "Triggered when the dropdown expands or collapses"
        },
        {
          "name": "onClear",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "清空时触发",
          "descriptionEn": "Triggered when cleared"
        }
      ],
      "renderProps": [
        "treeLoadData"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/tree-select/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Space, TreeSelect } from \"react-kui\";\nimport { data, expandedKeys } from \"./data\";\nexport default function App() {\n  const [value, setValue] = useState<string | number | null>(\"0-1\");\n  return (\n    <Space vertical>\n      <code>value: {String(value)}</code>\n      <TreeSelect\n        value={value}\n        onChange={(v) => setValue(v as string | number | null)}\n        treeData={data}\n        treeShowLine\n        treeDefaultExpandedKeys={expandedKeys}\n        block\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tree-select/demo/multiple.tsx",
          "title": "多选",
          "source": "import { useState } from \"react\";\nimport { Space, TreeSelect } from \"react-kui\";\nimport { data, expandedKeys } from \"./data\";\nexport default function App() {\n  const [value1, setValue1] = useState<Array<string | number>>([\"0-1\", \"1-1\"]),\n    [value2, setValue2] = useState<Array<string | number>>([\"0-1\", \"1-1-2\", \"1-1-2-1\", \"1-2-1\"]);\n  return (\n    <Space vertical>\n      <TreeSelect\n        value={value1}\n        onChange={(v) => setValue1(v as Array<string | number>)}\n        treeData={data}\n        treeDefaultExpandedKeys={expandedKeys}\n        multiple\n        filterable\n        clearable\n        block\n      />\n      <br />\n      maxTagCount\n      <TreeSelect\n        value={value2}\n        onChange={(v) => setValue2(v as Array<string | number>)}\n        treeData={data}\n        treeDefaultExpandedKeys={expandedKeys}\n        multiple\n        maxTagCount={2}\n        style={{ width: \"100%\" }}\n        filterable\n        clearable\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tree-select/demo/checkable.tsx",
          "title": "可勾选",
          "source": "import { useState } from \"react\";\nimport { Checkbox, Space, TreeSelect } from \"react-kui\";\nimport { data, expandedKeys } from \"./data\";\nexport default function App() {\n  const [value, setValue] = useState<Array<string | number>>([]),\n    [strict, setStrict] = useState(false);\n  return (\n    <Space vertical>\n      <Checkbox checked={strict} onChange={(event) => setStrict(event.checked)}>\n        TreeCheckStrictly\n      </Checkbox>\n      <TreeSelect\n        value={value}\n        onChange={(v) => setValue(v as Array<string | number>)}\n        treeData={data}\n        treeDefaultExpandedKeys={expandedKeys}\n        multiple\n        block\n        treeCheckable\n        treeCheckStrictly={strict}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tree-select/demo/disabled.tsx",
          "title": "禁用",
          "source": "import { useState } from \"react\";\nimport { Space, TreeSelect } from \"react-kui\";\nimport { expandedKeys, data as source } from \"./data\";\nconst data = structuredClone(source);\ndata[0].children![0].disabled = true;\ndata[0].children![0].children![1].children![1].disabled = true;\nexport default function App() {\n  const [value1, setValue1] = useState<Array<string | number>>([\"0-1\", \"1-1\"]),\n    [value2, setValue2] = useState<Array<string | number>>([\"0-1\", \"1-1-2\", \"1-1-2-1\", \"1-2-1\"]);\n  return (\n    <Space vertical>\n      <TreeSelect\n        value={value1}\n        onChange={(v) => setValue1(v as Array<string | number>)}\n        treeData={data}\n        treeDefaultExpandedKeys={expandedKeys}\n        filterable\n        disabled\n        block\n      />\n      <TreeSelect\n        value={value1}\n        onChange={(v) => setValue1(v as Array<string | number>)}\n        treeData={data}\n        treeDefaultExpandedKeys={expandedKeys}\n        multiple\n        filterable\n        disabled\n        block\n      />\n      disabled items\n      <TreeSelect\n        value={value2}\n        onChange={(v) => setValue2(v as Array<string | number>)}\n        treeData={data}\n        treeDefaultExpandedKeys={expandedKeys}\n        multiple\n        treeCheckable\n        maxTagCount={2}\n        filterable\n      />\n      clearable=false\n      <TreeSelect\n        value={value2}\n        onChange={(v) => setValue2(v as Array<string | number>)}\n        treeData={data}\n        treeDefaultExpandedKeys={expandedKeys}\n        multiple\n        treeCheckable\n        maxTagCount={2}\n        filterable\n        clearable={false}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tree-select/demo/sync.tsx",
          "title": "异步加载",
          "source": "import { useRef, useState } from \"react\";\nimport { type TreeNode, TreeSelect } from \"react-kui\";\nconst insert = (nodes: TreeNode[], key: string, children: TreeNode[]): boolean => {\n  for (const node of nodes) {\n    if (node.key === key) {\n      node.children = children;\n      return true;\n    }\n    if (node.children && insert(node.children, key, children)) return true;\n  }\n  return false;\n};\nexport default function App() {\n  const [data, setData] = useState<TreeNode[]>([\n      { title: \"Expand to load\", key: \"0-0\" },\n      { title: \"Expand to load\", key: \"0-1\" },\n      { title: \"Tree Node\", isLeaf: true, key: \"0-2\" },\n    ]),\n    [expanded, setExpanded] = useState<string[]>([]),\n    count = useRef(0);\n  const loadData = (node: TreeNode) =>\n    new Promise<void>((resolve) => {\n      count.current += 1;\n      setTimeout(() => {\n        const next = structuredClone(data);\n        insert(next, node.key, [\n          { title: \"Child Node\", isLeaf: count.current >= 2, key: `${node.key}-0` },\n          { title: \"Child Node\", isLeaf: count.current >= 3, key: `${node.key}-1` },\n        ]);\n        setData(next);\n        resolve();\n      }, 1000);\n    });\n  return (\n    <TreeSelect\n      treeData={data}\n      treeLoadData={loadData}\n      treeExpandedKeys={expanded}\n      onTreeExpandedKeysChange={setExpanded}\n      onTreeExpand={console.log}\n      block\n    />\n  );\n}"
        },
        {
          "id": "components/tree-select/demo/size.tsx",
          "title": "尺寸",
          "source": "import { useState } from \"react\";\nimport { type SizeType, RadioGroup, Space, TreeSelect } from \"react-kui\";\nimport { data, expandedKeys } from \"./data\";\nconst sizes = [\n  { value: \"large\", label: \"Large\" },\n  { value: \"medium\", label: \"Default\" },\n  { value: \"small\", label: \"Small\" },\n];\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"medium\"),\n    [value, setValue] = useState<string | number | null>(\"0-1\"),\n    [multiple, setMultiple] = useState<Array<string | number>>([\"0-1\"]);\n  return (\n    <Space vertical block style={{ width: 300, maxWidth: \"100%\" }}>\n      <RadioGroup value={size} onChange={setSize} options={sizes} type=\"button\" />\n      <TreeSelect\n        size={size}\n        value={value}\n        onChange={(v) => setValue(v as string | number | null)}\n        treeData={data}\n        treeShowLine\n        treeDefaultExpandedKeys={expandedKeys}\n        block\n      />\n      <TreeSelect\n        size={size}\n        value={multiple}\n        onChange={(v) => setMultiple(v as Array<string | number>)}\n        treeData={data}\n        treeShowLine\n        treeDefaultExpandedKeys={expandedKeys}\n        block\n        multiple\n      />\n      <TreeSelect\n        size={size}\n        value={multiple}\n        onChange={(v) => setMultiple(v as Array<string | number>)}\n        treeData={data}\n        treeShowLine\n        treeDefaultExpandedKeys={expandedKeys}\n        block\n        multiple\n        maxTagCount={2}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tree-select/demo/theme.tsx",
          "title": "奇葩的定义",
          "source": "import { ArrowDownFromLine, Search } from \"kui-icons\";\nimport { Space, TreeSelect } from \"react-kui\";\nconst data = [{ title: \"tree 1\", key: \"0-1\", children: [{ title: \"tree 1-1\", key: \"1-1\" }] }];\nexport default function App() {\n  return (\n    <Space vertical align=\"start\" block style={{ width: 300, maxWidth: \"100%\" }}>\n      <TreeSelect shape=\"circle\" treeData={data} placeholder=\"A circle Input...\" block />\n      <TreeSelect\n        shape=\"circle\"\n        icon={Search}\n        treeData={data}\n        block\n        placeholder=\"A circle Input with icon\"\n      />\n      <TreeSelect treeData={data} block placeholder=\"No Arrow\" showArrow={false} />\n      <TreeSelect treeData={data} block placeholder=\"Custom Arrow\" arrowIcon={ArrowDownFromLine} />\n      <TreeSelect filterable block theme=\"outline\" treeData={data} placeholder=\"Outline theme\" />\n      <TreeSelect theme=\"plain\" treeData={data} block placeholder=\"Plain\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tree-select/demo/virtual.tsx",
          "title": "虚拟滚动",
          "source": "import { TreeSelect } from \"react-kui\";\n\nconst data = Array.from({ length: 5000 }, (_, index) => ({\n  key: `node-${index}`,\n  title: `Node ${index + 1}`,\n}));\n\nexport default function Demo() {\n  return (\n    <TreeSelect\n      virtual\n      filterable\n      block\n      treeData={data}\n      virtualHeight={260}\n      placeholder=\"Select from 5,000 nodes\"\n    />\n  );\n}"
        }
      ]
    },
    {
      "name": "Cascader",
      "import": "import { Cascader } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/cascader",
      "props": [
        {
          "name": "value",
          "type": "CascaderValue | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "**必填。** 当前节点的唯一标识符（常对应后端的 `id` 或 `code`）。全路径选中时，组件值最终由该属性组成。",
          "descriptionEn": "**Required.** Unique identifier for the current node (often corresponds to backend `id` or `code`). The selected path is composed of these values."
        },
        {
          "name": "open",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下拉框显示状态。",
          "descriptionEn": "dropdown visibility."
        },
        {
          "name": "options",
          "type": "CascaderOption[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可选择的级联数据源树状结构。",
          "descriptionEn": "Tree-structured data source for cascading options."
        },
        {
          "name": "theme",
          "type": "ThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain",
            "underlined"
          ],
          "boolean": false,
          "descriptionZh": "主题",
          "descriptionEn": "Theme"
        },
        {
          "name": "bordered",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示边框。",
          "descriptionEn": "Whether to display the border."
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "组件形状。",
          "descriptionEn": "Component shape."
        },
        {
          "name": "showArrow",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示下拉箭头。",
          "descriptionEn": "Whether to display the dropdown arrow."
        },
        {
          "name": "placeholder",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "当没有任何选择路径时的兜底提示占位文案。",
          "descriptionEn": "Fallback placeholder text displayed when no path is selected."
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义前缀图标。",
          "descriptionEn": "Custom prefix icon."
        },
        {
          "name": "arrowIcon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "ChevronDown",
          "descriptionZh": "自定义下拉箭头。",
          "descriptionEn": "Custom dropdown arrow."
        },
        {
          "name": "emptyText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "空数据提示。",
          "descriptionEn": "Empty-state text."
        },
        {
          "name": "loadData",
          "type": "CascaderLoadData | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "异步加载子节点；返回子节点数组，或自行更新 `option.children`",
          "descriptionEn": "Loads children asynchronously; return them or update `option.children`"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用当前选项。开启后该行文本变灰且不可点击，同时其下方的所有子层级都将被同步锁定。",
          "descriptionEn": "Whether to disable the current option. When enabled, the row appears grayed out and unclickable, and all its child levels will be locked synchronously."
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否只读。",
          "descriptionEn": "Whether the component is read-only."
        },
        {
          "name": "clearable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否支持一键清空所选路径。",
          "descriptionEn": "Whether to support clearing the selected path with one click."
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "descriptionZh": "组件的大小尺寸规格。可选值：`'large'` \\| `'small'` \\| `undefined`。",
          "descriptionEn": "Size specification of the component. Options: `'large'` \\| `'small'` \\| `undefined`."
        },
        {
          "name": "expandTrigger",
          "type": "\"hover\" | \"click\" | undefined",
          "required": false,
          "enumValues": [
            "hover",
            "click"
          ],
          "boolean": false,
          "defaultExpression": "\"click\"",
          "descriptionZh": "下一级菜单的展开交互触发方式。可选值：`'click'` (点击) 或 `'hover'` (鼠标悬浮即展开)。",
          "descriptionEn": "Interaction mode for expanding the next-level menu. Options: `'click'` or `'hover'`."
        },
        {
          "name": "showAllLevels",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否展示完整选中的祖先路径。若为 `false` 则仅在输入框内显示最终的末端叶子节点。",
          "descriptionEn": "Whether to display the full selected ancestor path. If `false`, only the final leaf node is shown in the input box."
        },
        {
          "name": "separator",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\" / \"",
          "descriptionZh": "当 `showAllLevels` 开启时，各层级标签之间的多级分隔符。",
          "descriptionEn": "Separator between labels of different levels when `showAllLevels` is enabled."
        },
        {
          "name": "placement",
          "type": "DropPlacementsType | undefined",
          "required": false,
          "enumValues": [
            "top",
            "top-left",
            "top-right",
            "bottom",
            "bottom-left",
            "bottom-right"
          ],
          "boolean": false,
          "defaultExpression": "\"bottom-left\"",
          "descriptionZh": "弹层位置。",
          "descriptionEn": "Popup placement."
        },
        {
          "name": "destroyOnClose",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "关闭后是否销毁面板内容。默认销毁（重开时重新挂载）；设为 false 可保留面板内已填写的表单状态，代价是每个打开过的实例留一份隐藏 DOM",
          "descriptionEn": "Whether to destroy panel content after closing. Destroyed by default (remounted on reopen); set false to keep form state at the cost of one hidden DOM node per opened instance"
        },
        {
          "name": "onChange",
          "type": "((value: CascaderValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择或清空路径时触发。",
          "descriptionEn": "Called when a path is selected or cleared."
        },
        {
          "name": "onExpandChange",
          "type": "((value: CascaderValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开的级联路径变化时触发。",
          "descriptionEn": "Called when the expanded path changes."
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框显示状态变化时触发。",
          "descriptionEn": "Called when dropdown visibility changes."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((value: CascaderValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择或清空路径时触发。",
          "descriptionEn": "Called when a path is selected or cleared."
        },
        {
          "name": "onExpandChange",
          "type": "((value: CascaderValue) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "展开的级联路径变化时触发。",
          "descriptionEn": "Called when the expanded path changes."
        },
        {
          "name": "onOpenChange",
          "type": "((open: boolean) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "下拉框显示状态变化时触发。",
          "descriptionEn": "Called when dropdown visibility changes."
        }
      ],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/cascader/demo/basic.tsx",
          "title": "基础省市区三级联动",
          "source": "import { useState } from \"react\";\nimport { Cascader, Space, type CascaderOption, type CascaderValue } from \"react-kui\";\n\nconst areaOptions: CascaderOption[] = [\n  {\n    value: \"hubei\",\n    label: \"湖北省\",\n    children: [\n      {\n        value: \"wuhan\",\n        label: \"武汉市\",\n        children: [\n          { value: \"hongshan\", label: \"洪山区\" },\n          { value: \"wuchang\", label: \"武昌区\" },\n        ],\n      },\n      { value: \"huanggang\", label: \"黄冈市\", children: [{ value: \"huangzhou\", label: \"黄州\" }] },\n    ],\n  },\n  {\n    value: \"guangdong\",\n    label: \"广东省\",\n    children: [\n      { value: \"shenzhen\", label: \"深圳市\", children: [{ value: \"nanshan\", label: \"南山区\" }] },\n    ],\n  },\n];\n\nexport default function App() {\n  const [selectedArea, setSelectedArea] = useState<CascaderValue>([\"hubei\", \"wuhan\", \"wuchang\"]);\n  return (\n    <Space vertical>\n      <code>Value：{JSON.stringify(selectedArea)}</code>\n      <Cascader\n        value={selectedArea}\n        onChange={setSelectedArea}\n        options={areaOptions}\n        placeholder=\"请选择省市区\"\n        style={{ width: 260 }}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/cascader/demo/hover.tsx",
          "title": "电商多级类目选择",
          "source": "import { useState } from \"react\";\nimport { Cascader, Space, type CascaderOption, type CascaderValue } from \"react-kui\";\n\nconst categoryOptions: CascaderOption[] = [\n  {\n    value: \"electronics\",\n    label: \"数码电子\",\n    children: [\n      {\n        value: \"phone\",\n        label: \"智能手机\",\n        children: [\n          { value: \"ios\", label: \"iPhone\" },\n          { value: \"android\", label: \"安卓手机\" },\n        ],\n      },\n      {\n        value: \"computer\",\n        label: \"电脑办公\",\n        children: [\n          { value: \"laptop\", label: \"笔记本\" },\n          { value: \"desktop\", label: \"台式机\" },\n        ],\n      },\n    ],\n  },\n  {\n    value: \"clothing\",\n    label: \"服装服饰\",\n    children: [\n      {\n        value: \"mens\",\n        label: \"男装\",\n        children: [\n          { value: \"jacket\", label: \"夹克/外套\" },\n          { value: \"tshirt\", label: \"潮流T恤\" },\n        ],\n      },\n    ],\n  },\n];\n\nexport default function App() {\n  const [selectedCategory, setSelectedCategory] = useState<CascaderValue>([\n    \"electronics\",\n    \"computer\",\n    \"laptop\",\n  ]);\n  return (\n    <Space vertical>\n      <Cascader\n        value={selectedCategory}\n        onChange={setSelectedCategory}\n        options={categoryOptions}\n        expandTrigger=\"hover\"\n        showAllLevels={false}\n        placeholder=\"请选择商品归属类目\"\n        style={{ width: 200 }}\n      />\n      <code>后端绑定最终叶子节点：{selectedCategory.at(-1)}</code>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/cascader/demo/disabled.tsx",
          "title": "禁用特定分支",
          "source": "import { useState } from \"react\";\nimport { Cascader, Space, type CascaderOption, type CascaderValue } from \"react-kui\";\n\nconst orgOptions: CascaderOption[] = [\n  {\n    value: \"headquarters\",\n    label: \"集团总部\",\n    children: [\n      { value: \"hr\", label: \"人力资源部\" },\n      { value: \"tech\", label: \"研发中心\" },\n      { value: \"finance\", label: \"财务风控部\" },\n    ],\n  },\n  {\n    value: \"east_branch\",\n    label: \"华东分公司\",\n    disabled: true,\n    children: [\n      { value: \"sh_sales\", label: \"上海销售部\" },\n      { value: \"hz_sales\", label: \"杭州运营中心\" },\n    ],\n  },\n  {\n    value: \"south_branch\",\n    label: \"华南分公司\",\n    children: [\n      { value: \"gz_sales\", label: \"广州市场部\" },\n      { value: \"sz_sales\", label: \"深圳前海分部\", disabled: true },\n    ],\n  },\n];\n\nexport default function App() {\n  const [departmentPath, setDepartmentPath] = useState<CascaderValue>([]);\n  return (\n    <Space vertical>\n      <code>Disabled item:</code>\n      <Cascader\n        value={departmentPath}\n        onChange={setDepartmentPath}\n        options={orgOptions}\n        placeholder=\"请指派归属部门\"\n        style={{ width: 280 }}\n      />\n      <code>Disabled:</code>\n      <Cascader\n        disabled\n        value={departmentPath}\n        options={orgOptions}\n        placeholder=\"请指派归属部门\"\n        style={{ width: 280 }}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/cascader/demo/async.tsx",
          "title": "异步加载",
          "source": "import { useState } from \"react\";\nimport {\n  Cascader,\n  type CascaderLoadData,\n  type CascaderOption,\n  type CascaderValue,\n} from \"react-kui\";\n\nconst options: CascaderOption[] = [\n  { label: \"浙江省\", value: \"zhejiang\", isLeaf: false },\n  { label: \"江苏省\", value: \"jiangsu\", isLeaf: false },\n];\n\nconst children: Record<string, CascaderOption[]> = {\n  zhejiang: [\n    { label: \"杭州市\", value: \"hangzhou\", isLeaf: true },\n    { label: \"宁波市\", value: \"ningbo\", isLeaf: true },\n  ],\n  jiangsu: [\n    { label: \"南京市\", value: \"nanjing\", isLeaf: true },\n    { label: \"苏州市\", value: \"suzhou\", isLeaf: true },\n  ],\n};\n\nconst loadData: CascaderLoadData = async (option) => {\n  await new Promise((resolve) => setTimeout(resolve, 800));\n  return children[String(option.value)] || [];\n};\n\nexport default function App() {\n  const [value, setValue] = useState<CascaderValue>([]);\n  return (\n    <Cascader\n      value={value}\n      onChange={setValue}\n      options={options}\n      loadData={loadData}\n      placeholder=\"请选择地区\"\n      style={{ width: 260 }}\n    />\n  );\n}"
        },
        {
          "id": "components/cascader/demo/size.tsx",
          "title": "尺寸/形态",
          "source": "import { ArrowDown, Search } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Cascader, Space, type CascaderOption, type CascaderValue } from \"react-kui\";\n\nconst simpleOptions: CascaderOption[] = [\n  {\n    value: \"1\",\n    label: \"选项一\",\n    children: [\n      { value: \"1-1\", label: \"子选项 A\" },\n      { value: \"1-2\", label: \"子选项 B\" },\n    ],\n  },\n  { value: \"2\", label: \"选项二\", children: [{ value: \"2-1\", label: \"子选项 C\" }] },\n];\n\nexport default function App() {\n  const [value, setValue] = useState<CascaderValue>([]);\n  const common = { value, onChange: setValue, options: simpleOptions, style: { width: 240 } };\n  return (\n    <Space vertical size={12}>\n      <Cascader {...common} shape=\"circle\" placeholder=\"Circle\" />\n      <Cascader {...common} showArrow={false} placeholder=\"No Arrow\" />\n      <Cascader {...common} arrowIcon={ArrowDown} placeholder=\"Custom Arrow\" />\n      <Cascader {...common} icon={Search} placeholder=\"With Icon\" />\n      <Cascader {...common} theme=\"solid\" placeholder=\"Solid\" />\n      <Cascader {...common} theme=\"plain\" placeholder=\"Plain\" />\n      <Cascader {...common} size=\"large\" placeholder=\"Large Size (38px)\" />\n      <Cascader {...common} placeholder=\"Default Size (32px)\" />\n      <Cascader {...common} size=\"small\" placeholder=\"Small Size (24px)\" />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/cascader/demo/theme.tsx",
          "title": "外观档位",
          "source": "import { useState } from \"react\";\nimport {\n  Cascader,\n  Space,\n  type CascaderOption,\n  type CascaderValue,\n  type ThemeType,\n} from \"react-kui\";\n\nconst areaOptions: CascaderOption[] = [\n  {\n    value: \"hubei\",\n    label: \"湖北省\",\n    children: [\n      { value: \"wuhan\", label: \"武汉市\", children: [{ value: \"hongshan\", label: \"洪山区\" }] },\n      { value: \"huanggang\", label: \"黄冈市\" },\n    ],\n  },\n  {\n    value: \"guangdong\",\n    label: \"广东省\",\n    children: [\n      { value: \"shenzhen\", label: \"深圳市\", children: [{ value: \"nanshan\", label: \"南山区\" }] },\n      { value: \"guangzhou\", label: \"广州市\" },\n    ],\n  },\n];\n\n// A cascader is a text control with a tree behind it, so it paints the same six tiers an input does: `fill`\n// — its own look — plates the box, `outline` and `dashed` edge it, `plain` leaves it bare, `solid` plates it\n// on the primary and inverts the chosen path and the arrow, `underlined` keeps only the bottom rule. Only the\n// trigger box takes a tier; the popup it opens keeps the library's popup surface in every one of them.\nconst tiers: ThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\", \"underlined\"];\n\nexport default function App() {\n  const [selected, setSelected] = useState<CascaderValue>([\"guangdong\", \"shenzhen\", \"nanshan\"]);\n  return (\n    <Space vertical block style={{ width: 260, maxWidth: \"100%\" }}>\n      {tiers.map((tier) => (\n        <div key={tier} style={{ display: \"grid\", gap: 4, justifyItems: \"start\" }}>\n          <code>theme: {tier}</code>\n          <Cascader\n            value={selected}\n            onChange={setSelected}\n            options={areaOptions}\n            theme={tier}\n            placeholder=\"请选择省市区\"\n            style={{ width: \"100%\" }}\n          />\n        </div>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Tag",
      "import": "import { Tag } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/tag",
      "props": [
        {
          "name": "closeable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否显示关闭按钮",
          "descriptionEn": "Whether to show close button"
        },
        {
          "name": "compact",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否使用适合嵌入输入控件的紧凑尺寸",
          "descriptionEn": "Whether to use the compact size for embedding in input controls"
        },
        {
          "name": "color",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签颜色：预设色值名（与 `Badge` 同一套，如 `blue`）或任意可读色值",
          "descriptionEn": "Tag color: a preset name (the same set `Badge` uses, e.g. `blue`) or any readable color value"
        },
        {
          "name": "shape",
          "type": "ShapeType | undefined",
          "required": false,
          "enumValues": [
            "round",
            "default",
            "square",
            "circle"
          ],
          "boolean": false,
          "descriptionZh": "组件呈现的形状,",
          "descriptionEn": "The shape in which the component is presented"
        },
        {
          "name": "icon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签的图标",
          "descriptionEn": "Tag icon"
        },
        {
          "name": "size",
          "type": "SizeType | undefined",
          "required": false,
          "enumValues": [
            "small",
            "medium",
            "large"
          ],
          "boolean": false,
          "defaultExpression": "sizeProp ?? inheritedAppearance.size ?? \"small\"",
          "descriptionZh": "标签尺寸，可选值 `small`、`medium`、`large`",
          "descriptionEn": "Tag size, optional values `small`, `medium`, `large`"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"fill\"",
          "descriptionZh": "组件呈现主题",
          "descriptionEn": "The component renders the theme"
        },
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击关闭按钮时触发",
          "descriptionEn": "Triggered when the close button is clicked"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "退出动画结束后触发",
          "descriptionEn": "Triggered after the exit animation"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "标签正文，与关闭按钮独立。",
          "descriptionEn": "Tag body content, separate from the close button."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "点击关闭按钮时触发",
          "descriptionEn": "Triggered when the close button is clicked"
        },
        {
          "name": "onAfterClose",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "退出动画结束后触发",
          "descriptionEn": "Triggered after the exit animation"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/tag/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Space, Tag } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap>\n      <Tag theme=\"fill\">标签1</Tag>\n      <Tag theme=\"fill\">标签2</Tag>\n      <Tag theme=\"fill\">标签3</Tag>\n      <Tag closeable theme=\"fill\">\n        标签4\n      </Tag>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tag/demo/size.tsx",
          "title": "尺寸和形状",
          "source": "import { useState } from \"react\";\nimport { RadioGroup, Space, Tag } from \"react-kui\";\nimport type { ShapeType, SizeType, SurfaceThemeType } from \"react-kui\";\nconst sizes = [\n    { label: \"Large\", value: \"large\" },\n    { label: \"Medium\", value: \"medium\" },\n    { label: \"Small\", value: \"small\" },\n  ],\n  shapes = [\n    { label: \"Circle\", value: \"circle\" },\n    { label: \"Square\", value: \"square\" },\n  ],\n  themes = [\n    { label: \"Fill\", value: \"fill\" },\n    { label: \"Outline\", value: \"outline\" },\n  ];\nexport default function App() {\n  const [size, setSize] = useState<SizeType>(\"small\"),\n    [shape, setShape] = useState<ShapeType>(\"circle\"),\n    [theme, setTheme] = useState<SurfaceThemeType>(\"fill\");\n  return (\n    <Space vertical>\n      <RadioGroup value={size} type=\"button\" options={sizes} onChange={setSize} />\n      <RadioGroup value={shape} type=\"button\" options={shapes} onChange={setShape} />\n      <RadioGroup value={theme} type=\"button\" options={themes} onChange={setTheme} />\n      {[1, 2, 3].map((x) => (\n        <Tag key={x} size={size} shape={shape} theme={theme}>\n          Tag{x}\n        </Tag>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tag/demo/icon.tsx",
          "title": "图标",
          "source": "import { LogoQq, LogoWechat, LogoX, LogoYoutube } from \"kui-icons\";\nimport { Space, Tag } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space wrap>\n      <Tag icon={LogoX} color=\"#55acee\">\n        Twitter\n      </Tag>\n      <Tag icon={LogoYoutube} color=\"#cd201f\">\n        Youtube\n      </Tag>\n      <Tag icon={LogoQq} color=\"red\">\n        QQ\n      </Tag>\n      <Tag icon={LogoWechat} closeable color=\"green\">\n        Wechat\n      </Tag>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tag/demo/color.tsx",
          "title": "多彩标签",
          "source": "import { Space, Tag } from \"react-kui\";\nconst colors = [\n    \"red\",\n    \"orange\",\n    \"yellow\",\n    \"olive\",\n    \"green\",\n    \"teal\",\n    \"blue\",\n    \"volcano\",\n    \"violet\",\n    \"cyan\",\n    \"gold\",\n    \"lime\",\n    \"magenta\",\n    \"purple\",\n    \"pink\",\n    \"brown\",\n    \"gray\",\n  ],\n  custom = [\"#c20\", \"#39f\", \"#e3f\", \"#6c0\"];\nexport default function App() {\n  return (\n    <div>\n      <h4 style={{ marginBottom: 16 }}>Presets:</h4>\n      <Space wrap>\n        {colors.map((color) => (\n          <Tag key={color} color={color}>\n            {color}\n          </Tag>\n        ))}\n      </Space>\n      <h4 style={{ margin: \"16px 0\" }}>Custom:</h4>\n      <Space>\n        {custom.map((color) => (\n          <Tag key={color} color={color}>\n            {color}\n          </Tag>\n        ))}\n      </Space>\n    </div>\n  );\n}"
        },
        {
          "id": "components/tag/demo/dynamic.tsx",
          "title": "动态添加和删除",
          "source": "import { Bookmark } from \"kui-icons\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Button, Input, Space, Tag } from \"react-kui\";\nexport default function App() {\n  const [tags, setTags] = useState([\"Apple\", \"Banana\", \"Cat\", \"Dog\"]),\n    [showInput, setShowInput] = useState(false),\n    [tag, setTag] = useState(\"\"),\n    ref = useRef<HTMLInputElement>(null);\n  useEffect(() => {\n    if (showInput) ref.current?.focus();\n  }, [showInput]);\n  const add = () => {\n    const value = tag.trim();\n    if (value && !tags.includes(value)) setTags((items) => [...items, value]);\n    setTag(\"\");\n    setShowInput(false);\n  };\n  return (\n    <Space wrap>\n      {tags.map((value) => (\n        <Tag\n          color=\"blue\"\n          closeable\n          key={value}\n          onAfterClose={() => setTags((items) => items.filter((item) => item !== value))}\n        >\n          {value}\n        </Tag>\n      ))}\n      {showInput ? (\n        <Input\n          ref={ref}\n          value={tag}\n          onChange={setTag}\n          onBlur={add}\n          onKeyDown={(e) => e.key === \"Enter\" && add()}\n          size=\"small\"\n          style={{ width: 81 }}\n        />\n      ) : (\n        <Button onClick={() => setShowInput(true)} size=\"small\" icon={Bookmark}>\n          New Tag\n        </Button>\n      )}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/tag/demo/appearance.tsx",
          "title": "外观",
          "source": "import { Space, Tag, type SurfaceThemeType } from \"react-kui\";\n\n// A tag paints the same five tiers as any other surface and starts on `fill`. `solid` is the tier that moves\n// the text: the chip goes to the primary and the label and close button invert with it. A `color` written on\n// the tag outranks the tier, which the colour demo shows, so this one leaves it out and keeps one chip per\n// tier.\nconst tiers: SurfaceThemeType[] = [\"fill\", \"outline\", \"plain\", \"solid\", \"dashed\"];\n\nexport default function App() {\n  return (\n    <Space wrap size={16}>\n      {tiers.map((tier) => (\n        <Tag key={tier} theme={tier} closeable>\n          theme: {tier}\n        </Tag>\n      ))}\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Col",
      "import": "import { Col } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/row-col",
      "props": [
        {
          "name": "span",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "栅格占位格数，可选值为 0~24，`0` 表示隐藏",
          "descriptionEn": "Occupied columns from 0~24; `0` hides the column"
        },
        {
          "name": "offset",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "栅格左侧间隔格数，可选值为 0~24",
          "descriptionEn": "Left offset from 0~24"
        },
        {
          "name": "order",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "栅格顺序，可选值为 0~24",
          "descriptionEn": "Column order from 0~24"
        },
        {
          "name": "push",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "栅格向右移动的格数，可选值为 0~24",
          "descriptionEn": "Move the column right by 0~24 columns"
        },
        {
          "name": "pull",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "栅格向左移动的格数，可选值为 0~24",
          "descriptionEn": "Move the column left by 0~24 columns"
        },
        {
          "name": "flex",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "Flex 布局填充，例如 `1`、`auto`、`100px`、`1 1 200px`",
          "descriptionEn": "Flex fill, such as `1`, `auto`, `100px`, or `1 1 200px`"
        },
        {
          "name": "xs",
          "type": "ColResponsiveSize | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "`<576px`，数字表示 span，也支持响应式对象",
          "descriptionEn": "`<576px`; accepts a span number or a responsive object"
        },
        {
          "name": "sm",
          "type": "ColResponsiveSize | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "`≥576px`",
          "descriptionEn": "`≥576px`"
        },
        {
          "name": "md",
          "type": "ColResponsiveSize | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "`≥768px`",
          "descriptionEn": "`≥768px`"
        },
        {
          "name": "lg",
          "type": "ColResponsiveSize | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "`≥992px`",
          "descriptionEn": "`≥992px`"
        },
        {
          "name": "xl",
          "type": "ColResponsiveSize | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "`≥1200px`",
          "descriptionEn": "`≥1200px`"
        },
        {
          "name": "xxl",
          "type": "ColResponsiveSize | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "`≥1600px`",
          "descriptionEn": "`≥1600px`"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "栅格列内部的内容。",
          "descriptionEn": "Content inside the grid column."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "parent": "Row",
      "examples": [
        {
          "id": "components/row-col/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Space, Col, Row } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      <Row>\n        <Col span={12}>col-12</Col>\n        <Col span={12}>col-12</Col>\n      </Row>\n      <Row>\n        {Array.from({ length: 3 }, (_, i) => (\n          <Col span={8} key={i}>\n            col-8\n          </Col>\n        ))}\n      </Row>\n      <Row>\n        {Array.from({ length: 4 }, (_, i) => (\n          <Col span={6} key={i}>\n            col-6\n          </Col>\n        ))}\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/gutter.tsx",
          "title": "分栏间隔",
          "source": "import { useState } from \"react\";\nimport { Col, Row, Slider, Space } from \"react-kui\";\n\nconst gutterMarks = { 8: \"8\", 16: \"16\", 24: \"24\", 32: \"32\", 40: \"40\" };\nconst columnMarks = { 2: \"2\", 3: \"3\", 4: \"4\", 6: \"6\", 8: \"8\", 12: \"12\" };\n\nexport default function App() {\n  const [h, setH] = useState(8);\n  const [v, setV] = useState(8);\n  const [cols, setCols] = useState(4);\n  return (\n    <Space vertical block className=\"demo-grid\">\n      <code>gutter = 10</code>\n      <Row gutter={10} className=\"row-gutter\">\n        <Col span={12}>\n          <div>col-12</div>\n        </Col>\n        <Col span={12}>\n          <div>col-12</div>\n        </Col>\n      </Row>\n      <code>Horizontal Gutter (px): {h}</code>\n      <div style={{ width: \"55%\", padding: \"10px\" }}>\n        <Slider\n          min={8}\n          max={40}\n          step={null}\n          marks={gutterMarks}\n          value={h}\n          onChange={(value) => setH(value as number)}\n        />\n      </div>\n      <code>Vertical Gutter (px): {v}</code>\n      <div style={{ width: \"55%\", padding: \"10px\" }}>\n        <Slider\n          min={8}\n          max={40}\n          step={null}\n          marks={gutterMarks}\n          value={v}\n          onChange={(value) => setV(value as number)}\n        />\n      </div>\n      <code>Column Count: {cols}</code>\n      <div style={{ width: \"55%\", padding: \"10px\" }}>\n        <Slider\n          min={2}\n          max={12}\n          step={null}\n          marks={columnMarks}\n          value={cols}\n          onChange={(value) => setCols(value as number)}\n        />\n      </div>\n      <Row gutter={[h, v]} className=\"row-gutter\">\n        {Array.from({ length: cols * 2 }, (_, i) => (\n          <Col span={24 / cols} key={i}>\n            <div>col-{cols}</div>\n          </Col>\n        ))}\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/offset.tsx",
          "title": "栅格偏移",
          "source": "import { Space, Col, Row } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block className=\"demo-grid\">\n      <Row>\n        <Col span={8}>col-8</Col>\n        <Col span={8} offset={8}>\n          col-8 | offset-8\n        </Col>\n      </Row>\n      <Row>\n        <Col span={6}>col-6</Col>\n        <Col span={6} offset={6}>\n          col-6 | offset-6\n        </Col>\n        <Col span={6}>col-6</Col>\n      </Row>\n      <Row>\n        <Col span={12} offset={12}>\n          col-12 offset-12\n        </Col>\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/responsive.tsx",
          "title": "响应式栅格",
          "source": "import { Col, Row, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      <code>xs: 24 · sm: 12 · md: 8 · lg: 6</code>\n      <Row gutter={[12, 12]}>\n        {Array.from({ length: 4 }, (_, index) => (\n          <Col key={index} xs={24} sm={12} md={8} lg={6}>\n            <div>{index + 1}</div>\n          </Col>\n        ))}\n      </Row>\n\n      <code>Responsive object</code>\n      <Row gutter={12}>\n        <Col xs={{ span: 20, offset: 2 }} md={{ span: 12, offset: 0 }}>\n          <div>xs: 20 / offset 2 · md: 12</div>\n        </Col>\n        <Col xs={{ span: 20, offset: 2 }} md={{ span: 12, offset: 0 }}>\n          <div>xs: 20 / offset 2 · md: 12</div>\n        </Col>\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/align.tsx",
          "title": "Flex 对齐",
          "source": "import { Col, Row, Space, type RowProps } from \"react-kui\";\nimport { Fragment } from \"react/jsx-runtime\";\nconst heights = [96, 64, 128, 72];\nconst values: Array<{ value: NonNullable<RowProps[\"align\"]>; label: string }> = [\n  { value: \"top\", label: \"Top\" },\n  { value: \"middle\", label: \"Middle\" },\n  { value: \"bottom\", label: \"Bottom\" },\n];\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      {values.map(({ value, label }) => (\n        <Fragment key={value}>\n          <code>Align {label}</code>\n          <Row align={value} justify=\"space-around\" className=\"demo-back\">\n            {heights.map((height) => (\n              <Col span={4} key={height}>\n                <div className={`h-${height}`}>col-4</div>\n              </Col>\n            ))}\n          </Row>\n        </Fragment>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/flex.tsx",
          "title": "Flex 布局",
          "source": "import { Col, Row, Space, type RowProps } from \"react-kui\";\nimport { Fragment } from \"react/jsx-runtime\";\nconst values: NonNullable<RowProps[\"justify\"]>[] = [\n  \"start\",\n  \"center\",\n  \"end\",\n  \"space-around\",\n  \"space-between\",\n];\nexport default function App() {\n  return (\n    <Space vertical block className=\"demo-grid\">\n      {values.map((justify) => (\n        <Fragment key={justify}>\n          <code>{justify}</code>\n          <Row justify={justify} className=\"demo-back\">\n            {Array.from({ length: 4 }, (_, i) => (\n              <Col span={4} key={i}>\n                <div>col-4</div>\n              </Col>\n            ))}\n          </Row>\n        </Fragment>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/fill.tsx",
          "title": "Flex 填充",
          "source": "import { Col, Row, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      <code>Percentage columns</code>\n      <Row className=\"demo-back\">\n        <Col flex={3}>\n          <div>3/8</div>\n        </Col>\n        <Col flex={5}>\n          <div>5/8</div>\n        </Col>\n      </Row>\n      <code>Fill rest</code>\n      <Row className=\"demo-back\">\n        <Col flex=\"100px\">\n          <div>100px</div>\n        </Col>\n        <Col flex=\"auto\">\n          <div>auto</div>\n        </Col>\n      </Row>\n      <code>Raw flex style</code>\n      <Row className=\"demo-back\">\n        <Col flex=\"1 1 128px\">\n          <div>1 1 128px</div>\n        </Col>\n        <Col flex=\"0 1 256px\">\n          <div>0 1 256px</div>\n        </Col>\n      </Row>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Row",
      "import": "import { Row } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/row-col",
      "props": [
        {
          "name": "gutter",
          "type": "number | [number, number] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "栅格间距，单位 px，左右平分；使用数组形式同时设置 `[水平间距, 垂直间距]`",
          "descriptionEn": "Grid spacing, in px, evenly distributed left and right. Use `[horizontal, vertical]` for two-axis spacing"
        },
        {
          "name": "justify",
          "type": "\"center\" | \"space-around\" | \"space-between\" | \"end\" | \"start\" | undefined",
          "required": false,
          "enumValues": [
            "center",
            "space-around",
            "space-between",
            "end",
            "start"
          ],
          "boolean": false,
          "defaultExpression": "\"start\"",
          "descriptionZh": "flex 布局下的水平排列方式：`start` `end` `center` `space-around` `space-between`",
          "descriptionEn": "Horizontal arrangement in flex layout: `start` `end` `center` `space-around` `space-between`"
        },
        {
          "name": "align",
          "type": "\"top\" | \"bottom\" | \"middle\" | undefined",
          "required": false,
          "enumValues": [
            "top",
            "bottom",
            "middle"
          ],
          "boolean": false,
          "defaultExpression": "\"top\"",
          "descriptionZh": "flex 布局下的垂直对齐方式：`top` `middle` `bottom`",
          "descriptionEn": "Vertical alignment in flex layout: `top` `middle` `bottom`"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "参与栅格行排列的 Col 等子节点。",
          "descriptionEn": "Col and other children arranged within the grid row."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [
        "Col"
      ],
      "examples": [
        {
          "id": "components/row-col/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Space, Col, Row } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      <Row>\n        <Col span={12}>col-12</Col>\n        <Col span={12}>col-12</Col>\n      </Row>\n      <Row>\n        {Array.from({ length: 3 }, (_, i) => (\n          <Col span={8} key={i}>\n            col-8\n          </Col>\n        ))}\n      </Row>\n      <Row>\n        {Array.from({ length: 4 }, (_, i) => (\n          <Col span={6} key={i}>\n            col-6\n          </Col>\n        ))}\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/gutter.tsx",
          "title": "分栏间隔",
          "source": "import { useState } from \"react\";\nimport { Col, Row, Slider, Space } from \"react-kui\";\n\nconst gutterMarks = { 8: \"8\", 16: \"16\", 24: \"24\", 32: \"32\", 40: \"40\" };\nconst columnMarks = { 2: \"2\", 3: \"3\", 4: \"4\", 6: \"6\", 8: \"8\", 12: \"12\" };\n\nexport default function App() {\n  const [h, setH] = useState(8);\n  const [v, setV] = useState(8);\n  const [cols, setCols] = useState(4);\n  return (\n    <Space vertical block className=\"demo-grid\">\n      <code>gutter = 10</code>\n      <Row gutter={10} className=\"row-gutter\">\n        <Col span={12}>\n          <div>col-12</div>\n        </Col>\n        <Col span={12}>\n          <div>col-12</div>\n        </Col>\n      </Row>\n      <code>Horizontal Gutter (px): {h}</code>\n      <div style={{ width: \"55%\", padding: \"10px\" }}>\n        <Slider\n          min={8}\n          max={40}\n          step={null}\n          marks={gutterMarks}\n          value={h}\n          onChange={(value) => setH(value as number)}\n        />\n      </div>\n      <code>Vertical Gutter (px): {v}</code>\n      <div style={{ width: \"55%\", padding: \"10px\" }}>\n        <Slider\n          min={8}\n          max={40}\n          step={null}\n          marks={gutterMarks}\n          value={v}\n          onChange={(value) => setV(value as number)}\n        />\n      </div>\n      <code>Column Count: {cols}</code>\n      <div style={{ width: \"55%\", padding: \"10px\" }}>\n        <Slider\n          min={2}\n          max={12}\n          step={null}\n          marks={columnMarks}\n          value={cols}\n          onChange={(value) => setCols(value as number)}\n        />\n      </div>\n      <Row gutter={[h, v]} className=\"row-gutter\">\n        {Array.from({ length: cols * 2 }, (_, i) => (\n          <Col span={24 / cols} key={i}>\n            <div>col-{cols}</div>\n          </Col>\n        ))}\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/offset.tsx",
          "title": "栅格偏移",
          "source": "import { Space, Col, Row } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space vertical block className=\"demo-grid\">\n      <Row>\n        <Col span={8}>col-8</Col>\n        <Col span={8} offset={8}>\n          col-8 | offset-8\n        </Col>\n      </Row>\n      <Row>\n        <Col span={6}>col-6</Col>\n        <Col span={6} offset={6}>\n          col-6 | offset-6\n        </Col>\n        <Col span={6}>col-6</Col>\n      </Row>\n      <Row>\n        <Col span={12} offset={12}>\n          col-12 offset-12\n        </Col>\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/responsive.tsx",
          "title": "响应式栅格",
          "source": "import { Col, Row, Space } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      <code>xs: 24 · sm: 12 · md: 8 · lg: 6</code>\n      <Row gutter={[12, 12]}>\n        {Array.from({ length: 4 }, (_, index) => (\n          <Col key={index} xs={24} sm={12} md={8} lg={6}>\n            <div>{index + 1}</div>\n          </Col>\n        ))}\n      </Row>\n\n      <code>Responsive object</code>\n      <Row gutter={12}>\n        <Col xs={{ span: 20, offset: 2 }} md={{ span: 12, offset: 0 }}>\n          <div>xs: 20 / offset 2 · md: 12</div>\n        </Col>\n        <Col xs={{ span: 20, offset: 2 }} md={{ span: 12, offset: 0 }}>\n          <div>xs: 20 / offset 2 · md: 12</div>\n        </Col>\n      </Row>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/align.tsx",
          "title": "Flex 对齐",
          "source": "import { Col, Row, Space, type RowProps } from \"react-kui\";\nimport { Fragment } from \"react/jsx-runtime\";\nconst heights = [96, 64, 128, 72];\nconst values: Array<{ value: NonNullable<RowProps[\"align\"]>; label: string }> = [\n  { value: \"top\", label: \"Top\" },\n  { value: \"middle\", label: \"Middle\" },\n  { value: \"bottom\", label: \"Bottom\" },\n];\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      {values.map(({ value, label }) => (\n        <Fragment key={value}>\n          <code>Align {label}</code>\n          <Row align={value} justify=\"space-around\" className=\"demo-back\">\n            {heights.map((height) => (\n              <Col span={4} key={height}>\n                <div className={`h-${height}`}>col-4</div>\n              </Col>\n            ))}\n          </Row>\n        </Fragment>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/flex.tsx",
          "title": "Flex 布局",
          "source": "import { Col, Row, Space, type RowProps } from \"react-kui\";\nimport { Fragment } from \"react/jsx-runtime\";\nconst values: NonNullable<RowProps[\"justify\"]>[] = [\n  \"start\",\n  \"center\",\n  \"end\",\n  \"space-around\",\n  \"space-between\",\n];\nexport default function App() {\n  return (\n    <Space vertical block className=\"demo-grid\">\n      {values.map((justify) => (\n        <Fragment key={justify}>\n          <code>{justify}</code>\n          <Row justify={justify} className=\"demo-back\">\n            {Array.from({ length: 4 }, (_, i) => (\n              <Col span={4} key={i}>\n                <div>col-4</div>\n              </Col>\n            ))}\n          </Row>\n        </Fragment>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/row-col/demo/fill.tsx",
          "title": "Flex 填充",
          "source": "import { Col, Row, Space } from \"react-kui\";\nexport default function App() {\n  return (\n    <Space block vertical className=\"demo-grid\">\n      <code>Percentage columns</code>\n      <Row className=\"demo-back\">\n        <Col flex={3}>\n          <div>3/8</div>\n        </Col>\n        <Col flex={5}>\n          <div>5/8</div>\n        </Col>\n      </Row>\n      <code>Fill rest</code>\n      <Row className=\"demo-back\">\n        <Col flex=\"100px\">\n          <div>100px</div>\n        </Col>\n        <Col flex=\"auto\">\n          <div>auto</div>\n        </Col>\n      </Row>\n      <code>Raw flex style</code>\n      <Row className=\"demo-back\">\n        <Col flex=\"1 1 128px\">\n          <div>1 1 128px</div>\n        </Col>\n        <Col flex=\"0 1 256px\">\n          <div>0 1 256px</div>\n        </Col>\n      </Row>\n    </Space>\n  );\n}"
        }
      ]
    },
    {
      "name": "Upload",
      "import": "import { Upload } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/upload",
      "props": [
        {
          "name": "method",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"post\"",
          "descriptionZh": "上传请求的 http method",
          "descriptionEn": "HTTP method for upload request"
        },
        {
          "name": "name",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"file\"",
          "descriptionZh": "发到后台的文件参数名,默认`file`",
          "descriptionEn": "File parameter name sent to backend, default `file`"
        },
        {
          "name": "action",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传的地址",
          "descriptionEn": "Upload address"
        },
        {
          "name": "type",
          "type": "\"list\" | \"picture\" | undefined",
          "required": false,
          "enumValues": [
            "list",
            "picture"
          ],
          "boolean": false,
          "defaultExpression": "\"list\"",
          "descriptionZh": "选择上传文件之后所呈现的形式",
          "descriptionEn": "Display style after selecting files"
        },
        {
          "name": "data",
          "type": "Record<string, string | number | boolean | Blob> | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "{}",
          "descriptionZh": "上传可能所需的其它参数",
          "descriptionEn": "Other parameters that may be required for upload"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否禁用",
          "descriptionEn": "Whether disabled"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否只读；只展示文件，不允许上传或移除",
          "descriptionEn": "Whether read-only; files remain visible but cannot be uploaded or removed"
        },
        {
          "name": "directory",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否支持上传目录",
          "descriptionEn": "Whether to support directory upload"
        },
        {
          "name": "multiple",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否支持多选文件",
          "descriptionEn": "Whether to support multiple file selection"
        },
        {
          "name": "accept",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "接受上传的文件类型, 详见 [input accept Attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept)",
          "descriptionEn": "Accepted upload file types, see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept"
        },
        {
          "name": "headers",
          "type": "Record<string, string> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "设置上传的请求头部",
          "descriptionEn": "Set upload request headers"
        },
        {
          "name": "withCredentials",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "跨域请求是否携带凭证",
          "descriptionEn": "Include credentials in cross-origin requests"
        },
        {
          "name": "timeout",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "0",
          "descriptionZh": "请求超时时间（毫秒），`0` 表示不限制",
          "descriptionEn": "Request timeout in milliseconds"
        },
        {
          "name": "customRequest",
          "type": "UploadCustomRequest | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义上传请求",
          "descriptionEn": "Custom upload implementation"
        },
        {
          "name": "parseResponse",
          "type": "((xhr: XMLHttpRequest) => unknown) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义 XHR 响应解析",
          "descriptionEn": "Custom XHR response parser"
        },
        {
          "name": "showUploadList",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否显示上传列表",
          "descriptionEn": "Whether to show upload list"
        },
        {
          "name": "transformFile",
          "type": "((file: File) => File | Blob | Promise<File | Blob>) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "在上传之前转换文件",
          "descriptionEn": "Transform file before uploading"
        },
        {
          "name": "fileList",
          "type": "UploadFile[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传的文件列表",
          "descriptionEn": "Uploaded file list"
        },
        {
          "name": "autoTrigger",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否自动上传",
          "descriptionEn": "Whether to auto upload"
        },
        {
          "name": "limit",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "最多允许上传文件个数",
          "descriptionEn": "Maximum number of files allowed to upload"
        },
        {
          "name": "minSize",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传文件最小单位(KB)",
          "descriptionEn": "Minimum file size unit for upload (KB)"
        },
        {
          "name": "maxSize",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传文件最大单位(KB)",
          "descriptionEn": "Maximum file size unit for upload (KB)"
        },
        {
          "name": "uploadText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传域的辅助文字",
          "descriptionEn": "Auxiliary text for upload area"
        },
        {
          "name": "uploadSubText",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传域的二级辅助文字",
          "descriptionEn": "Secondary auxiliary text for upload area"
        },
        {
          "name": "uploadIcon",
          "type": "IconType[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传域的辅助图标",
          "descriptionEn": "Auxiliary icon for upload area"
        },
        {
          "name": "draggable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "是否支持拖拽上传",
          "descriptionEn": "Whether to support drag and drop upload"
        },
        {
          "name": "sortable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "照片墙是否支持拖动排序",
          "descriptionEn": "Whether pictures can be reordered"
        },
        {
          "name": "preview",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "点击照片是否打开图片预览",
          "descriptionEn": "Whether clicking a picture opens image preview"
        },
        {
          "name": "validateAccept",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否校验文件类型",
          "descriptionEn": "Whether to validate file types"
        },
        {
          "name": "maxConcurrent",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "Infinity",
          "descriptionZh": "最大并发上传数",
          "descriptionEn": "Maximum concurrent uploads"
        },
        {
          "name": "onChange",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传中、完成、失败都会触发",
          "descriptionEn": "Triggered during upload, completion, failure"
        },
        {
          "name": "onRemove",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "移除文件回调",
          "descriptionEn": "Callback when file is removed"
        },
        {
          "name": "onSelectFiles",
          "type": "((files: UploadFile[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中文件时触发,返回选中的文件",
          "descriptionEn": "Triggered when files are selected, returns selected files"
        },
        {
          "name": "onExceed",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "limit异常时回调",
          "descriptionEn": "Callback when limit is exceeded"
        },
        {
          "name": "onSizeError",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "minSize, maxSize异常时回调",
          "descriptionEn": "Callback when minSize, maxSize error occurs"
        },
        {
          "name": "onTypeError",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文件类型不符合 accept 时触发",
          "descriptionEn": "Called when a file does not match accept"
        },
        {
          "name": "onSort",
          "type": "((event: UploadSortEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "照片顺序改变时触发",
          "descriptionEn": "Called after picture order changes"
        },
        {
          "name": "onBeforeUpload",
          "type": "((item: UploadFile, file: File) => boolean | File | Blob | void | Promise<boolean | File | Blob | void>) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传前校验或转换；返回 `false` 可阻止上传",
          "descriptionEn": "Validate or transform before upload; return `false` to stop"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传中、完成、失败都会触发",
          "descriptionEn": "Triggered during upload, completion, failure"
        },
        {
          "name": "onRemove",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "移除文件回调",
          "descriptionEn": "Callback when file is removed"
        },
        {
          "name": "onSelectFiles",
          "type": "((files: UploadFile[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选中文件时触发,返回选中的文件",
          "descriptionEn": "Triggered when files are selected, returns selected files"
        },
        {
          "name": "onExceed",
          "type": "(() => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "limit异常时回调",
          "descriptionEn": "Callback when limit is exceeded"
        },
        {
          "name": "onSizeError",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "minSize, maxSize异常时回调",
          "descriptionEn": "Callback when minSize, maxSize error occurs"
        },
        {
          "name": "onTypeError",
          "type": "((event: UploadChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文件类型不符合 accept 时触发",
          "descriptionEn": "Called when a file does not match accept"
        },
        {
          "name": "onSort",
          "type": "((event: UploadSortEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "照片顺序改变时触发",
          "descriptionEn": "Called after picture order changes"
        },
        {
          "name": "onBeforeUpload",
          "type": "((item: UploadFile, file: File) => boolean | File | Blob | void | Promise<boolean | File | Blob | void>) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "上传前校验或转换；返回 `false` 可阻止上传",
          "descriptionEn": "Validate or transform before upload; return `false` to stop"
        }
      ],
      "renderProps": [
        "parseResponse",
        "transformFile"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/upload/demo/basic.tsx",
          "title": "点击上传",
          "source": "import { Upload as UploadIcon } from \"kui-icons\";\nimport { Button, Upload } from \"react-kui\";\nimport { action, handleChange, headers } from \"./shared\";\nexport default function App() {\n  return (\n    <Upload action={action} name=\"file\" headers={headers} onChange={handleChange}>\n      <Button icon={UploadIcon}>Click to upload</Button>\n    </Upload>\n  );\n}"
        },
        {
          "id": "components/upload/demo/file-list.tsx",
          "title": "上传多个文件",
          "source": "import { Upload as UploadIcon } from \"kui-icons\";\nimport { Button, Upload } from \"react-kui\";\nimport { action, handleChange, headers } from \"./shared\";\nexport default function App() {\n  return (\n    <Upload action={action} name=\"file\" headers={headers} onChange={handleChange} multiple>\n      <Button icon={UploadIcon}>Click to upload</Button>\n    </Upload>\n  );\n}"
        },
        {
          "id": "components/upload/demo/directory.tsx",
          "title": "上传文件夹",
          "source": "import { Upload as UploadIcon } from \"kui-icons\";\nimport { Button, Upload } from \"react-kui\";\nimport { action, headers } from \"./shared\";\nexport default function App() {\n  return (\n    <Upload\n      action={action}\n      name=\"file\"\n      directory\n      headers={headers}\n      onChange={({ file, fileList }) => {\n        if (file.status !== \"uploading\") console.log(file, fileList);\n      }}\n    >\n      <Button icon={UploadIcon}>Click to upload</Button>\n    </Upload>\n  );\n}"
        },
        {
          "id": "components/upload/demo/accept.tsx",
          "title": "上传文件类型",
          "source": "import { Image, Upload as UploadIcon, Video } from \"kui-icons\";\nimport { Button, Space, Upload } from \"react-kui\";\nimport { action, handleChange, headers } from \"./shared\";\nconst choices = [\n  { accept: \"image/*\", icon: Image, label: \"Upload Image\" },\n  { accept: \"video/*\", icon: Video, label: \"Upload Video\" },\n  { accept: \".pdf,.png,.jpeg\", icon: UploadIcon, label: \"Upload PDF, PNG, JPEG\" },\n];\nexport default function App() {\n  return (\n    <Space vertical>\n      {choices.map(({ accept, icon, label }) => (\n        <Upload\n          key={accept}\n          action={action}\n          name=\"file\"\n          headers={headers}\n          onChange={handleChange}\n          multiple\n          accept={accept}\n        >\n          <Button icon={icon}>{label}</Button>\n        </Upload>\n      ))}\n    </Space>\n  );\n}"
        },
        {
          "id": "components/upload/demo/transform.tsx",
          "title": "上传前处理图片",
          "source": "import { Camera } from \"kui-icons\";\nimport { Upload } from \"react-kui\";\nimport { action, headers } from \"./shared\";\nconst transformFile = (file: File) =>\n  new Promise<File>((resolve, reject) => {\n    const canvas = document.createElement(\"canvas\"),\n      ctx = canvas.getContext(\"2d\", { willReadFrequently: true }),\n      img = new Image(),\n      url = URL.createObjectURL(file);\n    img.onload = () => {\n      canvas.width = 200;\n      canvas.height = 300;\n      ctx?.drawImage(img, (img.width - 200) / 2, (img.height - 300) / 2, 200, 300);\n      canvas.toBlob((blob) => {\n        URL.revokeObjectURL(url);\n        if (blob) {\n          resolve(new File([blob], file.name, { type: \"image/png\" }));\n        } else {\n          reject(new Error(\"Image conversion failed\"));\n        }\n      }, \"image/png\");\n    };\n    img.onerror = () => {\n      URL.revokeObjectURL(url);\n      reject(new Error(\"Image loading failed\"));\n    };\n    img.src = url;\n  });\nexport default function App() {\n  return (\n    <Upload\n      action={action}\n      name=\"file\"\n      type=\"picture\"\n      headers={headers}\n      onChange={({ file, fileList }) => {\n        if (file.status !== \"uploading\") console.log(file, fileList);\n      }}\n      transformFile={transformFile}\n      limit={1}\n      accept=\"image/*\"\n      uploadIcon={Camera}\n      uploadText=\"Upload Image\"\n    />\n  );\n}"
        },
        {
          "id": "components/upload/demo/exceed.tsx",
          "title": "上传限制",
          "source": "import { Upload as UploadIcon } from \"kui-icons\";\nimport { useState } from \"react\";\nimport { Button, message, Upload } from \"react-kui\";\nimport { action, headers } from \"./shared\";\nconst limit = 2;\nexport default function App() {\n  const [disabled, setDisabled] = useState(false);\n  return (\n    <Upload\n      action={action}\n      name=\"file\"\n      headers={headers}\n      limit={limit}\n      minSize={200}\n      maxSize={1024}\n      onExceed={() => message.warning(`You can upload a maximum of ${limit} files.`)}\n      onSizeError={({ file }) => message.warning(`The size of ${file.filename} exceeds the limit`)}\n      onChange={({ fileList }) => setDisabled(fileList.length >= limit)}\n      onRemove={({ fileList }) => setDisabled(fileList.length >= limit)}\n      multiple\n    >\n      <Button icon={UploadIcon} disabled={disabled}>\n        Click to upload (Minimum 200KB, Maximum 1MB, up to {limit} items)\n      </Button>\n    </Upload>\n  );\n}"
        },
        {
          "id": "components/upload/demo/custom.tsx",
          "title": "手动上传/自定义属性",
          "source": "import { Upload as UploadIcon } from \"kui-icons\";\nimport { useRef, useState } from \"react\";\nimport { Button, Space, Upload, type UploadFile, type UploadRef } from \"react-kui\";\nimport { action, headers } from \"./shared\";\n\nconst requestData = { type: \"image\", time: Date.now() };\n\nexport default function App() {\n  const ref = useRef<UploadRef>(null),\n    [disabled, setDisabled] = useState(true);\n  return (\n    <Space vertical>\n      <Upload\n        ref={ref}\n        action={action}\n        name=\"file\"\n        headers={headers}\n        data={requestData}\n        autoTrigger={false}\n        onSelectFiles={(files: UploadFile[]) => {\n          console.log(files);\n          setDisabled(files.length === 0);\n        }}\n        multiple\n      >\n        <Button icon={UploadIcon}>Click to choose file</Button>\n      </Upload>\n      <Button disabled={disabled} onClick={() => ref.current?.upload()}>\n        Starting Upload\n      </Button>\n    </Space>\n  );\n}"
        },
        {
          "id": "components/upload/demo/custom-request.tsx",
          "title": "自定义请求与上传队列",
          "source": "import { Button, Upload, message, type UploadCustomRequest } from \"react-kui\";\n\nconst customRequest: UploadCustomRequest = ({ file, onProgress, onSuccess }) => {\n  let percent = 0;\n  const timer = window.setInterval(() => {\n    percent += 10;\n    onProgress(percent);\n    if (percent >= 100) {\n      window.clearInterval(timer);\n      onSuccess({ name: file instanceof File ? file.name : \"file\" });\n    }\n  }, 200);\n\n  return { abort: () => window.clearInterval(timer) };\n};\n\nexport default function App() {\n  return (\n    <Upload\n      multiple\n      maxConcurrent={2}\n      customRequest={customRequest}\n      onBeforeUpload={(_item, file) => {\n        if (!file.name.endsWith(\".tmp\")) return;\n        message.warning(\"Temporary files cannot be uploaded\");\n        return false;\n      }}\n      uploadText=\"Select files\"\n    >\n      <Button>Custom upload</Button>\n    </Upload>\n  );\n}"
        },
        {
          "id": "components/upload/demo/validation.tsx",
          "title": "文件校验",
          "source": "import { Button, Upload, message } from \"react-kui\";\n\nexport default function App() {\n  return (\n    <Upload\n      action=\"/api/upload\"\n      accept=\"image/png,image/jpeg\"\n      maxSize={1024}\n      autoTrigger={false}\n      onTypeError={() => message.error(\"Only PNG and JPEG files are accepted\")}\n      onSizeError={() => message.error(\"The image must not exceed 1 MB\")}\n    >\n      <Button>Select image</Button>\n    </Upload>\n  );\n}"
        },
        {
          "id": "components/upload/demo/pictures.tsx",
          "title": "照片墙",
          "source": "import { useState } from \"react\";\nimport { Button, Space, Upload, type UploadFile } from \"react-kui\";\nimport { action, headers } from \"./shared\";\nconst initial: UploadFile[] = [\n  {\n    url: \"https://cdn.chuchur.com/upload/demo/test_300.jpg\",\n    status: \"uploading\",\n    filename: \"test.jpg\",\n    size: \"222kb\",\n    percent: 50,\n  },\n  {\n    url: \"https://cdn.chuchur.com/upload/cat/cat1.jpg\",\n    status: \"success\",\n    filename: \"cat.jpg\",\n    size: \"180kb\",\n  },\n  {\n    url: \"https://cdn.chuchur.com/upload/demo/test_300.jpg\",\n    status: \"error\",\n    filename: \"test.jpg\",\n    size: \"222kb\",\n  },\n];\nexport default function App() {\n  const [files, setFiles] = useState(initial);\n  return (\n    <Space vertical>\n      <Button\n        onClick={() =>\n          setFiles([\n            {\n              url: \"https://cdn.chuchur.com/upload/cat/cat1.jpg\",\n              status: \"uploading\",\n              filename: \"test.jpg\",\n              size: \"222kb\",\n              percent: 50,\n            },\n          ])\n        }\n      >\n        change\n      </Button>\n      <Upload\n        action={action}\n        name=\"file\"\n        type=\"picture\"\n        sortable\n        headers={headers}\n        onChange={({ file, fileList }) => {\n          setFiles(fileList);\n          if (file.status !== \"uploading\") console.log(file, fileList);\n        }}\n        fileList={files}\n        onSort={({ fileList }) => setFiles(fileList)}\n        accept=\"image/*\"\n        uploadText=\"Upload Avatar\"\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/upload/demo/avatar.tsx",
          "title": "上传头像",
          "source": "import { Camera } from \"kui-icons\";\nimport { Upload } from \"react-kui\";\nimport { action, headers } from \"./shared\";\nexport default function App() {\n  return (\n    <Upload\n      action={action}\n      name=\"file\"\n      type=\"picture\"\n      headers={headers}\n      onChange={({ file, fileList }) => {\n        if (file.status !== \"uploading\") console.log(file, fileList);\n      }}\n      limit={1}\n      accept=\"image/*\"\n      uploadIcon={Camera}\n      uploadText=\"Upload Avatar\"\n    />\n  );\n}"
        },
        {
          "id": "components/upload/demo/draggable.tsx",
          "title": "拖拽上传",
          "source": "import { Upload as UploadIcon } from \"kui-icons\";\nimport { Upload } from \"react-kui\";\nimport { action, handleChange, headers } from \"./shared\";\nexport default function App() {\n  return (\n    <div style={{ width: \"100%\" }}>\n      <Upload\n        action={action}\n        name=\"file\"\n        headers={headers}\n        draggable\n        uploadIcon={UploadIcon}\n        uploadText=\"Click to upload files or drag files here\"\n        uploadSubText=\"Supports any type of file\"\n        onChange={handleChange}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/upload/demo/forms.tsx",
          "title": "表单校验",
          "source": "import { Camera, Upload as UploadIcon } from \"kui-icons\";\nimport { useState } from \"react\";\nimport {\n  Button,\n  Form,\n  FormItem,\n  message,\n  Space,\n  Upload,\n  type FormRule,\n  type FormSubmitEvent,\n  type UploadFile,\n} from \"react-kui\";\nimport { action, headers } from \"./shared\";\n\ninterface UploadForm extends Record<string, unknown> {\n  avatar: UploadFile[] | null;\n  file: UploadFile[] | null;\n  files: UploadFile[] | null;\n}\n\nconst uploaded: FormRule = {\n  // Check completion on submit, not during normal upload progress.\n  trigger: [],\n  validator: (_rule, value, done) => {\n    const files = value as UploadFile[] | null;\n    if (!files?.length) return done();\n    if (files.some((file) => file.status === \"error\")) {\n      return done(new Error(\"Remove or retry failed files\"));\n    }\n    if (files.some((file) => file.status !== \"success\")) {\n      return done(new Error(\"Please wait for all files to finish uploading\"));\n    }\n    done();\n  },\n};\n\nconst uploadFailed: FormRule = {\n  validator: (_rule, value, done) => {\n    const files = value as UploadFile[] | null;\n    done(\n      files?.some((file) => file.status === \"error\")\n        ? new Error(\"Remove or retry failed files\")\n        : undefined,\n    );\n  },\n};\n\nconst rules: Record<string, FormRule[]> = {\n  avatar: [{ required: true, message: \"Please select an avatar\" }, uploadFailed, uploaded],\n  file: [{ required: true, message: \"Please select a file\" }, uploadFailed, uploaded],\n  files: [{ required: true, message: \"Please select at least one file\" }, uploadFailed, uploaded],\n};\n\nexport default function App() {\n  const [form, setForm] = useState<UploadForm>({ avatar: [], file: [], files: [] });\n  const submit = ({ valid }: FormSubmitEvent) =>\n    message[valid ? \"success\" : \"error\"](\n      valid ? \"Validation passed (demo only)\" : \"Please check the upload fields\",\n    );\n  return (\n    <Form\n      model={form}\n      onChange={(next) => setForm(next as UploadForm)}\n      rules={rules}\n      wrapperCol={{ span: 16 }}\n      labelCol={{ span: 8 }}\n      onSubmit={submit}\n    >\n      <FormItem label=\"Avatar\" prop=\"avatar\">\n        <Upload\n          action={action}\n          name=\"file\"\n          type=\"picture\"\n          headers={headers}\n          limit={1}\n          accept=\"image/*\"\n          uploadIcon={Camera}\n          uploadText=\"Upload Avatar\"\n        />\n      </FormItem>\n      <FormItem label=\"Single file\" prop=\"file\">\n        <Upload action={action} name=\"file\" headers={headers} limit={1} accept=\"image/*\">\n          <Button icon={UploadIcon}>Upload File</Button>\n        </Upload>\n      </FormItem>\n      <FormItem label=\"Multiple files\" prop=\"files\">\n        <Upload action={action} name=\"file\" headers={headers} multiple accept=\"image/*\">\n          <Button icon={UploadIcon}>Upload Files</Button>\n        </Upload>\n      </FormItem>\n      <FormItem wrapperCol={{ offset: 8 }}>\n        <Space>\n          <Button type=\"primary\" htmlType=\"submit\">\n            Submit Form\n          </Button>\n          <Button htmlType=\"reset\">Reset</Button>\n        </Space>\n      </FormItem>\n    </Form>\n  );\n}"
        }
      ]
    },
    {
      "name": "Watermark",
      "import": "import { Watermark } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/watermark",
      "props": [
        {
          "name": "content",
          "type": "string | string[] | WatermarkTextItem[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"\"",
          "descriptionZh": "水印的文本内容。支持传入字符串，或者数组以支持多行。传入对象数组时，可独立控制每行样式。",
          "descriptionEn": "The text content of the watermark. Accepts a string or an array for multi-line support. Passing an array of objects allows independent styling for each line."
        },
        {
          "name": "image",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "\"\"",
          "descriptionZh": "图片水印的源地址（Base64 或 URL）。开启后优先渲染图片水印。",
          "descriptionEn": "The source URL (Base64 or URL) of the image watermark. If provided, the image watermark takes priority over text."
        },
        {
          "name": "width",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "240",
          "descriptionZh": "单个水印区域的宽度，单位 `px`。",
          "descriptionEn": "Width of a single watermark cell, in `px`."
        },
        {
          "name": "height",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "189",
          "descriptionZh": "单个水印区域的高度，单位 `px`。",
          "descriptionEn": "Height of a single watermark cell, in `px`."
        },
        {
          "name": "rotate",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "-22",
          "descriptionZh": "水印的倾斜旋转角度。",
          "descriptionEn": "Rotation angle of the watermark in degrees."
        },
        {
          "name": "zIndex",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "999",
          "descriptionZh": "水印挂载节点的层级，在 Modal/Drawer 等高级别弹窗中使用时建议调大。",
          "descriptionEn": "The z-index of the watermark container. It is recommended to increase this value when used inside high-level components like Modals or Drawers."
        },
        {
          "name": "fullscreen",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否为全屏水印。若为 `true`，则会直接挂载到 `body` 上。",
          "descriptionEn": "Whether to enable fullscreen mode. If `true`, the watermark will be mounted directly to the `body`."
        },
        {
          "name": "antiTamper",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "true",
          "descriptionZh": "是否开启高防篡改守护（通过 `MutationObserver` 监听 DOM 节点的删除与属性修改）。",
          "descriptionEn": "Whether to enable high-level anti-tampering protection (monitors DOM node removal and attribute modifications via `MutationObserver`)."
        },
        {
          "name": "font",
          "type": "Font | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "全局水印文本的默认兜底样式（包含颜色、字号、粗细、字体族及字形）。",
          "descriptionEn": "Global fallback styles for the watermark text (including color, font size, weight, family, and style)."
        },
        {
          "name": "gap",
          "type": "[number, number] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[40, 40]",
          "descriptionZh": "水印格子之间的横向与纵向间距，格式为 `[x, y]`。",
          "descriptionEn": "The horizontal and vertical spacing between watermark cells, formatted as `[x, y]`."
        },
        {
          "name": "offset",
          "type": "[number, number] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[20, 20]",
          "descriptionZh": "水印网格平铺时的起始原点偏移量，格式为 `[x, y]`，用于微调边缘留白。",
          "descriptionEn": "The starting offset origin for the watermark grid tiling, formatted as `[x, y]`. Useful for fine-tuning edge whitespace."
        },
        {
          "name": "layout",
          "type": "WatermarkLayoutType | undefined",
          "required": false,
          "enumValues": [
            "grid",
            "stagger"
          ],
          "boolean": false,
          "defaultExpression": "\"stagger\"",
          "descriptionZh": "水印的排列布局模式。可选值：`'grid'` (传统正交网格) 或 `'stagger'` (高级奇偶行交错错落网格)。",
          "descriptionEn": "Layout mode of the watermark. Options: `'grid'` (traditional orthogonal grid) or `'stagger'` (advanced staggered grid with alternating row offsets)."
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [],
      "renderProps": [],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/watermark/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { Watermark } from \"react-kui\";\nexport default function App() {\n  return (\n    <div className=\"salary-card\" style={{ width: \"100%\", height: 500 }}>\n      <Watermark content=\"Kui React\" font={{ color: \"rgba(100, 100, 100, 0.3)\" }} />\n    </div>\n  );\n}"
        },
        {
          "id": "components/watermark/demo/image.tsx",
          "title": "图片水印",
          "source": "import { Watermark } from \"react-kui\";\nexport default function App() {\n  return (\n    <Watermark\n      content=\"图片不可用时展示\"\n      image=\"https://cdn.chuchur.com/img/thumb.png\"\n      style={{ width: \"100%\", height: 500 }}\n      width={150}\n      height={50}\n      gap={[100, 100]}\n    />\n  );\n}"
        },
        {
          "id": "components/watermark/demo/multiple-lines.tsx",
          "title": "多行文字水印",
          "source": "import { Watermark, type WatermarkTextItem } from \"react-kui\";\nconst content: WatermarkTextItem[] = [\n  { text: \"绝密文件 禁止外传\", fontSize: 18, fontWeight: \"bold\", color: \"rgba(239, 68, 68, 0.16)\" },\n  { text: \"研发架构部 · 内部资产\", fontSize: 14, color: \"rgba(100, 116, 139, 0.12)\" },\n  { text: \"操作人：张三 (9527)  2026-07-11\", fontSize: 12, color: \"rgba(148, 163, 184, 0.1)\" },\n];\nexport default function App() {\n  return (\n    <Watermark\n      layout=\"stagger\"\n      width={300}\n      height={200}\n      content={content}\n      style={{ width: \"100%\", height: 500 }}\n    >\n      <div className=\"content-box\" />\n    </Watermark>\n  );\n}"
        },
        {
          "id": "components/watermark/demo/in-modal-drawer.tsx",
          "title": "Modal 与 Drawer 中使用",
          "source": "import { useState } from \"react\";\nimport { Button, Drawer, Flex, Modal, Space, Watermark } from \"react-kui\";\nconst content = [\"审批专用\", \"张三 2026-07-10\", \"IP: 192.168.1.100\"],\n  body = (\n    <Flex style={{ backgroundColor: \"#f5f5f510\", height: 500 }} align=\"center\" justify=\"center\">\n      <p>核心敏感数据</p>\n    </Flex>\n  );\nexport default function App() {\n  const [modal, setModal] = useState(false),\n    [drawer, setDrawer] = useState(false);\n  return (\n    <>\n      <Modal open={modal} title=\"涉密核心资产审批\" onOpenChange={setModal}>\n        <Watermark content={content}>{body}</Watermark>\n      </Modal>\n      <Drawer open={drawer} title=\"涉密核心资产审批\" onOpenChange={setDrawer}>\n        <Watermark content={content}>{body}</Watermark>\n      </Drawer>\n      <Space>\n        <Button onClick={() => setModal(true)}>Show in Modal</Button>\n        <Button onClick={() => setDrawer(true)}>Show in Drawer</Button>\n      </Space>\n    </>\n  );\n}"
        },
        {
          "id": "components/watermark/demo/custom.tsx",
          "title": "自定义配置",
          "source": "import { useState } from \"react\";\nimport {\n  ColorPicker,\n  Input,\n  Radio,\n  RadioGroup,\n  Col,\n  Row,\n  Slider,\n  Space,\n  Watermark,\n  type WatermarkLayoutType,\n} from \"react-kui\";\nexport default function App() {\n  const [content, setContent] = useState(\"Kui React\"),\n    [color, setColor] = useState(\"rgba(100, 100, 100, 0.3)\"),\n    [fontSize, setFontSize] = useState(16),\n    [rotate, setRotate] = useState(45),\n    [gap, setGap] = useState<number[]>([16, 16]),\n    [offset, setOffset] = useState<number[]>([8, 8]),\n    [layout, setLayout] = useState<WatermarkLayoutType>(\"stagger\");\n  return (\n    <Row>\n      <Col span={18}>\n        <div className=\"salary-card\" style={{ width: \"100%\", height: 500 }}>\n          <Watermark\n            content={content}\n            font={{ color, fontSize }}\n            rotate={rotate}\n            gap={gap as [number, number]}\n            offset={offset as [number, number]}\n            layout={layout}\n          />\n        </div>\n      </Col>\n      <Col span={6}>\n        <Space vertical>\n          Content:\n          <Input value={content} maxLength={15} onChange={setContent} />\n          Color:\n          <ColorPicker value={color} onChange={setColor} />\n          Font Size:\n          <Slider value={fontSize} min={12} max={48} onChange={(v) => setFontSize(v as number)} />\n          Rotate:\n          <Slider value={rotate} min={0} max={360} onChange={(v) => setRotate(v as number)} />\n          Gap:\n          <Slider value={gap} range onChange={(v) => setGap(v as number[])} />\n          Offset:\n          <Slider value={offset} range onChange={(v) => setOffset(v as number[])} />\n          Layout:\n          <RadioGroup value={layout} onChange={(v) => setLayout(v as WatermarkLayoutType)}>\n            <Radio value=\"stagger\">Stagger</Radio>\n            <Radio value=\"grid\">Grid</Radio>\n          </RadioGroup>\n        </Space>\n      </Col>\n    </Row>\n  );\n}"
        }
      ]
    },
    {
      "name": "VirtualList",
      "import": "import { VirtualList } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/virtual-list",
      "props": [
        {
          "name": "data",
          "type": "T[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "列表数据",
          "descriptionEn": "List data"
        },
        {
          "name": "height",
          "type": "string | number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可视区域高度",
          "descriptionEn": "Viewport height"
        },
        {
          "name": "itemHeight",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "每一项的固定高度",
          "descriptionEn": "Fixed item height"
        },
        {
          "name": "overscan",
          "type": "number | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "视口上下额外渲染的项目数量",
          "descriptionEn": "Extra items rendered above and below the viewport"
        },
        {
          "name": "itemKey",
          "type": "string | ((item: T, index: number) => VirtualListKey) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "唯一标识字段或获取唯一值方法",
          "descriptionEn": "Unique field or key getter"
        },
        {
          "name": "children",
          "type": "((item: T, index: number) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "可见项渲染函数，接收数据项和它在完整 data 数组中的索引；不会渲染所有项。",
          "descriptionEn": "Renderer for visible items, receiving the item and its index in the full data array; not every item is rendered."
        },
        {
          "name": "onScroll",
          "type": "React.UIEventHandler<HTMLDivElement> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "滚动回调",
          "descriptionEn": "Scroll callback"
        }
      ],
      "nativeProps": [
        "onChange",
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onScroll",
          "type": "React.UIEventHandler<HTMLDivElement> | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "滚动回调",
          "descriptionEn": "Scroll callback"
        }
      ],
      "renderProps": [
        "itemKey",
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/virtual-list/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { VirtualList } from \"react-kui\";\nconst items = Array.from({ length: 10000 }, (_, index) => ({\n  id: index + 1,\n  label: `Virtual item ${index + 1}`,\n}));\nexport default function App() {\n  return (\n    <VirtualList data={items} height={280} itemHeight={40} itemKey=\"id\">\n      {(item, index) => (\n        <div\n          style={{\n            display: \"flex\",\n            height: \"100%\",\n            alignItems: \"center\",\n            padding: \"0 16px\",\n            borderBottom: \"1px solid var(--kui-color-border)\",\n            gap: 16,\n          }}\n        >\n          <span>#{index + 1}</span>\n          <span>{item.label}</span>\n        </div>\n      )}\n    </VirtualList>\n  );\n}"
        }
      ]
    },
    {
      "name": "Transfer",
      "import": "import { Transfer } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/transfer",
      "props": [
        {
          "name": "dataSource",
          "type": "TransferItem[] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "EMPTY_ITEMS",
          "descriptionZh": "数据源",
          "descriptionEn": "Source data"
        },
        {
          "name": "targetKeys",
          "type": "TransferKey[] | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "目标项",
          "descriptionEn": "target items"
        },
        {
          "name": "titles",
          "type": "[ReactNode, ReactNode] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[\"Source\", \"Target\"]",
          "descriptionZh": "两侧标题",
          "descriptionEn": "Titles for both lists"
        },
        {
          "name": "operations",
          "type": "[string, string] | undefined",
          "required": false,
          "boolean": false,
          "defaultExpression": "[\"\", \"\"]",
          "descriptionZh": "向右、向左按钮文案",
          "descriptionEn": "Right and left operation labels"
        },
        {
          "name": "searchable",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否可搜索",
          "descriptionEn": "Whether searchable"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否禁用此项",
          "descriptionEn": "Disable this item"
        },
        {
          "name": "readOnly",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "defaultExpression": "false",
          "descriptionZh": "是否只读",
          "descriptionEn": "Whether read-only"
        },
        {
          "name": "theme",
          "type": "SurfaceThemeType | undefined",
          "required": false,
          "enumValues": [
            "dashed",
            "solid",
            "fill",
            "outline",
            "plain"
          ],
          "boolean": false,
          "defaultExpression": "resolvePaintedTheme(themeProp ?? inheritedAppearance.theme, PAINTED_THEMES) ?? \"outline\"",
          "descriptionZh": "外观主题",
          "descriptionEn": "Appearance theme"
        },
        {
          "name": "filterOption",
          "type": "((keyword: string, item: TransferItem) => boolean) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义筛选",
          "descriptionEn": "Custom filter"
        },
        {
          "name": "item",
          "type": "((item: TransferItem) => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义列表项渲染",
          "descriptionEn": "Custom list item renderer"
        },
        {
          "name": "footer",
          "type": "((direction: \"left\" | \"right\") => React.ReactNode) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "自定义列表底部渲染",
          "descriptionEn": "Custom list footer renderer"
        },
        {
          "name": "onChange",
          "type": "((event: TransferChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "数据移动时触发",
          "descriptionEn": "Emitted after moving items"
        },
        {
          "name": "onSelectChange",
          "type": "((sourceKeys: TransferKey[], targetKeys: TransferKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择变化回调",
          "descriptionEn": "Selection callback"
        },
        {
          "name": "onSearch",
          "type": "((direction: \"left\" | \"right\", value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索框内容变化回调",
          "descriptionEn": "Search box callback"
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "title",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "children",
        "dangerouslySetInnerHTML",
        "onCopy",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "title": "string",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onChange",
          "type": "((event: TransferChangeEvent) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "数据移动时触发",
          "descriptionEn": "Emitted after moving items"
        },
        {
          "name": "onSelectChange",
          "type": "((sourceKeys: TransferKey[], targetKeys: TransferKey[]) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "选择变化回调",
          "descriptionEn": "Selection callback"
        },
        {
          "name": "onSearch",
          "type": "((direction: \"left\" | \"right\", value: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "搜索框内容变化回调",
          "descriptionEn": "Search box callback"
        }
      ],
      "renderProps": [
        "titles",
        "filterOption",
        "item",
        "footer"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/transfer/demo/basic.tsx",
          "title": "基本用法",
          "source": "import { useState } from \"react\";\nimport { Transfer } from \"react-kui\";\nconst items = Array.from({ length: 8 }, (_, index) => ({\n  key: index + 1,\n  title: `Item ${index + 1}`,\n  disabled: index === 4,\n}));\nexport default function App() {\n  const [selected, setSelected] = useState<(string | number)[]>([2]);\n  return (\n    <Transfer\n      dataSource={items}\n      targetKeys={selected}\n      onChange={(event) => setSelected(event.targetKeys)}\n      titles={[\"Available\", \"Selected\"]}\n    />\n  );\n}"
        },
        {
          "id": "components/transfer/demo/search.tsx",
          "title": "搜索与操作文案",
          "source": "import { useState } from \"react\";\nimport { Transfer } from \"react-kui\";\nconst items = [\"Design\", \"Development\", \"Testing\", \"Deployment\"].map((title, key) => ({\n  key,\n  title,\n}));\nexport default function App() {\n  const [selected, setSelected] = useState<(string | number)[]>([]);\n  return (\n    <Transfer\n      targetKeys={selected}\n      onChange={(event) => setSelected(event.targetKeys)}\n      searchable\n      dataSource={items}\n      operations={[\"Add\", \"Remove\"]}\n    />\n  );\n}"
        },
        {
          "id": "components/transfer/demo/theme.tsx",
          "title": "主题",
          "source": "import { useState } from \"react\";\nimport { RadioGroup, Space, Transfer } from \"react-kui\";\nconst items = [\"Design\", \"Development\", \"Testing\", \"Deployment\"].map((title, key) => ({\n  key: key + 1,\n  title,\n}));\nexport default function App() {\n  // The panels offer the five tiers they paint; `underlined` is a control tier and lands back on `outline`.\n  const [theme, setTheme] = useState<\"fill\" | \"outline\" | \"plain\" | \"solid\" | \"dashed\">(\"outline\");\n  const [targetKeys, setTargetKeys] = useState<(string | number)[]>([4]);\n  return (\n    <Space vertical block>\n      <RadioGroup\n        type=\"button\"\n        options={[\n          { label: \"Outline\", value: \"outline\" },\n          { label: \"Fill\", value: \"fill\" },\n          { label: \"Plain\", value: \"plain\" },\n          { label: \"Solid\", value: \"solid\" },\n          { label: \"Dashed\", value: \"dashed\" },\n        ]}\n        value={theme}\n        onChange={(value) => setTheme(value as typeof theme)}\n      />\n      <Transfer\n        targetKeys={targetKeys}\n        onChange={(event) => setTargetKeys(event.targetKeys)}\n        searchable\n        theme={theme}\n        dataSource={items}\n      />\n    </Space>\n  );\n}"
        },
        {
          "id": "components/transfer/demo/disabled.tsx",
          "title": "禁用状态",
          "source": "import { useState } from \"react\";\nimport { Transfer } from \"react-kui\";\nconst items = [\n  { key: 1, title: \"Ava\", description: \"Product designer\" },\n  { key: 2, title: \"Leo\", description: \"Frontend developer\" },\n  { key: 3, title: \"Mia\", description: \"Project owner\", disabled: true },\n  { key: 4, title: \"Noah\", description: \"QA engineer\" },\n];\nexport default function App() {\n  const [selected, setSelected] = useState<(string | number)[]>([2]);\n  return (\n    <div style={{ display: \"grid\", gap: 24 }}>\n      <Transfer\n        targetKeys={selected}\n        onChange={(event) => setSelected(event.targetKeys)}\n        dataSource={items}\n        titles={[\"成员\", \"项目成员\"]}\n      />\n      <Transfer\n        targetKeys={selected}\n        onChange={(event) => setSelected(event.targetKeys)}\n        disabled\n        dataSource={items}\n        titles={[\"成员\", \"项目成员\"]}\n      />\n    </div>\n  );\n}"
        },
        {
          "id": "components/transfer/demo/custom.tsx",
          "title": "自定义内容",
          "source": "import { useState } from \"react\";\nimport { Tag, Transfer } from \"react-kui\";\nconst roles: Record<string | number, string> = {\n  1: \"Design\",\n  2: \"Frontend\",\n  3: \"Backend\",\n  4: \"QA\",\n};\nconst items = [\"Ava\", \"Leo\", \"Mia\", \"Noah\"].map((title, key) => ({ key: key + 1, title }));\nexport default function App() {\n  const [selected, setSelected] = useState<(string | number)[]>([2]);\n  return (\n    <Transfer\n      targetKeys={selected}\n      onChange={(event) => setSelected(event.targetKeys)}\n      searchable\n      dataSource={items}\n      filterOption={(keyword, item) =>\n        `${item.title} ${roles[item.key]}`.toLowerCase().includes(keyword.toLowerCase())\n      }\n      item={(item) => (\n        <span\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"space-between\",\n            width: \"100%\",\n            gap: 8,\n          }}\n        >\n          <strong>{item.title}</strong>\n          <Tag size=\"small\" theme=\"plain\">\n            {roles[item.key]}\n          </Tag>\n        </span>\n      )}\n      footer={(direction) => (direction === \"left\" ? \"可选择成员\" : \"当前项目成员\")}\n      titles={[\"候选成员\", \"已加入\"]}\n    />\n  );\n}"
        },
        {
          "id": "components/transfer/demo/events.tsx",
          "title": "事件",
          "source": "import { useState } from \"react\";\nimport { Transfer } from \"react-kui\";\nconst items = [\"Design\", \"Development\", \"Testing\", \"Deployment\"].map((title, key) => ({\n  key: key + 1,\n  title,\n}));\nexport default function App() {\n  const [selected, setSelected] = useState<(string | number)[]>([4]);\n  const [log, setLog] = useState(\"请选择并移动项目\");\n  return (\n    <>\n      <Transfer\n        targetKeys={selected}\n        onChange={(event) => {\n          setSelected(event.targetKeys);\n          setLog(`${event.direction === \"right\" ? \"加入\" : \"移除\"}：${event.movedKeys.join(\", \")}`);\n        }}\n        onSelectChange={(source, target) => {\n          if (source.length || target.length) {\n            setLog(`左侧已选 ${source.length} 项，右侧已选 ${target.length} 项`);\n          }\n        }}\n        dataSource={items}\n        operations={[\"加入\", \"移除\"]}\n      />\n      <p style={{ marginTop: 16, color: \"var(--kui-color-text-description)\" }}>{log}</p>\n    </>\n  );\n}"
        },
        {
          "id": "components/transfer/demo/pagination.tsx",
          "title": "分页加载",
          "source": "import { useState } from \"react\";\nimport { Page, Transfer } from \"react-kui\";\nconst items = Array.from({ length: 23 }, (_, index) => ({\n  key: index + 1,\n  title: `Member ${index + 1}`,\n}));\nexport default function App() {\n  const [selected, setSelected] = useState<(string | number)[]>([2]);\n  const [page, setPage] = useState(1);\n  const source = items.filter((item) => !selected.includes(item.key));\n  const currentPage = Math.min(page, Math.ceil(source.length / 5) || 1);\n  const visible = [\n    ...source.slice((currentPage - 1) * 5, currentPage * 5),\n    ...items.filter((item) => selected.includes(item.key)),\n  ];\n  return (\n    <Transfer\n      targetKeys={selected}\n      onChange={(event) => setSelected(event.targetKeys)}\n      dataSource={visible}\n      titles={[\"全部成员\", \"已选择\"]}\n      footer={(direction) =>\n        direction === \"left\" ? (\n          <Page\n            simple\n            showElevator\n            showTotal={false}\n            size=\"small\"\n            page={currentPage}\n            onChange={(next) => setPage(next)}\n            total={source.length}\n            pageSize={5}\n          />\n        ) : (\n          `已选择 ${selected.length} 项`\n        )\n      }\n    />\n  );\n}"
        }
      ]
    },
    {
      "name": "Typography",
      "import": "import { Typography } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/typography",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本",
          "descriptionEn": "text"
        },
        {
          "name": "tag",
          "type": "TypographyTag | undefined",
          "required": false,
          "enumValues": [
            "div",
            "h1",
            "h2",
            "h3",
            "h4",
            "h5",
            "h6",
            "p",
            "span"
          ],
          "boolean": false,
          "descriptionZh": "渲染的 HTML 标签",
          "descriptionEn": "Rendered HTML tag"
        },
        {
          "name": "type",
          "type": "TypographyType | undefined",
          "required": false,
          "enumValues": [
            "success",
            "warning",
            "danger",
            "secondary"
          ],
          "boolean": false,
          "descriptionZh": "语义颜色",
          "descriptionEn": "Semantic color"
        },
        {
          "name": "strong",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "加粗",
          "descriptionEn": "Strong style"
        },
        {
          "name": "italic",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "斜体",
          "descriptionEn": "Italic style"
        },
        {
          "name": "underline",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下划线",
          "descriptionEn": "Underline style"
        },
        {
          "name": "delete",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "删除线",
          "descriptionEn": "Deleted style"
        },
        {
          "name": "mark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "标记样式",
          "descriptionEn": "Mark style"
        },
        {
          "name": "code",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "行内代码样式",
          "descriptionEn": "Inline code style"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "禁用状态",
          "descriptionEn": "Disabled state"
        },
        {
          "name": "copyable",
          "type": "boolean | TypographyCopyableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许复制",
          "descriptionEn": "Allow copying"
        },
        {
          "name": "editable",
          "type": "boolean | TypographyEditableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许编辑",
          "descriptionEn": "Allow editing"
        },
        {
          "name": "ellipsis",
          "type": "number | boolean | TypographyEllipsisOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本省略配置",
          "descriptionEn": "Ellipsis configuration"
        },
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未使用 value 覆盖且尚未编辑时展示的排版内容；其文本也用于初始化编辑值。",
          "descriptionEn": "Typography content shown before editing when value is not supplied; its text also initializes the editable value."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/typography/demo/basic.tsx",
          "title": "基本排版",
          "source": "import { TypographyParagraph, TypographyText, TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <TypographyTitle tag=\"h2\">Typography makes content easier to scan</TypographyTitle>\n      <TypographyParagraph>\n        A clear visual hierarchy helps readers find the title, understand the summary, and then move\n        through the details at their own pace.\n      </TypographyParagraph>\n      <TypographyParagraph type=\"secondary\">\n        Use semantic components instead of styling every piece of text independently. This keeps\n        spacing, color, and rhythm consistent across the interface.\n      </TypographyParagraph>\n      <TypographyText>Kui React Design · Typography</TypographyText>\n    </>\n  );\n}"
        },
        {
          "id": "components/typography/demo/title.tsx",
          "title": "标题层级",
          "source": "import { TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <TypographyTitle tag=\"h1\">h1. Design system</TypographyTitle>\n      <TypographyTitle tag=\"h2\">h2. Foundations</TypographyTitle>\n      <TypographyTitle tag=\"h3\">h3. Components</TypographyTitle>\n      <TypographyTitle tag=\"h4\">h4. Patterns</TypographyTitle>\n      <TypographyTitle tag=\"h5\">h5. Guidelines</TypographyTitle>\n      <TypographyTitle tag=\"h6\">h6. Notes</TypographyTitle>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/type.tsx",
          "title": "语义文本",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", gap: 12 }}>\n      <TypographyText>Default text</TypographyText>\n      <TypographyText type=\"secondary\">Secondary text</TypographyText>\n      <TypographyText type=\"success\">Success text</TypographyText>\n      <TypographyText type=\"warning\">Warning text</TypographyText>\n      <TypographyText type=\"danger\">Danger text</TypographyText>\n      <TypographyText disabled>Disabled text</TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/style.tsx",
          "title": "文本样式",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"12px 24px\" }}>\n      <TypographyText strong>Strong</TypographyText>\n      <TypographyText italic>Italic</TypographyText>\n      <TypographyText underline>Underline</TypographyText>\n      <TypographyText delete>Deleted</TypographyText>\n      <TypographyText mark>Marked</TypographyText>\n      <TypographyText code>pnpm add react-kui</TypographyText>\n      <TypographyText strong italic underline>\n        Combined styles\n      </TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/ellipsis.tsx",
          "title": "文本省略",
          "source": "import { TypographyParagraph, TypographyTitle } from \"react-kui\";\nconst text =\n  \"Good typography establishes hierarchy and rhythm. Titles introduce a topic, paragraphs make longer ideas comfortable to read, and inline styles draw attention only where it is needed.\";\nexport default function App() {\n  return (\n    <div style={{ maxWidth: 520 }}>\n      <TypographyTitle tag=\"h4\">Single line</TypographyTitle>\n      <TypographyParagraph ellipsis>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Two lines</TypographyTitle>\n      <TypographyParagraph ellipsis={2}>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Expandable</TypographyTitle>\n      <TypographyParagraph\n        ellipsis={{\n          rows: 2,\n          expandable: true,\n          expandText: \"More\",\n          collapseText: \"Collapse\",\n          tooltip: true,\n        }}\n      >\n        {text} {text}\n      </TypographyParagraph>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/interactive.tsx",
          "title": "复制与编辑",
          "source": "import { useState } from \"react\";\nimport { TypographyParagraph, TypographyText } from \"react-kui\";\nexport default function App() {\n  const [text, setText] = useState(\"Click the edit icon to update this sentence.\");\n  const [copied, setCopied] = useState(\"\");\n  return (\n    <div style={{ display: \"grid\", gap: 24 }}>\n      <div>\n        <TypographyText type=\"secondary\">Copy</TypographyText>\n        <TypographyParagraph\n          copyable={{ tooltip: \"Copy command\", copiedTooltip: \"Copied\" }}\n          onCopy={setCopied}\n        >\n          pnpm add react-kui\n        </TypographyParagraph>\n        {copied && <TypographyText type=\"success\">Copied: {copied}</TypographyText>}\n      </div>\n      <div>\n        <TypographyText type=\"secondary\">Edit</TypographyText>\n        <TypographyParagraph value={text} editable={{ tooltip: \"Edit text\" }} onChange={setText} />\n        <TypographyText type=\"secondary\">Current value: {text}</TypographyText>\n      </div>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "TypographyParagraph",
      "import": "import { TypographyParagraph } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/typography",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本",
          "descriptionEn": "text"
        },
        {
          "name": "tag",
          "type": "TypographyTag | undefined",
          "required": false,
          "enumValues": [
            "div",
            "h1",
            "h2",
            "h3",
            "h4",
            "h5",
            "h6",
            "p",
            "span"
          ],
          "boolean": false,
          "descriptionZh": "渲染的 HTML 标签",
          "descriptionEn": "Rendered HTML tag"
        },
        {
          "name": "type",
          "type": "TypographyType | undefined",
          "required": false,
          "enumValues": [
            "success",
            "warning",
            "danger",
            "secondary"
          ],
          "boolean": false,
          "descriptionZh": "语义颜色",
          "descriptionEn": "Semantic color"
        },
        {
          "name": "strong",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "加粗",
          "descriptionEn": "Strong style"
        },
        {
          "name": "italic",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "斜体",
          "descriptionEn": "Italic style"
        },
        {
          "name": "underline",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下划线",
          "descriptionEn": "Underline style"
        },
        {
          "name": "delete",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "删除线",
          "descriptionEn": "Deleted style"
        },
        {
          "name": "mark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "标记样式",
          "descriptionEn": "Mark style"
        },
        {
          "name": "code",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "行内代码样式",
          "descriptionEn": "Inline code style"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "禁用状态",
          "descriptionEn": "Disabled state"
        },
        {
          "name": "copyable",
          "type": "boolean | TypographyCopyableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许复制",
          "descriptionEn": "Allow copying"
        },
        {
          "name": "editable",
          "type": "boolean | TypographyEditableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许编辑",
          "descriptionEn": "Allow editing"
        },
        {
          "name": "ellipsis",
          "type": "number | boolean | TypographyEllipsisOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本省略配置",
          "descriptionEn": "Ellipsis configuration"
        },
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未使用 value 覆盖且尚未编辑时展示的排版内容；其文本也用于初始化编辑值。",
          "descriptionEn": "Typography content shown before editing when value is not supplied; its text also initializes the editable value."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/typography/demo/basic.tsx",
          "title": "基本排版",
          "source": "import { TypographyParagraph, TypographyText, TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <TypographyTitle tag=\"h2\">Typography makes content easier to scan</TypographyTitle>\n      <TypographyParagraph>\n        A clear visual hierarchy helps readers find the title, understand the summary, and then move\n        through the details at their own pace.\n      </TypographyParagraph>\n      <TypographyParagraph type=\"secondary\">\n        Use semantic components instead of styling every piece of text independently. This keeps\n        spacing, color, and rhythm consistent across the interface.\n      </TypographyParagraph>\n      <TypographyText>Kui React Design · Typography</TypographyText>\n    </>\n  );\n}"
        },
        {
          "id": "components/typography/demo/title.tsx",
          "title": "标题层级",
          "source": "import { TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <TypographyTitle tag=\"h1\">h1. Design system</TypographyTitle>\n      <TypographyTitle tag=\"h2\">h2. Foundations</TypographyTitle>\n      <TypographyTitle tag=\"h3\">h3. Components</TypographyTitle>\n      <TypographyTitle tag=\"h4\">h4. Patterns</TypographyTitle>\n      <TypographyTitle tag=\"h5\">h5. Guidelines</TypographyTitle>\n      <TypographyTitle tag=\"h6\">h6. Notes</TypographyTitle>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/type.tsx",
          "title": "语义文本",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", gap: 12 }}>\n      <TypographyText>Default text</TypographyText>\n      <TypographyText type=\"secondary\">Secondary text</TypographyText>\n      <TypographyText type=\"success\">Success text</TypographyText>\n      <TypographyText type=\"warning\">Warning text</TypographyText>\n      <TypographyText type=\"danger\">Danger text</TypographyText>\n      <TypographyText disabled>Disabled text</TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/style.tsx",
          "title": "文本样式",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"12px 24px\" }}>\n      <TypographyText strong>Strong</TypographyText>\n      <TypographyText italic>Italic</TypographyText>\n      <TypographyText underline>Underline</TypographyText>\n      <TypographyText delete>Deleted</TypographyText>\n      <TypographyText mark>Marked</TypographyText>\n      <TypographyText code>pnpm add react-kui</TypographyText>\n      <TypographyText strong italic underline>\n        Combined styles\n      </TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/ellipsis.tsx",
          "title": "文本省略",
          "source": "import { TypographyParagraph, TypographyTitle } from \"react-kui\";\nconst text =\n  \"Good typography establishes hierarchy and rhythm. Titles introduce a topic, paragraphs make longer ideas comfortable to read, and inline styles draw attention only where it is needed.\";\nexport default function App() {\n  return (\n    <div style={{ maxWidth: 520 }}>\n      <TypographyTitle tag=\"h4\">Single line</TypographyTitle>\n      <TypographyParagraph ellipsis>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Two lines</TypographyTitle>\n      <TypographyParagraph ellipsis={2}>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Expandable</TypographyTitle>\n      <TypographyParagraph\n        ellipsis={{\n          rows: 2,\n          expandable: true,\n          expandText: \"More\",\n          collapseText: \"Collapse\",\n          tooltip: true,\n        }}\n      >\n        {text} {text}\n      </TypographyParagraph>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/interactive.tsx",
          "title": "复制与编辑",
          "source": "import { useState } from \"react\";\nimport { TypographyParagraph, TypographyText } from \"react-kui\";\nexport default function App() {\n  const [text, setText] = useState(\"Click the edit icon to update this sentence.\");\n  const [copied, setCopied] = useState(\"\");\n  return (\n    <div style={{ display: \"grid\", gap: 24 }}>\n      <div>\n        <TypographyText type=\"secondary\">Copy</TypographyText>\n        <TypographyParagraph\n          copyable={{ tooltip: \"Copy command\", copiedTooltip: \"Copied\" }}\n          onCopy={setCopied}\n        >\n          pnpm add react-kui\n        </TypographyParagraph>\n        {copied && <TypographyText type=\"success\">Copied: {copied}</TypographyText>}\n      </div>\n      <div>\n        <TypographyText type=\"secondary\">Edit</TypographyText>\n        <TypographyParagraph value={text} editable={{ tooltip: \"Edit text\" }} onChange={setText} />\n        <TypographyText type=\"secondary\">Current value: {text}</TypographyText>\n      </div>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "TypographyText",
      "import": "import { TypographyText } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/typography",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本",
          "descriptionEn": "text"
        },
        {
          "name": "tag",
          "type": "TypographyTag | undefined",
          "required": false,
          "enumValues": [
            "div",
            "h1",
            "h2",
            "h3",
            "h4",
            "h5",
            "h6",
            "p",
            "span"
          ],
          "boolean": false,
          "descriptionZh": "渲染的 HTML 标签",
          "descriptionEn": "Rendered HTML tag"
        },
        {
          "name": "type",
          "type": "TypographyType | undefined",
          "required": false,
          "enumValues": [
            "success",
            "warning",
            "danger",
            "secondary"
          ],
          "boolean": false,
          "descriptionZh": "语义颜色",
          "descriptionEn": "Semantic color"
        },
        {
          "name": "strong",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "加粗",
          "descriptionEn": "Strong style"
        },
        {
          "name": "italic",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "斜体",
          "descriptionEn": "Italic style"
        },
        {
          "name": "underline",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下划线",
          "descriptionEn": "Underline style"
        },
        {
          "name": "delete",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "删除线",
          "descriptionEn": "Deleted style"
        },
        {
          "name": "mark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "标记样式",
          "descriptionEn": "Mark style"
        },
        {
          "name": "code",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "行内代码样式",
          "descriptionEn": "Inline code style"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "禁用状态",
          "descriptionEn": "Disabled state"
        },
        {
          "name": "copyable",
          "type": "boolean | TypographyCopyableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许复制",
          "descriptionEn": "Allow copying"
        },
        {
          "name": "editable",
          "type": "boolean | TypographyEditableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许编辑",
          "descriptionEn": "Allow editing"
        },
        {
          "name": "ellipsis",
          "type": "number | boolean | TypographyEllipsisOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本省略配置",
          "descriptionEn": "Ellipsis configuration"
        },
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未使用 value 覆盖且尚未编辑时展示的排版内容；其文本也用于初始化编辑值。",
          "descriptionEn": "Typography content shown before editing when value is not supplied; its text also initializes the editable value."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/typography/demo/basic.tsx",
          "title": "基本排版",
          "source": "import { TypographyParagraph, TypographyText, TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <TypographyTitle tag=\"h2\">Typography makes content easier to scan</TypographyTitle>\n      <TypographyParagraph>\n        A clear visual hierarchy helps readers find the title, understand the summary, and then move\n        through the details at their own pace.\n      </TypographyParagraph>\n      <TypographyParagraph type=\"secondary\">\n        Use semantic components instead of styling every piece of text independently. This keeps\n        spacing, color, and rhythm consistent across the interface.\n      </TypographyParagraph>\n      <TypographyText>Kui React Design · Typography</TypographyText>\n    </>\n  );\n}"
        },
        {
          "id": "components/typography/demo/title.tsx",
          "title": "标题层级",
          "source": "import { TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <TypographyTitle tag=\"h1\">h1. Design system</TypographyTitle>\n      <TypographyTitle tag=\"h2\">h2. Foundations</TypographyTitle>\n      <TypographyTitle tag=\"h3\">h3. Components</TypographyTitle>\n      <TypographyTitle tag=\"h4\">h4. Patterns</TypographyTitle>\n      <TypographyTitle tag=\"h5\">h5. Guidelines</TypographyTitle>\n      <TypographyTitle tag=\"h6\">h6. Notes</TypographyTitle>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/type.tsx",
          "title": "语义文本",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", gap: 12 }}>\n      <TypographyText>Default text</TypographyText>\n      <TypographyText type=\"secondary\">Secondary text</TypographyText>\n      <TypographyText type=\"success\">Success text</TypographyText>\n      <TypographyText type=\"warning\">Warning text</TypographyText>\n      <TypographyText type=\"danger\">Danger text</TypographyText>\n      <TypographyText disabled>Disabled text</TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/style.tsx",
          "title": "文本样式",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"12px 24px\" }}>\n      <TypographyText strong>Strong</TypographyText>\n      <TypographyText italic>Italic</TypographyText>\n      <TypographyText underline>Underline</TypographyText>\n      <TypographyText delete>Deleted</TypographyText>\n      <TypographyText mark>Marked</TypographyText>\n      <TypographyText code>pnpm add react-kui</TypographyText>\n      <TypographyText strong italic underline>\n        Combined styles\n      </TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/ellipsis.tsx",
          "title": "文本省略",
          "source": "import { TypographyParagraph, TypographyTitle } from \"react-kui\";\nconst text =\n  \"Good typography establishes hierarchy and rhythm. Titles introduce a topic, paragraphs make longer ideas comfortable to read, and inline styles draw attention only where it is needed.\";\nexport default function App() {\n  return (\n    <div style={{ maxWidth: 520 }}>\n      <TypographyTitle tag=\"h4\">Single line</TypographyTitle>\n      <TypographyParagraph ellipsis>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Two lines</TypographyTitle>\n      <TypographyParagraph ellipsis={2}>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Expandable</TypographyTitle>\n      <TypographyParagraph\n        ellipsis={{\n          rows: 2,\n          expandable: true,\n          expandText: \"More\",\n          collapseText: \"Collapse\",\n          tooltip: true,\n        }}\n      >\n        {text} {text}\n      </TypographyParagraph>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/interactive.tsx",
          "title": "复制与编辑",
          "source": "import { useState } from \"react\";\nimport { TypographyParagraph, TypographyText } from \"react-kui\";\nexport default function App() {\n  const [text, setText] = useState(\"Click the edit icon to update this sentence.\");\n  const [copied, setCopied] = useState(\"\");\n  return (\n    <div style={{ display: \"grid\", gap: 24 }}>\n      <div>\n        <TypographyText type=\"secondary\">Copy</TypographyText>\n        <TypographyParagraph\n          copyable={{ tooltip: \"Copy command\", copiedTooltip: \"Copied\" }}\n          onCopy={setCopied}\n        >\n          pnpm add react-kui\n        </TypographyParagraph>\n        {copied && <TypographyText type=\"success\">Copied: {copied}</TypographyText>}\n      </div>\n      <div>\n        <TypographyText type=\"secondary\">Edit</TypographyText>\n        <TypographyParagraph value={text} editable={{ tooltip: \"Edit text\" }} onChange={setText} />\n        <TypographyText type=\"secondary\">Current value: {text}</TypographyText>\n      </div>\n    </div>\n  );\n}"
        }
      ]
    },
    {
      "name": "TypographyTitle",
      "import": "import { TypographyTitle } from \"react-kui\"",
      "documentation": "https://react.k-ui.cn/components/typography",
      "props": [
        {
          "name": "value",
          "type": "string | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本",
          "descriptionEn": "text"
        },
        {
          "name": "tag",
          "type": "TypographyTag | undefined",
          "required": false,
          "enumValues": [
            "div",
            "h1",
            "h2",
            "h3",
            "h4",
            "h5",
            "h6",
            "p",
            "span"
          ],
          "boolean": false,
          "descriptionZh": "渲染的 HTML 标签",
          "descriptionEn": "Rendered HTML tag"
        },
        {
          "name": "type",
          "type": "TypographyType | undefined",
          "required": false,
          "enumValues": [
            "success",
            "warning",
            "danger",
            "secondary"
          ],
          "boolean": false,
          "descriptionZh": "语义颜色",
          "descriptionEn": "Semantic color"
        },
        {
          "name": "strong",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "加粗",
          "descriptionEn": "Strong style"
        },
        {
          "name": "italic",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "斜体",
          "descriptionEn": "Italic style"
        },
        {
          "name": "underline",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "下划线",
          "descriptionEn": "Underline style"
        },
        {
          "name": "delete",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "删除线",
          "descriptionEn": "Deleted style"
        },
        {
          "name": "mark",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "标记样式",
          "descriptionEn": "Mark style"
        },
        {
          "name": "code",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "行内代码样式",
          "descriptionEn": "Inline code style"
        },
        {
          "name": "disabled",
          "type": "boolean | undefined",
          "required": false,
          "enumValues": [
            false,
            true
          ],
          "boolean": true,
          "descriptionZh": "禁用状态",
          "descriptionEn": "Disabled state"
        },
        {
          "name": "copyable",
          "type": "boolean | TypographyCopyableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许复制",
          "descriptionEn": "Allow copying"
        },
        {
          "name": "editable",
          "type": "boolean | TypographyEditableOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "允许编辑",
          "descriptionEn": "Allow editing"
        },
        {
          "name": "ellipsis",
          "type": "number | boolean | TypographyEllipsisOptions | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "文本省略配置",
          "descriptionEn": "Ellipsis configuration"
        },
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        },
        {
          "name": "children",
          "type": "React.ReactNode",
          "required": false,
          "boolean": false,
          "descriptionZh": "未使用 value 覆盖且尚未编辑时展示的排版内容；其文本也用于初始化编辑值。",
          "descriptionEn": "Typography content shown before editing when value is not supplied; its text also initializes the editable value."
        }
      ],
      "nativeProps": [
        "suppressContentEditableWarning",
        "suppressHydrationWarning",
        "accessKey",
        "autoCapitalize",
        "autoFocus",
        "className",
        "contentEditable",
        "contextMenu",
        "dir",
        "draggable",
        "enterKeyHint",
        "hidden",
        "id",
        "lang",
        "nonce",
        "slot",
        "spellCheck",
        "style",
        "tabIndex",
        "translate",
        "radioGroup",
        "role",
        "about",
        "content",
        "datatype",
        "inlist",
        "prefix",
        "property",
        "rel",
        "resource",
        "rev",
        "typeof",
        "vocab",
        "autoCorrect",
        "autoSave",
        "color",
        "itemProp",
        "itemScope",
        "itemType",
        "itemID",
        "itemRef",
        "results",
        "security",
        "unselectable",
        "popover",
        "popoverTargetAction",
        "popoverTarget",
        "inert",
        "inputMode",
        "is",
        "exportparts",
        "part",
        "aria-activedescendant",
        "aria-atomic",
        "aria-autocomplete",
        "aria-braillelabel",
        "aria-brailleroledescription",
        "aria-busy",
        "aria-checked",
        "aria-colcount",
        "aria-colindex",
        "aria-colindextext",
        "aria-colspan",
        "aria-controls",
        "aria-current",
        "aria-describedby",
        "aria-description",
        "aria-details",
        "aria-disabled",
        "aria-dropeffect",
        "aria-errormessage",
        "aria-expanded",
        "aria-flowto",
        "aria-grabbed",
        "aria-haspopup",
        "aria-hidden",
        "aria-invalid",
        "aria-keyshortcuts",
        "aria-label",
        "aria-labelledby",
        "aria-level",
        "aria-live",
        "aria-modal",
        "aria-multiline",
        "aria-multiselectable",
        "aria-orientation",
        "aria-owns",
        "aria-placeholder",
        "aria-posinset",
        "aria-pressed",
        "aria-readonly",
        "aria-relevant",
        "aria-required",
        "aria-roledescription",
        "aria-rowcount",
        "aria-rowindex",
        "aria-rowindextext",
        "aria-rowspan",
        "aria-selected",
        "aria-setsize",
        "aria-sort",
        "aria-valuemax",
        "aria-valuemin",
        "aria-valuenow",
        "aria-valuetext",
        "dangerouslySetInnerHTML",
        "onCopyCapture",
        "onCut",
        "onCutCapture",
        "onPaste",
        "onPasteCapture",
        "onCompositionEnd",
        "onCompositionEndCapture",
        "onCompositionStart",
        "onCompositionStartCapture",
        "onCompositionUpdate",
        "onCompositionUpdateCapture",
        "onFocus",
        "onFocusCapture",
        "onBlur",
        "onBlurCapture",
        "onChangeCapture",
        "onBeforeInput",
        "onBeforeInputCapture",
        "onInput",
        "onInputCapture",
        "onReset",
        "onResetCapture",
        "onSubmit",
        "onSubmitCapture",
        "onInvalid",
        "onInvalidCapture",
        "onLoad",
        "onLoadCapture",
        "onError",
        "onErrorCapture",
        "onKeyDown",
        "onKeyDownCapture",
        "onKeyPress",
        "onKeyPressCapture",
        "onKeyUp",
        "onKeyUpCapture",
        "onAbort",
        "onAbortCapture",
        "onCanPlay",
        "onCanPlayCapture",
        "onCanPlayThrough",
        "onCanPlayThroughCapture",
        "onDurationChange",
        "onDurationChangeCapture",
        "onEmptied",
        "onEmptiedCapture",
        "onEncrypted",
        "onEncryptedCapture",
        "onEnded",
        "onEndedCapture",
        "onLoadedData",
        "onLoadedDataCapture",
        "onLoadedMetadata",
        "onLoadedMetadataCapture",
        "onLoadStart",
        "onLoadStartCapture",
        "onPause",
        "onPauseCapture",
        "onPlay",
        "onPlayCapture",
        "onPlaying",
        "onPlayingCapture",
        "onProgress",
        "onProgressCapture",
        "onRateChange",
        "onRateChangeCapture",
        "onSeeked",
        "onSeekedCapture",
        "onSeeking",
        "onSeekingCapture",
        "onStalled",
        "onStalledCapture",
        "onSuspend",
        "onSuspendCapture",
        "onTimeUpdate",
        "onTimeUpdateCapture",
        "onVolumeChange",
        "onVolumeChangeCapture",
        "onWaiting",
        "onWaitingCapture",
        "onAuxClick",
        "onAuxClickCapture",
        "onClick",
        "onClickCapture",
        "onContextMenu",
        "onContextMenuCapture",
        "onDoubleClick",
        "onDoubleClickCapture",
        "onDrag",
        "onDragCapture",
        "onDragEnd",
        "onDragEndCapture",
        "onDragEnter",
        "onDragEnterCapture",
        "onDragExit",
        "onDragExitCapture",
        "onDragLeave",
        "onDragLeaveCapture",
        "onDragOver",
        "onDragOverCapture",
        "onDragStart",
        "onDragStartCapture",
        "onDrop",
        "onDropCapture",
        "onMouseDown",
        "onMouseDownCapture",
        "onMouseEnter",
        "onMouseLeave",
        "onMouseMove",
        "onMouseMoveCapture",
        "onMouseOut",
        "onMouseOutCapture",
        "onMouseOver",
        "onMouseOverCapture",
        "onMouseUp",
        "onMouseUpCapture",
        "onSelect",
        "onSelectCapture",
        "onTouchCancel",
        "onTouchCancelCapture",
        "onTouchEnd",
        "onTouchEndCapture",
        "onTouchMove",
        "onTouchMoveCapture",
        "onTouchStart",
        "onTouchStartCapture",
        "onPointerDown",
        "onPointerDownCapture",
        "onPointerMove",
        "onPointerMoveCapture",
        "onPointerUp",
        "onPointerUpCapture",
        "onPointerCancel",
        "onPointerCancelCapture",
        "onPointerEnter",
        "onPointerLeave",
        "onPointerOver",
        "onPointerOverCapture",
        "onPointerOut",
        "onPointerOutCapture",
        "onGotPointerCapture",
        "onGotPointerCaptureCapture",
        "onLostPointerCapture",
        "onLostPointerCaptureCapture",
        "onScroll",
        "onScrollCapture",
        "onScrollEnd",
        "onScrollEndCapture",
        "onWheel",
        "onWheelCapture",
        "onAnimationStart",
        "onAnimationStartCapture",
        "onAnimationEnd",
        "onAnimationEndCapture",
        "onAnimationIteration",
        "onAnimationIterationCapture",
        "onToggle",
        "onBeforeToggle",
        "onTransitionCancel",
        "onTransitionCancelCapture",
        "onTransitionEnd",
        "onTransitionEndCapture",
        "onTransitionRun",
        "onTransitionRunCapture",
        "onTransitionStart",
        "onTransitionStartCapture",
        "ref",
        "key"
      ],
      "nativeValueTypes": {
        "suppressContentEditableWarning": "boolean",
        "suppressHydrationWarning": "boolean",
        "accessKey": "string",
        "autoFocus": "boolean",
        "className": "string",
        "contextMenu": "string",
        "dir": "string",
        "enterKeyHint": "string",
        "hidden": "boolean",
        "id": "string",
        "lang": "string",
        "nonce": "string",
        "slot": "string",
        "tabIndex": "number",
        "translate": "string",
        "radioGroup": "string",
        "about": "string",
        "content": "string",
        "datatype": "string",
        "prefix": "string",
        "property": "string",
        "rel": "string",
        "resource": "string",
        "rev": "string",
        "typeof": "string",
        "vocab": "string",
        "autoCorrect": "string",
        "autoSave": "string",
        "color": "string",
        "itemProp": "string",
        "itemScope": "boolean",
        "itemType": "string",
        "itemID": "string",
        "itemRef": "string",
        "results": "number",
        "security": "string",
        "unselectable": "string",
        "popover": "string",
        "popoverTargetAction": "string",
        "popoverTarget": "string",
        "inert": "boolean",
        "inputMode": "string",
        "is": "string",
        "exportparts": "string",
        "part": "string",
        "aria-activedescendant": "string",
        "aria-autocomplete": "string",
        "aria-braillelabel": "string",
        "aria-brailleroledescription": "string",
        "aria-colcount": "number",
        "aria-colindex": "number",
        "aria-colindextext": "string",
        "aria-colspan": "number",
        "aria-controls": "string",
        "aria-describedby": "string",
        "aria-description": "string",
        "aria-details": "string",
        "aria-dropeffect": "string",
        "aria-errormessage": "string",
        "aria-flowto": "string",
        "aria-keyshortcuts": "string",
        "aria-label": "string",
        "aria-labelledby": "string",
        "aria-level": "number",
        "aria-live": "string",
        "aria-orientation": "string",
        "aria-owns": "string",
        "aria-placeholder": "string",
        "aria-posinset": "number",
        "aria-relevant": "string",
        "aria-roledescription": "string",
        "aria-rowcount": "number",
        "aria-rowindex": "number",
        "aria-rowindextext": "string",
        "aria-rowspan": "number",
        "aria-setsize": "number",
        "aria-sort": "string",
        "aria-valuemax": "number",
        "aria-valuemin": "number",
        "aria-valuenow": "number",
        "aria-valuetext": "string"
      },
      "events": [
        {
          "name": "onCopy",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "复制后触发",
          "descriptionEn": "Called after copying"
        },
        {
          "name": "onChange",
          "type": "((text: string) => void) | undefined",
          "required": false,
          "boolean": false,
          "descriptionZh": "编辑完成后触发",
          "descriptionEn": "Called after editing"
        }
      ],
      "renderProps": [
        "children"
      ],
      "behavior": {
        "rules": []
      },
      "children": [],
      "examples": [
        {
          "id": "components/typography/demo/basic.tsx",
          "title": "基本排版",
          "source": "import { TypographyParagraph, TypographyText, TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <>\n      <TypographyTitle tag=\"h2\">Typography makes content easier to scan</TypographyTitle>\n      <TypographyParagraph>\n        A clear visual hierarchy helps readers find the title, understand the summary, and then move\n        through the details at their own pace.\n      </TypographyParagraph>\n      <TypographyParagraph type=\"secondary\">\n        Use semantic components instead of styling every piece of text independently. This keeps\n        spacing, color, and rhythm consistent across the interface.\n      </TypographyParagraph>\n      <TypographyText>Kui React Design · Typography</TypographyText>\n    </>\n  );\n}"
        },
        {
          "id": "components/typography/demo/title.tsx",
          "title": "标题层级",
          "source": "import { TypographyTitle } from \"react-kui\";\nexport default function App() {\n  return (\n    <div>\n      <TypographyTitle tag=\"h1\">h1. Design system</TypographyTitle>\n      <TypographyTitle tag=\"h2\">h2. Foundations</TypographyTitle>\n      <TypographyTitle tag=\"h3\">h3. Components</TypographyTitle>\n      <TypographyTitle tag=\"h4\">h4. Patterns</TypographyTitle>\n      <TypographyTitle tag=\"h5\">h5. Guidelines</TypographyTitle>\n      <TypographyTitle tag=\"h6\">h6. Notes</TypographyTitle>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/type.tsx",
          "title": "语义文本",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"flex-start\", gap: 12 }}>\n      <TypographyText>Default text</TypographyText>\n      <TypographyText type=\"secondary\">Secondary text</TypographyText>\n      <TypographyText type=\"success\">Success text</TypographyText>\n      <TypographyText type=\"warning\">Warning text</TypographyText>\n      <TypographyText type=\"danger\">Danger text</TypographyText>\n      <TypographyText disabled>Disabled text</TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/style.tsx",
          "title": "文本样式",
          "source": "import { TypographyText } from \"react-kui\";\nexport default function App() {\n  return (\n    <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"12px 24px\" }}>\n      <TypographyText strong>Strong</TypographyText>\n      <TypographyText italic>Italic</TypographyText>\n      <TypographyText underline>Underline</TypographyText>\n      <TypographyText delete>Deleted</TypographyText>\n      <TypographyText mark>Marked</TypographyText>\n      <TypographyText code>pnpm add react-kui</TypographyText>\n      <TypographyText strong italic underline>\n        Combined styles\n      </TypographyText>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/ellipsis.tsx",
          "title": "文本省略",
          "source": "import { TypographyParagraph, TypographyTitle } from \"react-kui\";\nconst text =\n  \"Good typography establishes hierarchy and rhythm. Titles introduce a topic, paragraphs make longer ideas comfortable to read, and inline styles draw attention only where it is needed.\";\nexport default function App() {\n  return (\n    <div style={{ maxWidth: 520 }}>\n      <TypographyTitle tag=\"h4\">Single line</TypographyTitle>\n      <TypographyParagraph ellipsis>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Two lines</TypographyTitle>\n      <TypographyParagraph ellipsis={2}>{text}</TypographyParagraph>\n      <TypographyTitle tag=\"h4\">Expandable</TypographyTitle>\n      <TypographyParagraph\n        ellipsis={{\n          rows: 2,\n          expandable: true,\n          expandText: \"More\",\n          collapseText: \"Collapse\",\n          tooltip: true,\n        }}\n      >\n        {text} {text}\n      </TypographyParagraph>\n    </div>\n  );\n}"
        },
        {
          "id": "components/typography/demo/interactive.tsx",
          "title": "复制与编辑",
          "source": "import { useState } from \"react\";\nimport { TypographyParagraph, TypographyText } from \"react-kui\";\nexport default function App() {\n  const [text, setText] = useState(\"Click the edit icon to update this sentence.\");\n  const [copied, setCopied] = useState(\"\");\n  return (\n    <div style={{ display: \"grid\", gap: 24 }}>\n      <div>\n        <TypographyText type=\"secondary\">Copy</TypographyText>\n        <TypographyParagraph\n          copyable={{ tooltip: \"Copy command\", copiedTooltip: \"Copied\" }}\n          onCopy={setCopied}\n        >\n          pnpm add react-kui\n        </TypographyParagraph>\n        {copied && <TypographyText type=\"success\">Copied: {copied}</TypographyText>}\n      </div>\n      <div>\n        <TypographyText type=\"secondary\">Edit</TypographyText>\n        <TypographyParagraph value={text} editable={{ tooltip: \"Edit text\" }} onChange={setText} />\n        <TypographyText type=\"secondary\">Current value: {text}</TypographyText>\n      </div>\n    </div>\n  );\n}"
        }
      ]
    }
  ]
}
