react-public-components 1.1.16 → 1.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -4
- package/dist/index.cjs +343 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +55 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +79 -2
- package/dist/index.d.ts +79 -2
- package/dist/index.js +341 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../CollapseBox/index.tsx","../src/icons.tsx","../Splitter/index.tsx","../DisabledBox/index.tsx"],"sourcesContent":["// 统一入口\nexport { default as CollapseBox } from '../CollapseBox';\nexport type {\n\tCollapseBoxProps,\n\tCollapseBoxDirection,\n\tCollapseBoxButtonPosition,\n} from '../CollapseBox';\n\nexport { default as Splitter } from '../Splitter';\nexport type {\n\tSplitterProps,\n\tSplitterPanelProps,\n\tSplitterCollapsible,\n\tSplitterSize,\n\tSplitterOrientation,\n} from '../Splitter';\n\nexport { default as DisabledBox } from '../DisabledBox';\nexport type { DisabledBoxProps } from '../DisabledBox';\n","import { useState, type CSSProperties, type ReactNode } from 'react';\nimport { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport './index.less';\n\nexport type CollapseBoxDirection = 'horizontal' | 'vertical';\nexport type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface CollapseBoxProps {\n\tchildren?: ReactNode;\n\ttitle?: string;\n\tdirection?: CollapseBoxDirection;\n\tbuttonPosition?: CollapseBoxButtonPosition;\n\tdefaultWidth?: number | string;\n\tdefaultHeight?: number | string;\n\tcontentPadding?: string;\n\theaderHeight?: number;\n\tclassName?: string;\n}\n\nconst formatDimension = (value?: number | string): string | undefined => {\n\tif (value === undefined || value === null) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nconst ChevronLeft = () => <LeftOutlined />;\n\nconst ChevronRight = () => <RightOutlined />;\n\nconst ChevronUp = () => <UpOutlined />;\n\nconst ChevronDown = () => <DownOutlined />;\n\nconst CollapsibleBox = ({\n\tchildren,\n\ttitle = '内容区域',\n\tdirection = 'horizontal',\n\tbuttonPosition = 'right',\n\tdefaultWidth = 600,\n\tdefaultHeight = 300,\n\tcontentPadding = '16px',\n\theaderHeight = 16,\n\tclassName,\n}: CollapseBoxProps) => {\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\n\tconst getContentMaxHeight = () => {\n\t\tif (typeof defaultHeight === 'number') {\n\t\t\treturn `${defaultHeight - headerHeight}px`;\n\t\t}\n\t\tif (typeof defaultHeight === 'string') {\n\t\t\treturn headerHeight ? `calc(${defaultHeight} - ${headerHeight}px)` : defaultHeight;\n\t\t}\n\t\treturn '100%';\n\t};\n\n\tconst getIcon = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\tif (buttonPosition === 'right') {\n\t\t\t\treturn isExpanded ? <ChevronRight /> : <ChevronLeft />;\n\t\t\t}\n\t\t\treturn isExpanded ? <ChevronLeft /> : <ChevronRight />;\n\t\t}\n\t\tif (buttonPosition === 'bottom') {\n\t\t\treturn isExpanded ? <ChevronDown /> : <ChevronUp />;\n\t\t}\n\t\treturn isExpanded ? <ChevronUp /> : <ChevronDown />;\n\t};\n\n\tconst getButtonClass = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn buttonPosition === 'right' ? 'button-right' : 'button-left';\n\t\t}\n\t\treturn buttonPosition === 'bottom' ? 'button-bottom' : 'button-top';\n\t};\n\n\tconst getContainerStyle = (): CSSProperties => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn {\n\t\t\t\twidth: isExpanded ? '100%' : '0px',\n\t\t\t\theight: '100%',\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\theight: isExpanded ? '100%' : '0px',\n\t\t\twidth: '100%',\n\t\t};\n\t};\n\n\tconst baseWrapperClass =\n\t\tdirection === 'horizontal' ? 'collapsible-wrapper horizontal' : 'collapsible-wrapper vertical';\n\tconst wrapperClass = className ? `${baseWrapperClass} ${className}` : baseWrapperClass;\n\n\tconst containerClass = [\n\t\t'collapsible-container',\n\t\tdirection === 'horizontal' && buttonPosition === 'right' ? 'align-right' : '',\n\t\tdirection === 'vertical' && buttonPosition === 'bottom' ? 'align-bottom' : '',\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst height = getContentMaxHeight();\n\tconst contentStyle: CSSProperties = {\n\t\tmaxHeight: direction === 'vertical' ? (isExpanded ? height : '0px') : height,\n\t\toverflowY: 'auto',\n\t\tpadding: contentPadding,\n\t\tboxSizing: 'border-box',\n\t};\n\n\tconst formattedWidth = formatDimension(defaultWidth);\n\tconst formattedHeight = formatDimension(defaultHeight);\n\tconst wrapperStyle: CSSProperties = {\n\t\twidth: formattedWidth,\n\t\theight: formattedHeight,\n\t};\n\n\treturn (\n\t\t<div className={wrapperClass} style={wrapperStyle}>\n\t\t\t<div style={getContainerStyle()} className={containerClass}>\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"collapsible-header\" style={{ display: 'none' }}>\n\t\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"collapsible-content\" style={contentStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tonClick={() => setIsExpanded(!isExpanded)}\n\t\t\t\tclassName={`toggle-button ${getButtonClass()}`}\n\t\t\t\ttitle={isExpanded ? '隐藏' : '展开'}\n\t\t\t>\n\t\t\t\t{getIcon()}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CollapsibleBox;\n","import type { CSSProperties } from 'react';\n\ninterface IconProps {\n\tstyle?: CSSProperties;\n\tclassName?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n\twidth: '1em',\n\theight: '1em',\n\tverticalAlign: '-0.125em',\n};\n\nexport const LeftOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"left\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" />\n\t</svg>\n);\n\nexport const RightOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" />\n\t</svg>\n);\n\nexport const UpOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"up\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M890.5 755.3L537.4 268a31.96 31.96 0 00-50.8 0L133.5 755.3a7.95 7.95 0 006.3 12.7h75.5c4.9 0 9.6-2.3 12.6-6.1l281-360 281 360c3 3.8 7.7 6.1 12.6 6.1h75.5c6.7 0 10.4-7.6 6.1-12.7z\" />\n\t</svg>\n);\n\nexport const DownOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"down\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 37 17.6 49.8 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" />\n\t</svg>\n);\n\nexport const LockOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"lock\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M928 224H704v-64c0-88.4-71.6-160-160-160s-160 71.6-160 160v64H160c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h768c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32zM456 160c0-44.2 35.8-80 80-80s80 35.8 80 80v64H456v-64zm408 696H224V296h640v560zM496 448c-30.9 0-56 25.1-56 56 0 24.7 16.1 45.6 38.4 52.7V680c0 9.7 7.8 17.5 17.6 17.5h32c9.7 0 17.6-7.8 17.6-17.5V556.7c22.3-7.1 38.4-28 38.4-52.7 0-30.9-25.1-56-56-56z\" />\n\t</svg>\n);\n","import { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport type {\n\tCSSProperties,\n\tReactElement,\n\tReactNode,\n\tPointerEvent as ReactPointerEvent,\n} from 'react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport type SplitterSize = number | `${number}%`;\nexport type SplitterOrientation = 'horizontal' | 'vertical';\n\nexport type SplitterCollapsible =\n\t| boolean\n\t| {\n\t\t\tstart?: boolean;\n\t\t\tend?: boolean;\n\t\t\tshowCollapsibleIcon?: boolean | 'auto';\n\t };\n\n/**\n * Splitter.Panel 子面板组件属性\n */\nexport type SplitterPanelProps = {\n\t/** 面板内容节点 */\n\tchildren?: ReactNode;\n\t/** 面板自定义类名 */\n\tclassName?: string;\n\t/**\n\t * 折叠配置:\n\t * - `boolean`: 是否允许两端折叠\n\t * - `Object`: `{ start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }`\n\t */\n\tcollapsible?: SplitterCollapsible;\n\t/** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */\n\tdefaultSize?: SplitterSize;\n\t/** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */\n\tdestroyOnHidden?: boolean;\n\t/** 面板最大允许尺寸限制 */\n\tmax?: SplitterSize;\n\t/** 面板最小允许尺寸限制 */\n\tmin?: SplitterSize;\n\t/** 是否允许通过分隔条拖拽调整大小(默认 true) */\n\tresizable?: boolean;\n\t/** 面板受控尺寸 */\n\tsize?: SplitterSize;\n\t/** 面板自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';\n/** 语义化 DOM 结构标识 */\nexport type SemanticDOM = SplitterSemanticDOM;\n\nexport type SplitterStyles =\n\t| Partial<Record<SplitterSemanticDOM, CSSProperties>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, CSSProperties>>);\n\nexport type SplitterClassNames =\n\t| Partial<Record<SplitterSemanticDOM, string>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, string>>);\n\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(建议传入 Splitter.Panel) */\n\tchildren?: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\n\t/** 用于自定义组件内部各语义化结构(root、panel、dragger)的 class,支持对象或函数 */\n\tclassNames?: SplitterClassNames;\n\t/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */\n\tdestroyOnHidden?: boolean;\n\t/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */\n\tdraggerSize?: number;\n\t/** 是否在拖拽结束时才更新视图(默认 false) */\n\tlazy?: boolean;\n\t/** 面板展开或折叠状态改变时的回调 */\n\tonCollapse?: (collapsed: boolean[], sizes: number[]) => void;\n\t/** 拖拽过程中的实时尺寸变化回调 */\n\tonResize?: (sizes: number[]) => void;\n\t/** 拖拽结束、重置尺寸或折叠完成时的回调 */\n\tonResizeEnd?: (sizes: number[]) => void;\n\t/** 开始拖拽分隔条时的回调 */\n\tonResizeStart?: (sizes: number[]) => void;\n\t/** 双击拖拽条回调 */\n\tonDraggerDoubleClick?: (index: number) => void;\n\t/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n\t/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */\n\tstyles?: SplitterStyles;\n\t/** 是否垂直分屏(orientation=\"vertical\" 的简写形式) 排列方向,与 orientation 同时存在,以 orientation 优先 */\n\tvertical?: boolean;\n\t/** 自定义拖拽手柄图标/节点 */\n\tdraggerIcon?: ReactNode;\n};\n\nexport interface ResolvedCollapsible {\n\tstart: boolean;\n\tend: boolean;\n\tshowCollapsibleIcon: boolean | 'auto';\n}\n\nconst getCollapsibleConfig = (collapsible?: SplitterCollapsible): ResolvedCollapsible => {\n\tif (!collapsible) {\n\t\treturn { start: false, end: false, showCollapsibleIcon: 'auto' };\n\t}\n\tif (typeof collapsible === 'boolean') {\n\t\treturn {\n\t\t\tstart: collapsible,\n\t\t\tend: collapsible,\n\t\t\tshowCollapsibleIcon: collapsible ? true : 'auto',\n\t\t};\n\t}\n\treturn {\n\t\tstart: collapsible.start ?? false,\n\t\tend: collapsible.end ?? false,\n\t\tshowCollapsibleIcon: collapsible.showCollapsibleIcon ?? true,\n\t};\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DEFAULT_DRAGGER_SIZE = 4;\nconst MIN_DRAG_SIZE = 40; // 手动拖拽调整大小时的默认最小限制 (px)\n\nconst SplitterPanel: React.FC<SplitterPanelProps> = ({ children }) => <>{children}</>;\n\nconst isPercentSize = (value: SplitterSize): value is `${number}%` =>\n\ttypeof value === 'string' && value.endsWith('%');\n\nconst parseSize = (value: SplitterSize | undefined, total: number, fallback: number) => {\n\tif (value === undefined) {\n\t\treturn fallback;\n\t}\n\n\tif (isPercentSize(value)) {\n\t\treturn (Number.parseFloat(value) / 100) * total;\n\t}\n\n\treturn Number(value);\n};\n\nconst roundSizes = (sizes: number[]) => sizes.map((size) => Math.round(size));\n\nconst getPointerPosition = (\n\tevent: PointerEvent | ReactPointerEvent,\n\torientation: SplitterOrientation,\n) => (orientation === 'horizontal' ? event.clientX : event.clientY);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveSemanticStyles = (\n\tstyles: SplitterStyles | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, CSSProperties>> => {\n\tif (!styles) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof styles === 'function' ? styles({ props: infoProps }) : styles;\n\treturn resolved || {};\n};\n\nconst resolveSemanticClassNames = (\n\tclassNames: SplitterClassNames | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, string>> => {\n\tif (!classNames) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof classNames === 'function' ? classNames({ props: infoProps }) : classNames;\n\treturn resolved || {};\n};\n\nconst CustomSplitter: SplitterComponent = (props) => {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tdestroyOnHidden = false,\n\t\tdraggerIcon,\n\t\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\t\tlazy = false,\n\t\tonResize,\n\t\tonResizeEnd,\n\t\tonResizeStart,\n\t\tonCollapse,\n\t\tonDraggerDoubleClick,\n\t\torientation,\n\t\tstyle,\n\t\tstyles,\n\t\tvertical = false,\n\t} = props;\n\tconst resolvedOrientation = orientation ?? (vertical ? 'vertical' : 'horizontal');\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst sizesRef = useRef<number[]>([]);\n\tconst [containerSize, setContainerSize] = useState(0);\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\tconst [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState<number | null>(null);\n\tconst [sizes, setSizes] = useState<number[]>([]);\n\n\tconst semanticStyles = useMemo(() => resolveSemanticStyles(styles, props), [styles, props]);\n\tconst semanticClassNames = useMemo(\n\t\t() => resolveSemanticClassNames(classNames, props),\n\t\t[classNames, props],\n\t);\n\n\tconst panels = useMemo(\n\t\t() =>\n\t\t\tReact.Children.toArray(children).filter(\n\t\t\t\tReact.isValidElement,\n\t\t\t) as ReactElement<SplitterPanelProps>[],\n\t\t[children],\n\t);\n\n\tconst trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);\n\n\tconst getPanelMin = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.min, trackSize, 0),\n\t\t[panels, trackSize],\n\t);\n\n\tconst getPanelMax = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.max, trackSize, trackSize),\n\t\t[panels, trackSize],\n\t);\n\n\tconst normalizeToTrack = useCallback(\n\t\t(nextSizes: number[]) => {\n\t\t\tif (!trackSize || !nextSizes.length) {\n\t\t\t\treturn nextSizes;\n\t\t\t}\n\n\t\t\tconst normalized = [...nextSizes];\n\t\t\tconst diff = trackSize - normalized.reduce((sum, size) => sum + size, 0);\n\t\t\tconst flexibleIndex = normalized.findIndex((size) => size > 0);\n\t\t\tif (flexibleIndex !== -1) {\n\t\t\t\tnormalized[flexibleIndex] += diff;\n\t\t\t}\n\n\t\t\treturn normalized.map((size, index) => {\n\t\t\t\t// 折叠状态(size <= 1)保持为 0,不受 min 限制干扰\n\t\t\t\tif (size <= 1) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\t// 拖拽过程从 0 拖出时,允许在 0 到 min 之间平滑过渡,不被强行跳变到 min\n\t\t\t\tif (size < getPanelMin(index)) {\n\t\t\t\t\treturn size;\n\t\t\t\t}\n\t\t\t\treturn clamp(size, getPanelMin(index), getPanelMax(index));\n\t\t\t});\n\t\t},\n\t\t[getPanelMax, getPanelMin, trackSize],\n\t);\n\n\tconst buildInitialSizes = useCallback(\n\t\t(previous?: number[]) => {\n\t\t\tif (!trackSize || !panels.length) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tif (previous?.length === panels.length) {\n\t\t\t\tconst previousTotal = previous.reduce((sum, size) => sum + size, 0);\n\t\t\t\tif (previousTotal > 0) {\n\t\t\t\t\treturn normalizeToTrack(previous.map((size) => (size / previousTotal) * trackSize));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst explicitSizes = panels.map((panel) =>\n\t\t\t\tparseSize(panel.props.size ?? panel.props.defaultSize, trackSize, -1),\n\t\t\t);\n\t\t\tconst usedSize = explicitSizes\n\t\t\t\t.filter((size) => size >= 0)\n\t\t\t\t.reduce((sum, size) => sum + size, 0);\n\t\t\tconst unsetCount = explicitSizes.filter((size) => size < 0).length;\n\t\t\tconst fallbackSize = unsetCount ? Math.max(0, (trackSize - usedSize) / unsetCount) : 0;\n\n\t\t\treturn normalizeToTrack(\n\t\t\t\texplicitSizes.map((size, index) =>\n\t\t\t\t\tclamp(size >= 0 ? size : fallbackSize, getPanelMin(index), getPanelMax(index)),\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels, trackSize],\n\t);\n\n\tconst updateSizes = useCallback(\n\t\t(nextSizes: number[], notify = true) => {\n\t\t\tconst normalized = normalizeToTrack(nextSizes);\n\t\t\tsetSizes(normalized);\n\t\t\tsizesRef.current = normalized;\n\t\t\tif (notify) {\n\t\t\t\tonResize?.(roundSizes(normalized));\n\t\t\t}\n\t\t},\n\t\t[normalizeToTrack, onResize],\n\t);\n\n\tuseEffect(() => {\n\t\tconst node = rootRef.current;\n\t\tif (!node) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst syncSize = () => {\n\t\t\tsetContainerSize(resolvedOrientation === 'horizontal' ? node.clientWidth : node.clientHeight);\n\t\t};\n\t\tsyncSize();\n\n\t\tconst observer = new ResizeObserver(syncSize);\n\t\tobserver.observe(node);\n\t\treturn () => observer.disconnect();\n\t}, [resolvedOrientation]);\n\n\tuseEffect(() => {\n\t\tsetSizes((previous) => {\n\t\t\tconst nextSizes = buildInitialSizes(previous);\n\t\t\tsizesRef.current = nextSizes;\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst isLeftCollapsed = sourceSizes[index] <= 1;\n\t\t\tconst isRightCollapsed = sourceSizes[index + 1] <= 1;\n\n\t\t\tconst leftMin = isLeftCollapsed ? 0 : getPanelMin(index);\n\t\t\tconst rightMin = isRightCollapsed ? 0 : getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\tnextSizes[index] = sourceSizes[index] + safeDelta;\n\t\t\tnextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack],\n\t);\n\n\tconst getInitialLockedIndex = useCallback(\n\t\t(sourceSizes: number[], startIndex: number, delta: number) => {\n\t\t\tif (sourceSizes[startIndex] <= 1 && delta < 0 && startIndex > 0) {\n\t\t\t\treturn startIndex - 1;\n\t\t\t}\n\t\t\tif (sourceSizes[startIndex + 1] <= 1 && delta > 0 && startIndex < sourceSizes.length - 2) {\n\t\t\t\treturn startIndex + 1;\n\t\t\t}\n\t\t\treturn startIndex;\n\t\t},\n\t\t[],\n\t);\n\n\tconst resizePair = useCallback(\n\t\t(index: number, delta: number, notify = true) => {\n\t\t\tconst targetIndex = getInitialLockedIndex(sizesRef.current, index, delta);\n\t\t\tupdateSizes(getResizedPair(sizesRef.current, targetIndex, delta), notify);\n\t\t},\n\t\t[getInitialLockedIndex, getResizedPair, updateSizes],\n\t);\n\n\tconst startResize = (index: number, event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (panels[index].props.resizable === false || panels[index + 1].props.resizable === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst startPosition = getPointerPosition(event, resolvedOrientation);\n\t\tconst startSizes = [...sizesRef.current];\n\t\tlet latestSizes = startSizes;\n\t\tlet lockedIndex: number | null = null;\n\n\t\tsetDraggingIndex(index);\n\t\tonResizeStart?.(roundSizes(startSizes));\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst delta = getPointerPosition(moveEvent, resolvedOrientation) - startPosition;\n\t\t\tif (delta === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (lockedIndex === null) {\n\t\t\t\tlockedIndex = getInitialLockedIndex(startSizes, index, delta);\n\t\t\t}\n\n\t\t\tlatestSizes = getResizedPair(startSizes, lockedIndex, delta);\n\t\t\tif (!lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tdocument.removeEventListener('pointermove', handlePointerMove);\n\t\t\tdocument.removeEventListener('pointerup', handlePointerUp);\n\t\t\tsetDraggingIndex(null);\n\t\t\tif (lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\t\tconst startCollapsed = startSizes.map((size) => size <= 1);\n\t\t\tif (currentCollapsed.some((c, i) => c !== startCollapsed[i])) {\n\t\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t\t}\n\t\t\tonResizeEnd?.(currentSizes);\n\t\t};\n\n\t\tdocument.addEventListener('pointermove', handlePointerMove);\n\t\tdocument.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\tconst toggleCollapse = (index: number, neighborIndex: number) => {\n\t\tconst nextSizes = [...sizesRef.current];\n\n\t\tif (nextSizes[index] > 1) {\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst initialSizes = buildInitialSizes();\n\t\t\tconst initialSize =\n\t\t\t\tinitialSizes[index] ??\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tconst restoredSize = clamp(initialSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[index] = restoredSize;\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst previousCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tif (currentCollapsed.some((c, i) => c !== previousCollapsed[i])) {\n\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t}\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst rootStyle: CSSProperties = {\n\t\tborder: '1px solid #f0f0f0',\n\t\tborderRadius: 8,\n\t\tboxSizing: 'border-box',\n\t\tdisplay: 'flex',\n\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\theight: '100%',\n\t\tminHeight: 0,\n\t\toverflow: 'hidden',\n\t\tposition: 'relative',\n\t\twidth: '100%',\n\t\t...semanticStyles.root,\n\t\t...style,\n\t};\n\n\tconst renderCollapseButton = (\n\t\tdraggerIndex: number,\n\t\tpanelIndex: number,\n\t\tdirection: 'start' | 'end',\n\t) => {\n\t\tconst panel = panels[panelIndex];\n\t\tconst config = getCollapsibleConfig(panel?.props.collapsible);\n\t\tconst isAllowed = direction === 'start' ? config.start : config.end;\n\n\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst neighborIndex = direction === 'start' ? panelIndex + 1 : panelIndex - 1;\n\t\tconst isCollapsed = (sizes[panelIndex] ?? 0) <= 1;\n\t\tconst isNeighborCollapsed = (sizes[neighborIndex] ?? 0) <= 1;\n\n\t\t// 自己折叠后隐藏;对侧面板折叠后也隐藏(避免与展开按钮重复/语义冲突)\n\t\tif (isCollapsed || isNeighborCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// 展开时箭头指向面板将被折叠到的方向\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? LeftOutlined\n\t\t\t\t\t: RightOutlined\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? UpOutlined\n\t\t\t\t\t: DownOutlined;\n\n\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\t\tconst isAlwaysShow = config.showCollapsibleIcon === true;\n\t\tconst isHoveredOrDragging = hoveredIndex === draggerIndex || draggingIndex === draggerIndex;\n\t\tconst opacity = isAlwaysShow || isHoveredOrDragging ? 1 : 0;\n\t\tconst pointerEvents = isAlwaysShow || isHoveredOrDragging ? 'auto' : 'none';\n\n\t\tconst buttonTitle =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? '折叠左侧面板'\n\t\t\t\t\t: '折叠右侧面板'\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? '折叠上方面板'\n\t\t\t\t\t: '折叠下方面板';\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={buttonTitle}\n\t\t\t\ttitle={buttonTitle}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttoggleCollapse(panelIndex, neighborIndex);\n\t\t\t\t}}\n\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #d9d9d9',\n\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tfontSize: 10,\n\t\t\t\t\tboxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\topacity,\n\t\t\t\t\tpointerEvents,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(panelIndex);\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#fff';\n\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\tconst rootClassName = [className, semanticClassNames.root].filter(Boolean).join(' ') || undefined;\n\n\treturn (\n\t\t<div className={rootClassName} ref={rootRef} style={rootStyle}>\n\t\t\t{panels.map((panel, index) => {\n\t\t\t\tconst isHidden = sizes[index] <= 1;\n\t\t\t\tconst isLeftOrTopCollapsed = (sizes[index] ?? 0) <= 1;\n\t\t\t\tconst isRightOrBottomCollapsed = (sizes[index + 1] ?? 0) <= 1;\n\t\t\t\tconst isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;\n\t\t\t\tconst panelDestroyOnHidden = panel.props.destroyOnHidden ?? destroyOnHidden;\n\t\t\t\tconst shouldRenderContent = !isHidden || !panelDestroyOnHidden;\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t[semanticClassNames.panel, panel.props.className].filter(Boolean).join(' ') ||\n\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackground: index % 2 ? '#fff' : '#fafafa',\n\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\tflex: `0 0 ${sizes[index] ?? 0}px`,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\thoveredCollapsePanelIndex === index ? 'inset 0 0 0 2px #1677ff' : undefined,\n\t\t\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\t\tdraggingIndex === null ? 'box-shadow 0.2s ease, flex-basis 0.2s ease' : undefined,\n\t\t\t\t\t\t\t\t...semanticStyles.panel,\n\t\t\t\t\t\t\t\t...panel.props.style,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldRenderContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\t\tdisplay: isHidden ? 'none' : 'block',\n\t\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t\t\toverflowX: 'hidden',\n\t\t\t\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\t\t\t\tpadding: (sizes[index] ?? 0) < 32 ? 0 : 16,\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{panel.props.children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{index < panels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-orientation={resolvedOrientation}\n\t\t\t\t\t\t\t\tclassName={semanticClassNames.dragger}\n\t\t\t\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\t\t\t\tonDraggerDoubleClick?.(index);\n\t\t\t\t\t\t\t\t\tresetSizes();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\tconst step = event.shiftKey ? 40 : 10;\n\t\t\t\t\t\t\t\t\tconst directionMap =\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? { ArrowLeft: -step, ArrowRight: step }\n\t\t\t\t\t\t\t\t\t\t\t: { ArrowUp: -step, ArrowDown: step };\n\t\t\t\t\t\t\t\t\tconst delta = directionMap[event.key as keyof typeof directionMap];\n\t\t\t\t\t\t\t\t\tif (delta !== undefined) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tresizePair(index, delta);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(event) => startResize(index, event)}\n\t\t\t\t\t\t\t\tonPointerEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\t\t\tonPointerLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\t\t\ttitle=\"拖动调整大小,双击重置\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#e6f4ff' : '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: resolvedOrientation === 'horizontal' ? 'col-resize' : 'row-resize',\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: `0 0 ${draggerSize}px`,\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\tmarginLeft:\n\t\t\t\t\t\t\t\t\t\tindex > 0 && (sizes[index] ?? 0) <= 1 && resolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? -draggerSize\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\tmarginTop:\n\t\t\t\t\t\t\t\t\t\tindex > 0 && (sizes[index] ?? 0) <= 1 && resolvedOrientation === 'vertical'\n\t\t\t\t\t\t\t\t\t\t\t? -draggerSize\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\tzIndex: isAnyCollapsed ? 2 : 1,\n\t\t\t\t\t\t\t\t\t...semanticStyles.dragger,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* 呈现拖拽指示线/图标 */}\n\t\t\t\t\t\t\t\t{draggerIcon ? (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'color 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{draggerIcon}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 40 : 2,\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'background 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 40,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 未折叠状态下呈现折叠按钮 */}\n\t\t\t\t\t\t\t\t{!isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop: '50%',\n\t\t\t\t\t\t\t\t\t\t\tleft: '50%',\n\t\t\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index, 'start')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index + 1, 'end')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(必须包含 collapsible 允许方可渲染) */}\n\t\t\t\t\t\t\t\t{isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '50%'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tbottom:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '50%',\n\t\t\t\t\t\t\t\t\t\t\tright:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `translate(${isLeftOrTopCollapsed ? '4px' : '-4px'}, -50%)`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `translate(-50%, ${isLeftOrTopCollapsed ? '4px' : '-4px'})`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst isStart = isLeftOrTopCollapsed;\n\t\t\t\t\t\t\t\t\t\t\tconst targetIndex = isStart ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst targetPanel = panels[targetIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst config = getCollapsibleConfig(targetPanel?.props.collapsible);\n\t\t\t\t\t\t\t\t\t\t\tconst isAllowed = isStart ? config.start : config.end;\n\n\t\t\t\t\t\t\t\t\t\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst ExpandIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? RightOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: LeftOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? DownOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: UpOutlined;\n\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\n\t\t\t\t\t\t\t\t\t\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\n\t\t\t\t\t\t\t\t\t\t\tconst expandTitle =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开下方面板';\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleCollapse(targetIndex, neighborIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: '#f3f4f6',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #e5e7eb',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(targetIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#f3f4f6';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ExpandIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nCustomSplitter.Panel = SplitterPanel;\n\nexport default CustomSplitter;\n","import type { ReactNode } from 'react';\nimport { LockOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface DisabledBoxProps {\n\ttitle?: ReactNode;\n\tchildren?: ReactNode;\n\t// 是否禁用,禁用时显示锁图标 + 文字灰色 + 不可点击\n\tdisabled?: boolean;\n\t// 锁图标对齐方向\n\ticonAlign?: 'left' | 'right';\n}\n\nconst DisabledBox = (props: DisabledBoxProps) => {\n\tconst { title, children, disabled = false, iconAlign = 'left' } = props;\n\tconst content = children ?? title;\n\n\t// 未禁用时原样渲染,不加锁\n\tif (!disabled) {\n\t\treturn <>{content}</>;\n\t}\n\n\t// disabled 时用div渲染,样式模拟disabled效果\n\t// 在捕获阶段阻止click事件传播,既防止内部点击事件触发,也阻止冒泡到父组件\n\t// 不阻止mouseenter/mouseleave等hover事件,保证Tooltip正常显示\n\tconst handleClickCapture = (e: React.MouseEvent) => {\n\t\tif (disabled) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"disabled_box_container disabled_box_disabled\"\n\t\t\tonClickCapture={handleClickCapture}\n\t\t>\n\t\t\t{iconAlign === 'left' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t\t<span className=\"disabled_box_title\">{content}</span>\n\t\t\t{iconAlign === 'right' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t</div>\n\t);\n};\n\nexport default DisabledBox;\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../CollapseBox/index.tsx","../src/icons.tsx","../Splitter/index.tsx","../DisabledBox/index.tsx","../Masonry/index.tsx","../BorderBeam/index.tsx"],"sourcesContent":["// 统一入口\nexport { default as CollapseBox } from '../CollapseBox';\nexport type {\n\tCollapseBoxProps,\n\tCollapseBoxDirection,\n\tCollapseBoxButtonPosition,\n} from '../CollapseBox';\n\nexport { default as Splitter } from '../Splitter';\nexport type {\n\tSplitterProps,\n\tSplitterPanelProps,\n\tSplitterCollapsible,\n\tSplitterSize,\n\tSplitterOrientation,\n} from '../Splitter';\n\nexport { default as DisabledBox } from '../DisabledBox';\nexport type { DisabledBoxProps } from '../DisabledBox';\n\nexport { default as Masonry } from '../Masonry';\nexport type {\n\tMasonryProps,\n\tMasonryItem,\n\tMasonrySemanticDOM,\n\tMasonryClassNames,\n\tMasonryStyles,\n\tGap,\n\tBreakpoint,\n} from '../Masonry';\n\nexport { default as BorderBeam } from '../BorderBeam';\nexport type { BorderBeamProps, BorderBeamColorStop } from '../BorderBeam';\n","import { useState, type CSSProperties, type ReactNode } from 'react';\nimport { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport './index.less';\n\nexport type CollapseBoxDirection = 'horizontal' | 'vertical';\nexport type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface CollapseBoxProps {\n\tchildren?: ReactNode;\n\ttitle?: string;\n\tdirection?: CollapseBoxDirection;\n\tbuttonPosition?: CollapseBoxButtonPosition;\n\tdefaultWidth?: number | string;\n\tdefaultHeight?: number | string;\n\tcontentPadding?: string;\n\theaderHeight?: number;\n\tclassName?: string;\n}\n\nconst formatDimension = (value?: number | string): string | undefined => {\n\tif (value === undefined || value === null) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nconst ChevronLeft = () => <LeftOutlined />;\n\nconst ChevronRight = () => <RightOutlined />;\n\nconst ChevronUp = () => <UpOutlined />;\n\nconst ChevronDown = () => <DownOutlined />;\n\nconst CollapsibleBox = ({\n\tchildren,\n\ttitle = '内容区域',\n\tdirection = 'horizontal',\n\tbuttonPosition = 'right',\n\tdefaultWidth = 600,\n\tdefaultHeight = 300,\n\tcontentPadding = '16px',\n\theaderHeight = 16,\n\tclassName,\n}: CollapseBoxProps) => {\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\n\tconst getContentMaxHeight = () => {\n\t\tif (typeof defaultHeight === 'number') {\n\t\t\treturn `${defaultHeight - headerHeight}px`;\n\t\t}\n\t\tif (typeof defaultHeight === 'string') {\n\t\t\treturn headerHeight ? `calc(${defaultHeight} - ${headerHeight}px)` : defaultHeight;\n\t\t}\n\t\treturn '100%';\n\t};\n\n\tconst getIcon = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\tif (buttonPosition === 'right') {\n\t\t\t\treturn isExpanded ? <ChevronRight /> : <ChevronLeft />;\n\t\t\t}\n\t\t\treturn isExpanded ? <ChevronLeft /> : <ChevronRight />;\n\t\t}\n\t\tif (buttonPosition === 'bottom') {\n\t\t\treturn isExpanded ? <ChevronDown /> : <ChevronUp />;\n\t\t}\n\t\treturn isExpanded ? <ChevronUp /> : <ChevronDown />;\n\t};\n\n\tconst getButtonClass = () => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn buttonPosition === 'right' ? 'button-right' : 'button-left';\n\t\t}\n\t\treturn buttonPosition === 'bottom' ? 'button-bottom' : 'button-top';\n\t};\n\n\tconst getContainerStyle = (): CSSProperties => {\n\t\tif (direction === 'horizontal') {\n\t\t\treturn {\n\t\t\t\twidth: isExpanded ? '100%' : '0px',\n\t\t\t\theight: '100%',\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\theight: isExpanded ? '100%' : '0px',\n\t\t\twidth: '100%',\n\t\t};\n\t};\n\n\tconst baseWrapperClass =\n\t\tdirection === 'horizontal' ? 'collapsible-wrapper horizontal' : 'collapsible-wrapper vertical';\n\tconst wrapperClass = className ? `${baseWrapperClass} ${className}` : baseWrapperClass;\n\n\tconst containerClass = [\n\t\t'collapsible-container',\n\t\tdirection === 'horizontal' && buttonPosition === 'right' ? 'align-right' : '',\n\t\tdirection === 'vertical' && buttonPosition === 'bottom' ? 'align-bottom' : '',\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\tconst height = getContentMaxHeight();\n\tconst contentStyle: CSSProperties = {\n\t\tmaxHeight: direction === 'vertical' ? (isExpanded ? height : '0px') : height,\n\t\toverflowY: 'auto',\n\t\tpadding: contentPadding,\n\t\tboxSizing: 'border-box',\n\t};\n\n\tconst formattedWidth = formatDimension(defaultWidth);\n\tconst formattedHeight = formatDimension(defaultHeight);\n\tconst wrapperStyle: CSSProperties = {\n\t\twidth: formattedWidth,\n\t\theight: formattedHeight,\n\t};\n\n\treturn (\n\t\t<div className={wrapperClass} style={wrapperStyle}>\n\t\t\t<div style={getContainerStyle()} className={containerClass}>\n\t\t\t\t{title && (\n\t\t\t\t\t<div className=\"collapsible-header\" style={{ display: 'none' }}>\n\t\t\t\t\t\t<h3>{title}</h3>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"collapsible-content\" style={contentStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tonClick={() => setIsExpanded(!isExpanded)}\n\t\t\t\tclassName={`toggle-button ${getButtonClass()}`}\n\t\t\t\ttitle={isExpanded ? '隐藏' : '展开'}\n\t\t\t>\n\t\t\t\t{getIcon()}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CollapsibleBox;\n","import type { CSSProperties } from 'react';\n\ninterface IconProps {\n\tstyle?: CSSProperties;\n\tclassName?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: 'inline-block',\n\twidth: '1em',\n\theight: '1em',\n\tverticalAlign: '-0.125em',\n};\n\nexport const LeftOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"left\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" />\n\t</svg>\n);\n\nexport const RightOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"right\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" />\n\t</svg>\n);\n\nexport const UpOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"up\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M890.5 755.3L537.4 268a31.96 31.96 0 00-50.8 0L133.5 755.3a7.95 7.95 0 006.3 12.7h75.5c4.9 0 9.6-2.3 12.6-6.1l281-360 281 360c3 3.8 7.7 6.1 12.6 6.1h75.5c6.7 0 10.4-7.6 6.1-12.7z\" />\n\t</svg>\n);\n\nexport const DownOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"0 0 1024 1024\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"down\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 37 17.6 49.8 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\" />\n\t</svg>\n);\n\nexport const LockOutlined = ({ style, className }: IconProps) => (\n\t<svg\n\t\tviewBox=\"64 64 896 896\"\n\t\tfocusable=\"false\"\n\t\tdata-icon=\"lock\"\n\t\twidth=\"1em\"\n\t\theight=\"1em\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t\tstyle={{ ...baseStyle, ...style }}\n\t\tclassName={className}\n\t>\n\t\t<path d=\"M928 224H704v-64c0-88.4-71.6-160-160-160s-160 71.6-160 160v64H160c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h768c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32zM456 160c0-44.2 35.8-80 80-80s80 35.8 80 80v64H456v-64zm408 696H224V296h640v560zM496 448c-30.9 0-56 25.1-56 56 0 24.7 16.1 45.6 38.4 52.7V680c0 9.7 7.8 17.5 17.6 17.5h32c9.7 0 17.6-7.8 17.6-17.5V556.7c22.3-7.1 38.4-28 38.4-52.7 0-30.9-25.1-56-56-56z\" />\n\t</svg>\n);\n","import { DownOutlined, LeftOutlined, RightOutlined, UpOutlined } from '../src/icons';\nimport type {\n\tCSSProperties,\n\tReactElement,\n\tReactNode,\n\tPointerEvent as ReactPointerEvent,\n} from 'react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport type SplitterSize = number | `${number}%`;\nexport type SplitterOrientation = 'horizontal' | 'vertical';\n\nexport type SplitterCollapsible =\n\t| boolean\n\t| {\n\t\t\tstart?: boolean;\n\t\t\tend?: boolean;\n\t\t\tshowCollapsibleIcon?: boolean | 'auto';\n\t };\n\n/**\n * Splitter.Panel 子面板组件属性\n */\nexport type SplitterPanelProps = {\n\t/** 面板内容节点 */\n\tchildren?: ReactNode;\n\t/** 面板自定义类名 */\n\tclassName?: string;\n\t/**\n\t * 折叠配置:\n\t * - `boolean`: 是否允许两端折叠\n\t * - `Object`: `{ start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }`\n\t */\n\tcollapsible?: SplitterCollapsible;\n\t/** 面板初始默认尺寸(支持数字 px 或百分比字符串如 '40%') */\n\tdefaultSize?: SplitterSize;\n\t/** 折叠/隐藏时是否销毁面板内容节点(可覆盖 Splitter 根容器上的 destroyOnHidden 属性) */\n\tdestroyOnHidden?: boolean;\n\t/** 面板最大允许尺寸限制 */\n\tmax?: SplitterSize;\n\t/** 面板最小允许尺寸限制 */\n\tmin?: SplitterSize;\n\t/** 是否允许通过分隔条拖拽调整大小(默认 true) */\n\tresizable?: boolean;\n\t/** 面板受控尺寸 */\n\tsize?: SplitterSize;\n\t/** 面板自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n};\n\nexport type SplitterSemanticDOM = 'root' | 'panel' | 'dragger';\n/** 语义化 DOM 结构标识 */\nexport type SemanticDOM = SplitterSemanticDOM;\n\nexport type SplitterStyles =\n\t| Partial<Record<SplitterSemanticDOM, CSSProperties>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, CSSProperties>>);\n\nexport type SplitterClassNames =\n\t| Partial<Record<SplitterSemanticDOM, string>>\n\t| ((info: { props: SplitterProps }) => Partial<Record<SplitterSemanticDOM, string>>);\n\n/**\n * Splitter 根容器组件属性\n */\nexport type SplitterProps = {\n\t/** 面板集合(建议传入 Splitter.Panel) */\n\tchildren?: ReactNode;\n\t/** 容器根节点自定义类名 */\n\tclassName?: string;\n\t/** 用于自定义组件内部各语义化结构(root、panel、dragger)的 class,支持对象或函数 */\n\tclassNames?: SplitterClassNames;\n\t/** 折叠/隐藏时是否销毁面板内容节点(默认 false,保留组件状态) */\n\tdestroyOnHidden?: boolean;\n\t/** 拖拽分隔条的宽度/高度(单位 px,默认 4) */\n\tdraggerSize?: number;\n\t/** 是否在拖拽结束时才更新视图(默认 false) */\n\tlazy?: boolean;\n\t/** 面板展开或折叠状态改变时的回调 */\n\tonCollapse?: (collapsed: boolean[], sizes: number[]) => void;\n\t/** 拖拽过程中的实时尺寸变化回调 */\n\tonResize?: (sizes: number[]) => void;\n\t/** 拖拽结束、重置尺寸或折叠完成时的回调 */\n\tonResizeEnd?: (sizes: number[]) => void;\n\t/** 开始拖拽分隔条时的回调 */\n\tonResizeStart?: (sizes: number[]) => void;\n\t/** 双击拖拽条回调 */\n\tonDraggerDoubleClick?: (index: number) => void;\n\t/** 分屏方向:'horizontal'(水平分屏)| 'vertical'(垂直分屏),默认 'horizontal' */\n\torientation?: SplitterOrientation;\n\t/** 容器根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n\t/** 容器根节点及各语义化结构(root、panel、dragger)自定义 CSS 样式,支持对象或函数 */\n\tstyles?: SplitterStyles;\n\t/** 是否垂直分屏(orientation=\"vertical\" 的简写形式) 排列方向,与 orientation 同时存在,以 orientation 优先 */\n\tvertical?: boolean;\n\t/** 自定义拖拽手柄图标/节点 */\n\tdraggerIcon?: ReactNode;\n};\n\nexport interface ResolvedCollapsible {\n\tstart: boolean;\n\tend: boolean;\n\tshowCollapsibleIcon: boolean | 'auto';\n}\n\nconst getCollapsibleConfig = (collapsible?: SplitterCollapsible): ResolvedCollapsible => {\n\tif (!collapsible) {\n\t\treturn { start: false, end: false, showCollapsibleIcon: 'auto' };\n\t}\n\tif (typeof collapsible === 'boolean') {\n\t\treturn {\n\t\t\tstart: collapsible,\n\t\t\tend: collapsible,\n\t\t\tshowCollapsibleIcon: collapsible ? true : 'auto',\n\t\t};\n\t}\n\treturn {\n\t\tstart: collapsible.start ?? false,\n\t\tend: collapsible.end ?? false,\n\t\tshowCollapsibleIcon: collapsible.showCollapsibleIcon ?? true,\n\t};\n};\n\ntype SplitterComponent = React.FC<SplitterProps> & {\n\tPanel: React.FC<SplitterPanelProps>;\n};\n\nconst DEFAULT_DRAGGER_SIZE = 4;\nconst MIN_DRAG_SIZE = 40; // 手动拖拽调整大小时的默认最小限制 (px)\n\nconst SplitterPanel: React.FC<SplitterPanelProps> = ({ children }) => <>{children}</>;\n\nconst isPercentSize = (value: SplitterSize): value is `${number}%` =>\n\ttypeof value === 'string' && value.endsWith('%');\n\nconst parseSize = (value: SplitterSize | undefined, total: number, fallback: number) => {\n\tif (value === undefined) {\n\t\treturn fallback;\n\t}\n\n\tif (isPercentSize(value)) {\n\t\treturn (Number.parseFloat(value) / 100) * total;\n\t}\n\n\treturn Number(value);\n};\n\nconst roundSizes = (sizes: number[]) => sizes.map((size) => Math.round(size));\n\nconst getPointerPosition = (\n\tevent: PointerEvent | ReactPointerEvent,\n\torientation: SplitterOrientation,\n) => (orientation === 'horizontal' ? event.clientX : event.clientY);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst resolveSemanticStyles = (\n\tstyles: SplitterStyles | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, CSSProperties>> => {\n\tif (!styles) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof styles === 'function' ? styles({ props: infoProps }) : styles;\n\treturn resolved || {};\n};\n\nconst resolveSemanticClassNames = (\n\tclassNames: SplitterClassNames | undefined,\n\tinfoProps: SplitterProps,\n): Partial<Record<SplitterSemanticDOM, string>> => {\n\tif (!classNames) {\n\t\treturn {};\n\t}\n\n\tconst resolved = typeof classNames === 'function' ? classNames({ props: infoProps }) : classNames;\n\treturn resolved || {};\n};\n\nconst CustomSplitter: SplitterComponent = (props) => {\n\tconst {\n\t\tchildren,\n\t\tclassName,\n\t\tclassNames,\n\t\tdestroyOnHidden = false,\n\t\tdraggerIcon,\n\t\tdraggerSize = DEFAULT_DRAGGER_SIZE,\n\t\tlazy = false,\n\t\tonResize,\n\t\tonResizeEnd,\n\t\tonResizeStart,\n\t\tonCollapse,\n\t\tonDraggerDoubleClick,\n\t\torientation,\n\t\tstyle,\n\t\tstyles,\n\t\tvertical = false,\n\t} = props;\n\tconst resolvedOrientation = orientation ?? (vertical ? 'vertical' : 'horizontal');\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst sizesRef = useRef<number[]>([]);\n\tconst [containerSize, setContainerSize] = useState(0);\n\tconst [draggingIndex, setDraggingIndex] = useState<number | null>(null);\n\tconst [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n\tconst [hoveredCollapsePanelIndex, setHoveredCollapsePanelIndex] = useState<number | null>(null);\n\tconst [sizes, setSizes] = useState<number[]>([]);\n\n\tconst semanticStyles = useMemo(() => resolveSemanticStyles(styles, props), [styles, props]);\n\tconst semanticClassNames = useMemo(\n\t\t() => resolveSemanticClassNames(classNames, props),\n\t\t[classNames, props],\n\t);\n\n\tconst panels = useMemo(\n\t\t() =>\n\t\t\tReact.Children.toArray(children).filter(\n\t\t\t\tReact.isValidElement,\n\t\t\t) as ReactElement<SplitterPanelProps>[],\n\t\t[children],\n\t);\n\n\tconst trackSize = Math.max(0, containerSize - Math.max(0, panels.length - 1) * draggerSize);\n\n\tconst getPanelMin = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.min, trackSize, 0),\n\t\t[panels, trackSize],\n\t);\n\n\tconst getPanelMax = useCallback(\n\t\t(index: number) => parseSize(panels[index]?.props.max, trackSize, trackSize),\n\t\t[panels, trackSize],\n\t);\n\n\tconst normalizeToTrack = useCallback(\n\t\t(nextSizes: number[]) => {\n\t\t\tif (!trackSize || !nextSizes.length) {\n\t\t\t\treturn nextSizes;\n\t\t\t}\n\n\t\t\tconst normalized = [...nextSizes];\n\t\t\tconst diff = trackSize - normalized.reduce((sum, size) => sum + size, 0);\n\t\t\tconst flexibleIndex = normalized.findIndex((size) => size > 0);\n\t\t\tif (flexibleIndex !== -1) {\n\t\t\t\tnormalized[flexibleIndex] += diff;\n\t\t\t}\n\n\t\t\treturn normalized.map((size, index) => {\n\t\t\t\t// 折叠状态(size <= 1)保持为 0,不受 min 限制干扰\n\t\t\t\tif (size <= 1) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\t// 拖拽过程从 0 拖出时,允许在 0 到 min 之间平滑过渡,不被强行跳变到 min\n\t\t\t\tif (size < getPanelMin(index)) {\n\t\t\t\t\treturn size;\n\t\t\t\t}\n\t\t\t\treturn clamp(size, getPanelMin(index), getPanelMax(index));\n\t\t\t});\n\t\t},\n\t\t[getPanelMax, getPanelMin, trackSize],\n\t);\n\n\tconst buildInitialSizes = useCallback(\n\t\t(previous?: number[]) => {\n\t\t\tif (!trackSize || !panels.length) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tif (previous?.length === panels.length) {\n\t\t\t\tconst previousTotal = previous.reduce((sum, size) => sum + size, 0);\n\t\t\t\tif (previousTotal > 0) {\n\t\t\t\t\treturn normalizeToTrack(previous.map((size) => (size / previousTotal) * trackSize));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst explicitSizes = panels.map((panel) =>\n\t\t\t\tparseSize(panel.props.size ?? panel.props.defaultSize, trackSize, -1),\n\t\t\t);\n\t\t\tconst usedSize = explicitSizes\n\t\t\t\t.filter((size) => size >= 0)\n\t\t\t\t.reduce((sum, size) => sum + size, 0);\n\t\t\tconst unsetCount = explicitSizes.filter((size) => size < 0).length;\n\t\t\tconst fallbackSize = unsetCount ? Math.max(0, (trackSize - usedSize) / unsetCount) : 0;\n\n\t\t\treturn normalizeToTrack(\n\t\t\t\texplicitSizes.map((size, index) =>\n\t\t\t\t\tclamp(size >= 0 ? size : fallbackSize, getPanelMin(index), getPanelMax(index)),\n\t\t\t\t),\n\t\t\t);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack, panels, trackSize],\n\t);\n\n\tconst updateSizes = useCallback(\n\t\t(nextSizes: number[], notify = true) => {\n\t\t\tconst normalized = normalizeToTrack(nextSizes);\n\t\t\tsetSizes(normalized);\n\t\t\tsizesRef.current = normalized;\n\t\t\tif (notify) {\n\t\t\t\tonResize?.(roundSizes(normalized));\n\t\t\t}\n\t\t},\n\t\t[normalizeToTrack, onResize],\n\t);\n\n\tuseEffect(() => {\n\t\tconst node = rootRef.current;\n\t\tif (!node) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst syncSize = () => {\n\t\t\tsetContainerSize(resolvedOrientation === 'horizontal' ? node.clientWidth : node.clientHeight);\n\t\t};\n\t\tsyncSize();\n\n\t\tconst observer = new ResizeObserver(syncSize);\n\t\tobserver.observe(node);\n\t\treturn () => observer.disconnect();\n\t}, [resolvedOrientation]);\n\n\tuseEffect(() => {\n\t\tsetSizes((previous) => {\n\t\t\tconst nextSizes = buildInitialSizes(previous);\n\t\t\tsizesRef.current = nextSizes;\n\t\t\treturn nextSizes;\n\t\t});\n\t}, [buildInitialSizes]);\n\n\tconst getResizedPair = useCallback(\n\t\t(sourceSizes: number[], index: number, delta: number) => {\n\t\t\tconst nextSizes = [...sourceSizes];\n\t\t\tconst isLeftCollapsed = sourceSizes[index] <= 1;\n\t\t\tconst isRightCollapsed = sourceSizes[index + 1] <= 1;\n\n\t\t\tconst leftMin = isLeftCollapsed ? 0 : getPanelMin(index);\n\t\t\tconst rightMin = isRightCollapsed ? 0 : getPanelMin(index + 1);\n\t\t\tconst leftMax = getPanelMax(index);\n\t\t\tconst rightMax = getPanelMax(index + 1);\n\n\t\t\tconst minDelta = Math.max(leftMin - sourceSizes[index], sourceSizes[index + 1] - rightMax);\n\t\t\tconst maxDelta = Math.min(leftMax - sourceSizes[index], sourceSizes[index + 1] - rightMin);\n\t\t\tconst safeDelta = clamp(delta, minDelta, maxDelta);\n\n\t\t\tnextSizes[index] = sourceSizes[index] + safeDelta;\n\t\t\tnextSizes[index + 1] = sourceSizes[index + 1] - safeDelta;\n\t\t\treturn normalizeToTrack(nextSizes);\n\t\t},\n\t\t[getPanelMax, getPanelMin, normalizeToTrack],\n\t);\n\n\tconst getInitialLockedIndex = useCallback(\n\t\t(sourceSizes: number[], startIndex: number, delta: number) => {\n\t\t\tif (sourceSizes[startIndex] <= 1 && delta < 0 && startIndex > 0) {\n\t\t\t\treturn startIndex - 1;\n\t\t\t}\n\t\t\tif (sourceSizes[startIndex + 1] <= 1 && delta > 0 && startIndex < sourceSizes.length - 2) {\n\t\t\t\treturn startIndex + 1;\n\t\t\t}\n\t\t\treturn startIndex;\n\t\t},\n\t\t[],\n\t);\n\n\tconst resizePair = useCallback(\n\t\t(index: number, delta: number, notify = true) => {\n\t\t\tconst targetIndex = getInitialLockedIndex(sizesRef.current, index, delta);\n\t\t\tupdateSizes(getResizedPair(sizesRef.current, targetIndex, delta), notify);\n\t\t},\n\t\t[getInitialLockedIndex, getResizedPair, updateSizes],\n\t);\n\n\tconst startResize = (index: number, event: ReactPointerEvent<HTMLDivElement>) => {\n\t\tif (panels[index].props.resizable === false || panels[index + 1].props.resizable === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tconst startPosition = getPointerPosition(event, resolvedOrientation);\n\t\tconst startSizes = [...sizesRef.current];\n\t\tlet latestSizes = startSizes;\n\t\tlet lockedIndex: number | null = null;\n\n\t\tsetDraggingIndex(index);\n\t\tonResizeStart?.(roundSizes(startSizes));\n\n\t\tconst handlePointerMove = (moveEvent: PointerEvent) => {\n\t\t\tconst delta = getPointerPosition(moveEvent, resolvedOrientation) - startPosition;\n\t\t\tif (delta === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (lockedIndex === null) {\n\t\t\t\tlockedIndex = getInitialLockedIndex(startSizes, index, delta);\n\t\t\t}\n\n\t\t\tlatestSizes = getResizedPair(startSizes, lockedIndex, delta);\n\t\t\tif (!lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePointerUp = () => {\n\t\t\tdocument.removeEventListener('pointermove', handlePointerMove);\n\t\t\tdocument.removeEventListener('pointerup', handlePointerUp);\n\t\t\tsetDraggingIndex(null);\n\t\t\tif (lazy) {\n\t\t\t\tupdateSizes(latestSizes, true);\n\t\t\t}\n\t\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\t\tconst startCollapsed = startSizes.map((size) => size <= 1);\n\t\t\tif (currentCollapsed.some((c, i) => c !== startCollapsed[i])) {\n\t\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t\t}\n\t\t\tonResizeEnd?.(currentSizes);\n\t\t};\n\n\t\tdocument.addEventListener('pointermove', handlePointerMove);\n\t\tdocument.addEventListener('pointerup', handlePointerUp);\n\t};\n\n\tconst toggleCollapse = (index: number, neighborIndex: number) => {\n\t\tconst nextSizes = [...sizesRef.current];\n\n\t\tif (nextSizes[index] > 1) {\n\t\t\tnextSizes[neighborIndex] += nextSizes[index];\n\t\t\tnextSizes[index] = 0;\n\t\t} else {\n\t\t\tconst initialSizes = buildInitialSizes();\n\t\t\tconst initialSize =\n\t\t\t\tinitialSizes[index] ??\n\t\t\t\tparseSize(panels[index].props.defaultSize, trackSize, trackSize / panels.length);\n\t\t\tconst restoredSize = clamp(initialSize, getPanelMin(index), getPanelMax(index));\n\t\t\tnextSizes[index] = restoredSize;\n\t\t\tnextSizes[neighborIndex] = Math.max(0, nextSizes[neighborIndex] - nextSizes[index]);\n\t\t}\n\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst resetSizes = () => {\n\t\tconst previousCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tconst nextSizes = buildInitialSizes();\n\t\tupdateSizes(nextSizes);\n\t\tconst currentSizes = roundSizes(sizesRef.current);\n\t\tconst currentCollapsed = sizesRef.current.map((size) => size <= 1);\n\t\tif (currentCollapsed.some((c, i) => c !== previousCollapsed[i])) {\n\t\t\tonCollapse?.(currentCollapsed, currentSizes);\n\t\t}\n\t\tonResizeEnd?.(currentSizes);\n\t};\n\n\tconst rootStyle: CSSProperties = {\n\t\tborder: '1px solid #f0f0f0',\n\t\tborderRadius: 8,\n\t\tboxSizing: 'border-box',\n\t\tdisplay: 'flex',\n\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\theight: '100%',\n\t\tminHeight: 0,\n\t\toverflow: 'hidden',\n\t\tposition: 'relative',\n\t\twidth: '100%',\n\t\t...semanticStyles.root,\n\t\t...style,\n\t};\n\n\tconst renderCollapseButton = (\n\t\tdraggerIndex: number,\n\t\tpanelIndex: number,\n\t\tdirection: 'start' | 'end',\n\t) => {\n\t\tconst panel = panels[panelIndex];\n\t\tconst config = getCollapsibleConfig(panel?.props.collapsible);\n\t\tconst isAllowed = direction === 'start' ? config.start : config.end;\n\n\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst neighborIndex = direction === 'start' ? panelIndex + 1 : panelIndex - 1;\n\t\tconst isCollapsed = (sizes[panelIndex] ?? 0) <= 1;\n\t\tconst isNeighborCollapsed = (sizes[neighborIndex] ?? 0) <= 1;\n\n\t\t// 自己折叠后隐藏;对侧面板折叠后也隐藏(避免与展开按钮重复/语义冲突)\n\t\tif (isCollapsed || isNeighborCollapsed) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// 展开时箭头指向面板将被折叠到的方向\n\t\tconst Icon =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? LeftOutlined\n\t\t\t\t\t: RightOutlined\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? UpOutlined\n\t\t\t\t\t: DownOutlined;\n\n\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\t\tconst isAlwaysShow = config.showCollapsibleIcon === true;\n\t\tconst isHoveredOrDragging = hoveredIndex === draggerIndex || draggingIndex === draggerIndex;\n\t\tconst opacity = isAlwaysShow || isHoveredOrDragging ? 1 : 0;\n\t\tconst pointerEvents = isAlwaysShow || isHoveredOrDragging ? 'auto' : 'none';\n\n\t\tconst buttonTitle =\n\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t? direction === 'start'\n\t\t\t\t\t? '折叠左侧面板'\n\t\t\t\t\t: '折叠右侧面板'\n\t\t\t\t: direction === 'start'\n\t\t\t\t\t? '折叠上方面板'\n\t\t\t\t\t: '折叠下方面板';\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\taria-label={buttonTitle}\n\t\t\t\ttitle={buttonTitle}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttoggleCollapse(panelIndex, neighborIndex);\n\t\t\t\t}}\n\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}}\n\t\t\t\tstyle={{\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\tborder: '1px solid #d9d9d9',\n\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tfontSize: 10,\n\t\t\t\t\tboxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\topacity,\n\t\t\t\t\tpointerEvents,\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(panelIndex);\n\t\t\t\t}}\n\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\te.currentTarget.style.background = '#fff';\n\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t</button>\n\t\t);\n\t};\n\n\tconst rootClassName = [className, semanticClassNames.root].filter(Boolean).join(' ') || undefined;\n\n\treturn (\n\t\t<div className={rootClassName} ref={rootRef} style={rootStyle}>\n\t\t\t{panels.map((panel, index) => {\n\t\t\t\tconst isHidden = sizes[index] <= 1;\n\t\t\t\tconst isLeftOrTopCollapsed = (sizes[index] ?? 0) <= 1;\n\t\t\t\tconst isRightOrBottomCollapsed = (sizes[index + 1] ?? 0) <= 1;\n\t\t\t\tconst isAnyCollapsed = isLeftOrTopCollapsed || isRightOrBottomCollapsed;\n\t\t\t\tconst panelDestroyOnHidden = panel.props.destroyOnHidden ?? destroyOnHidden;\n\t\t\t\tconst shouldRenderContent = !isHidden || !panelDestroyOnHidden;\n\n\t\t\t\treturn (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t[semanticClassNames.panel, panel.props.className].filter(Boolean).join(' ') ||\n\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackground: index % 2 ? '#fff' : '#fafafa',\n\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\tflex: `0 0 ${sizes[index] ?? 0}px`,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\thoveredCollapsePanelIndex === index ? 'inset 0 0 0 2px #1677ff' : undefined,\n\t\t\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\t\tdraggingIndex === null ? 'box-shadow 0.2s ease, flex-basis 0.2s ease' : undefined,\n\t\t\t\t\t\t\t\t...semanticStyles.panel,\n\t\t\t\t\t\t\t\t...panel.props.style,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldRenderContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\t\tdisplay: isHidden ? 'none' : 'block',\n\t\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t\t\toverflowX: 'hidden',\n\t\t\t\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\t\t\t\tpadding: (sizes[index] ?? 0) < 32 ? 0 : 16,\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{panel.props.children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{index < panels.length - 1 && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-orientation={resolvedOrientation}\n\t\t\t\t\t\t\t\tclassName={semanticClassNames.dragger}\n\t\t\t\t\t\t\t\tonDoubleClick={() => {\n\t\t\t\t\t\t\t\t\tonDraggerDoubleClick?.(index);\n\t\t\t\t\t\t\t\t\tresetSizes();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\t\tconst step = event.shiftKey ? 40 : 10;\n\t\t\t\t\t\t\t\t\tconst directionMap =\n\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? { ArrowLeft: -step, ArrowRight: step }\n\t\t\t\t\t\t\t\t\t\t\t: { ArrowUp: -step, ArrowDown: step };\n\t\t\t\t\t\t\t\t\tconst delta = directionMap[event.key as keyof typeof directionMap];\n\t\t\t\t\t\t\t\t\tif (delta !== undefined) {\n\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\tresizePair(index, delta);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(event) => startResize(index, event)}\n\t\t\t\t\t\t\t\tonPointerEnter={() => setHoveredIndex(index)}\n\t\t\t\t\t\t\t\tonPointerLeave={() => setHoveredIndex(null)}\n\t\t\t\t\t\t\t\trole=\"separator\"\n\t\t\t\t\t\t\t\ttitle=\"拖动调整大小,双击重置\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#e6f4ff' : '#f5f5f5',\n\t\t\t\t\t\t\t\t\tboxSizing: 'border-box',\n\t\t\t\t\t\t\t\t\tcursor: resolvedOrientation === 'horizontal' ? 'col-resize' : 'row-resize',\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: `0 0 ${draggerSize}px`,\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\tmarginLeft:\n\t\t\t\t\t\t\t\t\t\tindex > 0 && (sizes[index] ?? 0) <= 1 && resolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t? -draggerSize\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\tmarginTop:\n\t\t\t\t\t\t\t\t\t\tindex > 0 && (sizes[index] ?? 0) <= 1 && resolvedOrientation === 'vertical'\n\t\t\t\t\t\t\t\t\t\t\t? -draggerSize\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\tzIndex: isAnyCollapsed ? 2 : 1,\n\t\t\t\t\t\t\t\t\t...semanticStyles.dragger,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* 呈现拖拽指示线/图标 */}\n\t\t\t\t\t\t\t\t{draggerIcon ? (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#8c8c8c',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'color 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{draggerIcon}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tbackground:\n\t\t\t\t\t\t\t\t\t\t\t\thoveredIndex === index || draggingIndex === index ? '#1677ff' : '#d9d9d9',\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 2,\n\t\t\t\t\t\t\t\t\t\t\theight: resolvedOrientation === 'horizontal' ? 40 : 2,\n\t\t\t\t\t\t\t\t\t\t\ttransition: 'background 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\twidth: resolvedOrientation === 'horizontal' ? 2 : 40,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 未折叠状态下呈现折叠按钮 */}\n\t\t\t\t\t\t\t\t{!isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop: '50%',\n\t\t\t\t\t\t\t\t\t\t\tleft: '50%',\n\t\t\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)',\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\tflexDirection: resolvedOrientation === 'horizontal' ? 'row' : 'column',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-end',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index, 'start')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: resolvedOrientation === 'horizontal' ? undefined : 14,\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: resolvedOrientation === 'horizontal' ? 14 : undefined,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderCollapseButton(index, index + 1, 'end')}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* 折叠状态下呈现展开按钮(必须包含 collapsible 允许方可渲染) */}\n\t\t\t\t\t\t\t\t{isAnyCollapsed && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? '50%'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tbottom:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tleft:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: '50%',\n\t\t\t\t\t\t\t\t\t\t\tright:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isRightOrBottomCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 5,\n\t\t\t\t\t\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? `translate(${isLeftOrTopCollapsed ? '4px' : '-4px'}, -50%)`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `translate(-50%, ${isLeftOrTopCollapsed ? '4px' : '-4px'})`,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst isStart = isLeftOrTopCollapsed;\n\t\t\t\t\t\t\t\t\t\t\tconst targetIndex = isStart ? index : index + 1;\n\t\t\t\t\t\t\t\t\t\t\tconst targetPanel = panels[targetIndex];\n\t\t\t\t\t\t\t\t\t\t\tconst config = getCollapsibleConfig(targetPanel?.props.collapsible);\n\t\t\t\t\t\t\t\t\t\t\tconst isAllowed = isStart ? config.start : config.end;\n\n\t\t\t\t\t\t\t\t\t\t\tif (!isAllowed || config.showCollapsibleIcon === false) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst ExpandIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? RightOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: LeftOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? DownOutlined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: UpOutlined;\n\n\t\t\t\t\t\t\t\t\t\t\tconst neighborIndex = isLeftOrTopCollapsed ? index + 1 : index;\n\t\t\t\t\t\t\t\t\t\t\tconst isHorizontal = resolvedOrientation === 'horizontal';\n\n\t\t\t\t\t\t\t\t\t\t\tconst expandTitle =\n\t\t\t\t\t\t\t\t\t\t\t\tresolvedOrientation === 'horizontal'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开左侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开右侧面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isLeftOrTopCollapsed\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? '展开上方面板'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: '展开下方面板';\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={expandTitle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleCollapse(targetIndex, neighborIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDoubleClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: '#f3f4f6',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '1px solid #e5e7eb',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: '#595959',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: isHorizontal ? 40 : 14,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 14 : 40,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: 'all 0.2s ease',\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#e5e7eb';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#1f2937';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(targetIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.background = '#f3f4f6';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget.style.color = '#595959';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetHoveredCollapsePanelIndex(null);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ExpandIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nCustomSplitter.Panel = SplitterPanel;\n\nexport default CustomSplitter;\n","import type { ReactNode } from 'react';\nimport { LockOutlined } from '../src/icons';\nimport './index.less';\n\nexport interface DisabledBoxProps {\n\ttitle?: ReactNode;\n\tchildren?: ReactNode;\n\t// 是否禁用,禁用时显示锁图标 + 文字灰色 + 不可点击\n\tdisabled?: boolean;\n\t// 锁图标对齐方向\n\ticonAlign?: 'left' | 'right';\n}\n\nconst DisabledBox = (props: DisabledBoxProps) => {\n\tconst { title, children, disabled = false, iconAlign = 'left' } = props;\n\tconst content = children ?? title;\n\n\t// 未禁用时原样渲染,不加锁\n\tif (!disabled) {\n\t\treturn <>{content}</>;\n\t}\n\n\t// disabled 时用div渲染,样式模拟disabled效果\n\t// 在捕获阶段阻止click事件传播,既防止内部点击事件触发,也阻止冒泡到父组件\n\t// 不阻止mouseenter/mouseleave等hover事件,保证Tooltip正常显示\n\tconst handleClickCapture = (e: React.MouseEvent) => {\n\t\tif (disabled) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"disabled_box_container disabled_box_disabled\"\n\t\t\tonClickCapture={handleClickCapture}\n\t\t>\n\t\t\t{iconAlign === 'left' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t\t<span className=\"disabled_box_title\">{content}</span>\n\t\t\t{iconAlign === 'right' && <LockOutlined className=\"disabled_box_icon\" />}\n\t\t</div>\n\t);\n};\n\nexport default DisabledBox;\n","import type { CSSProperties, ReactNode, Key } from 'react';\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport './index.less';\n\n/** 响应式断点名称 */\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\n/** 间距配置项 */\nexport type Gap = undefined | number | Partial<Record<Breakpoint, number>>;\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/** 瀑布流单项结构 */\nexport interface MasonryItem<T = any> {\n\t/** 自定义展示内容,相对 itemRender 具有更高优先级 */\n\tchildren?: ReactNode;\n\t/** 自定义所在列(0-indexed) */\n\tcolumn?: number;\n\t/** 自定义存储数据 */\n\tdata?: T;\n\t/** 高度(手指定时优先使用,否则通过测量动态计算) */\n\theight?: number;\n\t/** 唯一标识 */\n\tkey: Key;\n}\n\n/** 语义化 DOM 节点 */\nexport type MasonrySemanticDOM = 'root' | 'item';\n\nexport type MasonryClassNames =\n\t| Partial<Record<MasonrySemanticDOM, string>>\n\t| ((info: { props: MasonryProps<any> }) => Partial<Record<MasonrySemanticDOM, string>>);\n\nexport type MasonryStyles =\n\t| Partial<Record<MasonrySemanticDOM, CSSProperties>>\n\t| ((info: { props: MasonryProps<any> }) => Partial<Record<MasonrySemanticDOM, CSSProperties>>);\n\n/** Masonry 组件属性 */\nexport interface MasonryProps<T = any> {\n\t/** 用于自定义组件内部各语义化结构的 class,支持对象或函数 */\n\tclassNames?: MasonryClassNames;\n\t/** 列数,可以是固定值或响应式配置,默认 3 */\n\tcolumns?: number | Partial<Record<Breakpoint, number>>;\n\t/** 是否持续监听子项尺寸变化,默认 false */\n\tfresh?: boolean;\n\t/** 间距,可以是固定值、响应式配置或水平垂直间距配置 [horizontalGap, verticalGap],默认 0 */\n\tgutter?: Gap | [Gap, Gap];\n\t/** 瀑布流项列表 */\n\titems?: MasonryItem<T>[];\n\t/** 自定义项渲染 */\n\titemRender?: (item: MasonryItem<T>) => ReactNode;\n\t/** 语义化结构 style,支持对象和函数形式 */\n\tstyles?: MasonryStyles;\n\t/** 列排序回调 */\n\tonLayoutChange?: (layout: { key: Key; column: number }[]) => void;\n\t/** 根节点自定义类名 */\n\tclassName?: string;\n\t/** 根节点自定义 CSS 样式 */\n\tstyle?: CSSProperties;\n\t/** JSX 子节点支持 */\n\tchildren?: ReactNode;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nconst BREAKPOINT_ORDER: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\n\n/** 计算当前容器宽度对应的响应式断点 */\nfunction getBreakpoint(width: number): Breakpoint {\n\tif (width >= 1600) return 'xxl';\n\tif (width >= 1200) return 'xl';\n\tif (width >= 992) return 'lg';\n\tif (width >= 768) return 'md';\n\tif (width >= 576) return 'sm';\n\treturn 'xs';\n}\n\n/** 解析响应式配置值 */\nfunction resolveResponsiveValue<T>(\n\tvalue: T | Partial<Record<Breakpoint, T>> | undefined,\n\tcurrentBp: Breakpoint,\n\tdefaultValue: T,\n): T {\n\tif (value === undefined || value === null) return defaultValue;\n\tif (typeof value === 'object') {\n\t\tconst obj = value as Partial<Record<Breakpoint, T>>;\n\t\tif (obj[currentBp] !== undefined) return obj[currentBp]!;\n\t\tconst currentIdx = BREAKPOINT_ORDER.indexOf(currentBp);\n\t\tfor (let i = currentIdx - 1; i >= 0; i--) {\n\t\t\tconst bp = BREAKPOINT_ORDER[i];\n\t\t\tif (obj[bp] !== undefined) return obj[bp]!;\n\t\t}\n\t\tfor (let i = currentIdx + 1; i < BREAKPOINT_ORDER.length; i++) {\n\t\t\tconst bp = BREAKPOINT_ORDER[i];\n\t\t\tif (obj[bp] !== undefined) return obj[bp]!;\n\t\t}\n\t\treturn defaultValue;\n\t}\n\treturn value;\n}\n\n/** 解析水平和垂直 Gutter */\nfunction resolveGutter(\n\tgutter: Gap | [Gap, Gap] | undefined,\n\tcurrentBp: Breakpoint,\n): [number, number] {\n\tif (!gutter) return [0, 0];\n\tif (Array.isArray(gutter)) {\n\t\tconst h = resolveResponsiveValue(gutter[0], currentBp, 0);\n\t\tconst v = resolveResponsiveValue(gutter[1], currentBp, 0);\n\t\treturn [h, v];\n\t}\n\tconst g = resolveResponsiveValue(gutter, currentBp, 0);\n\treturn [g, g];\n}\n\nconst Masonry = <T = unknown,>(props: MasonryProps<T>) => {\n\tconst {\n\t\tclassNames,\n\t\tcolumns = 3,\n\t\tfresh = false,\n\t\tgutter = 0,\n\t\titems,\n\t\titemRender,\n\t\tstyles,\n\t\tonLayoutChange,\n\t\tclassName,\n\t\tstyle,\n\t\tchildren,\n\t} = props;\n\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst [containerWidth, setContainerWidth] = useState<number>(0);\n\tconst [measuredHeights, setMeasuredHeights] = useState<Record<string, number>>({});\n\tconst itemRefs = useRef<Map<Key, HTMLDivElement>>(new Map());\n\n\t// 规范化 items 列表(支持 items 属性或 JSX children)\n\tconst normalizedItems: MasonryItem<T>[] = useMemo(() => {\n\t\tif (items) return items;\n\t\tif (!children) return [];\n\t\treturn React.Children.toArray(children).map((child, index) => {\n\t\t\tif (React.isValidElement(child)) {\n\t\t\t\tconst key = child.key ?? `masonry-item-${index}`;\n\t\t\t\treturn {\n\t\t\t\t\tkey,\n\t\t\t\t\tchildren: child,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkey: `masonry-item-${index}`,\n\t\t\t\tchildren: child,\n\t\t\t};\n\t\t});\n\t}, [items, children]);\n\n\t// 计算当前响应式断点\n\tconst currentBreakpoint = useMemo(() => getBreakpoint(containerWidth), [containerWidth]);\n\n\t// 解析实际列数与间隔\n\tconst resolvedColumns = useMemo(() => {\n\t\tconst count = resolveResponsiveValue(columns, currentBreakpoint, 3);\n\t\treturn Math.max(1, Math.floor(count));\n\t}, [columns, currentBreakpoint]);\n\n\tconst [horizontalGap, verticalGap] = useMemo(\n\t\t() => resolveGutter(gutter, currentBreakpoint),\n\t\t[gutter, currentBreakpoint],\n\t);\n\n\t// 监听容器宽度变化\n\tuseEffect(() => {\n\t\tif (!rootRef.current) return;\n\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst width = entry.contentRect.width;\n\t\t\t\tif (width > 0) {\n\t\t\t\t\tsetContainerWidth(width);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tobserver.observe(rootRef.current);\n\t\treturn () => observer.disconnect();\n\t}, []);\n\n\t// 测量每个 item DOM 的实际高度\n\tconst measureItems = useCallback(() => {\n\t\tlet hasChange = false;\n\t\tconst newHeights: Record<string, number> = {};\n\n\t\titemRefs.current.forEach((el, key) => {\n\t\t\tif (el) {\n\t\t\t\tconst strKey = String(key);\n\t\t\t\tconst h = el.offsetHeight;\n\t\t\t\tif (h > 0) {\n\t\t\t\t\tnewHeights[strKey] = h;\n\t\t\t\t\tif (measuredHeights[strKey] !== h) {\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (hasChange) {\n\t\t\tsetMeasuredHeights((prev) => ({ ...prev, ...newHeights }));\n\t\t}\n\t}, [measuredHeights]);\n\n\tuseLayoutEffect(() => {\n\t\tconst handle = requestAnimationFrame(() => {\n\t\t\tmeasureItems();\n\t\t});\n\t\treturn () => cancelAnimationFrame(handle);\n\t}, [measureItems]);\n\n\t// 监听 fresh 配置:持续监听每个 item 的 DOM 尺寸变动(例如图片加载、文本折叠)\n\tuseEffect(() => {\n\t\tif (!fresh) return;\n\t\tconst observer = new ResizeObserver(() => {\n\t\t\tmeasureItems();\n\t\t});\n\n\t\titemRefs.current.forEach((el) => {\n\t\t\tif (el) observer.observe(el);\n\t\t});\n\n\t\treturn () => observer.disconnect();\n\t}, [fresh, measureItems, normalizedItems]);\n\n\t// 计算单个列宽\n\tconst columnWidth = useMemo(() => {\n\t\tif (containerWidth <= 0) return 0;\n\t\tconst totalGap = (resolvedColumns - 1) * horizontalGap;\n\t\treturn Math.max(0, (containerWidth - totalGap) / resolvedColumns);\n\t}, [containerWidth, resolvedColumns, horizontalGap]);\n\n\t// 瀑布流核心布局算法计算\n\tconst { layoutItems, containerHeight, layoutChangeData } = useMemo(() => {\n\t\tconst colHeights = new Array(resolvedColumns).fill(0);\n\t\tconst changeData: { key: Key; column: number }[] = [];\n\n\t\tconst computedList = normalizedItems.map((item) => {\n\t\t\t// 如果显式指定了 height,优先使用;否则使用 DOM 测量的 height\n\t\t\tconst h = item.height ?? measuredHeights[String(item.key)] ?? 0;\n\n\t\t\t// 判断目标放置列(指定列数或者找当前高度最小的列)\n\t\t\tlet targetCol = 0;\n\t\t\tif (typeof item.column === 'number' && item.column >= 0 && item.column < resolvedColumns) {\n\t\t\t\ttargetCol = Math.floor(item.column);\n\t\t\t} else {\n\t\t\t\tlet minH = colHeights[0];\n\t\t\t\tfor (let i = 1; i < resolvedColumns; i++) {\n\t\t\t\t\tif (colHeights[i] < minH) {\n\t\t\t\t\t\tminH = colHeights[i];\n\t\t\t\t\t\ttargetCol = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst left = targetCol * (columnWidth + horizontalGap);\n\t\t\tconst top = colHeights[targetCol];\n\n\t\t\t// 更新该列高度\n\t\t\tcolHeights[targetCol] += h + (h > 0 ? verticalGap : 0);\n\n\t\t\tchangeData.push({ key: item.key, column: targetCol });\n\n\t\t\treturn {\n\t\t\t\titem,\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth: columnWidth,\n\t\t\t\theight: h,\n\t\t\t\tcolumn: targetCol,\n\t\t\t};\n\t\t});\n\n\t\tconst totalH = Math.max(0, ...colHeights);\n\n\t\treturn {\n\t\t\tlayoutItems: computedList,\n\t\t\tcontainerHeight: totalH,\n\t\t\tlayoutChangeData: changeData,\n\t\t};\n\t}, [normalizedItems, resolvedColumns, horizontalGap, verticalGap, columnWidth, measuredHeights]);\n\n\t// 触发 onLayoutChange 回调\n\tconst prevLayoutRef = useRef<string>('');\n\tuseEffect(() => {\n\t\tconst layoutKey = JSON.stringify(layoutChangeData);\n\t\tif (layoutKey !== prevLayoutRef.current) {\n\t\t\tprevLayoutRef.current = layoutKey;\n\t\t\tonLayoutChange?.(layoutChangeData);\n\t\t}\n\t}, [layoutChangeData, onLayoutChange]);\n\n\t// 解析语义化 className 和 styles\n\tconst semanticClassNames = useMemo(() => {\n\t\tif (typeof classNames === 'function') {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\treturn classNames({ props: props as MasonryProps<any> }) ?? {};\n\t\t}\n\t\treturn classNames ?? {};\n\t}, [classNames, props]);\n\n\tconst semanticStyles = useMemo(() => {\n\t\tif (typeof styles === 'function') {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\treturn styles({ props: props as MasonryProps<any> }) ?? {};\n\t\t}\n\t\treturn styles ?? {};\n\t}, [styles, props]);\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tclassName={['masonry_root', semanticClassNames.root, className].filter(Boolean).join(' ')}\n\t\t\tstyle={{\n\t\t\t\tminHeight: containerHeight > 0 ? containerHeight : undefined,\n\t\t\t\theight: containerHeight > 0 ? containerHeight : undefined,\n\t\t\t\t...semanticStyles.root,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{layoutItems.map(({ item, left, top, width, height }) => {\n\t\t\t\tconst content = item.children ?? itemRender?.(item);\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.key}\n\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\titemRefs.current.set(item.key, node);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\titemRefs.current.delete(item.key);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={['masonry_item', semanticClassNames.item].filter(Boolean).join(' ')}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: containerWidth > 0 ? width : '100%',\n\t\t\t\t\t\t\theight: height > 0 ? height : undefined,\n\t\t\t\t\t\t\ttransform: containerWidth > 0 ? `translate3d(${left}px, ${top}px, 0)` : undefined,\n\t\t\t\t\t\t\topacity: containerWidth > 0 ? 1 : 0,\n\t\t\t\t\t\t\t...semanticStyles.item,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonLoad={measureItems}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nexport default Masonry;\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport './index.less';\n\nexport type BorderBeamColorStop = {\n\tcolor: string;\n\tpercent: number;\n};\n\nexport interface BorderBeamProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {\n\t/** 装饰内容 */\n\tchildren?: ReactNode;\n\t/** 流光颜色配置,支持单色字符串或渐变停靠点数组 */\n\tcolor?: string | BorderBeamColorStop[];\n\t/** 流光数量,默认为 1 */\n\tcount?: number;\n\t/** 流光完成一圈动画的时间,单位秒,默认为 6 */\n\tduration?: number;\n\t/** 流光线宽,数字类型按像素处理,默认为 1px */\n\tlineWidth?: number | string;\n\t/** 流光层相对容器边缘的外扩距离,遇到裁剪容器时可设为 0 */\n\toutset?: number | string;\n\t/** 流光可见段的尺寸,数字类型按像素处理,默认为 100 */\n\tsize?: number | string;\n}\n\nconst formatSizeUnit = (value: number | string | undefined, defaultValue: string): string => {\n\tif (value === undefined || value === null) {\n\t\treturn defaultValue;\n\t}\n\tif (typeof value === 'number') {\n\t\treturn `${value}px`;\n\t}\n\treturn value;\n};\n\nconst buildGradientString = (color?: string | BorderBeamColorStop[]): string => {\n\tif (!color) {\n\t\treturn 'linear-gradient(to left, #1677ff 0%, transparent 100%)';\n\t}\n\tif (typeof color === 'string') {\n\t\treturn `linear-gradient(to left, ${color} 0%, transparent 100%)`;\n\t}\n\tif (Array.isArray(color)) {\n\t\tif (color.length === 0) {\n\t\t\treturn 'linear-gradient(to left, #1677ff 0%, transparent 100%)';\n\t\t}\n\t\tconst sorted = [...color].sort((a, b) => a.percent - b.percent);\n\t\tconst mappedStops = sorted.map((stop) => {\n\t\t\tconst mappedPercent = Math.min(Math.max((stop.percent / 100) * 80, 0), 80);\n\t\t\treturn `${stop.color} ${mappedPercent.toFixed(2)}%`;\n\t\t});\n\t\treturn `linear-gradient(to left, ${mappedStops.join(', ')}, transparent 100%)`;\n\t}\n\treturn 'linear-gradient(to left, #1677ff 0%, transparent 100%)';\n};\n\nconst BorderBeam = (props: BorderBeamProps) => {\n\tconst {\n\t\tchildren,\n\t\tcolor,\n\t\tcount = 1,\n\t\tduration = 6,\n\t\tlineWidth = '1px',\n\t\toutset = '0px',\n\t\tsize = 100,\n\t\tclassName,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst formattedLineWidth = formatSizeUnit(lineWidth, '1px');\n\tconst formattedOutset = formatSizeUnit(outset, '0px');\n\tconst formattedSize = formatSizeUnit(size, '100px');\n\tconst gradientCss = buildGradientString(color);\n\n\tconst maskStyle: CSSProperties = {\n\t\t'--border-beam-line-width': formattedLineWidth,\n\t\t'--border-beam-outset': formattedOutset,\n\t\t'--border-beam-size': formattedSize,\n\t\t'--border-beam-duration': `${duration}s`,\n\t\t'--border-beam-gradient': gradientCss,\n\t} as CSSProperties;\n\n\tconst beamCount = Math.max(1, count);\n\tconst beams = Array.from({ length: beamCount }).map((_, index) => {\n\t\tconst delaySeconds = -((duration * index) / beamCount);\n\t\treturn (\n\t\t\t<div\n\t\t\t\tkey={index}\n\t\t\t\tclassName=\"react-public-border-beam-item\"\n\t\t\t\tstyle={{\n\t\t\t\t\tanimationDelay: `${delaySeconds}s`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\t});\n\n\tif (children !== undefined) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`react-public-border-beam-container ${className || ''}`.trim()}\n\t\t\t\tstyle={style}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t<div className=\"react-public-border-beam-mask\" style={maskStyle}>\n\t\t\t\t\t{beams}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`react-public-border-beam-mask ${className || ''}`.trim()}\n\t\t\tstyle={{\n\t\t\t\t...maskStyle,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t\t{...restProps}\n\t\t>\n\t\t\t{beams}\n\t\t</div>\n\t);\n};\n\nexport default BorderBeam;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA6D;;;AC0B3D;AAnBF,IAAM,YAA2B;AAAA,EAChC,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AAChB;AAEO,IAAM,eAAe,CAAC,EAAE,OAAO,UAAU,MAC/C;AAAA,EAAC;AAAA;AAAA,IACA,SAAQ;AAAA,IACR,WAAU;AAAA,IACV,aAAU;AAAA,IACV,OAAM;AAAA,IACN,QAAO;AAAA,IACP,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,OAAO,EAAE,GAAG,WAAW,GAAG,MAAM;AAAA,IAChC;AAAA,IAEA,sDAAC,UAAK,GAAE,yLAAwL;AAAA;AACjM;AAGM,IAAM,gBAAgB,CAAC,EAAE,OAAO,UAAU,MAChD;AAAA,EAAC;AAAA;AAAA,IACA,SAAQ;AAAA,IACR,WAAU;AAAA,IACV,aAAU;AAAA,IACV,OAAM;AAAA,IACN,QAAO;AAAA,IACP,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,OAAO,EAAE,GAAG,WAAW,GAAG,MAAM;AAAA,IAChC;AAAA,IAEA,sDAAC,UAAK,GAAE,0LAAyL;AAAA;AAClM;AAGM,IAAM,aAAa,CAAC,EAAE,OAAO,UAAU,MAC7C;AAAA,EAAC;AAAA;AAAA,IACA,SAAQ;AAAA,IACR,WAAU;AAAA,IACV,aAAU;AAAA,IACV,OAAM;AAAA,IACN,QAAO;AAAA,IACP,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,OAAO,EAAE,GAAG,WAAW,GAAG,MAAM;AAAA,IAChC;AAAA,IAEA,sDAAC,UAAK,GAAE,sLAAqL;AAAA;AAC9L;AAGM,IAAM,eAAe,CAAC,EAAE,OAAO,UAAU,MAC/C;AAAA,EAAC;AAAA;AAAA,IACA,SAAQ;AAAA,IACR,WAAU;AAAA,IACV,aAAU;AAAA,IACV,OAAM;AAAA,IACN,QAAO;AAAA,IACP,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,OAAO,EAAE,GAAG,WAAW,GAAG,MAAM;AAAA,IAChC;AAAA,IAEA,sDAAC,UAAK,GAAE,6LAA4L;AAAA;AACrM;AAGM,IAAM,eAAe,CAAC,EAAE,OAAO,UAAU,MAC/C;AAAA,EAAC;AAAA;AAAA,IACA,SAAQ;AAAA,IACR,WAAU;AAAA,IACV,aAAU;AAAA,IACV,OAAM;AAAA,IACN,QAAO;AAAA,IACP,MAAK;AAAA,IACL,eAAY;AAAA,IACZ,OAAO,EAAE,GAAG,WAAW,GAAG,MAAM;AAAA,IAChC;AAAA,IAEA,sDAAC,UAAK,GAAE,gaAA+Z;AAAA;AACxa;;;ADnEyB,IAAAA,sBAAA;AAL1B,IAAM,kBAAkB,CAAC,UAAgD;AACxE,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,SAAO,OAAO,UAAU,WAAW,GAAG,KAAK,OAAO;AACnD;AAEA,IAAM,cAAc,MAAM,6CAAC,gBAAa;AAExC,IAAM,eAAe,MAAM,6CAAC,iBAAc;AAE1C,IAAM,YAAY,MAAM,6CAAC,cAAW;AAEpC,IAAM,cAAc,MAAM,6CAAC,gBAAa;AAExC,IAAM,iBAAiB,CAAC;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf;AACD,MAAwB;AACvB,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAS,IAAI;AAEjD,QAAM,sBAAsB,MAAM;AACjC,QAAI,OAAO,kBAAkB,UAAU;AACtC,aAAO,GAAG,gBAAgB,YAAY;AAAA,IACvC;AACA,QAAI,OAAO,kBAAkB,UAAU;AACtC,aAAO,eAAe,QAAQ,aAAa,MAAM,YAAY,QAAQ;AAAA,IACtE;AACA,WAAO;AAAA,EACR;AAEA,QAAM,UAAU,MAAM;AACrB,QAAI,cAAc,cAAc;AAC/B,UAAI,mBAAmB,SAAS;AAC/B,eAAO,aAAa,6CAAC,gBAAa,IAAK,6CAAC,eAAY;AAAA,MACrD;AACA,aAAO,aAAa,6CAAC,eAAY,IAAK,6CAAC,gBAAa;AAAA,IACrD;AACA,QAAI,mBAAmB,UAAU;AAChC,aAAO,aAAa,6CAAC,eAAY,IAAK,6CAAC,aAAU;AAAA,IAClD;AACA,WAAO,aAAa,6CAAC,aAAU,IAAK,6CAAC,eAAY;AAAA,EAClD;AAEA,QAAM,iBAAiB,MAAM;AAC5B,QAAI,cAAc,cAAc;AAC/B,aAAO,mBAAmB,UAAU,iBAAiB;AAAA,IACtD;AACA,WAAO,mBAAmB,WAAW,kBAAkB;AAAA,EACxD;AAEA,QAAM,oBAAoB,MAAqB;AAC9C,QAAI,cAAc,cAAc;AAC/B,aAAO;AAAA,QACN,OAAO,aAAa,SAAS;AAAA,QAC7B,QAAQ;AAAA,MACT;AAAA,IACD;AACA,WAAO;AAAA,MACN,QAAQ,aAAa,SAAS;AAAA,MAC9B,OAAO;AAAA,IACR;AAAA,EACD;AAEA,QAAM,mBACL,cAAc,eAAe,mCAAmC;AACjE,QAAM,eAAe,YAAY,GAAG,gBAAgB,IAAI,SAAS,KAAK;AAEtE,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA,cAAc,gBAAgB,mBAAmB,UAAU,gBAAgB;AAAA,IAC3E,cAAc,cAAc,mBAAmB,WAAW,iBAAiB;AAAA,EAC5E,EACE,OAAO,OAAO,EACd,KAAK,GAAG;AAEV,QAAM,SAAS,oBAAoB;AACnC,QAAM,eAA8B;AAAA,IACnC,WAAW,cAAc,aAAc,aAAa,SAAS,QAAS;AAAA,IACtE,WAAW;AAAA,IACX,SAAS;AAAA,IACT,WAAW;AAAA,EACZ;AAEA,QAAM,iBAAiB,gBAAgB,YAAY;AACnD,QAAM,kBAAkB,gBAAgB,aAAa;AACrD,QAAM,eAA8B;AAAA,IACnC,OAAO;AAAA,IACP,QAAQ;AAAA,EACT;AAEA,SACC,8CAAC,SAAI,WAAW,cAAc,OAAO,cACpC;AAAA,kDAAC,SAAI,OAAO,kBAAkB,GAAG,WAAW,gBAC1C;AAAA,eACA,6CAAC,SAAI,WAAU,sBAAqB,OAAO,EAAE,SAAS,OAAO,GAC5D,uDAAC,QAAI,iBAAM,GACZ;AAAA,MAGD,6CAAC,SAAI,WAAU,uBAAsB,OAAO,cAC1C,UACF;AAAA,OACD;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,SAAS,MAAM,cAAc,CAAC,UAAU;AAAA,QACxC,WAAW,iBAAiB,eAAe,CAAC;AAAA,QAC5C,OAAO,aAAa,iBAAO;AAAA,QAE1B,kBAAQ;AAAA;AAAA,IACV;AAAA,KACD;AAEF;AAEA,IAAO,sBAAQ;;;AErIf,IAAAC,gBAAyE;AA4HH,IAAAC,sBAAA;AAzBtE,IAAM,uBAAuB,CAAC,gBAA2D;AA1GzF;AA2GC,MAAI,CAAC,aAAa;AACjB,WAAO,EAAE,OAAO,OAAO,KAAK,OAAO,qBAAqB,OAAO;AAAA,EAChE;AACA,MAAI,OAAO,gBAAgB,WAAW;AACrC,WAAO;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,qBAAqB,cAAc,OAAO;AAAA,IAC3C;AAAA,EACD;AACA,SAAO;AAAA,IACN,QAAO,iBAAY,UAAZ,YAAqB;AAAA,IAC5B,MAAK,iBAAY,QAAZ,YAAmB;AAAA,IACxB,sBAAqB,iBAAY,wBAAZ,YAAmC;AAAA,EACzD;AACD;AAMA,IAAM,uBAAuB;AAG7B,IAAM,gBAA8C,CAAC,EAAE,SAAS,MAAM,6EAAG,UAAS;AAElF,IAAM,gBAAgB,CAAC,UACtB,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AAEhD,IAAM,YAAY,CAAC,OAAiC,OAAe,aAAqB;AACvF,MAAI,UAAU,QAAW;AACxB,WAAO;AAAA,EACR;AAEA,MAAI,cAAc,KAAK,GAAG;AACzB,WAAQ,OAAO,WAAW,KAAK,IAAI,MAAO;AAAA,EAC3C;AAEA,SAAO,OAAO,KAAK;AACpB;AAEA,IAAM,aAAa,CAAC,UAAoB,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC;AAE5E,IAAM,qBAAqB,CAC1B,OACA,gBACK,gBAAgB,eAAe,MAAM,UAAU,MAAM;AAE3D,IAAM,QAAQ,CAAC,OAAe,KAAa,QAAgB,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAE7F,IAAM,wBAAwB,CAC7B,QACA,cACyD;AACzD,MAAI,CAAC,QAAQ;AACZ,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,WAAW,OAAO,WAAW,aAAa,OAAO,EAAE,OAAO,UAAU,CAAC,IAAI;AAC/E,SAAO,YAAY,CAAC;AACrB;AAEA,IAAM,4BAA4B,CACjC,YACA,cACkD;AAClD,MAAI,CAAC,YAAY;AAChB,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,WAAW,OAAO,eAAe,aAAa,WAAW,EAAE,OAAO,UAAU,CAAC,IAAI;AACvF,SAAO,YAAY,CAAC;AACrB;AAEA,IAAM,iBAAoC,CAAC,UAAU;AACpD,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA,cAAc;AAAA,IACd,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACZ,IAAI;AACJ,QAAM,sBAAsB,oCAAgB,WAAW,aAAa;AACpE,QAAM,cAAU,sBAAuB,IAAI;AAC3C,QAAM,eAAW,sBAAiB,CAAC,CAAC;AACpC,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,CAAC;AACpD,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAwB,IAAI;AACtE,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAwB,IAAI;AACpE,QAAM,CAAC,2BAA2B,4BAA4B,QAAI,wBAAwB,IAAI;AAC9F,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAmB,CAAC,CAAC;AAE/C,QAAM,qBAAiB,uBAAQ,MAAM,sBAAsB,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC;AAC1F,QAAM,yBAAqB;AAAA,IAC1B,MAAM,0BAA0B,YAAY,KAAK;AAAA,IACjD,CAAC,YAAY,KAAK;AAAA,EACnB;AAEA,QAAM,aAAS;AAAA,IACd,MACC,cAAAC,QAAM,SAAS,QAAQ,QAAQ,EAAE;AAAA,MAChC,cAAAA,QAAM;AAAA,IACP;AAAA,IACD,CAAC,QAAQ;AAAA,EACV;AAEA,QAAM,YAAY,KAAK,IAAI,GAAG,gBAAgB,KAAK,IAAI,GAAG,OAAO,SAAS,CAAC,IAAI,WAAW;AAE1F,QAAM,kBAAc;AAAA,IACnB,CAAC,UAAe;AAlOlB;AAkOqB,wBAAU,YAAO,KAAK,MAAZ,mBAAe,MAAM,KAAK,WAAW,CAAC;AAAA;AAAA,IACnE,CAAC,QAAQ,SAAS;AAAA,EACnB;AAEA,QAAM,kBAAc;AAAA,IACnB,CAAC,UAAe;AAvOlB;AAuOqB,wBAAU,YAAO,KAAK,MAAZ,mBAAe,MAAM,KAAK,WAAW,SAAS;AAAA;AAAA,IAC3E,CAAC,QAAQ,SAAS;AAAA,EACnB;AAEA,QAAM,uBAAmB;AAAA,IACxB,CAAC,cAAwB;AACxB,UAAI,CAAC,aAAa,CAAC,UAAU,QAAQ;AACpC,eAAO;AAAA,MACR;AAEA,YAAM,aAAa,CAAC,GAAG,SAAS;AAChC,YAAM,OAAO,YAAY,WAAW,OAAO,CAAC,KAAK,SAAS,MAAM,MAAM,CAAC;AACvE,YAAM,gBAAgB,WAAW,UAAU,CAAC,SAAS,OAAO,CAAC;AAC7D,UAAI,kBAAkB,IAAI;AACzB,mBAAW,aAAa,KAAK;AAAA,MAC9B;AAEA,aAAO,WAAW,IAAI,CAAC,MAAM,UAAU;AAEtC,YAAI,QAAQ,GAAG;AACd,iBAAO;AAAA,QACR;AAEA,YAAI,OAAO,YAAY,KAAK,GAAG;AAC9B,iBAAO;AAAA,QACR;AACA,eAAO,MAAM,MAAM,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC;AAAA,MAC1D,CAAC;AAAA,IACF;AAAA,IACA,CAAC,aAAa,aAAa,SAAS;AAAA,EACrC;AAEA,QAAM,wBAAoB;AAAA,IACzB,CAAC,aAAwB;AACxB,UAAI,CAAC,aAAa,CAAC,OAAO,QAAQ;AACjC,eAAO,CAAC;AAAA,MACT;AAEA,WAAI,qCAAU,YAAW,OAAO,QAAQ;AACvC,cAAM,gBAAgB,SAAS,OAAO,CAAC,KAAK,SAAS,MAAM,MAAM,CAAC;AAClE,YAAI,gBAAgB,GAAG;AACtB,iBAAO,iBAAiB,SAAS,IAAI,CAAC,SAAU,OAAO,gBAAiB,SAAS,CAAC;AAAA,QACnF;AAAA,MACD;AAEA,YAAM,gBAAgB,OAAO;AAAA,QAAI,CAAC,UAAO;AApR5C;AAqRI,4BAAU,WAAM,MAAM,SAAZ,YAAoB,MAAM,MAAM,aAAa,WAAW,EAAE;AAAA;AAAA,MACrE;AACA,YAAM,WAAW,cACf,OAAO,CAAC,SAAS,QAAQ,CAAC,EAC1B,OAAO,CAAC,KAAK,SAAS,MAAM,MAAM,CAAC;AACrC,YAAM,aAAa,cAAc,OAAO,CAAC,SAAS,OAAO,CAAC,EAAE;AAC5D,YAAM,eAAe,aAAa,KAAK,IAAI,IAAI,YAAY,YAAY,UAAU,IAAI;AAErF,aAAO;AAAA,QACN,cAAc;AAAA,UAAI,CAAC,MAAM,UACxB,MAAM,QAAQ,IAAI,OAAO,cAAc,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC;AAAA,QAC9E;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAC,aAAa,aAAa,kBAAkB,QAAQ,SAAS;AAAA,EAC/D;AAEA,QAAM,kBAAc;AAAA,IACnB,CAAC,WAAqB,SAAS,SAAS;AACvC,YAAM,aAAa,iBAAiB,SAAS;AAC7C,eAAS,UAAU;AACnB,eAAS,UAAU;AACnB,UAAI,QAAQ;AACX,6CAAW,WAAW,UAAU;AAAA,MACjC;AAAA,IACD;AAAA,IACA,CAAC,kBAAkB,QAAQ;AAAA,EAC5B;AAEA,+BAAU,MAAM;AACf,UAAM,OAAO,QAAQ;AACrB,QAAI,CAAC,MAAM;AACV,aAAO;AAAA,IACR;AAEA,UAAM,WAAW,MAAM;AACtB,uBAAiB,wBAAwB,eAAe,KAAK,cAAc,KAAK,YAAY;AAAA,IAC7F;AACA,aAAS;AAET,UAAM,WAAW,IAAI,eAAe,QAAQ;AAC5C,aAAS,QAAQ,IAAI;AACrB,WAAO,MAAM,SAAS,WAAW;AAAA,EAClC,GAAG,CAAC,mBAAmB,CAAC;AAExB,+BAAU,MAAM;AACf,aAAS,CAAC,aAAa;AACtB,YAAM,YAAY,kBAAkB,QAAQ;AAC5C,eAAS,UAAU;AACnB,aAAO;AAAA,IACR,CAAC;AAAA,EACF,GAAG,CAAC,iBAAiB,CAAC;AAEtB,QAAM,qBAAiB;AAAA,IACtB,CAAC,aAAuB,OAAe,UAAkB;AACxD,YAAM,YAAY,CAAC,GAAG,WAAW;AACjC,YAAM,kBAAkB,YAAY,KAAK,KAAK;AAC9C,YAAM,mBAAmB,YAAY,QAAQ,CAAC,KAAK;AAEnD,YAAM,UAAU,kBAAkB,IAAI,YAAY,KAAK;AACvD,YAAM,WAAW,mBAAmB,IAAI,YAAY,QAAQ,CAAC;AAC7D,YAAM,UAAU,YAAY,KAAK;AACjC,YAAM,WAAW,YAAY,QAAQ,CAAC;AAEtC,YAAM,WAAW,KAAK,IAAI,UAAU,YAAY,KAAK,GAAG,YAAY,QAAQ,CAAC,IAAI,QAAQ;AACzF,YAAM,WAAW,KAAK,IAAI,UAAU,YAAY,KAAK,GAAG,YAAY,QAAQ,CAAC,IAAI,QAAQ;AACzF,YAAM,YAAY,MAAM,OAAO,UAAU,QAAQ;AAEjD,gBAAU,KAAK,IAAI,YAAY,KAAK,IAAI;AACxC,gBAAU,QAAQ,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI;AAChD,aAAO,iBAAiB,SAAS;AAAA,IAClC;AAAA,IACA,CAAC,aAAa,aAAa,gBAAgB;AAAA,EAC5C;AAEA,QAAM,4BAAwB;AAAA,IAC7B,CAAC,aAAuB,YAAoB,UAAkB;AAC7D,UAAI,YAAY,UAAU,KAAK,KAAK,QAAQ,KAAK,aAAa,GAAG;AAChE,eAAO,aAAa;AAAA,MACrB;AACA,UAAI,YAAY,aAAa,CAAC,KAAK,KAAK,QAAQ,KAAK,aAAa,YAAY,SAAS,GAAG;AACzF,eAAO,aAAa;AAAA,MACrB;AACA,aAAO;AAAA,IACR;AAAA,IACA,CAAC;AAAA,EACF;AAEA,QAAM,iBAAa;AAAA,IAClB,CAAC,OAAe,OAAe,SAAS,SAAS;AAChD,YAAM,cAAc,sBAAsB,SAAS,SAAS,OAAO,KAAK;AACxE,kBAAY,eAAe,SAAS,SAAS,aAAa,KAAK,GAAG,MAAM;AAAA,IACzE;AAAA,IACA,CAAC,uBAAuB,gBAAgB,WAAW;AAAA,EACpD;AAEA,QAAM,cAAc,CAAC,OAAe,UAA6C;AAChF,QAAI,OAAO,KAAK,EAAE,MAAM,cAAc,SAAS,OAAO,QAAQ,CAAC,EAAE,MAAM,cAAc,OAAO;AAC3F;AAAA,IACD;AAEA,UAAM,eAAe;AACrB,UAAM,gBAAgB,mBAAmB,OAAO,mBAAmB;AACnE,UAAM,aAAa,CAAC,GAAG,SAAS,OAAO;AACvC,QAAI,cAAc;AAClB,QAAI,cAA6B;AAEjC,qBAAiB,KAAK;AACtB,mDAAgB,WAAW,UAAU;AAErC,UAAM,oBAAoB,CAAC,cAA4B;AACtD,YAAM,QAAQ,mBAAmB,WAAW,mBAAmB,IAAI;AACnE,UAAI,UAAU,GAAG;AAChB;AAAA,MACD;AAEA,UAAI,gBAAgB,MAAM;AACzB,sBAAc,sBAAsB,YAAY,OAAO,KAAK;AAAA,MAC7D;AAEA,oBAAc,eAAe,YAAY,aAAa,KAAK;AAC3D,UAAI,CAAC,MAAM;AACV,oBAAY,aAAa,IAAI;AAAA,MAC9B;AAAA,IACD;AAEA,UAAM,kBAAkB,MAAM;AAC7B,eAAS,oBAAoB,eAAe,iBAAiB;AAC7D,eAAS,oBAAoB,aAAa,eAAe;AACzD,uBAAiB,IAAI;AACrB,UAAI,MAAM;AACT,oBAAY,aAAa,IAAI;AAAA,MAC9B;AACA,YAAM,eAAe,WAAW,SAAS,OAAO;AAChD,YAAM,mBAAmB,SAAS,QAAQ,IAAI,CAAC,SAAS,QAAQ,CAAC;AACjE,YAAM,iBAAiB,WAAW,IAAI,CAAC,SAAS,QAAQ,CAAC;AACzD,UAAI,iBAAiB,KAAK,CAAC,GAAG,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG;AAC7D,iDAAa,kBAAkB;AAAA,MAChC;AACA,iDAAc;AAAA,IACf;AAEA,aAAS,iBAAiB,eAAe,iBAAiB;AAC1D,aAAS,iBAAiB,aAAa,eAAe;AAAA,EACvD;AAEA,QAAM,iBAAiB,CAAC,OAAe,kBAA0B;AAvalE;AAwaE,UAAM,YAAY,CAAC,GAAG,SAAS,OAAO;AAEtC,QAAI,UAAU,KAAK,IAAI,GAAG;AACzB,gBAAU,aAAa,KAAK,UAAU,KAAK;AAC3C,gBAAU,KAAK,IAAI;AAAA,IACpB,OAAO;AACN,YAAM,eAAe,kBAAkB;AACvC,YAAM,eACL,kBAAa,KAAK,MAAlB,YACA,UAAU,OAAO,KAAK,EAAE,MAAM,aAAa,WAAW,YAAY,OAAO,MAAM;AAChF,YAAM,eAAe,MAAM,aAAa,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC;AAC9E,gBAAU,KAAK,IAAI;AACnB,gBAAU,aAAa,IAAI,KAAK,IAAI,GAAG,UAAU,aAAa,IAAI,UAAU,KAAK,CAAC;AAAA,IACnF;AAEA,gBAAY,SAAS;AACrB,UAAM,eAAe,WAAW,SAAS,OAAO;AAChD,UAAM,mBAAmB,SAAS,QAAQ,IAAI,CAAC,SAAS,QAAQ,CAAC;AACjE,6CAAa,kBAAkB;AAC/B,+CAAc;AAAA,EACf;AAEA,QAAM,aAAa,MAAM;AACxB,UAAM,oBAAoB,SAAS,QAAQ,IAAI,CAAC,SAAS,QAAQ,CAAC;AAClE,UAAM,YAAY,kBAAkB;AACpC,gBAAY,SAAS;AACrB,UAAM,eAAe,WAAW,SAAS,OAAO;AAChD,UAAM,mBAAmB,SAAS,QAAQ,IAAI,CAAC,SAAS,QAAQ,CAAC;AACjE,QAAI,iBAAiB,KAAK,CAAC,GAAG,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG;AAChE,+CAAa,kBAAkB;AAAA,IAChC;AACA,+CAAc;AAAA,EACf;AAEA,QAAM,YAA2B;AAAA,IAChC,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe,wBAAwB,eAAe,QAAQ;AAAA,IAC9D,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,GAAG,eAAe;AAAA,IAClB,GAAG;AAAA,EACJ;AAEA,QAAM,uBAAuB,CAC5B,cACA,YACA,cACI;AA7dN;AA8dE,UAAM,QAAQ,OAAO,UAAU;AAC/B,UAAM,SAAS,qBAAqB,+BAAO,MAAM,WAAW;AAC5D,UAAM,YAAY,cAAc,UAAU,OAAO,QAAQ,OAAO;AAEhE,QAAI,CAAC,aAAa,OAAO,wBAAwB,OAAO;AACvD,aAAO;AAAA,IACR;AAEA,UAAM,gBAAgB,cAAc,UAAU,aAAa,IAAI,aAAa;AAC5E,UAAM,gBAAe,WAAM,UAAU,MAAhB,YAAqB,MAAM;AAChD,UAAM,wBAAuB,WAAM,aAAa,MAAnB,YAAwB,MAAM;AAG3D,QAAI,eAAe,qBAAqB;AACvC,aAAO;AAAA,IACR;AAGA,UAAM,OACL,wBAAwB,eACrB,cAAc,UACb,eACA,gBACD,cAAc,UACb,aACA;AAEL,UAAM,eAAe,wBAAwB;AAC7C,UAAM,eAAe,OAAO,wBAAwB;AACpD,UAAM,sBAAsB,iBAAiB,gBAAgB,kBAAkB;AAC/E,UAAM,UAAU,gBAAgB,sBAAsB,IAAI;AAC1D,UAAM,gBAAgB,gBAAgB,sBAAsB,SAAS;AAErE,UAAM,cACL,wBAAwB,eACrB,cAAc,UACb,yCACA,yCACD,cAAc,UACb,yCACA;AAEL,WACC;AAAA,MAAC;AAAA;AAAA,QACA,cAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS,CAAC,UAAU;AACnB,gBAAM,gBAAgB;AACtB,yBAAe,YAAY,aAAa;AAAA,QACzC;AAAA,QACA,eAAe,CAAC,UAAU;AACzB,gBAAM,gBAAgB;AAAA,QACvB;AAAA,QACA,OAAO;AAAA,UACN,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ,eAAe,KAAK;AAAA,UAC5B,OAAO,eAAe,KAAK;AAAA,UAC3B,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAW;AAAA,UACX,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,QACD;AAAA,QACA,MAAK;AAAA,QACL,cAAc,CAAC,MAAM;AACpB,YAAE,cAAc,MAAM,aAAa;AACnC,YAAE,cAAc,MAAM,QAAQ;AAC9B,uCAA6B,UAAU;AAAA,QACxC;AAAA,QACA,cAAc,CAAC,MAAM;AACpB,YAAE,cAAc,MAAM,aAAa;AACnC,YAAE,cAAc,MAAM,QAAQ;AAC9B,uCAA6B,IAAI;AAAA,QAClC;AAAA,QAEA,uDAAC,QAAK;AAAA;AAAA,IACP;AAAA,EAEF;AAEA,QAAM,gBAAgB,CAAC,WAAW,mBAAmB,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AAExF,SACC,6CAAC,SAAI,WAAW,eAAe,KAAK,SAAS,OAAO,WAClD,iBAAO,IAAI,CAAC,OAAO,UAAU;AA1jBjC;AA2jBI,UAAM,WAAW,MAAM,KAAK,KAAK;AACjC,UAAM,yBAAwB,WAAM,KAAK,MAAX,YAAgB,MAAM;AACpD,UAAM,6BAA4B,WAAM,QAAQ,CAAC,MAAf,YAAoB,MAAM;AAC5D,UAAM,iBAAiB,wBAAwB;AAC/C,UAAM,wBAAuB,WAAM,MAAM,oBAAZ,YAA+B;AAC5D,UAAM,sBAAsB,CAAC,YAAY,CAAC;AAE1C,WACC,8CAAC,cAAAA,QAAM,UAAN,EACA;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,WACC,CAAC,mBAAmB,OAAO,MAAM,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAC1E;AAAA,UAED,OAAO;AAAA,YACN,YAAY,QAAQ,IAAI,SAAS;AAAA,YACjC,WAAW;AAAA,YACX,MAAM,QAAO,WAAM,KAAK,MAAX,YAAgB,CAAC;AAAA,YAC9B,WAAW;AAAA,YACX,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,WACC,8BAA8B,QAAQ,4BAA4B;AAAA,YACnE,YACC,kBAAkB,OAAO,+CAA+C;AAAA,YACzE,GAAG,eAAe;AAAA,YAClB,GAAG,MAAM,MAAM;AAAA,UAChB;AAAA,UAEC,iCACA;AAAA,YAAC;AAAA;AAAA,cACA,OAAO;AAAA,gBACN,WAAW;AAAA,gBACX,SAAS,WAAW,SAAS;AAAA,gBAC7B,QAAQ;AAAA,gBACR,WAAW;AAAA,gBACX,WAAW;AAAA,gBACX,WAAU,WAAM,KAAK,MAAX,YAAgB,KAAK,KAAK,IAAI;AAAA,gBACxC,OAAO;AAAA,cACR;AAAA,cAEC,gBAAM,MAAM;AAAA;AAAA,UACd;AAAA;AAAA,MAEF;AAAA,MAEC,QAAQ,OAAO,SAAS,KACxB;AAAA,QAAC;AAAA;AAAA,UACA,oBAAkB;AAAA,UAClB,WAAW,mBAAmB;AAAA,UAC9B,eAAe,MAAM;AACpB,yEAAuB;AACvB,uBAAW;AAAA,UACZ;AAAA,UACA,WAAW,CAAC,UAAU;AACrB,kBAAM,OAAO,MAAM,WAAW,KAAK;AACnC,kBAAM,eACL,wBAAwB,eACrB,EAAE,WAAW,CAAC,MAAM,YAAY,KAAK,IACrC,EAAE,SAAS,CAAC,MAAM,WAAW,KAAK;AACtC,kBAAM,QAAQ,aAAa,MAAM,GAAgC;AACjE,gBAAI,UAAU,QAAW;AACxB,oBAAM,eAAe;AACrB,yBAAW,OAAO,KAAK;AAAA,YACxB;AAAA,UACD;AAAA,UACA,eAAe,CAAC,UAAU,YAAY,OAAO,KAAK;AAAA,UAClD,gBAAgB,MAAM,gBAAgB,KAAK;AAAA,UAC3C,gBAAgB,MAAM,gBAAgB,IAAI;AAAA,UAC1C,MAAK;AAAA,UACL,OAAM;AAAA,UACN,OAAO;AAAA,YACN,YAAY;AAAA,YACZ,YACC,iBAAiB,SAAS,kBAAkB,QAAQ,YAAY;AAAA,YACjE,WAAW;AAAA,YACX,QAAQ,wBAAwB,eAAe,eAAe;AAAA,YAC9D,SAAS;AAAA,YACT,MAAM,OAAO,WAAW;AAAA,YACxB,gBAAgB;AAAA,YAChB,YACC,QAAQ,OAAM,WAAM,KAAK,MAAX,YAAgB,MAAM,KAAK,wBAAwB,eAC9D,CAAC,cACD;AAAA,YACJ,WACC,QAAQ,OAAM,WAAM,KAAK,MAAX,YAAgB,MAAM,KAAK,wBAAwB,aAC9D,CAAC,cACD;AAAA,YACJ,SAAS;AAAA,YACT,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,QAAQ,iBAAiB,IAAI;AAAA,YAC7B,GAAG,eAAe;AAAA,UACnB;AAAA,UACA,UAAU;AAAA,UAGT;AAAA,0BACA;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO;AAAA,kBACN,YAAY;AAAA,kBACZ,OACC,iBAAiB,SAAS,kBAAkB,QAAQ,YAAY;AAAA,kBACjE,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,gBAAgB;AAAA,kBAChB,eAAe;AAAA,kBACf,YAAY;AAAA,kBACZ,YAAY;AAAA,gBACb;AAAA,gBAEC;AAAA;AAAA,YACF,IAEA;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO;AAAA,kBACN,YACC,iBAAiB,SAAS,kBAAkB,QAAQ,YAAY;AAAA,kBACjE,cAAc;AAAA,kBACd,QAAQ,wBAAwB,eAAe,KAAK;AAAA,kBACpD,YAAY;AAAA,kBACZ,OAAO,wBAAwB,eAAe,IAAI;AAAA,gBACnD;AAAA;AAAA,YACD;AAAA,YAIA,CAAC,kBACD;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO;AAAA,kBACN,UAAU;AAAA,kBACV,KAAK;AAAA,kBACL,MAAM;AAAA,kBACN,WAAW;AAAA,kBACX,SAAS;AAAA,kBACT,eAAe,wBAAwB,eAAe,QAAQ;AAAA,kBAC9D,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,KAAK;AAAA,kBACL,QAAQ;AAAA,gBACT;AAAA,gBAEA;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACA,OAAO;AAAA,wBACN,YAAY;AAAA,wBACZ,SAAS;AAAA,wBACT,gBAAgB;AAAA,wBAChB,WAAW,wBAAwB,eAAe,SAAY;AAAA,wBAC9D,UAAU,wBAAwB,eAAe,KAAK;AAAA,sBACvD;AAAA,sBAEC,+BAAqB,OAAO,OAAO,OAAO;AAAA;AAAA,kBAC5C;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACA,OAAO;AAAA,wBACN,YAAY;AAAA,wBACZ,SAAS;AAAA,wBACT,gBAAgB;AAAA,wBAChB,WAAW,wBAAwB,eAAe,SAAY;AAAA,wBAC9D,UAAU,wBAAwB,eAAe,KAAK;AAAA,sBACvD;AAAA,sBAEC,+BAAqB,OAAO,QAAQ,GAAG,KAAK;AAAA;AAAA,kBAC9C;AAAA;AAAA;AAAA,YACD;AAAA,YAIA,kBACA;AAAA,cAAC;AAAA;AAAA,gBACA,OAAO;AAAA,kBACN,UAAU;AAAA,kBACV,KACC,wBAAwB,eACrB,QACA,uBACC,IACA;AAAA,kBACL,QACC,wBAAwB,eACrB,SACA,2BACC,IACA;AAAA,kBACL,MACC,wBAAwB,eACrB,uBACC,IACA,SACD;AAAA,kBACJ,OACC,wBAAwB,eACrB,2BACC,IACA,SACD;AAAA,kBACJ,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,QAAQ;AAAA,kBACR,WACC,wBAAwB,eACrB,aAAa,uBAAuB,QAAQ,MAAM,YAClD,mBAAmB,uBAAuB,QAAQ,MAAM;AAAA,gBAC7D;AAAA,gBAEE,iBAAM;AACP,wBAAM,UAAU;AAChB,wBAAM,cAAc,UAAU,QAAQ,QAAQ;AAC9C,wBAAM,cAAc,OAAO,WAAW;AACtC,wBAAM,SAAS,qBAAqB,2CAAa,MAAM,WAAW;AAClE,wBAAM,YAAY,UAAU,OAAO,QAAQ,OAAO;AAElD,sBAAI,CAAC,aAAa,OAAO,wBAAwB,OAAO;AACvD,2BAAO;AAAA,kBACR;AAEA,wBAAM,aACL,wBAAwB,eACrB,uBACC,gBACA,eACD,uBACC,eACA;AAEL,wBAAM,gBAAgB,uBAAuB,QAAQ,IAAI;AACzD,wBAAM,eAAe,wBAAwB;AAE7C,wBAAM,cACL,wBAAwB,eACrB,uBACC,yCACA,yCACD,uBACC,yCACA;AAEL,yBACC;AAAA,oBAAC;AAAA;AAAA,sBACA,cAAY;AAAA,sBACZ,OAAO;AAAA,sBACP,SAAS,CAAC,UAAU;AACnB,8BAAM,gBAAgB;AACtB,uCAAe,aAAa,aAAa;AAAA,sBAC1C;AAAA,sBACA,eAAe,CAAC,UAAU;AACzB,8BAAM,gBAAgB;AAAA,sBACvB;AAAA,sBACA,OAAO;AAAA,wBACN,YAAY;AAAA,wBACZ,YAAY;AAAA,wBACZ,QAAQ;AAAA,wBACR,cAAc;AAAA,wBACd,OAAO;AAAA,wBACP,QAAQ;AAAA,wBACR,SAAS;AAAA,wBACT,QAAQ,eAAe,KAAK;AAAA,wBAC5B,OAAO,eAAe,KAAK;AAAA,wBAC3B,gBAAgB;AAAA,wBAChB,SAAS;AAAA,wBACT,UAAU;AAAA,wBACV,WAAW;AAAA,wBACX,YAAY;AAAA,sBACb;AAAA,sBACA,MAAK;AAAA,sBACL,cAAc,CAAC,MAAM;AACpB,0BAAE,cAAc,MAAM,aAAa;AACnC,0BAAE,cAAc,MAAM,QAAQ;AAC9B,qDAA6B,WAAW;AAAA,sBACzC;AAAA,sBACA,cAAc,CAAC,MAAM;AACpB,0BAAE,cAAc,MAAM,aAAa;AACnC,0BAAE,cAAc,MAAM,QAAQ;AAC9B,qDAA6B,IAAI;AAAA,sBAClC;AAAA,sBAEA,uDAAC,cAAW;AAAA;AAAA,kBACb;AAAA,gBAEF,GAAG;AAAA;AAAA,YACJ;AAAA;AAAA;AAAA,MAEF;AAAA,SAtRmB,KAwRrB;AAAA,EAEF,CAAC,GACF;AAEF;AAEA,eAAe,QAAQ;AAEvB,IAAO,mBAAQ;;;ACj1BN,IAAAC,sBAAA;AANT,IAAM,cAAc,CAAC,UAA4B;AAChD,QAAM,EAAE,OAAO,UAAU,WAAW,OAAO,YAAY,OAAO,IAAI;AAClE,QAAM,UAAU,8BAAY;AAG5B,MAAI,CAAC,UAAU;AACd,WAAO,6EAAG,mBAAQ;AAAA,EACnB;AAKA,QAAM,qBAAqB,CAAC,MAAwB;AACnD,QAAI,UAAU;AACb,QAAE,gBAAgB;AAClB,QAAE,eAAe;AAAA,IAClB;AAAA,EACD;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,gBAAgB;AAAA,MAEf;AAAA,sBAAc,UAAU,6CAAC,gBAAa,WAAU,qBAAoB;AAAA,QACrE,6CAAC,UAAK,WAAU,sBAAsB,mBAAQ;AAAA,QAC7C,cAAc,WAAW,6CAAC,gBAAa,WAAU,qBAAoB;AAAA;AAAA;AAAA,EACvE;AAEF;AAEA,IAAO,sBAAQ;;;AC3Cf,IAAAC,gBAA0F;AAoUrF,IAAAC,sBAAA;AAtQL,IAAM,mBAAiC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAG3E,SAAS,cAAc,OAA2B;AACjD,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,SAAS,IAAK,QAAO;AACzB,MAAI,SAAS,IAAK,QAAO;AACzB,MAAI,SAAS,IAAK,QAAO;AACzB,SAAO;AACR;AAGA,SAAS,uBACR,OACA,WACA,cACI;AACJ,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC9B,UAAM,MAAM;AACZ,QAAI,IAAI,SAAS,MAAM,OAAW,QAAO,IAAI,SAAS;AACtD,UAAM,aAAa,iBAAiB,QAAQ,SAAS;AACrD,aAAS,IAAI,aAAa,GAAG,KAAK,GAAG,KAAK;AACzC,YAAM,KAAK,iBAAiB,CAAC;AAC7B,UAAI,IAAI,EAAE,MAAM,OAAW,QAAO,IAAI,EAAE;AAAA,IACzC;AACA,aAAS,IAAI,aAAa,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAC9D,YAAM,KAAK,iBAAiB,CAAC;AAC7B,UAAI,IAAI,EAAE,MAAM,OAAW,QAAO,IAAI,EAAE;AAAA,IACzC;AACA,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAGA,SAAS,cACR,QACA,WACmB;AACnB,MAAI,CAAC,OAAQ,QAAO,CAAC,GAAG,CAAC;AACzB,MAAI,MAAM,QAAQ,MAAM,GAAG;AAC1B,UAAM,IAAI,uBAAuB,OAAO,CAAC,GAAG,WAAW,CAAC;AACxD,UAAM,IAAI,uBAAuB,OAAO,CAAC,GAAG,WAAW,CAAC;AACxD,WAAO,CAAC,GAAG,CAAC;AAAA,EACb;AACA,QAAM,IAAI,uBAAuB,QAAQ,WAAW,CAAC;AACrD,SAAO,CAAC,GAAG,CAAC;AACb;AAEA,IAAM,UAAU,CAAe,UAA2B;AACzD,QAAM;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AAEJ,QAAM,cAAU,sBAAuB,IAAI;AAC3C,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAiB,CAAC;AAC9D,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAiC,CAAC,CAAC;AACjF,QAAM,eAAW,sBAAiC,oBAAI,IAAI,CAAC;AAG3D,QAAM,sBAAoC,uBAAQ,MAAM;AACvD,QAAI,MAAO,QAAO;AAClB,QAAI,CAAC,SAAU,QAAO,CAAC;AACvB,WAAO,cAAAC,QAAM,SAAS,QAAQ,QAAQ,EAAE,IAAI,CAAC,OAAO,UAAU;AA1IhE;AA2IG,UAAI,cAAAA,QAAM,eAAe,KAAK,GAAG;AAChC,cAAM,OAAM,WAAM,QAAN,YAAa,gBAAgB,KAAK;AAC9C,eAAO;AAAA,UACN;AAAA,UACA,UAAU;AAAA,QACX;AAAA,MACD;AACA,aAAO;AAAA,QACN,KAAK,gBAAgB,KAAK;AAAA,QAC1B,UAAU;AAAA,MACX;AAAA,IACD,CAAC;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,CAAC;AAGpB,QAAM,wBAAoB,uBAAQ,MAAM,cAAc,cAAc,GAAG,CAAC,cAAc,CAAC;AAGvF,QAAM,sBAAkB,uBAAQ,MAAM;AACrC,UAAM,QAAQ,uBAAuB,SAAS,mBAAmB,CAAC;AAClE,WAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AAAA,EACrC,GAAG,CAAC,SAAS,iBAAiB,CAAC;AAE/B,QAAM,CAAC,eAAe,WAAW,QAAI;AAAA,IACpC,MAAM,cAAc,QAAQ,iBAAiB;AAAA,IAC7C,CAAC,QAAQ,iBAAiB;AAAA,EAC3B;AAGA,+BAAU,MAAM;AACf,QAAI,CAAC,QAAQ,QAAS;AACtB,UAAM,WAAW,IAAI,eAAe,CAAC,YAAY;AAChD,iBAAW,SAAS,SAAS;AAC5B,cAAM,QAAQ,MAAM,YAAY;AAChC,YAAI,QAAQ,GAAG;AACd,4BAAkB,KAAK;AAAA,QACxB;AAAA,MACD;AAAA,IACD,CAAC;AACD,aAAS,QAAQ,QAAQ,OAAO;AAChC,WAAO,MAAM,SAAS,WAAW;AAAA,EAClC,GAAG,CAAC,CAAC;AAGL,QAAM,mBAAe,2BAAY,MAAM;AACtC,QAAI,YAAY;AAChB,UAAM,aAAqC,CAAC;AAE5C,aAAS,QAAQ,QAAQ,CAAC,IAAI,QAAQ;AACrC,UAAI,IAAI;AACP,cAAM,SAAS,OAAO,GAAG;AACzB,cAAM,IAAI,GAAG;AACb,YAAI,IAAI,GAAG;AACV,qBAAW,MAAM,IAAI;AACrB,cAAI,gBAAgB,MAAM,MAAM,GAAG;AAClC,wBAAY;AAAA,UACb;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAED,QAAI,WAAW;AACd,yBAAmB,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,WAAW,EAAE;AAAA,IAC1D;AAAA,EACD,GAAG,CAAC,eAAe,CAAC;AAEpB,qCAAgB,MAAM;AACrB,UAAM,SAAS,sBAAsB,MAAM;AAC1C,mBAAa;AAAA,IACd,CAAC;AACD,WAAO,MAAM,qBAAqB,MAAM;AAAA,EACzC,GAAG,CAAC,YAAY,CAAC;AAGjB,+BAAU,MAAM;AACf,QAAI,CAAC,MAAO;AACZ,UAAM,WAAW,IAAI,eAAe,MAAM;AACzC,mBAAa;AAAA,IACd,CAAC;AAED,aAAS,QAAQ,QAAQ,CAAC,OAAO;AAChC,UAAI,GAAI,UAAS,QAAQ,EAAE;AAAA,IAC5B,CAAC;AAED,WAAO,MAAM,SAAS,WAAW;AAAA,EAClC,GAAG,CAAC,OAAO,cAAc,eAAe,CAAC;AAGzC,QAAM,kBAAc,uBAAQ,MAAM;AACjC,QAAI,kBAAkB,EAAG,QAAO;AAChC,UAAM,YAAY,kBAAkB,KAAK;AACzC,WAAO,KAAK,IAAI,IAAI,iBAAiB,YAAY,eAAe;AAAA,EACjE,GAAG,CAAC,gBAAgB,iBAAiB,aAAa,CAAC;AAGnD,QAAM,EAAE,aAAa,iBAAiB,iBAAiB,QAAI,uBAAQ,MAAM;AACxE,UAAM,aAAa,IAAI,MAAM,eAAe,EAAE,KAAK,CAAC;AACpD,UAAM,aAA6C,CAAC;AAEpD,UAAM,eAAe,gBAAgB,IAAI,CAAC,SAAS;AA9OrD;AAgPG,YAAM,KAAI,gBAAK,WAAL,YAAe,gBAAgB,OAAO,KAAK,GAAG,CAAC,MAA/C,YAAoD;AAG9D,UAAI,YAAY;AAChB,UAAI,OAAO,KAAK,WAAW,YAAY,KAAK,UAAU,KAAK,KAAK,SAAS,iBAAiB;AACzF,oBAAY,KAAK,MAAM,KAAK,MAAM;AAAA,MACnC,OAAO;AACN,YAAI,OAAO,WAAW,CAAC;AACvB,iBAAS,IAAI,GAAG,IAAI,iBAAiB,KAAK;AACzC,cAAI,WAAW,CAAC,IAAI,MAAM;AACzB,mBAAO,WAAW,CAAC;AACnB,wBAAY;AAAA,UACb;AAAA,QACD;AAAA,MACD;AAEA,YAAM,OAAO,aAAa,cAAc;AACxC,YAAM,MAAM,WAAW,SAAS;AAGhC,iBAAW,SAAS,KAAK,KAAK,IAAI,IAAI,cAAc;AAEpD,iBAAW,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,UAAU,CAAC;AAEpD,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,MACT;AAAA,IACD,CAAC;AAED,UAAM,SAAS,KAAK,IAAI,GAAG,GAAG,UAAU;AAExC,WAAO;AAAA,MACN,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,IACnB;AAAA,EACD,GAAG,CAAC,iBAAiB,iBAAiB,eAAe,aAAa,aAAa,eAAe,CAAC;AAG/F,QAAM,oBAAgB,sBAAe,EAAE;AACvC,+BAAU,MAAM;AACf,UAAM,YAAY,KAAK,UAAU,gBAAgB;AACjD,QAAI,cAAc,cAAc,SAAS;AACxC,oBAAc,UAAU;AACxB,uDAAiB;AAAA,IAClB;AAAA,EACD,GAAG,CAAC,kBAAkB,cAAc,CAAC;AAGrC,QAAM,yBAAqB,uBAAQ,MAAM;AAtS1C;AAuSE,QAAI,OAAO,eAAe,YAAY;AAErC,cAAO,gBAAW,EAAE,MAAkC,CAAC,MAAhD,YAAqD,CAAC;AAAA,IAC9D;AACA,WAAO,kCAAc,CAAC;AAAA,EACvB,GAAG,CAAC,YAAY,KAAK,CAAC;AAEtB,QAAM,qBAAiB,uBAAQ,MAAM;AA9StC;AA+SE,QAAI,OAAO,WAAW,YAAY;AAEjC,cAAO,YAAO,EAAE,MAAkC,CAAC,MAA5C,YAAiD,CAAC;AAAA,IAC1D;AACA,WAAO,0BAAU,CAAC;AAAA,EACnB,GAAG,CAAC,QAAQ,KAAK,CAAC;AAElB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,KAAK;AAAA,MACL,WAAW,CAAC,gBAAgB,mBAAmB,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MACxF,OAAO;AAAA,QACN,WAAW,kBAAkB,IAAI,kBAAkB;AAAA,QACnD,QAAQ,kBAAkB,IAAI,kBAAkB;AAAA,QAChD,GAAG,eAAe;AAAA,QAClB,GAAG;AAAA,MACJ;AAAA,MAEC,sBAAY,IAAI,CAAC,EAAE,MAAM,MAAM,KAAK,OAAO,OAAO,MAAM;AAjU5D;AAkUI,cAAM,WAAU,UAAK,aAAL,YAAiB,yCAAa;AAE9C,eACC;AAAA,UAAC;AAAA;AAAA,YAEA,KAAK,CAAC,SAAS;AACd,kBAAI,MAAM;AACT,yBAAS,QAAQ,IAAI,KAAK,KAAK,IAAI;AAAA,cACpC,OAAO;AACN,yBAAS,QAAQ,OAAO,KAAK,GAAG;AAAA,cACjC;AAAA,YACD;AAAA,YACA,WAAW,CAAC,gBAAgB,mBAAmB,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,YAC7E,OAAO;AAAA,cACN,OAAO,iBAAiB,IAAI,QAAQ;AAAA,cACpC,QAAQ,SAAS,IAAI,SAAS;AAAA,cAC9B,WAAW,iBAAiB,IAAI,eAAe,IAAI,OAAO,GAAG,WAAW;AAAA,cACxE,SAAS,iBAAiB,IAAI,IAAI;AAAA,cAClC,GAAG,eAAe;AAAA,YACnB;AAAA,YACA,QAAQ;AAAA,YAEP;AAAA;AAAA,UAlBI,KAAK;AAAA,QAmBX;AAAA,MAEF,CAAC;AAAA;AAAA,EACF;AAEF;AAEA,IAAO,kBAAQ;;;ACzQZ,IAAAC,sBAAA;AA9DH,IAAM,iBAAiB,CAAC,OAAoC,iBAAiC;AAC5F,MAAI,UAAU,UAAa,UAAU,MAAM;AAC1C,WAAO;AAAA,EACR;AACA,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO,GAAG,KAAK;AAAA,EAChB;AACA,SAAO;AACR;AAEA,IAAM,sBAAsB,CAAC,UAAmD;AAC/E,MAAI,CAAC,OAAO;AACX,WAAO;AAAA,EACR;AACA,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO,4BAA4B,KAAK;AAAA,EACzC;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,QAAI,MAAM,WAAW,GAAG;AACvB,aAAO;AAAA,IACR;AACA,UAAM,SAAS,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;AAC9D,UAAM,cAAc,OAAO,IAAI,CAAC,SAAS;AACxC,YAAM,gBAAgB,KAAK,IAAI,KAAK,IAAK,KAAK,UAAU,MAAO,IAAI,CAAC,GAAG,EAAE;AACzE,aAAO,GAAG,KAAK,KAAK,IAAI,cAAc,QAAQ,CAAC,CAAC;AAAA,IACjD,CAAC;AACD,WAAO,4BAA4B,YAAY,KAAK,IAAI,CAAC;AAAA,EAC1D;AACA,SAAO;AACR;AAEA,IAAM,aAAa,CAAC,UAA2B;AAC9C,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACJ,IAAI;AAEJ,QAAM,qBAAqB,eAAe,WAAW,KAAK;AAC1D,QAAM,kBAAkB,eAAe,QAAQ,KAAK;AACpD,QAAM,gBAAgB,eAAe,MAAM,OAAO;AAClD,QAAM,cAAc,oBAAoB,KAAK;AAE7C,QAAM,YAA2B;AAAA,IAChC,4BAA4B;AAAA,IAC5B,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,0BAA0B,GAAG,QAAQ;AAAA,IACrC,0BAA0B;AAAA,EAC3B;AAEA,QAAM,YAAY,KAAK,IAAI,GAAG,KAAK;AACnC,QAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU;AACjE,UAAM,eAAe,EAAG,WAAW,QAAS;AAC5C,WACC;AAAA,MAAC;AAAA;AAAA,QAEA,WAAU;AAAA,QACV,OAAO;AAAA,UACN,gBAAgB,GAAG,YAAY;AAAA,QAChC;AAAA;AAAA,MAJK;AAAA,IAKN;AAAA,EAEF,CAAC;AAED,MAAI,aAAa,QAAW;AAC3B,WACC;AAAA,MAAC;AAAA;AAAA,QACA,WAAW,sCAAsC,aAAa,EAAE,GAAG,KAAK;AAAA,QACxE;AAAA,QACC,GAAG;AAAA,QAEH;AAAA;AAAA,UACD,6CAAC,SAAI,WAAU,iCAAgC,OAAO,WACpD,iBACF;AAAA;AAAA;AAAA,IACD;AAAA,EAEF;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAW,iCAAiC,aAAa,EAAE,GAAG,KAAK;AAAA,MACnE,OAAO;AAAA,QACN,GAAG;AAAA,QACH,GAAG;AAAA,MACJ;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACF;AAEF;AAEA,IAAO,qBAAQ;","names":["import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime"]}
|
package/dist/index.css
CHANGED
|
@@ -138,4 +138,59 @@
|
|
|
138
138
|
.disabled_box_disabled * {
|
|
139
139
|
color: inherit !important;
|
|
140
140
|
}
|
|
141
|
+
|
|
142
|
+
/* Masonry/index.less */
|
|
143
|
+
.masonry_root {
|
|
144
|
+
position: relative;
|
|
145
|
+
width: 100%;
|
|
146
|
+
box-sizing: border-box;
|
|
147
|
+
}
|
|
148
|
+
.masonry_item {
|
|
149
|
+
position: absolute;
|
|
150
|
+
top: 0;
|
|
151
|
+
left: 0;
|
|
152
|
+
box-sizing: border-box;
|
|
153
|
+
transition: transform 0.3s cubic-bezier(0.2, 0, 0, 1), opacity 0.3s cubic-bezier(0.2, 0, 0, 1);
|
|
154
|
+
will-change: transform;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* BorderBeam/index.less */
|
|
158
|
+
.react-public-border-beam-container {
|
|
159
|
+
position: relative;
|
|
160
|
+
}
|
|
161
|
+
.react-public-border-beam-mask {
|
|
162
|
+
position: absolute;
|
|
163
|
+
pointer-events: none;
|
|
164
|
+
box-sizing: border-box;
|
|
165
|
+
border-radius: inherit;
|
|
166
|
+
border: var(--border-beam-line-width, 1px) solid transparent;
|
|
167
|
+
top: calc(-1 * var(--border-beam-outset, 0px));
|
|
168
|
+
left: calc(-1 * var(--border-beam-outset, 0px));
|
|
169
|
+
right: calc(-1 * var(--border-beam-outset, 0px));
|
|
170
|
+
bottom: calc(-1 * var(--border-beam-outset, 0px));
|
|
171
|
+
-webkit-mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
172
|
+
-webkit-mask-clip: padding-box, border-box;
|
|
173
|
+
-webkit-mask-composite: destination-out;
|
|
174
|
+
mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);
|
|
175
|
+
mask-clip: padding-box, border-box;
|
|
176
|
+
mask-composite: exclude;
|
|
177
|
+
}
|
|
178
|
+
.react-public-border-beam-item {
|
|
179
|
+
position: absolute;
|
|
180
|
+
width: var(--border-beam-size, 100px);
|
|
181
|
+
height: var(--border-beam-size, 100px);
|
|
182
|
+
background: var(--border-beam-gradient);
|
|
183
|
+
offset-path: rect(0% 100% 100% 0% round var(--border-beam-radius, 12px));
|
|
184
|
+
offset-anchor: 100% 50%;
|
|
185
|
+
will-change: offset-distance;
|
|
186
|
+
animation: react-public-border-beam-spin var(--border-beam-duration, 6s) linear infinite;
|
|
187
|
+
}
|
|
188
|
+
@keyframes react-public-border-beam-spin {
|
|
189
|
+
0% {
|
|
190
|
+
offset-distance: 0%;
|
|
191
|
+
}
|
|
192
|
+
100% {
|
|
193
|
+
offset-distance: 100%;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
141
196
|
/*# sourceMappingURL=index.css.map */
|
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../CollapseBox/index.less","../DisabledBox/index.less"],"sourcesContent":[".collapsible-wrapper {\n position: relative;\n box-sizing: border-box;\n}\n.collapsible-wrapper.horizontal {\n display: inline-flex;\n align-items: stretch;\n}\n.collapsible-wrapper.vertical {\n display: flex;\n flex-direction: column;\n}\n.collapsible-container {\n position: relative;\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n background-color: #ffffff;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1), height 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.collapsible-container.align-right {\n margin-left: auto;\n}\n.collapsible-container.align-bottom {\n margin-top: auto;\n}\n.collapsible-header {\n position: sticky;\n top: 0;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: space-between;\n box-sizing: border-box;\n height: 48px;\n padding: 12px 16px;\n background-color: #f9fafb;\n border-bottom: 1px solid #d1d5db;\n}\n.collapsible-header h3 {\n margin: 0;\n color: #1f2937;\n font-weight: 600;\n font-size: 18px;\n}\n.collapsible-content {\n box-sizing: border-box;\n padding: 16px;\n}\n.toggle-button {\n position: absolute;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #8c8c8c;\n background-color: #f3f4f6;\n border: 1px solid #e5e7eb;\n border-radius: 3px;\n cursor: pointer;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;\n font-size: 10px;\n}\n.toggle-button:hover {\n background-color: #e5e7eb;\n color: #1f2937;\n border-color: #d1d5db;\n}\n.toggle-button.button-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n width: 14px;\n height: 48px;\n}\n.toggle-button.button-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n width: 14px;\n height: 48px;\n}\n.toggle-button.button-bottom {\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 50%);\n width: 48px;\n height: 14px;\n}\n.toggle-button.button-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 48px;\n height: 14px;\n}\n",".disabled_box_container {\n display: flex;\n flex: 1;\n gap: 2px;\n align-items: center;\n justify-content: flex-start;\n min-width: 0;\n color: rgba(0, 0, 0, 0.35);\n}\n.disabled_box_container .disabled_box_title {\n display: flex;\n flex: 1;\n min-width: 0;\n margin: 0 !important;\n padding: 0 !important;\n overflow: hidden;\n}\n.disabled_box_container .disabled_box_icon {\n flex-shrink: 0;\n margin-right: 2px;\n font-size: 12px;\n}\n.disabled_box_container .disabled_box_icon:last-child {\n margin-right: 0;\n margin-left: 2px;\n}\n.disabled_box_disabled {\n color: rgba(0, 0, 0, 0.35) !important;\n cursor: not-allowed;\n}\n.disabled_box_disabled * {\n color: inherit !important;\n}\n"],"mappings":";AAAA,CAAC;AACC,YAAU;AACV,cAAY;AACd;AACA,CAJC,mBAImB,CAAC;AACnB,WAAS;AACT,eAAa;AACf;AACA,CARC,mBAQmB,CAAC;AACnB,WAAS;AACT,kBAAgB;AAClB;AACA,CAAC;AACC,YAAU;AACV,cAAY;AACZ,aAAW;AACX,cAAY;AACZ,YAAU;AACV,oBAAkB;AAClB,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC,cAAY,MAAM,KAAK,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,KAAK,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AAC7F;AACA,CAZC,qBAYqB,CAAC;AACrB,eAAa;AACf;AACA,CAfC,qBAeqB,CAAC;AACrB,cAAY;AACd;AACA,CAAC;AACC,YAAU;AACV,OAAK;AACL,WAAS;AACT,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,cAAY;AACZ,UAAQ;AACR,WAAS,KAAK;AACd,oBAAkB;AAClB,iBAAe,IAAI,MAAM;AAC3B;AACA,CAbC,mBAamB;AAClB,UAAQ;AACR,SAAO;AACP,eAAa;AACb,aAAW;AACb;AACA,CAAC;AACC,cAAY;AACZ,WAAS;AACX;AACA,CAAC;AACC,YAAU;AACV,WAAS;AACT,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,SAAO;AACP,oBAAkB;AAClB,UAAQ,IAAI,MAAM;AAClB,iBAAe;AACf,UAAQ;AACR,cAAY,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC;AAAA,IAAY,iBAAiB,KAAK,IAAI;AAAA,IAAE,MAAM,KAAK,IAAI;AAAA,IAAE,aAAa,KAAK;AAC3E,aAAW;AACb;AACA,CAfC,aAea;AACZ,oBAAkB;AAClB,SAAO;AACP,gBAAc;AAChB;AACA,CApBC,aAoBa,CAAC;AACb,OAAK;AACL,SAAO;AACP,aAAW,UAAU,GAAG,EAAE;AAC1B,SAAO;AACP,UAAQ;AACV;AACA,CA3BC,aA2Ba,CAAC;AACb,OAAK;AACL,QAAM;AACN,aAAW,UAAU,IAAI,EAAE;AAC3B,SAAO;AACP,UAAQ;AACV;AACA,CAlCC,aAkCa,CAAC;AACb,UAAQ;AACR,QAAM;AACN,aAAW,UAAU,IAAI,EAAE;AAC3B,SAAO;AACP,UAAQ;AACV;AACA,CAzCC,aAyCa,CAAC;AACb,OAAK;AACL,QAAM;AACN,aAAW,UAAU,IAAI,EAAE;AAC3B,SAAO;AACP,UAAQ;AACV;;;ACpGA,CAAC;AACC,WAAS;AACT,QAAM;AACN,OAAK;AACL,eAAa;AACb,mBAAiB;AACjB,aAAW;AACX,SAAO,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACvB;AACA,CATC,uBASuB,CAAC;AACvB,WAAS;AACT,QAAM;AACN,aAAW;AACX,UAAQ;AACR,WAAS;AACT,YAAU;AACZ;AACA,CAjBC,uBAiBuB,CAAC;AACvB,eAAa;AACb,gBAAc;AACd,aAAW;AACb;AACA,CAtBC,uBAsBuB,CALC,iBAKiB;AACxC,gBAAc;AACd,eAAa;AACf;AACA,CAAC;AACC,SAAO,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACrB,UAAQ;AACV;AACA,CAJC,sBAIsB;AACrB,SAAO;AACT;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../CollapseBox/index.less","../DisabledBox/index.less","../Masonry/index.less","../BorderBeam/index.less"],"sourcesContent":[".collapsible-wrapper {\n position: relative;\n box-sizing: border-box;\n}\n.collapsible-wrapper.horizontal {\n display: inline-flex;\n align-items: stretch;\n}\n.collapsible-wrapper.vertical {\n display: flex;\n flex-direction: column;\n}\n.collapsible-container {\n position: relative;\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n background-color: #ffffff;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1), height 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.collapsible-container.align-right {\n margin-left: auto;\n}\n.collapsible-container.align-bottom {\n margin-top: auto;\n}\n.collapsible-header {\n position: sticky;\n top: 0;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: space-between;\n box-sizing: border-box;\n height: 48px;\n padding: 12px 16px;\n background-color: #f9fafb;\n border-bottom: 1px solid #d1d5db;\n}\n.collapsible-header h3 {\n margin: 0;\n color: #1f2937;\n font-weight: 600;\n font-size: 18px;\n}\n.collapsible-content {\n box-sizing: border-box;\n padding: 16px;\n}\n.toggle-button {\n position: absolute;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #8c8c8c;\n background-color: #f3f4f6;\n border: 1px solid #e5e7eb;\n border-radius: 3px;\n cursor: pointer;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;\n font-size: 10px;\n}\n.toggle-button:hover {\n background-color: #e5e7eb;\n color: #1f2937;\n border-color: #d1d5db;\n}\n.toggle-button.button-right {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n width: 14px;\n height: 48px;\n}\n.toggle-button.button-left {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n width: 14px;\n height: 48px;\n}\n.toggle-button.button-bottom {\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 50%);\n width: 48px;\n height: 14px;\n}\n.toggle-button.button-top {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 48px;\n height: 14px;\n}\n",".disabled_box_container {\n display: flex;\n flex: 1;\n gap: 2px;\n align-items: center;\n justify-content: flex-start;\n min-width: 0;\n color: rgba(0, 0, 0, 0.35);\n}\n.disabled_box_container .disabled_box_title {\n display: flex;\n flex: 1;\n min-width: 0;\n margin: 0 !important;\n padding: 0 !important;\n overflow: hidden;\n}\n.disabled_box_container .disabled_box_icon {\n flex-shrink: 0;\n margin-right: 2px;\n font-size: 12px;\n}\n.disabled_box_container .disabled_box_icon:last-child {\n margin-right: 0;\n margin-left: 2px;\n}\n.disabled_box_disabled {\n color: rgba(0, 0, 0, 0.35) !important;\n cursor: not-allowed;\n}\n.disabled_box_disabled * {\n color: inherit !important;\n}\n",".masonry_root {\n position: relative;\n width: 100%;\n box-sizing: border-box;\n}\n.masonry_item {\n position: absolute;\n top: 0;\n left: 0;\n box-sizing: border-box;\n transition: transform 0.3s cubic-bezier(0.2, 0, 0, 1), opacity 0.3s cubic-bezier(0.2, 0, 0, 1);\n will-change: transform;\n}\n",".react-public-border-beam-container {\n position: relative;\n}\n.react-public-border-beam-mask {\n position: absolute;\n pointer-events: none;\n box-sizing: border-box;\n border-radius: inherit;\n /* 边框线宽 */\n border: var(--border-beam-line-width, 1px) solid transparent;\n /* 定位与 outset 外扩 */\n top: calc(-1 * var(--border-beam-outset, 0px));\n left: calc(-1 * var(--border-beam-outset, 0px));\n right: calc(-1 * var(--border-beam-outset, 0px));\n bottom: calc(-1 * var(--border-beam-outset, 0px));\n /* WebKit 遮罩兼容 (Chrome, Safari, Edge) */\n -webkit-mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);\n -webkit-mask-clip: padding-box, border-box;\n -webkit-mask-composite: destination-out;\n /* 标准 CSS 遮罩 (Firefox, Modern Chrome) */\n mask-image: linear-gradient(#000 0 0), linear-gradient(#000 0 0);\n mask-clip: padding-box, border-box;\n mask-composite: exclude;\n}\n.react-public-border-beam-item {\n position: absolute;\n width: var(--border-beam-size, 100px);\n height: var(--border-beam-size, 100px);\n background: var(--border-beam-gradient);\n /* 沿矩形路径轨迹移动 */\n offset-path: rect(0% 100% 100% 0% round var(--border-beam-radius, 12px));\n offset-anchor: 100% 50%;\n will-change: offset-distance;\n animation: react-public-border-beam-spin var(--border-beam-duration, 6s) linear infinite;\n}\n@keyframes react-public-border-beam-spin {\n 0% {\n offset-distance: 0%;\n }\n 100% {\n offset-distance: 100%;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default, { ReactNode, CSSProperties } from 'react';
|
|
2
|
+
import React__default, { ReactNode, CSSProperties, Key, HTMLAttributes } from 'react';
|
|
3
3
|
|
|
4
4
|
type CollapseBoxDirection = 'horizontal' | 'vertical';
|
|
5
5
|
type CollapseBoxButtonPosition = 'left' | 'right' | 'top' | 'bottom';
|
|
@@ -109,4 +109,81 @@ interface DisabledBoxProps {
|
|
|
109
109
|
}
|
|
110
110
|
declare const DisabledBox: (props: DisabledBoxProps) => React.JSX.Element;
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
/** 响应式断点名称 */
|
|
113
|
+
type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
|
|
114
|
+
/** 间距配置项 */
|
|
115
|
+
type Gap = undefined | number | Partial<Record<Breakpoint, number>>;
|
|
116
|
+
/** 瀑布流单项结构 */
|
|
117
|
+
interface MasonryItem<T = any> {
|
|
118
|
+
/** 自定义展示内容,相对 itemRender 具有更高优先级 */
|
|
119
|
+
children?: ReactNode;
|
|
120
|
+
/** 自定义所在列(0-indexed) */
|
|
121
|
+
column?: number;
|
|
122
|
+
/** 自定义存储数据 */
|
|
123
|
+
data?: T;
|
|
124
|
+
/** 高度(手指定时优先使用,否则通过测量动态计算) */
|
|
125
|
+
height?: number;
|
|
126
|
+
/** 唯一标识 */
|
|
127
|
+
key: Key;
|
|
128
|
+
}
|
|
129
|
+
/** 语义化 DOM 节点 */
|
|
130
|
+
type MasonrySemanticDOM = 'root' | 'item';
|
|
131
|
+
type MasonryClassNames = Partial<Record<MasonrySemanticDOM, string>> | ((info: {
|
|
132
|
+
props: MasonryProps<any>;
|
|
133
|
+
}) => Partial<Record<MasonrySemanticDOM, string>>);
|
|
134
|
+
type MasonryStyles = Partial<Record<MasonrySemanticDOM, CSSProperties>> | ((info: {
|
|
135
|
+
props: MasonryProps<any>;
|
|
136
|
+
}) => Partial<Record<MasonrySemanticDOM, CSSProperties>>);
|
|
137
|
+
/** Masonry 组件属性 */
|
|
138
|
+
interface MasonryProps<T = any> {
|
|
139
|
+
/** 用于自定义组件内部各语义化结构的 class,支持对象或函数 */
|
|
140
|
+
classNames?: MasonryClassNames;
|
|
141
|
+
/** 列数,可以是固定值或响应式配置,默认 3 */
|
|
142
|
+
columns?: number | Partial<Record<Breakpoint, number>>;
|
|
143
|
+
/** 是否持续监听子项尺寸变化,默认 false */
|
|
144
|
+
fresh?: boolean;
|
|
145
|
+
/** 间距,可以是固定值、响应式配置或水平垂直间距配置 [horizontalGap, verticalGap],默认 0 */
|
|
146
|
+
gutter?: Gap | [Gap, Gap];
|
|
147
|
+
/** 瀑布流项列表 */
|
|
148
|
+
items?: MasonryItem<T>[];
|
|
149
|
+
/** 自定义项渲染 */
|
|
150
|
+
itemRender?: (item: MasonryItem<T>) => ReactNode;
|
|
151
|
+
/** 语义化结构 style,支持对象和函数形式 */
|
|
152
|
+
styles?: MasonryStyles;
|
|
153
|
+
/** 列排序回调 */
|
|
154
|
+
onLayoutChange?: (layout: {
|
|
155
|
+
key: Key;
|
|
156
|
+
column: number;
|
|
157
|
+
}[]) => void;
|
|
158
|
+
/** 根节点自定义类名 */
|
|
159
|
+
className?: string;
|
|
160
|
+
/** 根节点自定义 CSS 样式 */
|
|
161
|
+
style?: CSSProperties;
|
|
162
|
+
/** JSX 子节点支持 */
|
|
163
|
+
children?: ReactNode;
|
|
164
|
+
}
|
|
165
|
+
declare const Masonry: <T = unknown>(props: MasonryProps<T>) => React__default.JSX.Element;
|
|
166
|
+
|
|
167
|
+
type BorderBeamColorStop = {
|
|
168
|
+
color: string;
|
|
169
|
+
percent: number;
|
|
170
|
+
};
|
|
171
|
+
interface BorderBeamProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {
|
|
172
|
+
/** 装饰内容 */
|
|
173
|
+
children?: ReactNode;
|
|
174
|
+
/** 流光颜色配置,支持单色字符串或渐变停靠点数组 */
|
|
175
|
+
color?: string | BorderBeamColorStop[];
|
|
176
|
+
/** 流光数量,默认为 1 */
|
|
177
|
+
count?: number;
|
|
178
|
+
/** 流光完成一圈动画的时间,单位秒,默认为 6 */
|
|
179
|
+
duration?: number;
|
|
180
|
+
/** 流光线宽,数字类型按像素处理,默认为 1px */
|
|
181
|
+
lineWidth?: number | string;
|
|
182
|
+
/** 流光层相对容器边缘的外扩距离,遇到裁剪容器时可设为 0 */
|
|
183
|
+
outset?: number | string;
|
|
184
|
+
/** 流光可见段的尺寸,数字类型按像素处理,默认为 100 */
|
|
185
|
+
size?: number | string;
|
|
186
|
+
}
|
|
187
|
+
declare const BorderBeam: (props: BorderBeamProps) => React.JSX.Element;
|
|
188
|
+
|
|
189
|
+
export { BorderBeam, type BorderBeamColorStop, type BorderBeamProps, type Breakpoint, CollapsibleBox as CollapseBox, type CollapseBoxButtonPosition, type CollapseBoxDirection, type CollapseBoxProps, DisabledBox, type DisabledBoxProps, type Gap, Masonry, type MasonryClassNames, type MasonryItem, type MasonryProps, type MasonrySemanticDOM, type MasonryStyles, CustomSplitter as Splitter, type SplitterCollapsible, type SplitterOrientation, type SplitterPanelProps, type SplitterProps, type SplitterSize };
|