@canvas-components/react-components 0.3.8 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +516 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +43 -4
- package/dist/index.d.ts +43 -4
- package/dist/index.js +516 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["#style-inject:#style-inject","../src/styles/variables.css","../src/shared/class-names.ts","../src/shared/prefix.ts","../src/components/checkbox/style.css","../src/components/checkbox/index.tsx","../src/components/input/style.css","../src/components/input/index.tsx","../src/shared/content-scale.tsx","../src/components/transition/index.tsx","../src/components/popup/style.css","../src/components/popup/index.tsx","../src/components/virtual-list/style.css","../src/components/virtual-list/index.tsx","../src/components/select/style.css","../src/components/select/index.tsx","../src/components/filter-panel/index.tsx","../src/components/color/style.css","../src/components/color/index.tsx","../src/components/year/style.css","../src/components/date/style.css","../src/components/date/index.tsx","../src/components/date-range/style.css","../src/components/date-range/index.tsx","../src/components/time/shared.tsx","../src/components/time/style.css","../src/components/datetime/style.css","../src/components/datetime/index.tsx","../src/components/datetime-range/style.css","../src/components/datetime-range/index.tsx","../src/components/number-input/style.css","../src/components/number-input/index.tsx","../src/components/input-range/style.css","../src/components/input-range/index.tsx","../src/components/image-preview/style.css","../src/components/image-preview/index.tsx","../src/components/month/style.css","../src/components/month/index.tsx","../src/shared/compatible-id.ts","../src/components/modal/style.css","../src/components/modal/index.tsx","../src/components/input-number/style.css","../src/components/input-number/index.tsx","../src/components/pagination/style.css","../src/components/pagination/index.tsx","../src/components/popconfirm/style.css","../src/components/popconfirm/index.tsx","../src/components/quarter/style.css","../src/components/quarter/index.tsx","../src/components/resizable-panels/style.css","../src/components/resizable-panels/index.tsx","../src/components/cascader/style.css","../src/components/cascader/index.tsx","../src/components/auto-complete/index.tsx","../src/components/time/index.tsx","../src/components/time-range/index.tsx","../src/components/year/index.tsx","../src/components/compat/style.css","../src/components/compat/index.tsx"],"names":["ReactCheckbox","forwardRef","ReactInput","jsxs","jsx","useRef","useState","useLayoutEffect","useEffect","useMemo","useImperativeHandle","ReactSelect","Fragment","ReactColorPicker","clamp","ReactDatePicker","WEEKDAY_LABELS","ReactDateRangePicker","shiftMonth","buildCalendarDays","parseDateValue","getDaysInMonth","MONTHS","ReactDateTimePicker","resolveDecadeStart","handleInputBlur","ReactDateTimeRangePicker","parseDateTimeValue","createDraftDateTime","clampDay","ReactNumberInput","ReactInputRange","ReactMonthPicker","createPortal","ReactInputNumber","size","isPromiseLike","ReactQuarterPicker","useId","ReactAutoComplete","ReactTimePicker","ReactTimeRangePicker","ReactYearPicker","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --canvas-react-color-primary: #1677ff;\\n --canvas-react-color-primary-hover: #4096ff;\\n --canvas-react-color-border: #d9d9d9;\\n --canvas-react-color-border-strong: #bfbfbf;\\n --canvas-react-color-text: #1f2937;\\n --canvas-react-color-text-muted: #6b7280;\\n --canvas-react-color-bg: #ffffff;\\n --canvas-react-color-bg-soft: #f5f5f5;\\n --canvas-react-color-bg-hover: #f3f4f6;\\n --canvas-react-color-bg-active: #e6f4ff;\\n --canvas-react-shadow-focus: 0 0 0 2px rgba(22, 119, 255, 0.12);\\n --canvas-react-shadow-popup: 0 8px 24px rgba(15, 23, 42, 0.16);\\n --canvas-react-radius-sm: 6px;\\n --canvas-react-radius-md: 8px;\\n --canvas-react-control-height: 32px;\\n --canvas-react-font-size: 14px;\\n --canvas-react-control-padding-inline: 11px;\\n --canvas-react-control-padding-block: 0px;\\n --canvas-react-content-zoom: 1;\\n}\\n.canvas-react-scrollbar {\\n scrollbar-width: thin;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar {\\n width: 8px;\\n height: 8px;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-thumb {\\n min-height: 32px;\\n border: 2px solid transparent;\\n border-radius: 999px;\\n background: #aeb4bd;\\n background-clip: content-box;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-thumb:hover {\\n background: #8f98a5;\\n background-clip: content-box;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-corner {\\n background: transparent;\\n}\\n\")","/**\n * 拼接类名。\n */\nexport function joinClassNames(...values: Array<string | false | null | undefined>) {\n return values.filter(Boolean).join(\" \");\n}\n","/**\n * React 基础组件统一类名前缀。\n */\nexport const REACT_COMPONENT_PREFIX = \"canvas-react\";\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-checkbox {\\n display: inline-flex;\\n align-items: center;\\n gap: 8px;\\n min-width: 0;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n cursor: pointer;\\n user-select: none;\\n}\\n.canvas-react-checkbox-disabled {\\n opacity: 0.56;\\n cursor: not-allowed;\\n}\\n.canvas-react-checkbox-input {\\n position: absolute;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-checkbox-box {\\n position: relative;\\n flex: none;\\n width: 16px;\\n height: 16px;\\n box-sizing: border-box;\\n border: 1px solid var(--canvas-react-color-border-strong);\\n border-radius: 4px;\\n background: var(--canvas-react-color-bg);\\n transition:\\n border-color 0.2s ease,\\n background-color 0.2s ease,\\n box-shadow 0.2s ease;\\n}\\n.canvas-react-checkbox:hover .canvas-react-checkbox-box {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-checkbox-input:focus-visible + .canvas-react-checkbox-box {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-checkbox-checked .canvas-react-checkbox-box,\\n.canvas-react-checkbox-indeterminate .canvas-react-checkbox-box {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-checkbox-box::after {\\n position: absolute;\\n content: \\\"\\\";\\n opacity: 0;\\n box-sizing: border-box;\\n transform: scale(0);\\n transition: opacity 0.2s ease, transform 0.2s ease;\\n}\\n.canvas-react-checkbox-checked .canvas-react-checkbox-box::after {\\n top: 50%;\\n left: 22%;\\n width: 5.5px;\\n height: 9px;\\n border-right: 2px solid #fff;\\n border-bottom: 2px solid #fff;\\n transform: translateY(-58%) rotate(45deg) scale(1);\\n transform-origin: center;\\n opacity: 1;\\n}\\n.canvas-react-checkbox-indeterminate .canvas-react-checkbox-box::after {\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n border-bottom: 2px solid #fff;\\n transform: translate(-50%, -50%);\\n opacity: 1;\\n}\\n.canvas-react-checkbox-label {\\n min-width: 0;\\n}\\n\")","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactCheckboxRef {\n focus: () => void;\n blur: () => void;\n input: HTMLInputElement | null;\n}\n\nexport interface ReactCheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n /**\n * 半选状态。\n */\n indeterminate?: boolean;\n /**\n * 复选框文案。\n */\n children?: ReactNode;\n}\n\n/**\n * 基础复选框。\n */\nexport const ReactCheckbox = forwardRef<ReactCheckboxRef, ReactCheckboxProps>(\n function ReactCheckbox(props, ref) {\n const {\n checked,\n children,\n className,\n disabled,\n indeterminate = false,\n style,\n ...restProps\n } = props;\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus(),\n blur: () => inputRef.current?.blur(),\n input: inputRef.current,\n }));\n\n return (\n <label\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-checkbox`,\n checked && `${REACT_COMPONENT_PREFIX}-checkbox-checked`,\n indeterminate && `${REACT_COMPONENT_PREFIX}-checkbox-indeterminate`,\n disabled && `${REACT_COMPONENT_PREFIX}-checkbox-disabled`,\n className,\n )}\n style={style}\n >\n <input\n {...restProps}\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n className={`${REACT_COMPONENT_PREFIX}-checkbox-input`}\n />\n <span className={`${REACT_COMPONENT_PREFIX}-checkbox-box`} />\n {children ? (\n <span className={`${REACT_COMPONENT_PREFIX}-checkbox-label`}>{children}</span>\n ) : null}\n </label>\n );\n },\n);\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-input-affix-wrapper {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-input-affix-wrapper:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-input-affix-wrapper:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-input-affix-wrapper-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-input {\\n box-sizing: border-box;\\n flex: 1 1 auto;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: none;\\n background: transparent;\\n color: inherit;\\n font-size: inherit;\\n outline: none;\\n}\\n.canvas-react-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-input-suffix {\\n display: inline-flex;\\n align-items: center;\\n gap: 8px;\\n padding-right: var(--canvas-react-control-padding-inline, 11px);\\n}\\n.canvas-react-input-clear {\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-input-affix-wrapper:hover .canvas-react-input-clear,\\n.canvas-react-input-affix-wrapper:focus-within .canvas-react-input-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-input-clear:hover {\\n color: #6b7280;\\n transform: rotate(90deg);\\n}\\n.canvas-react-input-clear-icon,\\n.canvas-react-input-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-input-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-input-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n\")","import {\n forwardRef,\n type CSSProperties,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /**\n * 回车确认回调。\n */\n onPressEnter?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /**\n * 是否允许清空。\n */\n allowClear?: boolean;\n /**\n * 清空回调。\n */\n onClear?: () => void;\n /**\n * 右侧附加内容。\n */\n suffix?: ReactNode;\n /**\n * 外层容器类名。\n */\n wrapperClassName?: string;\n}\n\n/**\n * 基础文本输入框。\n */\nexport const ReactInput = forwardRef<HTMLInputElement, ReactInputProps>(\n function ReactInput(props, ref) {\n const {\n allowClear = true,\n className,\n disabled,\n onChange,\n onClear,\n onKeyDown,\n onPressEnter,\n readOnly,\n style,\n suffix,\n value,\n wrapperClassName,\n ...restProps\n } = props;\n const hasValue = String(value ?? \"\").length > 0;\n const showClear = allowClear && !disabled && !readOnly && hasValue;\n\n return (\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-input-affix-wrapper`,\n disabled && `${REACT_COMPONENT_PREFIX}-input-affix-wrapper-disabled`,\n wrapperClassName,\n )}\n style={style as CSSProperties}\n >\n <input\n {...restProps}\n ref={ref}\n disabled={disabled}\n readOnly={readOnly}\n value={value}\n className={joinClassNames(`${REACT_COMPONENT_PREFIX}-input`, className)}\n onChange={onChange}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.key === \"Enter\") {\n onPressEnter?.(event);\n }\n }}\n />\n {showClear || suffix ? (\n <span className={`${REACT_COMPONENT_PREFIX}-input-suffix`}>\n {showClear ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-input-clear`}\n aria-label=\"清空\"\n tabIndex={-1}\n onMouseDown={(event) => {\n event.preventDefault();\n clearInputValue(event);\n }}\n >\n <span className={`${REACT_COMPONENT_PREFIX}-input-clear-icon`} />\n </button>\n ) : null}\n {suffix}\n </span>\n ) : null}\n </span>\n );\n\n function clearInputValue(event: MouseEvent<HTMLButtonElement>) {\n const input = event.currentTarget\n .closest(`.${REACT_COMPONENT_PREFIX}-input-affix-wrapper`)\n ?.querySelector(\"input\");\n if (!input) {\n return;\n }\n\n const prototype = Object.getPrototypeOf(input) as HTMLInputElement;\n const descriptor = Object.getOwnPropertyDescriptor(prototype, \"value\");\n descriptor?.set?.call(input, \"\");\n input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n onClear?.();\n input.focus();\n }\n },\n);\n","import {\r\n createContext,\r\n useContext,\r\n useMemo,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nexport interface ReactContentScaleValue {\r\n /**\r\n * 内容缩放比例,1 表示 100%。\r\n */\r\n scale: number;\r\n}\r\n\r\nconst DEFAULT_CONTENT_SCALE: ReactContentScaleValue = {\r\n scale: 1,\r\n};\r\n\r\nconst ReactContentScaleContext =\r\n createContext<ReactContentScaleValue>(DEFAULT_CONTENT_SCALE);\r\n\r\n/**\r\n * 提供内容缩放上下文,供弹出层等 portal 节点同步表格缩放。\r\n */\r\nexport function ReactContentScaleProvider(props: {\r\n scale?: number;\r\n children: ReactNode;\r\n}) {\r\n const { children, scale = 1 } = props;\r\n const value = useMemo<ReactContentScaleValue>(() => {\r\n const nextScale =\r\n typeof scale === \"number\" && Number.isFinite(scale) && scale > 0\r\n ? scale\r\n : 1;\r\n return { scale: nextScale };\r\n }, [scale]);\r\n\r\n return (\r\n <ReactContentScaleContext.Provider value={value}>\r\n {children}\r\n </ReactContentScaleContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * 读取当前内容缩放比例。\r\n */\r\nexport function useReactContentScale() {\r\n return useContext(ReactContentScaleContext);\r\n}\r\n\r\n/**\r\n * 将固定布局尺寸换算为缩放前的布局值(再由 transform scale 还原视觉尺寸)。\r\n */\r\nexport function toContentLayoutSize(size: number, scale: number) {\r\n const nextScale =\r\n typeof scale === \"number\" && Number.isFinite(scale) && scale > 0\r\n ? scale\r\n : 1;\r\n if (nextScale === 1) {\r\n return size;\r\n }\r\n return size / nextScale;\r\n}\r\n","import { useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\n\n/**\n * 过渡动画时长配置。\n */\nexport type ReactTransitionDuration =\n | number\n | {\n enter?: number;\n leave?: number;\n };\n\n/**\n * Vue 风格的过渡阶段。\n */\nexport type ReactTransitionPhase =\n | \"enter-from\"\n | \"enter-to\"\n | \"entered\"\n | \"leave-from\"\n | \"leave-to\";\n\n/**\n * 过渡组件提供给渲染函数的状态。\n */\nexport interface ReactTransitionState {\n /** 当前阶段对应的 CSS 类名。 */\n className?: string;\n /** 当前过渡阶段。 */\n phase: ReactTransitionPhase;\n /** 子节点当前是否需要挂载。 */\n rendered: boolean;\n}\n\n/**\n * 过渡状态配置。\n */\nexport interface ReactTransitionOptions {\n /** 是否显示内容。 */\n show: boolean;\n /** CSS 类名前缀。 */\n name?: string;\n /** 进入和离开动画时长。 */\n duration?: ReactTransitionDuration;\n /** 首次显示时是否执行进入动画。 */\n appear?: boolean;\n}\n\n/**\n * 过渡组件属性。\n */\nexport interface ReactTransitionProps extends ReactTransitionOptions {\n /** 根据过渡状态渲染内容。 */\n children: (state: ReactTransitionState) => ReactNode;\n}\n\n/**\n * 提供 Vue 风格 CSS 阶段的过渡状态。\n */\nexport function useReactTransition(\n options: ReactTransitionOptions,\n): ReactTransitionState {\n const {\n appear = true,\n duration = 0,\n name = \"canvas-react-transition\",\n show,\n } = options;\n const enterDuration = resolveDuration(duration, \"enter\");\n const leaveDuration = resolveDuration(duration, \"leave\");\n const previousShowRef = useRef(show);\n const [rendered, setRendered] = useState(show);\n const [phase, setPhase] = useState<ReactTransitionPhase>(() => {\n if (!show) {\n return \"leave-to\";\n }\n return appear ? \"enter-from\" : \"entered\";\n });\n\n useLayoutEffect(() => {\n if (previousShowRef.current === show) {\n return;\n }\n previousShowRef.current = show;\n\n if (show) {\n setRendered(true);\n setPhase(\"enter-from\");\n return;\n }\n\n setPhase(\"leave-from\");\n }, [show]);\n\n useLayoutEffect(() => {\n let firstFrameId: number | null = null;\n let secondFrameId: number | null = null;\n let timerId: number | null = null;\n\n if (phase === \"enter-from\" || phase === \"leave-from\") {\n firstFrameId = window.requestAnimationFrame(() => {\n secondFrameId = window.requestAnimationFrame(() => {\n setPhase(phase === \"enter-from\" ? \"enter-to\" : \"leave-to\");\n });\n });\n } else if (phase === \"enter-to\") {\n timerId = window.setTimeout(() => {\n setPhase(\"entered\");\n }, enterDuration);\n } else if (phase === \"leave-to\" && rendered) {\n timerId = window.setTimeout(() => {\n setRendered(false);\n }, leaveDuration);\n }\n\n return () => {\n if (firstFrameId !== null) {\n window.cancelAnimationFrame(firstFrameId);\n }\n if (secondFrameId !== null) {\n window.cancelAnimationFrame(secondFrameId);\n }\n if (timerId !== null) {\n window.clearTimeout(timerId);\n }\n };\n }, [enterDuration, leaveDuration, phase, rendered]);\n\n return {\n className: resolveTransitionClassName(name, phase),\n phase,\n rendered,\n };\n}\n\n/**\n * 在离开动画完成后卸载内容的无包装过渡组件。\n */\nexport function ReactTransition(props: ReactTransitionProps) {\n const { children, ...options } = props;\n const state = useReactTransition(options);\n return state.rendered ? children(state) : null;\n}\n\nfunction resolveTransitionClassName(name: string, phase: ReactTransitionPhase) {\n if (phase === \"entered\") {\n return undefined;\n }\n\n const direction = phase.startsWith(\"enter\") ? \"enter\" : \"leave\";\n return `${name}-${phase} ${name}-${direction}-active`;\n}\n\nfunction resolveDuration(\n duration: ReactTransitionDuration,\n direction: \"enter\" | \"leave\",\n) {\n const value =\n typeof duration === \"number\" ? duration : (duration[direction] ?? 0);\n return Number.isFinite(value) && value > 0 ? value : 0;\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-popup {\\n position: fixed;\\n z-index: 1200;\\n box-sizing: border-box;\\n pointer-events: auto;\\n}\\n.canvas-react-popup-surface {\\n overflow: hidden;\\n border: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-radius: var(--canvas-react-radius-md, 8px);\\n background: var(--canvas-react-color-bg, #ffffff);\\n box-shadow: var( --canvas-react-shadow-popup, 0 8px 24px rgba(15, 23, 42, 0.16) );\\n transform-origin: top center;\\n}\\n.canvas-react-popup-surface-enter-active,\\n.canvas-react-popup-surface-leave-active {\\n transition: opacity 0.18s ease-out, transform 0.18s cubic-bezier(0.16, 1, 0.3, 1);\\n}\\n.canvas-react-popup-surface-enter-from,\\n.canvas-react-popup-surface-leave-to {\\n opacity: 0;\\n transform: translateY(-6px) scale(0.98);\\n}\\n.canvas-react-popup-surface-enter-to,\\n.canvas-react-popup-surface-leave-from {\\n opacity: 1;\\n transform: translate(0) scale(1);\\n}\\n.canvas-react-popup[data-placement^=top] .canvas-react-popup-surface {\\n transform-origin: bottom center;\\n}\\n.canvas-react-popup[data-placement^=top] .canvas-react-popup-surface-enter-from,\\n.canvas-react-popup[data-placement^=top] .canvas-react-popup-surface-leave-to {\\n transform: translateY(6px) scale(0.98);\\n}\\n.canvas-react-popup[data-placement^=bottom] .canvas-react-popup-surface {\\n transform-origin: top center;\\n}\\n.canvas-react-popup[data-placement^=left] .canvas-react-popup-surface {\\n transform-origin: center right;\\n}\\n.canvas-react-popup[data-placement^=left] .canvas-react-popup-surface-enter-from,\\n.canvas-react-popup[data-placement^=left] .canvas-react-popup-surface-leave-to {\\n transform: translateX(6px) scale(0.98);\\n}\\n.canvas-react-popup[data-placement^=right] .canvas-react-popup-surface {\\n transform-origin: center left;\\n}\\n.canvas-react-popup[data-placement^=right] .canvas-react-popup-surface-enter-from,\\n.canvas-react-popup[data-placement^=right] .canvas-react-popup-surface-leave-to {\\n transform: translateX(-6px) scale(0.98);\\n}\\n.canvas-react-popup-leave {\\n pointer-events: none;\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .canvas-react-popup-surface-enter-active,\\n .canvas-react-popup-surface-leave-active {\\n transition-duration: 0.01ms;\\n }\\n}\\n\")","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport {\n toContentLayoutSize,\n useReactContentScale,\n} from \"../../shared/content-scale\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { useReactTransition } from \"../transition/index\";\nimport \"./style.css\";\n\ntype PopupPlacement =\n | \"bottomLeft\"\n | \"bottomRight\"\n | \"topLeft\"\n | \"topRight\"\n | \"rightTop\"\n | \"rightBottom\"\n | \"leftTop\"\n | \"leftBottom\";\n\nconst POPUP_MOTION_DURATION = 180;\n\ninterface PopupAnchorRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface PopupSurfaceRect {\n width: number;\n height: number;\n}\n\ninterface ResolvedPopupPosition {\n placement: PopupPlacement;\n style: CSSProperties;\n}\n\nexport interface ReactPopupProps {\n /** 将面板高度限制在视口内,超出部分在面板内部滚动。 */\n constrainHeight?: boolean;\n /**\n * 是否显示弹层。\n */\n open: boolean;\n /**\n * 触发元素引用。\n */\n anchorRef?: RefObject<HTMLElement | null>;\n /**\n * 外部直接传入的锚点矩形。\n */\n anchorRect?: PopupAnchorRect | null;\n /**\n * 弹层位置。\n */\n placement?: PopupPlacement;\n /**\n * 与锚点的间距。\n */\n offset?: number;\n /**\n * 是否跟随触发器宽度。\n */\n matchAnchorWidth?: boolean;\n /**\n * 最小宽度。\n */\n minWidth?: number;\n /**\n * 自定义层级。\n */\n zIndex?: number;\n /**\n * 弹层容器类名。\n */\n className?: string;\n /**\n * 弹层面板类名。\n */\n surfaceClassName?: string;\n /**\n * 弹层容器样式。\n */\n style?: CSSProperties;\n /**\n * 弹层面板样式。\n */\n surfaceStyle?: CSSProperties;\n /**\n * 打开状态变化回调。\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * 弹层内容。\n */\n children: ReactNode;\n}\n\n/**\n * 通用弹出层组件。\n */\nexport function ReactPopup(props: ReactPopupProps) {\n const {\n anchorRect,\n anchorRef,\n children,\n className,\n matchAnchorWidth = false,\n minWidth,\n offset = 4,\n onOpenChange,\n open,\n placement = \"bottomLeft\",\n style,\n surfaceClassName,\n surfaceStyle,\n constrainHeight = false,\n zIndex = 1200,\n } = props;\n const { scale: contentScale } = useReactContentScale();\n const transition = useReactTransition({\n duration: POPUP_MOTION_DURATION,\n name: `${REACT_COMPONENT_PREFIX}-popup-surface`,\n show: open,\n });\n const { rendered } = transition;\n const [position, setPosition] = useState<ResolvedPopupPosition | null>(null);\n const surfaceRef = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n if (!rendered) {\n return;\n }\n\n const updatePosition = () => {\n const nextAnchor = anchorRect ?? resolveAnchorRect(anchorRef?.current);\n if (!nextAnchor) {\n return;\n }\n const nextPosition = resolvePopupPosition({\n constrainHeight,\n anchor: nextAnchor,\n contentScale,\n matchAnchorWidth,\n minWidth,\n offset,\n placement,\n popupRect: resolvePopupSurfaceRect(surfaceRef.current, contentScale),\n });\n\n setPosition((prev) => {\n if (\n prev?.placement === nextPosition.placement &&\n prev?.style.left === nextPosition.style.left &&\n prev?.style.top === nextPosition.style.top &&\n prev?.style.width === nextPosition.style.width &&\n prev?.style.minWidth === nextPosition.style.minWidth &&\n prev?.style.maxHeight === nextPosition.style.maxHeight\n ) {\n return prev;\n }\n return nextPosition;\n });\n };\n\n const handleResize = () => {\n updatePosition();\n };\n\n const handleScroll = (event: Event) => {\n const target = event.target as Node | null;\n if (target && surfaceRef.current?.contains(target)) {\n return;\n }\n updatePosition();\n };\n\n updatePosition();\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleScroll, true);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleScroll, true);\n };\n }, [\n anchorRect,\n anchorRef,\n contentScale,\n constrainHeight,\n matchAnchorWidth,\n minWidth,\n offset,\n rendered,\n placement,\n ]);\n\n useLayoutEffect(() => {\n if (!rendered || !position || !surfaceRef.current) {\n return;\n }\n\n const updatePositionBySurface = () => {\n const nextAnchor = anchorRect ?? resolveAnchorRect(anchorRef?.current);\n if (!nextAnchor) {\n return;\n }\n\n const nextPosition = resolvePopupPosition({\n constrainHeight,\n anchor: nextAnchor,\n contentScale,\n matchAnchorWidth,\n minWidth,\n offset,\n placement,\n popupRect: resolvePopupSurfaceRect(surfaceRef.current, contentScale),\n });\n\n setPosition((prev) => {\n if (\n prev?.placement === nextPosition.placement &&\n prev?.style.left === nextPosition.style.left &&\n prev?.style.top === nextPosition.style.top &&\n prev?.style.width === nextPosition.style.width &&\n prev?.style.minWidth === nextPosition.style.minWidth &&\n prev?.style.maxHeight === nextPosition.style.maxHeight\n ) {\n return prev;\n }\n return nextPosition;\n });\n };\n\n updatePositionBySurface();\n const observer = new ResizeObserver(() => {\n updatePositionBySurface();\n });\n observer.observe(surfaceRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [\n anchorRect,\n anchorRef,\n contentScale,\n constrainHeight,\n matchAnchorWidth,\n minWidth,\n offset,\n rendered,\n placement,\n position,\n ]);\n\n useEffect(() => {\n if (!rendered) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (target?.closest(`.${REACT_COMPONENT_PREFIX}-popup`)) {\n return;\n }\n if (anchorRef?.current?.contains(target as Node)) {\n return;\n }\n onOpenChange?.(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onOpenChange?.(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [anchorRef, onOpenChange, rendered]);\n\n if (!rendered || !position) {\n return null;\n }\n\n // 面板按设计尺寸布局,外层 scale 放大到与表格一致的视觉比例。\n const contentScaleStyle =\n contentScale !== 1\n ? ({\n transform: `scale(${contentScale})`,\n transformOrigin: \"top left\",\n } satisfies CSSProperties)\n : undefined;\n\n return createPortal(\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popup`,\n transition.phase.startsWith(\"leave\") &&\n `${REACT_COMPONENT_PREFIX}-popup-leave`,\n className,\n )}\n style={{\n ...position.style,\n ...style,\n ...contentScaleStyle,\n zIndex,\n }}\n data-placement={position.placement}\n >\n <div\n ref={surfaceRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popup-surface`,\n transition.className,\n surfaceClassName,\n )}\n style={resolvePopupSurfaceStyle(surfaceStyle, position.style.maxHeight)}\n >\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n\nexport function resolvePopupPosition(params: {\n constrainHeight?: boolean;\n anchor: PopupAnchorRect;\n contentScale: number;\n matchAnchorWidth: boolean;\n minWidth?: number;\n offset: number;\n placement: PopupPlacement;\n popupRect: PopupSurfaceRect | null;\n}): ResolvedPopupPosition {\n const {\n anchor,\n contentScale,\n matchAnchorWidth,\n minWidth,\n offset,\n placement,\n popupRect,\n } = params;\n const margin = 8;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n // minWidth / 面板固定宽为设计尺寸;视觉尺寸 = 布局 * contentScale。\n // matchAnchorWidth 时布局宽度 = 锚点视觉宽 / scale,保证放大后贴合触发器。\n const layoutMinWidth = typeof minWidth === \"number\" ? minWidth : undefined;\n const layoutAnchorWidth = toContentLayoutSize(anchor.width, contentScale);\n const preferredVisualWidth =\n popupRect?.width ??\n Math.max(\n (minWidth ?? 0) * contentScale,\n matchAnchorWidth ? anchor.width : 0,\n );\n const popupWidth = preferredVisualWidth;\n const maxVisualHeight = Math.max(0, viewportHeight - margin * 2);\n const popupHeight = params.constrainHeight\n ? Math.min(popupRect?.height ?? 0, maxVisualHeight)\n : (popupRect?.height ?? 0);\n const isHorizontalPlacement =\n placement.startsWith(\"left\") || placement.startsWith(\"right\");\n const preferredVertical = placement.startsWith(\"top\")\n ? \"top\"\n : placement.endsWith(\"Top\")\n ? \"top\"\n : \"bottom\";\n const preferredTop = resolveRawTop({\n anchor,\n isHorizontalPlacement,\n offset,\n popupHeight,\n vertical: preferredVertical,\n });\n const resolvedVertical =\n popupHeight > 0 &&\n !fitsInViewport(preferredTop, popupHeight, viewportHeight, margin)\n ? preferredVertical === \"bottom\"\n ? \"top\"\n : \"bottom\"\n : preferredVertical;\n const rawTop = resolveRawTop({\n anchor,\n isHorizontalPlacement,\n offset,\n popupHeight,\n vertical: resolvedVertical,\n });\n const maxTop = Math.max(margin, viewportHeight - popupHeight - margin);\n const top = clamp(rawTop, margin, maxTop);\n const preferredHorizontal = placement.endsWith(\"Right\")\n ? \"right\"\n : placement.startsWith(\"right\")\n ? \"right\"\n : \"left\";\n const preferredLeft = resolveRawLeft({\n anchor,\n horizontal: preferredHorizontal,\n isHorizontalPlacement,\n offset,\n popupWidth,\n });\n const resolvedHorizontal =\n popupWidth > 0 &&\n !fitsInViewport(preferredLeft, popupWidth, viewportWidth, margin)\n ? preferredHorizontal === \"right\"\n ? \"left\"\n : \"right\"\n : preferredHorizontal;\n const rawLeft = resolveRawLeft({\n anchor,\n horizontal: resolvedHorizontal,\n isHorizontalPlacement,\n offset,\n popupWidth,\n });\n const maxLeft = Math.max(margin, viewportWidth - popupWidth - margin);\n const left = clamp(rawLeft, margin, maxLeft);\n\n return {\n placement: resolvePlacement({\n horizontal: resolvedHorizontal,\n isHorizontalPlacement,\n vertical: resolvedVertical,\n }),\n style: {\n ...(params.constrainHeight\n ? { maxHeight: toContentLayoutSize(maxVisualHeight, contentScale) }\n : {}),\n left,\n top,\n width: matchAnchorWidth ? layoutAnchorWidth : undefined,\n minWidth:\n layoutMinWidth ?? (matchAnchorWidth ? layoutAnchorWidth : undefined),\n },\n };\n}\n\n/** 合并面板的自定义高度上限与视口上限,保留较小值。 */\nexport function resolvePopupSurfaceStyle(\n style: CSSProperties | undefined,\n viewportMaxHeight: CSSProperties[\"maxHeight\"],\n): CSSProperties | undefined {\n if (typeof viewportMaxHeight !== \"number\") return style;\n const custom = style?.maxHeight;\n const maxHeight =\n typeof custom === \"number\"\n ? Math.min(custom, viewportMaxHeight)\n : typeof custom === \"string\" && custom !== \"none\"\n ? `min(${custom}, ${viewportMaxHeight}px)`\n : viewportMaxHeight;\n return {\n ...style,\n boxSizing: \"border-box\",\n minHeight: 0,\n maxHeight,\n overflowY: \"auto\",\n overscrollBehaviorY: \"contain\",\n };\n}\n\nfunction resolvePlacement(params: {\n horizontal: \"left\" | \"right\";\n isHorizontalPlacement: boolean;\n vertical: \"top\" | \"bottom\";\n}): PopupPlacement {\n const { horizontal, isHorizontalPlacement, vertical } = params;\n if (isHorizontalPlacement) {\n if (horizontal === \"left\") {\n return vertical === \"top\" ? \"leftTop\" : \"leftBottom\";\n }\n return vertical === \"top\" ? \"rightTop\" : \"rightBottom\";\n }\n\n if (vertical === \"top\") {\n return horizontal === \"left\" ? \"topLeft\" : \"topRight\";\n }\n return horizontal === \"left\" ? \"bottomLeft\" : \"bottomRight\";\n}\n\nfunction resolveRawTop(params: {\n anchor: PopupAnchorRect;\n isHorizontalPlacement: boolean;\n offset: number;\n popupHeight: number;\n vertical: \"top\" | \"bottom\";\n}) {\n const { anchor, isHorizontalPlacement, offset, popupHeight, vertical } =\n params;\n if (isHorizontalPlacement) {\n return vertical === \"bottom\"\n ? anchor.y + anchor.height - popupHeight\n : anchor.y;\n }\n\n return vertical === \"top\"\n ? anchor.y - offset - popupHeight\n : anchor.y + anchor.height + offset;\n}\n\nfunction resolveRawLeft(params: {\n anchor: PopupAnchorRect;\n horizontal: \"left\" | \"right\";\n isHorizontalPlacement: boolean;\n offset: number;\n popupWidth: number;\n}) {\n const { anchor, horizontal, isHorizontalPlacement, offset, popupWidth } =\n params;\n if (isHorizontalPlacement) {\n return horizontal === \"right\"\n ? anchor.x + anchor.width + offset\n : anchor.x - popupWidth - offset;\n }\n\n return horizontal === \"right\"\n ? anchor.x + anchor.width - popupWidth\n : anchor.x;\n}\n\nfunction fitsInViewport(\n start: number,\n size: number,\n viewportSize: number,\n margin: number,\n) {\n return start >= margin && start + size <= viewportSize - margin;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n if (max < min) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nfunction resolveAnchorRect(\n element?: HTMLElement | null,\n): PopupAnchorRect | null {\n if (!element) {\n return null;\n }\n\n const rect = element.getBoundingClientRect();\n return {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction resolvePopupSurfaceRect(\n element: HTMLElement | null,\n contentScale = 1,\n) {\n if (!element) {\n return null;\n }\n\n const scale =\n typeof contentScale === \"number\" &&\n Number.isFinite(contentScale) &&\n contentScale > 0\n ? contentScale\n : 1;\n\n // offset* 是 transform 前的布局尺寸,碰撞检测需要视觉尺寸。\n return {\n height: element.offsetHeight * scale,\n width: element.offsetWidth * scale,\n };\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-virtual-list {\\n position: relative;\\n overflow-y: auto;\\n}\\n.canvas-react-virtual-list-inner {\\n position: relative;\\n min-width: 100%;\\n}\\n.canvas-react-virtual-list-empty {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n padding: 0 11px;\\n color: #9ca3af;\\n font-size: var(--canvas-react-font-size);\\n}\\n\")","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactVirtualListRef {\n /**\n * 滚动到指定项。\n */\n scrollToIndex: (index: number) => void;\n /**\n * 当前滚动容器。\n */\n element: HTMLDivElement | null;\n}\n\nexport interface ReactVirtualListRenderMeta {\n /**\n * 当前项样式。\n */\n style: CSSProperties;\n}\n\nexport interface ReactVirtualListProps<Item> {\n /**\n * 数据项。\n */\n items: Item[];\n /**\n * 容器高度。\n */\n height: number;\n /**\n * 单项高度。\n */\n itemHeight: number;\n /**\n * 是否启用虚拟滚动。\n */\n virtual?: boolean;\n /**\n * 额外预渲染项数。\n */\n overscan?: number;\n /**\n * 容器类名。\n */\n className?: string;\n /**\n * 内层类名。\n */\n innerClassName?: string;\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n /**\n * 空状态内容。\n */\n empty?: ReactNode;\n /**\n * 获取项 key。\n */\n itemKey: (item: Item, index: number) => string | number;\n /**\n * 渲染项。\n */\n renderItem: (\n item: Item,\n index: number,\n meta: ReactVirtualListRenderMeta,\n ) => ReactNode;\n}\n\n/**\n * 通用虚拟列表组件。\n */\nexport const ReactVirtualList = forwardRef(function ReactVirtualListInner<Item>(\n props: ReactVirtualListProps<Item>,\n ref: React.ForwardedRef<ReactVirtualListRef>,\n) {\n const {\n className,\n empty,\n height,\n innerClassName,\n itemHeight,\n itemKey,\n items,\n overscan = 2,\n renderItem,\n style,\n virtual = true,\n } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n const useVirtual = virtual && items.length * itemHeight > height;\n const startIndex = useVirtual\n ? Math.max(0, Math.floor(scrollTop / itemHeight) - overscan)\n : 0;\n const endIndex = useVirtual\n ? Math.min(\n items.length - 1,\n Math.ceil((scrollTop + height) / itemHeight) + overscan,\n )\n : items.length - 1;\n const visibleItems = useMemo(\n () => items.slice(startIndex, endIndex + 1),\n [endIndex, items, startIndex],\n );\n\n useImperativeHandle(ref, () => ({\n scrollToIndex: (index: number) => {\n const element = hostRef.current;\n if (!element || index < 0) {\n return;\n }\n\n const itemTop = index * itemHeight;\n const itemBottom = itemTop + itemHeight;\n const viewportTop = element.scrollTop;\n const viewportBottom = viewportTop + height;\n\n if (itemTop < viewportTop) {\n element.scrollTop = itemTop;\n return;\n }\n\n if (itemBottom > viewportBottom) {\n element.scrollTop = itemBottom - height;\n }\n },\n element: hostRef.current,\n }));\n\n return (\n <div\n ref={hostRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-virtual-list`,\n `${REACT_COMPONENT_PREFIX}-scrollbar`,\n className,\n )}\n style={{ height, ...style }}\n onScroll={(event) => {\n setScrollTop(event.currentTarget.scrollTop);\n }}\n >\n {items.length === 0 ? (\n <div className={`${REACT_COMPONENT_PREFIX}-virtual-list-empty`}>\n {empty ?? \"暂无数据\"}\n </div>\n ) : (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-virtual-list-inner`,\n innerClassName,\n )}\n style={{ height: items.length * itemHeight }}\n >\n {visibleItems.map((item, index) => {\n const itemIndex = startIndex + index;\n return renderItem(item, itemIndex, {\n style: useVirtual\n ? {\n position: \"absolute\",\n top: itemIndex * itemHeight,\n left: 0,\n right: 0,\n height: itemHeight,\n }\n : {\n height: itemHeight,\n },\n });\n })}\n </div>\n )}\n </div>\n );\n}) as <Item>(\n props: ReactVirtualListProps<Item> & {\n ref?: React.ForwardedRef<ReactVirtualListRef>;\n },\n) => React.JSX.Element;\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-select-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-select {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-select-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-select .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-select-input-wrap:hover,\\n.canvas-react-select-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-select-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: normal;\\n}\\n.canvas-react-select-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-select:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-select:focus {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-select-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-select-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-select-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-select-arrow {\\n pointer-events: none;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n opacity: 1;\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-select:hover .canvas-react-select-arrow,\\n.canvas-react-select-open .canvas-react-select-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-select-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-select-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-select-clear:hover {\\n color: #6b7280;\\n transform: translate(-50%, -50%) rotate(90deg);\\n}\\n.canvas-react-select:hover .canvas-react-select-clear,\\n.canvas-react-select-open .canvas-react-select-clear,\\n.canvas-react-select:focus-within .canvas-react-select-clear,\\n.canvas-react-cascader:hover .canvas-react-select-clear,\\n.canvas-react-cascader-open .canvas-react-select-clear,\\n.canvas-react-cascader:focus-within .canvas-react-select-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-select:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-select-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-select:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-cascader:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-cascader-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-cascader:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow {\\n opacity: 0;\\n}\\n.canvas-react-select-clear-icon,\\n.canvas-react-select-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-select-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-select-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-select-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-select-list {\\n position: relative;\\n overflow-y: auto;\\n}\\n.canvas-react-select-list-inner {\\n position: relative;\\n}\\n.canvas-react-select-option {\\n display: flex;\\n align-items: center;\\n box-sizing: border-box;\\n width: 100%;\\n padding: 0 11px;\\n border-radius: var(--canvas-react-radius-sm);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n cursor: pointer;\\n}\\n.canvas-react-select-option:hover,\\n.canvas-react-select-option-active {\\n background: var(--canvas-react-color-bg-hover);\\n}\\n.canvas-react-select-option-selected {\\n background: var(--canvas-react-color-bg-active);\\n}\\n.canvas-react-select-option-searching {\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-select-option-searching:hover,\\n.canvas-react-select-option-searching.canvas-react-select-option-active {\\n background: var(--canvas-react-color-bg-active);\\n}\\n.canvas-react-select-option-disabled {\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-select-option-highlight {\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n.canvas-react-select-option-disabled .canvas-react-select-option-highlight {\\n color: inherit;\\n}\\n.canvas-react-select-empty {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n padding: 0 11px;\\n color: #9ca3af;\\n font-size: var(--canvas-react-font-size);\\n}\\n\")","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\nimport { ReactPopup } from \"../popup/index\";\nimport {\n ReactVirtualList,\n type ReactVirtualListRef,\n} from \"../virtual-list/index\";\nimport \"./style.css\";\n\nexport interface ReactSelectOption {\n /**\n * 选项文本。\n */\n label: string;\n /**\n * 选项值。\n */\n value: string | number;\n /**\n * 是否禁用。\n */\n disabled?: boolean;\n}\n\nexport type ReactSelectFilterOption = (\n input: string,\n option: ReactSelectOption,\n) => boolean;\n\nexport interface ReactSelectChangeInfo {\n trigger: \"mouse\" | \"keyboard\" | \"input\" | \"clear\";\n}\n\nexport interface ReactSelectProps extends Omit<\n ReactInputProps,\n \"value\" | \"onChange\" | \"onPressEnter\"\n> {\n /**\n * 当前值。\n */\n value?: string | number;\n /**\n * 选项列表。\n */\n options: ReactSelectOption[];\n /**\n * 值变化回调。\n */\n onChange?: (value: string, info: ReactSelectChangeInfo) => void;\n /**\n * 占位提示。\n */\n placeholder?: string;\n /**\n * 弹层类名。\n */\n popupClassName?: string;\n /**\n * 弹层层级。\n */\n popupZIndex?: number;\n /**\n * 列表高度。\n */\n listHeight?: number;\n /**\n * 单项高度。\n */\n optionHeight?: number;\n /**\n * 是否启用虚拟列表。\n */\n virtual?: boolean;\n /**\n * 是否开启搜索过滤。\n */\n showSearch?: boolean;\n /**\n * 自定义搜索过滤逻辑。\n */\n filterOption?: ReactSelectFilterOption;\n /** 允许输入不在 options 中的值。 */\n allowCustomValue?: boolean;\n /** 搜索输入变化回调。 */\n onInputValueChange?: (value: string) => void;\n /** 回车回调。 */\n onPressEnter?: (value: string) => void | Promise<void>;\n /**\n * 是否允许清空。\n */\n allowClear?: boolean;\n /**\n * 是否显示右侧下拉箭头。\n * @default true\n */\n showArrow?: boolean;\n}\n\n/**\n * 基础下拉选择框。\n */\nexport const ReactSelect = forwardRef<HTMLInputElement, ReactSelectProps>(\n function ReactSelect(props, ref) {\n const {\n autoFocus,\n allowCustomValue = false,\n className,\n disabled,\n filterOption,\n onBlur,\n onChange,\n onInputValueChange,\n onPressEnter,\n onFocus,\n onKeyDown,\n options,\n optionHeight = 32,\n listHeight = 224,\n placeholder,\n popupClassName,\n popupZIndex,\n allowClear = true,\n showArrow = true,\n showSearch = false,\n style,\n value,\n virtual = true,\n ...restProps\n } = props;\n const triggerRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<ReactVirtualListRef | null>(null);\n const skipFocusOpenRef = useRef(false);\n const [open, setOpen] = useState(false);\n const selectedIndex = useMemo(\n () =>\n options.findIndex(\n (option) => String(option.value) === String(value ?? \"\"),\n ),\n [options, value],\n );\n const selectedOption =\n selectedIndex >= 0 ? options[selectedIndex] : undefined;\n const [keyword, setKeyword] = useState(\"\");\n const [searching, setSearching] = useState(false);\n const searchKeyword = searching ? keyword : \"\";\n const filteredOptions = useMemo(\n () =>\n filterSelectOptions(options, searchKeyword, showSearch, filterOption),\n [filterOption, options, searchKeyword, showSearch],\n );\n const [activeIndex, setActiveIndex] = useState(() => {\n return selectedIndex >= 0 ? selectedIndex : 0;\n });\n\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n useEffect(() => {\n if (autoFocus) {\n inputRef.current?.focus();\n }\n }, [autoFocus]);\n\n useLayoutEffect(() => {\n if (open && showSearch && !searching) {\n inputRef.current?.select();\n }\n }, [open, searching, showSearch]);\n\n useEffect(() => {\n const nextIndex = filteredOptions.findIndex(\n (option) => String(option.value) === String(value ?? \"\"),\n );\n setActiveIndex(nextIndex >= 0 ? nextIndex : 0);\n }, [filteredOptions, value]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n listRef.current?.scrollToIndex(activeIndex);\n }, [activeIndex, listHeight, open, optionHeight]);\n\n const selectOption = (\n option: ReactSelectOption,\n trigger: ReactSelectChangeInfo[\"trigger\"],\n ) => {\n onChange?.(String(option.value), { trigger });\n setKeyword(option.label);\n setSearching(false);\n setOpen(false);\n inputRef.current?.focus();\n };\n const hasValue = value != null && String(value).length > 0;\n const showClear = allowClear && !disabled && hasValue;\n\n const handleClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipFocusOpenRef.current = true;\n setKeyword(\"\");\n setSearching(false);\n setOpen(false);\n onChange?.(\"\", { trigger: \"clear\" });\n inputRef.current?.blur();\n };\n const openSelect = () => {\n setKeyword(\n resolveSelectKeywordOnOpen(\n selectedOption?.label ??\n (allowCustomValue ? String(value ?? \"\") : undefined),\n ),\n );\n setSearching(false);\n setOpen(true);\n };\n\n return (\n <span className={`${REACT_COMPONENT_PREFIX}-select-wrap`}>\n <div\n ref={triggerRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select`,\n open && `${REACT_COMPONENT_PREFIX}-select-open`,\n disabled && `${REACT_COMPONENT_PREFIX}-select-disabled`,\n className,\n )}\n style={style as CSSProperties}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n if (\n (event.target as HTMLElement | null)?.closest(\n `.${REACT_COMPONENT_PREFIX}-select-clear`,\n )\n ) {\n return;\n }\n if (\n (event.target as HTMLElement | null)?.closest(\n `.${REACT_COMPONENT_PREFIX}-select-arrow`,\n )\n ) {\n return;\n }\n inputRef.current?.focus();\n if (!open) {\n openSelect();\n }\n }}\n >\n <ReactInput\n {...restProps}\n ref={inputRef}\n allowClear={false}\n disabled={disabled}\n readOnly={!showSearch}\n value={\n open && showSearch\n ? keyword\n : (selectedOption?.label ??\n (allowCustomValue ? String(value ?? \"\") : \"\"))\n }\n className={joinClassNames(`${REACT_COMPONENT_PREFIX}-select-input`)}\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-select-input-wrap`}\n placeholder={placeholder}\n onFocus={(event) => {\n if (skipFocusOpenRef.current) {\n skipFocusOpenRef.current = false;\n onFocus?.(event);\n return;\n }\n\n if (!open) {\n openSelect();\n }\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setOpen(false);\n if ((!keyword.trim() || !showSearch) && selectedOption) {\n setKeyword(selectedOption.label);\n }\n onBlur?.(event);\n }}\n onChange={(event) => {\n if (!showSearch) {\n return;\n }\n setKeyword(event.target.value);\n setSearching(true);\n onInputValueChange?.(event.target.value);\n setOpen(true);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (disabled) {\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (!open) {\n openSelect();\n return;\n }\n setActiveIndex((prev) =>\n Math.min(prev + 1, Math.max(filteredOptions.length - 1, 0)),\n );\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!open) {\n openSelect();\n return;\n }\n setActiveIndex((prev) => Math.max(prev - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (!open) {\n openSelect();\n return;\n }\n const targetOption = resolveSelectEnterOption(filteredOptions);\n if (targetOption && !targetOption.disabled) {\n selectOption(targetOption, \"keyboard\");\n } else if (allowCustomValue && keyword.trim()) {\n void Promise.resolve(onPressEnter?.(keyword.trim()));\n }\n return;\n }\n\n if (event.key === \"Escape\") {\n setKeyword(selectedOption?.label ?? \"\");\n setSearching(false);\n setOpen(false);\n }\n }}\n />\n {showClear || showArrow ? (\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-actions`,\n showClear &&\n `${REACT_COMPONENT_PREFIX}-select-actions-clearable`,\n )}\n >\n {showClear ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-select-clear`}\n aria-label=\"清空\"\n tabIndex={-1}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={handleClear}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-select-clear-icon`}\n />\n </button>\n ) : null}\n {showArrow ? (\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-arrow`,\n open && `${REACT_COMPONENT_PREFIX}-select-arrow-open`,\n )}\n />\n ) : null}\n </span>\n ) : null}\n </div>\n <ReactPopup\n open={open}\n anchorRef={triggerRef}\n matchAnchorWidth\n zIndex={popupZIndex}\n surfaceClassName={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-dropdown`,\n popupClassName,\n )}\n onOpenChange={setOpen}\n >\n <ReactVirtualList\n ref={listRef}\n items={filteredOptions}\n height={Math.min(\n listHeight,\n Math.max(filteredOptions.length, 1) * optionHeight,\n )}\n itemHeight={optionHeight}\n virtual={virtual}\n className={`${REACT_COMPONENT_PREFIX}-select-list`}\n innerClassName={`${REACT_COMPONENT_PREFIX}-select-list-inner`}\n empty={\n <div className={`${REACT_COMPONENT_PREFIX}-select-empty`}>\n 暂无数据\n </div>\n }\n itemKey={(option) => String(option.value)}\n renderItem={(option, optionIndex, meta) => {\n const isSelected = String(option.value) === String(value ?? \"\");\n const isActive = optionIndex === activeIndex;\n const isSearching = showSearch && searchKeyword.trim().length > 0;\n\n return (\n <div\n key={String(option.value)}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-option`,\n isSelected &&\n `${REACT_COMPONENT_PREFIX}-select-option-selected`,\n isActive &&\n `${REACT_COMPONENT_PREFIX}-select-option-active`,\n isSearching &&\n `${REACT_COMPONENT_PREFIX}-select-option-searching`,\n option.disabled &&\n `${REACT_COMPONENT_PREFIX}-select-option-disabled`,\n )}\n style={meta.style}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onMouseEnter={() => {\n setActiveIndex(optionIndex);\n }}\n onClick={() => {\n if (option.disabled) {\n return;\n }\n selectOption(option, \"mouse\");\n }}\n >\n {renderSelectOptionLabel(\n option.label,\n showSearch ? searchKeyword : \"\",\n )}\n </div>\n );\n }}\n />\n </ReactPopup>\n </span>\n );\n },\n);\n\n/**\n * 根据搜索配置过滤下拉选项。\n */\nexport function filterSelectOptions(\n options: ReactSelectOption[],\n input: string,\n showSearch: boolean,\n filterOption?: ReactSelectFilterOption,\n) {\n if (!showSearch) {\n return options;\n }\n\n const search = input.trim();\n if (!search) {\n return options;\n }\n if (filterOption) {\n return options.filter((option) => filterOption(search, option));\n }\n\n const normalizedSearch = search.toLowerCase();\n return options.filter((option) => {\n return (\n option.label.toLowerCase().includes(normalizedSearch) ||\n String(option.value).toLowerCase().includes(normalizedSearch)\n );\n });\n}\n\n/**\n * 回车时优先选择过滤结果中的第一项可用选项。\n */\nexport function resolveSelectEnterOption(options: ReactSelectOption[]) {\n return options.find((option) => !option.disabled);\n}\n\n/**\n * 解析下拉打开时的搜索关键字。\n */\nexport function resolveSelectKeywordOnOpen(selectedLabel?: string) {\n return selectedLabel ?? \"\";\n}\n\n/**\n * 将选项文本拆分为普通文本与搜索命中片段。\n */\nexport function splitSelectOptionLabel(\n label: string,\n input: string,\n): Array<{ text: string; highlighted: boolean }> {\n const search = input.trim();\n if (!search) {\n return [{ text: label, highlighted: false }];\n }\n\n const matcher = new RegExp(escapeRegExp(search), \"gi\");\n const parts: Array<{ text: string; highlighted: boolean }> = [];\n let cursor = 0;\n let match = matcher.exec(label);\n while (match) {\n if (match.index > cursor) {\n parts.push({\n text: label.slice(cursor, match.index),\n highlighted: false,\n });\n }\n parts.push({ text: match[0], highlighted: true });\n cursor = match.index + match[0].length;\n match = matcher.exec(label);\n }\n\n if (cursor < label.length) {\n parts.push({ text: label.slice(cursor), highlighted: false });\n }\n\n return parts.length > 0 ? parts : [{ text: label, highlighted: false }];\n}\n\nfunction renderSelectOptionLabel(label: string, input: string) {\n return splitSelectOptionLabel(label, input).map((part, index) =>\n part.highlighted ? (\n <span\n key={`${part.text}-${index}`}\n className={`${REACT_COMPONENT_PREFIX}-select-option-highlight`}\n >\n {part.text}\n </span>\n ) : (\n part.text\n ),\n );\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { Fragment, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from \"react\";\nimport { ReactCheckbox } from \"../checkbox/index\";\nimport { ReactInput } from \"../input/index\";\nimport { ReactPopup } from \"../popup/index\";\nimport { ReactSelect } from \"../select/index\";\nimport { ReactVirtualList } from \"../virtual-list/index\";\n\n/** 通用过滤条件操作符。 */\nexport type ReactFilterConditionOperator =\n | \"none\" | \"eq\" | \"neq\" | \"gt\" | \"gte\" | \"lt\" | \"lte\"\n | \"between\" | \"notBetween\" | \"startsWith\" | \"notStartsWith\"\n | \"endsWith\" | \"notEndsWith\" | \"includes\" | \"notIncludes\"\n | \"blank\" | \"notBlank\";\n\n/** 通用过滤条件。 */\nexport interface ReactFilterPanelCondition {\n operator: ReactFilterConditionOperator;\n value?: string;\n secondValue?: string;\n}\n\n/** 通用过滤面板草稿。 */\nexport interface ReactFilterPanelValue {\n keyword: string;\n mode: \"fuzzy\" | \"exact\";\n searchExact?: boolean;\n selectedKeys?: string[];\n filterType?: \"value\" | \"condition\";\n conditionOperator?: ReactFilterConditionOperator;\n conditionValue?: string;\n conditionSecondValue?: string;\n conditionRelation?: \"and\" | \"or\";\n secondConditionOperator?: ReactFilterConditionOperator;\n secondConditionValue?: string;\n secondConditionSecondValue?: string;\n /** 动态条件列表;存在时优先于旧的两条件字段。 */\n conditions?: ReactFilterPanelCondition[];\n}\n\n/** 通用过滤候选项。 */\nexport interface ReactFilterPanelOption {\n label: string;\n value: string;\n count: number;\n kind?: \"all\" | \"blank\" | \"notBlank\" | \"value\";\n}\n\n/** 通用过滤面板文案。 */\nexport interface ReactFilterPanelTexts {\n title: string;\n valueFilterTab: string;\n conditionFilterTab: string;\n searchPlaceholder: string;\n optionsLabel: string;\n emptyOptions: string;\n loadingOptions: string;\n exactToggleLabel: string;\n allOptionLabel: string;\n blankOptionLabel: string;\n notBlankOptionLabel: string;\n relationLabel: string;\n firstConditionLabel: string;\n secondConditionLabel: string;\n firstValuePlaceholder: string;\n secondValuePlaceholder: string;\n relationAndLabel: string;\n relationOrLabel: string;\n resetAction: string;\n applyAction: string;\n conditionLabel?: string;\n addConditionAction?: string;\n deleteConditionAction?: string;\n}\n\n/** 通用过滤面板请求。 */\nexport interface ReactFilterPanelRequest {\n columnTitle: string;\n anchorRect: { x: number; y: number; width: number; height: number };\n value: ReactFilterPanelValue;\n filterOptionImmediateApply?: boolean;\n options: ReactFilterPanelOption[];\n loadOptions?: (\n signal: AbortSignal,\n ) => ReactFilterPanelOption[] | Promise<ReactFilterPanelOption[]>;\n texts: ReactFilterPanelTexts;\n onApply: (value: ReactFilterPanelValue) => void;\n onReset: () => void;\n onClose: () => void;\n}\n\nconst operators: Array<{ label: string; value: ReactFilterConditionOperator }> = [\n { label: \"不筛选\", value: \"none\" }, { label: \"等于\", value: \"eq\" },\n { label: \"不等于\", value: \"neq\" }, { label: \"大于\", value: \"gt\" },\n { label: \"大于等于\", value: \"gte\" }, { label: \"小于\", value: \"lt\" },\n { label: \"小于等于\", value: \"lte\" }, { label: \"区间\", value: \"between\" },\n { label: \"不在区间\", value: \"notBetween\" }, { label: \"开头是\", value: \"startsWith\" },\n { label: \"开头不是\", value: \"notStartsWith\" }, { label: \"结尾是\", value: \"endsWith\" },\n { label: \"结尾不是\", value: \"notEndsWith\" }, { label: \"包含\", value: \"includes\" },\n { label: \"不包含\", value: \"notIncludes\" }, { label: \"为空\", value: \"blank\" },\n { label: \"不为空\", value: \"notBlank\" },\n];\n\n/** ListTable 与 PivotTable 共用的过滤面板视图。 */\nexport function ReactFilterPanel(props: { request: ReactFilterPanelRequest | null }) {\n const { request } = props;\n const [draft, setDraft] = useState<ReactFilterPanelValue | null>(() => createDraft(request?.value));\n const [tab, setTab] = useState<\"value\" | \"condition\">(resolveTab(request?.value));\n const [options, setOptions] = useState(request?.options ?? []);\n const [loading, setLoading] = useState(Boolean(request?.loadOptions));\n const conditionListRef = useRef<HTMLDivElement | null>(null);\n const [conditionListOverflowing, setConditionListOverflowing] = useState(false);\n\n useEffect(() => {\n setDraft(createDraft(request?.value));\n setTab(resolveTab(request?.value));\n setOptions(request?.options ?? []);\n setLoading(Boolean(request?.loadOptions));\n }, [request]);\n\n useLayoutEffect(() => {\n const element = conditionListRef.current;\n if (!element || tab !== \"condition\") {\n setConditionListOverflowing(false);\n return;\n }\n const measure = () => setConditionListOverflowing(element.scrollHeight > element.clientHeight + 1);\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [draft?.conditions, tab]);\n useEffect(() => {\n if (!request?.loadOptions) return;\n const controller = new AbortController();\n setLoading(true);\n void Promise.resolve(request.loadOptions(controller.signal)).then((items) => {\n if (!controller.signal.aborted) {\n setOptions(items);\n setLoading(false);\n }\n }).catch(() => {\n if (!controller.signal.aborted) {\n setOptions([]);\n setLoading(false);\n }\n });\n return () => controller.abort();\n }, [request]);\n\n const visibleOptions = useMemo(() => {\n const values = options.filter((item) => item.kind !== \"all\");\n const keyword = draft?.keyword.trim().toLowerCase() ?? \"\";\n if (!keyword) return values;\n return values.filter((item) => {\n const label = item.label.toLowerCase();\n const value = item.value.toLowerCase();\n return draft?.searchExact ? label === keyword || value === keyword : label.includes(keyword) || value.includes(keyword);\n });\n }, [draft?.keyword, draft?.searchExact, options]);\n\n if (!request || !draft) return null;\n const selected = new Set(draft.selectedKeys ?? []);\n const visibleKeys = visibleOptions.map((item) => item.value);\n const selectedCount = visibleKeys.filter((value) => selected.has(value)).length;\n const allChecked = visibleKeys.length > 0 && selectedCount === visibleKeys.length;\n const allCount = request.options.find((item) => item.kind === \"all\")?.count ??\n visibleOptions.filter((item) => item.kind === \"value\").reduce((sum, item) => sum + item.count, 0);\n const update = (patch: Partial<ReactFilterPanelValue>) =>\n setDraft((current) => ({ ...(current ?? request.value), ...patch }));\n const updateConditions = (conditions: ReactFilterPanelCondition[]) => {\n const first = conditions[0] ?? createEmptyCondition();\n const second = conditions[1] ?? createEmptyCondition();\n update({\n conditions,\n filterType: \"condition\",\n conditionOperator: first.operator,\n conditionValue: first.value ?? \"\",\n conditionSecondValue: first.secondValue ?? \"\",\n secondConditionOperator: second.operator,\n secondConditionValue: second.value ?? \"\",\n secondConditionSecondValue: second.secondValue ?? \"\",\n });\n };\n const toggle = (keys: string[], checked: boolean) => {\n const next = new Set(draft.selectedKeys ?? []);\n keys.forEach((key) => checked ? next.add(key) : next.delete(key));\n const value = { ...draft, filterType: \"value\" as const, selectedKeys: Array.from(next) };\n setDraft(value);\n if (request.filterOptionImmediateApply) request.onApply(value);\n };\n const apply = () => {\n request.onApply({ ...draft, filterType: tab });\n request.onClose();\n };\n\n return (\n <ReactPopup open anchorRect={request.anchorRect} offset={8} matchAnchorWidth={false}\n minWidth={300} onOpenChange={(open) => { if (!open) request.onClose(); }}\n surfaceStyle={{ width: 300, height: 460, padding: 12, overflow: \"hidden\", boxSizing: \"border-box\" }}>\n <div style={{ height: \"100%\", display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <div style={{ fontSize: 14, fontWeight: 600, color: \"#111827\" }}>\n {request.texts.title} · {request.columnTitle}\n </div>\n <div style={{ display: \"flex\", gap: 8, marginTop: 12 }}>\n <button type=\"button\" style={tabStyle(tab === \"value\")} onClick={() => { setTab(\"value\"); update({ filterType: \"value\" }); }}>\n {request.texts.valueFilterTab}\n </button>\n <button type=\"button\" style={tabStyle(tab === \"condition\")} onClick={() => { setTab(\"condition\"); update({ filterType: \"condition\" }); }}>\n {request.texts.conditionFilterTab}\n </button>\n </div>\n {tab === \"value\" ? (\n <div style={{ display: \"grid\", gap: 12, marginTop: 12, minHeight: 290, alignContent: \"start\", flex: \"1 1 auto\" }}>\n <ReactInput value={draft.keyword} placeholder={request.texts.searchPlaceholder}\n onChange={(event) => update({ keyword: event.target.value, filterType: \"value\" })}\n onPressEnter={apply} style={{ width: \"100%\" }} />\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12, paddingBottom: 8, borderBottom: \"1px solid #f0f0f0\" }}>\n <label style={checkLabelStyle}>\n <ReactCheckbox checked={allChecked} indeterminate={selectedCount > 0 && !allChecked}\n onChange={(event) => toggle(visibleKeys, !!event.target.checked)} />\n <span>{request.texts.allOptionLabel} ({allCount})</span>\n </label>\n <label style={checkLabelStyle}>\n <ReactCheckbox checked={!!draft.searchExact}\n onChange={(event) => update({ searchExact: !!event.target.checked, filterType: \"value\" })} />\n <span>{request.texts.exactToggleLabel}</span>\n </label>\n </div>\n <div style={{ minHeight: 232, borderRadius: 8, border: \"1px solid #f0f0f0\", background: \"#fafafa\", padding: 6 }}>\n {loading || visibleOptions.length === 0 ? (\n <div style={{ minHeight: 220, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"#9ca3af\", fontSize: 12 }}>\n {loading ? request.texts.loadingOptions : request.texts.emptyOptions}\n </div>\n ) : (\n <ReactVirtualList items={visibleOptions} height={Math.min(220, visibleOptions.length * 40)} itemHeight={40}\n itemKey={(item) => item.value} renderItem={(item, _index, meta) => (\n <label key={item.value} className=\"react-list-table-filter-option\"\n style={{ ...optionStyle, ...meta.style }}>\n <ReactCheckbox checked={selected.has(item.value)}\n onChange={(event) => toggle([item.value], !!event.target.checked)} />\n <span title={optionLabel(item, request.texts)} style={optionTextStyle}>{optionLabel(item, request.texts)}</span>\n <span style={{ color: \"#9ca3af\", fontSize: 12 }}>{item.count}</span>\n </label>\n )} />\n )}\n </div>\n </div>\n ) : (\n <div style={{ marginTop: 12, display: \"flex\", flexDirection: \"column\", gap: 10, minHeight: 0, flex: \"1 1 auto\" }}>\n <div ref={conditionListRef} className=\"react-filter-panel-condition-list\"\n style={{ ...conditionListStyle, overflowY: conditionListOverflowing ? \"auto\" : \"hidden\" }}>\n {(draft.conditions ?? []).map((condition, index, conditions) => (\n <Fragment key={index}>\n {index > 0 ? <div className=\"react-filter-panel-condition-relation\" style={conditionRowStyle}>\n <span style={inlineLabelStyle}>{request.texts.relationLabel}</span>\n <ReactSelect value={draft.conditionRelation === \"or\" ? \"or\" : \"and\"} allowClear={false}\n options={[{ label: request.texts.relationAndLabel, value: \"and\" }, { label: request.texts.relationOrLabel, value: \"or\" }]}\n onChange={(value) => update({ conditionRelation: value as \"and\" | \"or\", filterType: \"condition\" })} style={{ width: \"100%\" }} />\n <span />\n </div> : null}\n <ConditionEditor label={resolveConditionLabel(request.texts, index)} condition={condition}\n texts={request.texts} canDelete={conditions.length > 1}\n onDelete={() => updateConditions(conditions.filter((_item, itemIndex) => itemIndex !== index))}\n onChange={(nextCondition) => updateConditions(conditions.map((item, itemIndex) => itemIndex === index ? nextCondition : item))}\n onSubmit={apply} />\n </Fragment>\n ))}\n </div>\n </div>\n )}\n <div className=\"react-filter-panel-footer\" style={footerStyle}>\n {tab === \"condition\" ? <button type=\"button\" style={addConditionStyle}\n onClick={() => updateConditions([...(draft.conditions ?? []), createEmptyCondition()])}>\n + {request.texts.addConditionAction ?? \"新增条件\"}\n </button> : null}\n <div className=\"react-filter-panel-footer-actions\" style={footerActionsStyle}>\n <button type=\"button\" style={actionStyle(false)} onClick={() => { request.onReset(); request.onClose(); }}>{request.texts.resetAction}</button>\n <button type=\"button\" style={actionStyle(true)} onClick={apply}>{request.texts.applyAction}</button>\n </div>\n </div>\n </div>\n </ReactPopup>\n );\n}\n\nfunction ConditionEditor(props: {\n label: string;\n condition: ReactFilterPanelCondition;\n texts: ReactFilterPanelTexts;\n canDelete: boolean;\n onDelete: () => void;\n onChange: (condition: ReactFilterPanelCondition) => void;\n onSubmit: () => void;\n}) {\n const hidesValue = [\"none\", \"blank\", \"notBlank\"].includes(props.condition.operator);\n const needsSecond = [\"between\", \"notBetween\"].includes(props.condition.operator);\n return <div style={conditionEditorStyle}>\n <div className=\"react-filter-panel-condition-row\" style={conditionRowStyle}>\n <span style={inlineLabelStyle}>{props.label}</span>\n <ReactSelect value={props.condition.operator} options={operators} allowClear={false}\n onChange={(value) => props.onChange({ ...props.condition, operator: value as ReactFilterConditionOperator })} style={{ width: \"100%\" }} />\n {props.canDelete ? <button type=\"button\" title={`${props.texts.deleteConditionAction ?? \"删除条件\"} ${props.label}`}\n aria-label={`${props.texts.deleteConditionAction ?? \"删除条件\"} ${props.label}`} style={deleteConditionStyle} onClick={props.onDelete}>×</button> : <span />}\n </div>\n {hidesValue ? null : <div style={conditionValueStyle}>\n <ReactInput value={props.condition.value ?? \"\"} placeholder={props.texts.firstValuePlaceholder} onPressEnter={props.onSubmit}\n onChange={(event) => props.onChange({ ...props.condition, value: event.target.value })} style={{ width: \"100%\" }} />\n {needsSecond ? <ReactInput value={props.condition.secondValue ?? \"\"} placeholder={props.texts.secondValuePlaceholder} onPressEnter={props.onSubmit}\n onChange={(event) => props.onChange({ ...props.condition, secondValue: event.target.value })} style={{ width: \"100%\" }} /> : null}\n </div>}\n </div>;\n}\n\nfunction createDraft(value?: ReactFilterPanelValue | null) {\n if (!value) return null;\n return { ...value, conditions: resolveDraftConditions(value) };\n}\nfunction resolveDraftConditions(value: ReactFilterPanelValue) {\n if (value.conditions?.length) return value.conditions.map((condition) => ({ ...condition }));\n return [\n { operator: value.conditionOperator ?? \"none\", value: value.conditionValue ?? \"\", secondValue: value.conditionSecondValue ?? \"\" },\n { operator: value.secondConditionOperator ?? \"none\", value: value.secondConditionValue ?? \"\", secondValue: value.secondConditionSecondValue ?? \"\" },\n ] satisfies ReactFilterPanelCondition[];\n}\nfunction createEmptyCondition(): ReactFilterPanelCondition {\n return { operator: \"none\", value: \"\", secondValue: \"\" };\n}\nfunction resolveConditionLabel(texts: ReactFilterPanelTexts, index: number) {\n if (index === 0) return texts.firstConditionLabel;\n if (index === 1) return texts.secondConditionLabel;\n return `${texts.conditionLabel ?? \"条件\"} ${index + 1}`;\n}\nfunction resolveTab(value?: ReactFilterPanelValue | null) {\n return value?.filterType === \"condition\" || value?.conditionOperator && value.conditionOperator !== \"none\" ? \"condition\" : \"value\";\n}\nfunction optionLabel(item: ReactFilterPanelOption, texts: ReactFilterPanelTexts) {\n if (item.kind === \"blank\") return texts.blankOptionLabel;\n if (item.kind === \"notBlank\") return texts.notBlankOptionLabel;\n return item.label;\n}\nconst checkLabelStyle: CSSProperties = { display: \"inline-flex\", alignItems: \"center\", gap: 8, color: \"#374151\", fontSize: 14 };\nconst optionStyle: CSSProperties = { display: \"flex\", alignItems: \"center\", gap: 8, minHeight: 40, padding: \"4px 8px\", borderRadius: 6, color: \"#374151\", fontSize: 14, cursor: \"pointer\", boxSizing: \"border-box\" };\nconst optionTextStyle: CSSProperties = { display: \"block\", flex: \"1 1 0\", width: 0, minWidth: 0, overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" };\nconst conditionListStyle: CSSProperties = { display: \"grid\", gap: 8, minHeight: 0, flex: \"1 1 auto\", alignContent: \"start\", paddingRight: 3 };\nconst conditionEditorStyle: CSSProperties = { display: \"grid\", gap: 8 };\nconst conditionRowStyle: CSSProperties = { display: \"grid\", gridTemplateColumns: \"56px minmax(0, 1fr) 22px\", alignItems: \"center\", gap: 8 };\nconst inlineLabelStyle: CSSProperties = { color: \"#6b7280\", fontSize: 12, whiteSpace: \"nowrap\" };\nconst conditionValueStyle: CSSProperties = { display: \"grid\", gap: 8, marginLeft: 64, marginRight: 30 };\nconst addConditionStyle: CSSProperties = { height: 32, padding: \"0 10px\", border: \"1px solid #91caff\", borderRadius: 6, background: \"#f0f7ff\", color: \"#1677ff\", cursor: \"pointer\", whiteSpace: \"nowrap\" };\nconst deleteConditionStyle: CSSProperties = { width: 22, height: 22, padding: 0, border: 0, borderRadius: 4, background: \"transparent\", color: \"#9ca3af\", fontSize: 18, lineHeight: \"20px\", cursor: \"pointer\" };\nconst footerStyle: CSSProperties = { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 8 };\nconst footerActionsStyle: CSSProperties = { display: \"flex\", gap: 8, marginLeft: \"auto\" };\nfunction tabStyle(active: boolean): CSSProperties { return { flex: 1, height: 32, border: active ? \"1px solid #1677ff\" : \"1px solid #d9d9d9\", borderRadius: 6, background: active ? \"#e6f4ff\" : \"#fff\", color: active ? \"#1677ff\" : \"#374151\", cursor: \"pointer\" }; }\nfunction actionStyle(primary: boolean): CSSProperties { return { minWidth: 72, height: 32, padding: \"0 12px\", borderRadius: 6, border: primary ? \"1px solid #1677ff\" : \"1px solid #d9d9d9\", background: primary ? \"#1677ff\" : \"#fff\", color: primary ? \"#fff\" : \"#374151\", cursor: \"pointer\" }; }\n","import styleInject from '#style-inject';styleInject(\".canvas-react-color-wrap {\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n min-height: 0;\\n box-sizing: border-box;\\n}\\n.canvas-react-color {\\n display: flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n min-height: 0;\\n box-sizing: border-box;\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\\n cursor: pointer;\\n}\\n.canvas-react-color:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-color-open,\\n.canvas-react-color:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-color-disabled {\\n color: #9ca3af;\\n background: var(--canvas-react-color-bg-soft);\\n cursor: not-allowed;\\n}\\n.canvas-react-color-preview {\\n flex: 0 0 auto;\\n width: calc(24px * var(--canvas-react-content-zoom, 1));\\n height: calc(24px * var(--canvas-react-content-zoom, 1));\\n margin-left: 3px;\\n box-sizing: border-box;\\n border: 1px solid rgba(0, 0, 0, 0.12);\\n border-radius: 4px;\\n}\\n.canvas-react-color-input-wrap {\\n flex: 1;\\n min-width: 0;\\n height: 100%;\\n min-height: 0;\\n border: 0;\\n box-shadow: none;\\n}\\n.canvas-react-color .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-color-input-wrap:hover,\\n.canvas-react-color-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-color-input {\\n cursor: pointer;\\n text-transform: uppercase;\\n}\\n.canvas-react-color-arrow {\\n flex: 0 0 auto;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n margin-right: var(--canvas-react-control-padding-inline, 11px);\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: rotate(45deg) translateY(-2px);\\n transition: transform 0.18s ease;\\n}\\n.canvas-react-color-arrow-open {\\n transform: rotate(225deg) translate(-1px, -1px);\\n}\\n.canvas-react-color-dropdown {\\n overflow: hidden;\\n}\\n.canvas-react-color-panel {\\n padding: 12px;\\n box-sizing: border-box;\\n}\\n.canvas-react-color-saturation {\\n position: relative;\\n height: 150px;\\n overflow: hidden;\\n border-radius: 6px;\\n cursor: crosshair;\\n background-image:\\n linear-gradient(\\n to top,\\n #000,\\n transparent),\\n linear-gradient(\\n to right,\\n #fff,\\n transparent);\\n touch-action: none;\\n}\\n.canvas-react-color-saturation-thumb {\\n position: absolute;\\n width: 12px;\\n height: 12px;\\n border: 2px solid #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.28), 0 1px 3px rgba(0, 0, 0, 0.28);\\n transform: translate(-50%, -50%);\\n pointer-events: none;\\n}\\n.canvas-react-color-controls {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n margin-top: 12px;\\n}\\n.canvas-react-color-current {\\n flex: 0 0 28px;\\n height: 28px;\\n box-sizing: border-box;\\n border: 1px solid rgba(0, 0, 0, 0.12);\\n border-radius: 50%;\\n}\\n.canvas-react-color-hue {\\n width: 100%;\\n height: 12px;\\n margin: 0;\\n appearance: none;\\n border-radius: 999px;\\n background:\\n linear-gradient(\\n to right,\\n #f00,\\n #ff0,\\n #0f0,\\n #0ff,\\n #00f,\\n #f0f,\\n #f00);\\n cursor: pointer;\\n}\\n.canvas-react-color-hue::-webkit-slider-thumb {\\n width: 14px;\\n height: 14px;\\n appearance: none;\\n border: 2px solid #fff;\\n border-radius: 50%;\\n background: transparent;\\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.28);\\n}\\n.canvas-react-color-value-row {\\n display: grid;\\n grid-template-columns: 36px 1fr;\\n align-items: center;\\n gap: 8px;\\n margin-top: 12px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-color-value-row .canvas-react-input-affix-wrapper {\\n height: 28px;\\n}\\n.canvas-react-color-presets {\\n display: grid;\\n grid-template-columns: repeat(8, 20px);\\n gap: 7px;\\n margin-top: 12px;\\n}\\n.canvas-react-color-preset {\\n width: 20px;\\n height: 20px;\\n padding: 0;\\n box-sizing: border-box;\\n border: 1px solid rgba(0, 0, 0, 0.12);\\n border-radius: 4px;\\n cursor: pointer;\\n transition: transform 0.16s ease, box-shadow 0.16s ease;\\n}\\n.canvas-react-color-preset:hover {\\n transform: scale(1.12);\\n}\\n.canvas-react-color-preset-selected {\\n box-shadow: 0 0 0 2px #fff, 0 0 0 3px var(--canvas-react-color-primary);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"./style.css\";\r\n\r\nconst DEFAULT_COLOR = \"#1677ff\";\r\nconst PRESET_COLORS = [\r\n \"#ff4d4f\",\r\n \"#fa8c16\",\r\n \"#fadb14\",\r\n \"#52c41a\",\r\n \"#13c2c2\",\r\n \"#1677ff\",\r\n \"#2f54eb\",\r\n \"#722ed1\",\r\n \"#eb2f96\",\r\n \"#000000\",\r\n \"#8c8c8c\",\r\n \"#ffffff\",\r\n];\r\n\r\nexport interface ReactColorPickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n /** 当前颜色值。 */\r\n value?: string;\r\n /** 颜色变化回调,返回标准六位 HEX。 */\r\n onChange?: (value: string) => void;\r\n /** 弹层类名。 */\r\n popupClassName?: string;\r\n /** 预设颜色。 */\r\n presets?: string[];\r\n}\r\n\r\n/**\r\n * AntD 风格颜色选择器。\r\n */\r\nexport const ReactColorPicker = forwardRef<\r\n HTMLInputElement,\r\n ReactColorPickerProps\r\n>(function ReactColorPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择颜色\",\r\n popupClassName,\r\n presets = PRESET_COLORS,\r\n style,\r\n value,\r\n showArrow = true,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const resolvedValue = normalizeHexColor(value) ?? DEFAULT_COLOR;\r\n const [open, setOpen] = useState(false);\r\n const [draftValue, setDraftValue] = useState(resolvedValue);\r\n const [hexText, setHexText] = useState(resolvedValue.toUpperCase());\r\n const hsv = useMemo(() => hexToHsv(draftValue), [draftValue]);\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n setDraftValue(resolvedValue);\r\n setHexText(resolvedValue.toUpperCase());\r\n }, [resolvedValue]);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n const updateValue = (nextValue: string) => {\r\n setDraftValue(nextValue);\r\n setHexText(nextValue.toUpperCase());\r\n onChange?.(nextValue);\r\n };\r\n\r\n const updateSaturation = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n const rect = event.currentTarget.getBoundingClientRect();\r\n const saturation = clamp((event.clientX - rect.left) / rect.width, 0, 1);\r\n const brightness = clamp(\r\n 1 - (event.clientY - rect.top) / rect.height,\r\n 0,\r\n 1,\r\n );\r\n updateValue(hsvToHex({ ...hsv, saturation, brightness }));\r\n };\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-color-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color`,\r\n open && `${REACT_COMPONENT_PREFIX}-color-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-color-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={() => {\r\n if (!disabled) {\r\n inputRef.current?.focus();\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-color-preview`}\r\n style={{ backgroundColor: draftValue }}\r\n />\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={value ? draftValue.toUpperCase() : \"\"}\r\n placeholder={placeholder}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-color-input-wrap`}\r\n className={`${REACT_COMPONENT_PREFIX}-color-input`}\r\n onFocus={(event) => {\r\n setOpen(true);\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (!event.defaultPrevented && event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-color-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={240}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 240 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div ref={popupRef} className={`${REACT_COMPONENT_PREFIX}-color-panel`}>\r\n <div\r\n className={`${REACT_COMPONENT_PREFIX}-color-saturation`}\r\n style={{ backgroundColor: `hsl(${hsv.hue} 100% 50%)` }}\r\n onPointerDown={(event) => {\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n updateSaturation(event);\r\n }}\r\n onPointerMove={(event) => {\r\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\r\n updateSaturation(event);\r\n }\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-color-saturation-thumb`}\r\n style={{\r\n left: `${hsv.saturation * 100}%`,\r\n top: `${(1 - hsv.brightness) * 100}%`,\r\n backgroundColor: draftValue,\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-color-controls`}>\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-color-current`}\r\n style={{ backgroundColor: draftValue }}\r\n />\r\n <input\r\n className={`${REACT_COMPONENT_PREFIX}-color-hue`}\r\n type=\"range\"\r\n min={0}\r\n max={360}\r\n value={Math.round(hsv.hue)}\r\n aria-label=\"色相\"\r\n onChange={(event) => {\r\n updateValue(\r\n hsvToHex({ ...hsv, hue: Number(event.target.value) }),\r\n );\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-color-value-row`}>\r\n <span>HEX</span>\r\n <ReactInput\r\n value={hexText}\r\n allowClear={false}\r\n aria-label=\"HEX 颜色值\"\r\n onChange={(event) => {\r\n const nextText = event.target.value.toUpperCase();\r\n setHexText(nextText);\r\n const nextValue = normalizeHexColor(nextText);\r\n if (nextValue) {\r\n updateValue(nextValue);\r\n }\r\n }}\r\n onBlur={() => {\r\n setHexText(draftValue.toUpperCase());\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-color-presets`}>\r\n {presets.map((preset) => {\r\n const normalizedPreset = normalizeHexColor(preset);\r\n return normalizedPreset ? (\r\n <button\r\n type=\"button\"\r\n key={normalizedPreset}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color-preset`,\r\n normalizedPreset === draftValue &&\r\n `${REACT_COMPONENT_PREFIX}-color-preset-selected`,\r\n )}\r\n style={{ backgroundColor: normalizedPreset }}\r\n title={normalizedPreset.toUpperCase()}\r\n onMouseDown={(event) => event.preventDefault()}\r\n onClick={() => updateValue(normalizedPreset)}\r\n />\r\n ) : null;\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\ninterface HsvColor {\r\n hue: number;\r\n saturation: number;\r\n brightness: number;\r\n}\r\n\r\n/**\r\n * 将 HEX 颜色转换为 HSV。\r\n */\r\nexport function hexToHsv(value: string): HsvColor {\r\n const normalized = normalizeHexColor(value) ?? DEFAULT_COLOR;\r\n const red = Number.parseInt(normalized.slice(1, 3), 16) / 255;\r\n const green = Number.parseInt(normalized.slice(3, 5), 16) / 255;\r\n const blue = Number.parseInt(normalized.slice(5, 7), 16) / 255;\r\n const max = Math.max(red, green, blue);\r\n const min = Math.min(red, green, blue);\r\n const delta = max - min;\r\n let hue = 0;\r\n if (delta > 0) {\r\n if (max === red) hue = 60 * (((green - blue) / delta) % 6);\r\n else if (max === green) hue = 60 * ((blue - red) / delta + 2);\r\n else hue = 60 * ((red - green) / delta + 4);\r\n }\r\n return {\r\n hue: hue < 0 ? hue + 360 : hue,\r\n saturation: max === 0 ? 0 : delta / max,\r\n brightness: max,\r\n };\r\n}\r\n\r\n/**\r\n * 将 HSV 颜色转换为标准六位 HEX。\r\n */\r\nexport function hsvToHex(color: HsvColor) {\r\n const hue = ((color.hue % 360) + 360) % 360;\r\n const chroma = color.brightness * color.saturation;\r\n const x = chroma * (1 - Math.abs(((hue / 60) % 2) - 1));\r\n const offset = color.brightness - chroma;\r\n const [red, green, blue] =\r\n hue < 60\r\n ? [chroma, x, 0]\r\n : hue < 120\r\n ? [x, chroma, 0]\r\n : hue < 180\r\n ? [0, chroma, x]\r\n : hue < 240\r\n ? [0, x, chroma]\r\n : hue < 300\r\n ? [x, 0, chroma]\r\n : [chroma, 0, x];\r\n return `#${[red, green, blue]\r\n .map((channel) =>\r\n Math.round((channel + offset) * 255)\r\n .toString(16)\r\n .padStart(2, \"0\"),\r\n )\r\n .join(\"\")}`;\r\n}\r\n\r\n/**\r\n * 规范化三位或六位 HEX 颜色。\r\n */\r\nexport function normalizeHexColor(value: unknown) {\r\n const text = String(value ?? \"\")\r\n .trim()\r\n .toLowerCase();\r\n if (/^#[0-9a-f]{6}$/.test(text)) {\r\n return text;\r\n }\r\n if (/^#[0-9a-f]{3}$/.test(text)) {\r\n return `#${text\r\n .slice(1)\r\n .split(\"\")\r\n .map((char) => `${char}${char}`)\r\n .join(\"\")}`;\r\n }\r\n return null;\r\n}\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-year-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-year {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-year:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-year-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-year-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-year-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-year .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-year-input-wrap:hover,\\n.canvas-react-year-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-year-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-year-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-year-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-year:hover .canvas-react-year-arrow,\\n.canvas-react-year-open .canvas-react-year-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-year-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-year-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-year:hover .canvas-react-year-clear,\\n.canvas-react-year-open .canvas-react-year-clear,\\n.canvas-react-year:focus-within .canvas-react-year-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-year:hover .canvas-react-year-actions-clearable .canvas-react-year-arrow,\\n.canvas-react-year-open .canvas-react-year-actions-clearable .canvas-react-year-arrow,\\n.canvas-react-year:focus-within .canvas-react-year-actions-clearable .canvas-react-year-arrow {\\n opacity: 0;\\n}\\n.canvas-react-year-clear-icon,\\n.canvas-react-year-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-year-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-year-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-year-dropdown {\\n padding: 0;\\n}\\n.canvas-react-year-panel {\\n overflow: hidden;\\n border-radius: 12px;\\n}\\n.canvas-react-year-header {\\n display: grid;\\n grid-template-columns: 40px 1fr 40px;\\n align-items: center;\\n height: 44px;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-year-title {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text);\\n font-size: 16px;\\n font-weight: 600;\\n line-height: 1;\\n text-align: center;\\n cursor: pointer;\\n transition: color 0.18s ease;\\n}\\n.canvas-react-year-title:hover {\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-year-nav {\\n position: relative;\\n height: 100%;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n cursor: pointer;\\n transition: color 0.18s ease, background-color 0.18s ease;\\n}\\n.canvas-react-year-nav:hover {\\n color: var(--canvas-react-color-primary);\\n background: rgba(22, 119, 255, 0.05);\\n}\\n.canvas-react-year-nav-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 7px;\\n height: 7px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transition: border-color 0.18s ease, transform 0.18s ease;\\n}\\n.canvas-react-year-nav:hover .canvas-react-year-nav-arrow {\\n border-color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-year-nav-arrow-left {\\n transform: translate(-42%, -50%) rotate(135deg);\\n}\\n.canvas-react-year-nav-arrow-right {\\n transform: translate(-58%, -50%) rotate(-45deg);\\n}\\n.canvas-react-year-grid {\\n display: grid;\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 8px 4px;\\n padding: 16px 12px 12px;\\n}\\n.canvas-react-year-cell {\\n height: 40px;\\n border: none;\\n border-radius: var(--canvas-react-radius-sm);\\n background: transparent;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n cursor: pointer;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-year-cell:hover {\\n background: var(--canvas-react-color-bg-hover);\\n}\\n.canvas-react-year-cell-selected {\\n background: var(--canvas-react-color-bg-active);\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n.canvas-react-year-cell-muted {\\n color: #c4c7cf;\\n}\\n\")","import styleInject from '#style-inject';styleInject(\"@import \\\"../month/style.css\\\";\\n.canvas-react-date-panel {\\n padding-bottom: 8px;\\n}\\n.canvas-react-date-weekdays,\\n.canvas-react-date-grid {\\n display: grid;\\n grid-template-columns: repeat(7, minmax(0, 1fr));\\n gap: 6px 4px;\\n padding: 0 12px;\\n}\\n.canvas-react-date-weekdays {\\n padding-top: 12px;\\n padding-bottom: 8px;\\n}\\n.canvas-react-date-weekday {\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n line-height: 1;\\n text-align: center;\\n}\\n.canvas-react-date-cell {\\n height: 36px;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDatePickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前日期值,格式为 YYYY-MM-DD。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 基础日期选择器。\r\n */\r\nexport const ReactDatePicker = forwardRef<HTMLInputElement, ReactDatePickerProps>(\r\n function ReactDatePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"date\" | \"month\" | \"year\" | \"decade\">(\"date\");\r\n const parsedValue = useMemo(() => parseDateValue(value), [value]);\r\n const [panelDate, setPanelDate] = useState(() => ({\r\n day: parsedValue?.day ?? 1,\r\n month: parsedValue?.month ?? new Date().getMonth() + 1,\r\n year: parsedValue?.year ?? new Date().getFullYear(),\r\n }));\r\n const yearPanelStart = useMemo(\r\n () => resolveDecadeStart(panelDate.year),\r\n [panelDate.year],\r\n );\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),\r\n [yearPanelStart],\r\n );\r\n const decadeItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10),\r\n [decadePanelStart],\r\n );\r\n const calendarDays = useMemo(\r\n () => buildCalendarDays(panelDate.year, panelDate.month),\r\n [panelDate.month, panelDate.year],\r\n );\r\n const displayValue =\r\n parsedValue == null\r\n ? \"\"\r\n : `${parsedValue.year}-${String(parsedValue.month).padStart(2, \"0\")}-${String(parsedValue.day).padStart(2, \"0\")}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"date\");\r\n setPanelDate({\r\n day: parsedValue?.day ?? 1,\r\n month: parsedValue?.month ?? new Date().getMonth() + 1,\r\n year: parsedValue?.year ?? new Date().getFullYear(),\r\n });\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={296}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 296 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-panel`,\r\n `${REACT_COMPONENT_PREFIX}-date-panel`,\r\n )}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, -1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year - 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year - 10 };\r\n }\r\n return { ...prev, year: prev.year - 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"date\") {\r\n setMode(\"month\");\r\n return;\r\n }\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"date\"\r\n ? `${panelDate.year}年${String(panelDate.month).padStart(2, \"0\")}月`\r\n : mode === \"month\"\r\n ? `${panelDate.year}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, 1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year + 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year + 10 };\r\n }\r\n return { ...prev, year: prev.year + 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n {mode === \"date\" ? (\r\n <>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div\r\n key={label}\r\n className={`${REACT_COMPONENT_PREFIX}-date-weekday`}\r\n >\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {calendarDays.map((dayItem) => {\r\n const selected =\r\n parsedValue?.year === dayItem.year &&\r\n parsedValue?.month === dayItem.month &&\r\n parsedValue?.day === dayItem.day;\r\n return (\r\n <button\r\n key={`${dayItem.year}-${dayItem.month}-${dayItem.day}`}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(\r\n `${dayItem.year}-${String(dayItem.month).padStart(2, \"0\")}-${String(dayItem.day).padStart(2, \"0\")}`,\r\n );\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {dayItem.day}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n ) : (\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected =\r\n parsedValue?.year === panelDate.year &&\r\n parsedValue.month === Number(month);\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => ({\r\n ...prev,\r\n month: Number(month),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart && yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === panelDate.year;\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => ({\r\n ...prev,\r\n year: yearItem,\r\n }));\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart &&\r\n yearPanelStart <= decadeStart + 9;\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => ({\r\n ...prev,\r\n year: decadeStart,\r\n }));\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseDateValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n if (\r\n !Number.isInteger(year) ||\r\n !Number.isInteger(month) ||\r\n !Number.isInteger(day) ||\r\n month < 1 ||\r\n month > 12\r\n ) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return { day, month, year };\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth({ year, month, day: 1 }, -1);\r\n const nextMonthDate = shiftMonth({ year, month, day: 1 }, 1);\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: Array<{\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n }> = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(\r\n value: { year: number; month: number; day: number },\r\n delta: number,\r\n) {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n return {\r\n day: 1,\r\n month: date.getMonth() + 1,\r\n year: date.getFullYear(),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n@import \\\"../date/style.css\\\";\\n@import \\\"../time/style.css\\\";\\n.canvas-react-date-range-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-date-range {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-date-range-control {\\n position: relative;\\n}\\n.canvas-react-date-range:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-date-range-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-date-range-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-date-range-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-date-range .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-date-range-input-wrap:hover,\\n.canvas-react-date-range-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-date-range-hidden-input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n border: 0;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-date-range-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-date-range-values {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-date-range-value {\\n position: relative;\\n display: flex;\\n flex: 1 1 0;\\n flex-direction: row;\\n justify-content: flex-start;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: 1;\\n text-align: left;\\n box-sizing: border-box;\\n cursor: pointer;\\n}\\n.canvas-react-date-range-value::after {\\n position: absolute;\\n right: 0;\\n bottom: -1px;\\n left: 0;\\n height: 2px;\\n border-radius: 999px;\\n background: transparent;\\n content: \\\"\\\";\\n transition: background-color 0.18s ease;\\n}\\n.canvas-react-date-range-value-active::after {\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-date-range-value-text {\\n display: block;\\n width: 100%;\\n min-width: 0;\\n height: auto;\\n padding: 0;\\n border: none;\\n outline: none;\\n overflow: hidden;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n@supports (height: 1lh) {\\n .canvas-react-date-range-value-text {\\n height: 1lh;\\n }\\n}\\n.canvas-react-date-range-value-text::placeholder {\\n color: inherit;\\n opacity: 1;\\n}\\n.canvas-react-date-range-separator {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n padding: 0 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-date-range-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-date-range-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-date-range:hover .canvas-react-date-range-arrow,\\n.canvas-react-date-range-open .canvas-react-date-range-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-date-range-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-date-range-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-date-range:hover .canvas-react-date-range-clear,\\n.canvas-react-date-range-open .canvas-react-date-range-clear,\\n.canvas-react-date-range:focus-within .canvas-react-date-range-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-date-range-clear-icon,\\n.canvas-react-date-range-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-date-range-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-date-range-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-date-range-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-date-range-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n.canvas-react-date-range-calendars {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-date-range-calendar {\\n display: flex;\\n flex-direction: column;\\n min-width: 0;\\n min-height: 0;\\n}\\n.canvas-react-date-range-calendar + .canvas-react-date-range-calendar {\\n border-left: 1px solid var(--canvas-react-color-split, #f0f0f0);\\n}\\n.canvas-react-date-range-calendar .canvas-react-year-title {\\n cursor: default;\\n}\\n.canvas-react-date-range-calendar .canvas-react-year-nav:disabled {\\n cursor: default;\\n opacity: 0;\\n}\\n.canvas-react-date-range-calendar .canvas-react-date-grid {\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-date-range-cell {\\n position: relative;\\n border-radius: 0;\\n}\\n.canvas-react-date-range-cell.canvas-react-year-cell-selected {\\n background: rgba(22, 119, 255, 0.12);\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n.canvas-react-date-range-cell::before {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n background: transparent;\\n content: \\\"\\\";\\n}\\n.canvas-react-date-range-cell-in-range {\\n background: rgba(22, 119, 255, 0.12);\\n}\\n.canvas-react-date-range-cell-in-range::before {\\n background: transparent;\\n}\\n.canvas-react-date-range-cell-range-start {\\n border-top-left-radius: var(--canvas-react-radius-sm);\\n border-bottom-left-radius: var(--canvas-react-radius-sm);\\n}\\n.canvas-react-date-range-cell-range-start::before {\\n left: 0;\\n}\\n.canvas-react-date-range-cell-range-end {\\n border-top-right-radius: var(--canvas-react-radius-sm);\\n border-bottom-right-radius: var(--canvas-react-radius-sm);\\n}\\n.canvas-react-date-range-cell-range-end::before {\\n right: 0;\\n}\\n.canvas-react-date-range-cell-range-start.canvas-react-date-range-cell-range-end {\\n border-radius: var(--canvas-react-radius-sm);\\n}\\n.canvas-react-date-range-cell-range-start.canvas-react-date-range-cell-range-end::before {\\n left: 0;\\n right: 0;\\n}\\n.canvas-react-date-range-cell-text {\\n position: relative;\\n z-index: 1;\\n}\\n.canvas-react-date-range-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 12px;\\n padding: 8px 4px 4px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport type { ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDateRangePickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 当前日期区间值,格式为 `[开始日期, 结束日期]`。\r\n */\r\n value?: [string, string];\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: [string, string]) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 区间分隔符。\r\n */\r\n rangeSeparator?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 日期区间选择器。\r\n */\r\nexport const ReactDateRangePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactDateRangePickerProps\r\n>(function ReactDateRangePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期区间\",\r\n popupClassName,\r\n rangeSeparator = \" ~ \",\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const startInputRef = useRef<HTMLInputElement | null>(null);\r\n const endInputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [activePart, setActivePart] = useState<\"start\" | \"end\">(\"start\");\r\n const [draftRange, setDraftRange] = useState(() =>\r\n parseDateRangeValue(value, rangeSeparator),\r\n );\r\n const [hoverDate, setHoverDate] = useState<string | null>(null);\r\n const [leftPanel, setLeftPanel] = useState(() =>\r\n resolveInitialPanelMonth(parseDateRangeValue(value, rangeSeparator)),\r\n );\r\n const rightPanel = useMemo(() => shiftMonth(leftPanel, 1), [leftPanel]);\r\n const leftCalendarDays = useMemo(\r\n () => buildCalendarDays(leftPanel.year, leftPanel.month),\r\n [leftPanel.month, leftPanel.year],\r\n );\r\n const rightCalendarDays = useMemo(\r\n () => buildCalendarDays(rightPanel.year, rightPanel.month),\r\n [rightPanel.month, rightPanel.year],\r\n );\r\n const showClear =\r\n allowClear &&\r\n !disabled &&\r\n (draftRange.start.length > 0 || draftRange.end.length > 0);\r\n\r\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n startInputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n }, [rangeSeparator, value]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-date-range-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range`,\r\n `${REACT_COMPONENT_PREFIX}-date-range-control`,\r\n open && `${REACT_COMPONENT_PREFIX}-date-range-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-date-range-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-date-range-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-values`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-value`,\r\n activePart === \"start\" &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"start\");\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n startInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n {...restProps}\r\n ref={startInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.start}\r\n placeholder=\"YYYY-MM-DD\"\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"start\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n <span className={`${REACT_COMPONENT_PREFIX}-date-range-separator`}>\r\n {rangeSeparator.trim()}\r\n </span>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-value`,\r\n activePart === \"end\" &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"end\");\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n ref={endInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.end}\r\n placeholder=\"YYYY-MM-DD\"\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"end\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n </div>\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-actions`,\r\n showClear &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.([\"\", \"\"]);\r\n startInputRef.current?.blur();\r\n endInputRef.current?.blur();\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-clear-icon`}\r\n />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-date-range-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={616}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 616 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-calendars`}>\r\n <DateRangeCalendar\r\n monthDate={leftPanel}\r\n showPrev\r\n showNext={false}\r\n startValue={draftRange.start}\r\n endValue={draftRange.end}\r\n hoverValue={hoverDate}\r\n days={leftCalendarDays}\r\n onPrev={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, -1));\r\n }}\r\n onNext={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, 1));\r\n }}\r\n onHover={setHoverDate}\r\n onSelect={(nextDate) => {\r\n setDraftRange((prev) =>\r\n resolveNextRange(prev, nextDate, activePart),\r\n );\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n }\r\n }}\r\n />\r\n <DateRangeCalendar\r\n monthDate={rightPanel}\r\n showPrev={false}\r\n showNext\r\n startValue={draftRange.start}\r\n endValue={draftRange.end}\r\n hoverValue={hoverDate}\r\n days={rightCalendarDays}\r\n onPrev={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, -1));\r\n }}\r\n onNext={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, 1));\r\n }}\r\n onHover={setHoverDate}\r\n onSelect={(nextDate) => {\r\n setDraftRange((prev) =>\r\n resolveNextRange(prev, nextDate, activePart),\r\n );\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n }\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n const today = formatDateOnly(new Date());\r\n setDraftRange((prev) =>\r\n resolveNextRange(prev, today, activePart),\r\n );\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n }\r\n }}\r\n >\r\n 今天\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (!draftRange.start || !draftRange.end) {\r\n return;\r\n }\r\n onChange?.([draftRange.start, draftRange.end]);\r\n setOpen(false);\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\nfunction DateRangeCalendar(props: {\r\n monthDate: { month: number; year: number };\r\n days: CalendarDayItem[];\r\n startValue: string;\r\n endValue: string;\r\n hoverValue: string | null;\r\n showPrev: boolean;\r\n showNext: boolean;\r\n onPrev: () => void;\r\n onNext: () => void;\r\n onHover: (value: string | null) => void;\r\n onSelect: (value: string) => void;\r\n}) {\r\n const {\r\n days,\r\n endValue,\r\n hoverValue,\r\n monthDate,\r\n onHover,\r\n onNext,\r\n onPrev,\r\n onSelect,\r\n showNext,\r\n showPrev,\r\n startValue,\r\n } = props;\r\n\r\n return (\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-calendar`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一月\"\r\n disabled={!showPrev}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (showPrev) {\r\n onPrev();\r\n }\r\n }}\r\n >\r\n {showPrev ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n ) : null}\r\n </button>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-title`}>\r\n {monthDate.year}年{String(monthDate.month).padStart(2, \"0\")}月\r\n </div>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一月\"\r\n disabled={!showNext}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (showNext) {\r\n onNext();\r\n }\r\n }}\r\n >\r\n {showNext ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n ) : null}\r\n </button>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div key={label} className={`${REACT_COMPONENT_PREFIX}-date-weekday`}>\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {days.map((dayItem) => {\r\n const dateValue = `${dayItem.year}-${String(dayItem.month).padStart(2, \"0\")}-${String(dayItem.day).padStart(2, \"0\")}`;\r\n const selectedStart = startValue === dateValue;\r\n const selectedEnd = endValue === dateValue;\r\n const inRange = isDateInRange(\r\n dateValue,\r\n startValue,\r\n endValue,\r\n hoverValue,\r\n );\r\n const cellStyle = inRange\r\n ? {\r\n backgroundColor: \"rgba(22, 119, 255, 0.12)\",\r\n borderBottomLeftRadius: selectedStart ? \"6px\" : \"0\",\r\n borderBottomRightRadius: selectedEnd ? \"6px\" : \"0\",\r\n borderTopLeftRadius: selectedStart ? \"6px\" : \"0\",\r\n borderTopRightRadius: selectedEnd ? \"6px\" : \"0\",\r\n }\r\n : undefined;\r\n return (\r\n <button\r\n key={dateValue}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-range-cell`,\r\n inRange && `${REACT_COMPONENT_PREFIX}-date-range-cell-in-range`,\r\n selectedStart &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-cell-range-start`,\r\n selectedEnd &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-cell-range-end`,\r\n (selectedStart || selectedEnd) &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n style={cellStyle}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onMouseEnter={() => {\r\n onHover(dateValue);\r\n }}\r\n onMouseLeave={() => {\r\n onHover(null);\r\n }}\r\n onClick={() => {\r\n onSelect(dateValue);\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-cell-text`}\r\n >\r\n {dayItem.day}\r\n </span>\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\ntype CalendarDayItem = {\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n};\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n triggerRef: React.RefObject<HTMLDivElement | null>;\r\n}) {\r\n const { event, onBlur, popupRef, setOpen, triggerRef } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n relatedTarget &&\r\n (popupRef.current?.contains(relatedTarget) ||\r\n triggerRef.current?.contains(relatedTarget))\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction parseDateRangeValue(\r\n value: [string, string] | undefined,\r\n _rangeSeparator: string,\r\n) {\r\n const [rawStart = \"\", rawEnd = \"\"] = value ?? [\"\", \"\"];\r\n const start = parseDateValue(rawStart.trim()) ? rawStart.trim() : \"\";\r\n const end = parseDateValue(rawEnd.trim()) ? rawEnd.trim() : \"\";\r\n return { end, start };\r\n}\r\n\r\nfunction parseDateValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n if (\r\n !Number.isInteger(year) ||\r\n !Number.isInteger(month) ||\r\n !Number.isInteger(day) ||\r\n month < 1 ||\r\n month > 12\r\n ) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return { day, month, year };\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth({ year, month }, -1);\r\n const nextMonthDate = shiftMonth({ year, month }, 1);\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: CalendarDayItem[] = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(value: { month: number; year: number }, delta: number) {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n return {\r\n month: date.getMonth() + 1,\r\n year: date.getFullYear(),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction resolveInitialPanelMonth(range: { start: string; end: string }) {\r\n const start = parseDateValue(range.start);\r\n const base = start ?? parseDateValue(range.end);\r\n if (base) {\r\n return {\r\n month: base.month,\r\n year: base.year,\r\n };\r\n }\r\n const now = new Date();\r\n return {\r\n month: now.getMonth() + 1,\r\n year: now.getFullYear(),\r\n };\r\n}\r\n\r\nfunction resolveNextRange(\r\n range: { start: string; end: string },\r\n nextDate: string,\r\n activePart: \"start\" | \"end\",\r\n) {\r\n if (activePart === \"start\") {\r\n if (!range.end || compareDateValue(nextDate, range.end) <= 0) {\r\n return { end: range.end, start: nextDate };\r\n }\r\n return { end: \"\", start: nextDate };\r\n }\r\n\r\n if (!range.start) {\r\n return { end: \"\", start: nextDate };\r\n }\r\n\r\n if (compareDateValue(nextDate, range.start) < 0) {\r\n return { end: range.start, start: nextDate };\r\n }\r\n\r\n return { end: nextDate, start: range.start };\r\n}\r\n\r\nfunction compareDateValue(left: string, right: string) {\r\n return left.localeCompare(right);\r\n}\r\n\r\nfunction isDateInRange(\r\n dateValue: string,\r\n startValue: string,\r\n endValue: string,\r\n hoverValue: string | null,\r\n) {\r\n if (startValue && endValue) {\r\n return (\r\n compareDateValue(dateValue, startValue) >= 0 &&\r\n compareDateValue(dateValue, endValue) <= 0\r\n );\r\n }\r\n\r\n if (startValue && hoverValue) {\r\n const rangeStart =\r\n compareDateValue(startValue, hoverValue) <= 0 ? startValue : hoverValue;\r\n const rangeEnd =\r\n compareDateValue(startValue, hoverValue) <= 0 ? hoverValue : startValue;\r\n return (\r\n compareDateValue(dateValue, rangeStart) >= 0 &&\r\n compareDateValue(dateValue, rangeEnd) <= 0\r\n );\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction formatDateOnly(date: Date) {\r\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\r\n}\r\n","import { useEffect, useRef } from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\n\r\nexport const HOURS = createPaddedOptions(24);\r\nexport const MINUTES = createPaddedOptions(60);\r\nexport const SECONDS = createPaddedOptions(60);\r\nexport const DEFAULT_TIME_VALUE = \"00:00:00\";\r\n\r\nexport interface ParsedTimeValue {\r\n hour: string;\r\n minute: string;\r\n second: string;\r\n}\r\n\r\n/**\r\n * 通用时分秒滚轮面板。\r\n */\r\nexport function TimeSelectionPanel(props: {\r\n value?: string;\r\n onChange: (value: string) => void;\r\n footer?: React.ReactNode;\r\n hideHeader?: boolean;\r\n}) {\r\n const { footer, hideHeader = false, onChange, value } = props;\r\n const parsedValue = parseTimeValue(value) ?? parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n\r\n return (\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-panel`}>\r\n {hideHeader ? null : (\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>时</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>分</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>秒</div>\r\n </div>\r\n )}\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-body`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-selection-highlight`} />\r\n <TimeColumn\r\n options={HOURS}\r\n selectedValue={parsedValue.hour}\r\n onSelect={(hour) => {\r\n onChange(\r\n formatTimeValue({\r\n hour,\r\n minute: parsedValue.minute,\r\n second: parsedValue.second,\r\n }),\r\n );\r\n }}\r\n />\r\n <TimeColumn\r\n options={MINUTES}\r\n selectedValue={parsedValue.minute}\r\n onSelect={(minute) => {\r\n onChange(\r\n formatTimeValue({\r\n hour: parsedValue.hour,\r\n minute,\r\n second: parsedValue.second,\r\n }),\r\n );\r\n }}\r\n />\r\n <TimeColumn\r\n options={SECONDS}\r\n selectedValue={parsedValue.second}\r\n onSelect={(second) => {\r\n onChange(\r\n formatTimeValue({\r\n hour: parsedValue.hour,\r\n minute: parsedValue.minute,\r\n second,\r\n }),\r\n );\r\n }}\r\n />\r\n </div>\r\n {footer}\r\n </div>\r\n );\r\n}\r\n\r\nfunction TimeColumn(props: {\r\n options: string[];\r\n selectedValue?: string;\r\n onSelect: (value: string) => void;\r\n}) {\r\n const { onSelect, options, selectedValue } = props;\r\n const listRef = useRef<HTMLDivElement | null>(null);\r\n const scrollTimerRef = useRef<number | null>(null);\r\n const ignoreScrollRef = useRef(false);\r\n\r\n const scrollToValue = (nextValue: string, behavior: ScrollBehavior) => {\r\n const listElement = listRef.current;\r\n if (!listElement) {\r\n return;\r\n }\r\n\r\n const targetElement = listElement.querySelector<HTMLElement>(\r\n `.${REACT_COMPONENT_PREFIX}-time-option[data-value=\"${nextValue}\"]`,\r\n );\r\n if (!targetElement) {\r\n return;\r\n }\r\n\r\n const centeredPadding = Math.max(\r\n (listElement.clientHeight - targetElement.offsetHeight) / 2,\r\n 0,\r\n );\r\n listElement.style.paddingTop = `${centeredPadding}px`;\r\n listElement.style.paddingBottom = `${centeredPadding}px`;\r\n\r\n const targetTop =\r\n targetElement.offsetTop -\r\n (listElement.clientHeight - targetElement.offsetHeight) / 2;\r\n const maxScrollTop = Math.max(\r\n listElement.scrollHeight - listElement.clientHeight,\r\n 0,\r\n );\r\n const nextScrollTop = Math.min(Math.max(targetTop, 0), maxScrollTop);\r\n\r\n ignoreScrollRef.current = true;\r\n if (behavior === \"smooth\") {\r\n listElement.scrollTo({\r\n top: nextScrollTop,\r\n behavior,\r\n });\r\n } else {\r\n listElement.scrollTop = nextScrollTop;\r\n }\r\n window.setTimeout(() => {\r\n ignoreScrollRef.current = false;\r\n }, behavior === \"smooth\" ? 180 : 120);\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (scrollTimerRef.current != null) {\r\n window.clearTimeout(scrollTimerRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n const listElement = listRef.current;\r\n if (!listElement) {\r\n return;\r\n }\r\n\r\n const selectedElement = listElement.querySelector<HTMLElement>(\r\n `.${REACT_COMPONENT_PREFIX}-time-option-selected`,\r\n );\r\n if (!selectedElement) {\r\n return;\r\n }\r\n scrollToValue(selectedElement.dataset.value ?? selectedValue ?? \"\", \"auto\");\r\n }, [selectedValue]);\r\n\r\n return (\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column`}>\r\n <div\r\n ref={listRef}\r\n className={`${REACT_COMPONENT_PREFIX}-time-column-list`}\r\n onScroll={() => {\r\n if (ignoreScrollRef.current) {\r\n return;\r\n }\r\n if (scrollTimerRef.current != null) {\r\n window.clearTimeout(scrollTimerRef.current);\r\n }\r\n\r\n scrollTimerRef.current = window.setTimeout(() => {\r\n const listElement = listRef.current;\r\n if (!listElement) {\r\n return;\r\n }\r\n\r\n const optionElements = Array.from(\r\n listElement.querySelectorAll<HTMLElement>(\r\n `.${REACT_COMPONENT_PREFIX}-time-option`,\r\n ),\r\n );\r\n if (optionElements.length === 0) {\r\n return;\r\n }\r\n\r\n const listCenter = listElement.scrollTop + listElement.clientHeight / 2;\r\n const nearestOption = optionElements.reduce((closest, current) => {\r\n const currentCenter = current.offsetTop + current.offsetHeight / 2;\r\n const closestCenter = closest.offsetTop + closest.offsetHeight / 2;\r\n return Math.abs(currentCenter - listCenter) <\r\n Math.abs(closestCenter - listCenter)\r\n ? current\r\n : closest;\r\n });\r\n\r\n const nextValue = nearestOption.dataset.value;\r\n if (nextValue && nextValue !== selectedValue) {\r\n scrollToValue(nextValue, \"smooth\");\r\n onSelect(nextValue);\r\n }\r\n }, 120);\r\n }}\r\n >\r\n {options.map((option) => {\r\n const selected = option === selectedValue;\r\n return (\r\n <button\r\n key={option}\r\n type=\"button\"\r\n data-value={option}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-option`,\r\n selected && `${REACT_COMPONENT_PREFIX}-time-option-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onSelect(option);\r\n }}\r\n >\r\n {option}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function parseTimeValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const hour = Number(matched[1]);\r\n const minute = Number(matched[2]);\r\n const second = Number(matched[3]);\r\n if (\r\n !Number.isInteger(hour) ||\r\n !Number.isInteger(minute) ||\r\n !Number.isInteger(second) ||\r\n hour < 0 ||\r\n hour > 23 ||\r\n minute < 0 ||\r\n minute > 59 ||\r\n second < 0 ||\r\n second > 59\r\n ) {\r\n return null;\r\n }\r\n\r\n return {\r\n hour: matched[1].padStart(2, \"0\"),\r\n minute: matched[2].padStart(2, \"0\"),\r\n second: matched[3].padStart(2, \"0\"),\r\n } satisfies ParsedTimeValue;\r\n}\r\n\r\nexport function formatTimeValue(value: ParsedTimeValue) {\r\n return `${value.hour}:${value.minute}:${value.second}`;\r\n}\r\n\r\nexport function createPaddedOptions(count: number) {\r\n return Array.from({ length: count }, (_, index) => String(index).padStart(2, \"0\"));\r\n}\r\n\r\nexport function getCurrentTimeValue() {\r\n const now = new Date();\r\n return formatTimeValue({\r\n hour: String(now.getHours()).padStart(2, \"0\"),\r\n minute: String(now.getMinutes()).padStart(2, \"0\"),\r\n second: String(now.getSeconds()).padStart(2, \"0\"),\r\n });\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-time-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-time {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-time:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-time-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-time-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-time-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-time .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-time-input-wrap:hover,\\n.canvas-react-time-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-time-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-time-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-time-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-time:hover .canvas-react-time-arrow,\\n.canvas-react-time-open .canvas-react-time-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-time-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-time-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-time-clear:hover {\\n color: #6b7280;\\n transform: translate(-50%, -50%) rotate(90deg);\\n}\\n.canvas-react-time:hover .canvas-react-time-clear,\\n.canvas-react-time-open .canvas-react-time-clear,\\n.canvas-react-time:focus-within .canvas-react-time-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-time:hover .canvas-react-time-actions-clearable .canvas-react-time-arrow,\\n.canvas-react-time-open .canvas-react-time-actions-clearable .canvas-react-time-arrow,\\n.canvas-react-time:focus-within .canvas-react-time-actions-clearable .canvas-react-time-arrow {\\n opacity: 0;\\n}\\n.canvas-react-time-clear-icon,\\n.canvas-react-time-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-time-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-time-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-time-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-time-popup-panel,\\n.canvas-react-time-range-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n.canvas-react-time-range-control {\\n position: relative;\\n}\\n.canvas-react-time-range-hidden-input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n border: 0;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-time-range-values {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-time-range-value {\\n position: relative;\\n display: flex;\\n flex: 1 1 0;\\n align-items: center;\\n justify-content: flex-start;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: 1;\\n text-align: left;\\n box-sizing: border-box;\\n cursor: pointer;\\n}\\n.canvas-react-time-range-value::after {\\n position: absolute;\\n right: 0;\\n bottom: -1px;\\n left: 0;\\n height: 2px;\\n border-radius: 999px;\\n background: transparent;\\n content: \\\"\\\";\\n transition: background-color 0.18s ease;\\n}\\n.canvas-react-time-range-value-active::after {\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-time-range-value-text {\\n display: block;\\n width: 100%;\\n min-width: 0;\\n height: auto;\\n padding: 0;\\n border: none;\\n outline: none;\\n overflow: hidden;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n@supports (height: 1lh) {\\n .canvas-react-time-range-value-text {\\n height: 1lh;\\n }\\n}\\n.canvas-react-time-range-value-text::placeholder {\\n color: inherit;\\n opacity: 1;\\n}\\n.canvas-react-time-range-separator {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n padding: 0 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-time-popup-header {\\n padding: 0 4px;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n box-sizing: border-box;\\n}\\n.canvas-react-time-panel {\\n min-width: 216px;\\n}\\n.canvas-react-time-header,\\n.canvas-react-time-body {\\n display: grid;\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 4px;\\n}\\n.canvas-react-time-header {\\n align-items: center;\\n height: 44px;\\n margin-bottom: 4px;\\n}\\n.canvas-react-time-popup-header .canvas-react-time-header {\\n height: 44px;\\n margin-bottom: 0;\\n}\\n.canvas-react-time-body {\\n position: relative;\\n}\\n.canvas-react-time-popup-content {\\n display: flex;\\n flex: 1 1 auto;\\n min-height: 0;\\n padding: 0 4px;\\n box-sizing: border-box;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-panel {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n width: 100%;\\n min-height: 100%;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-body {\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-column {\\n display: flex;\\n min-height: 0;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-column-list {\\n flex: 1 1 auto;\\n max-height: none;\\n min-height: 0;\\n}\\n.canvas-react-time-selection-highlight {\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 50%;\\n height: 32px;\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg-active);\\n transform: translateY(-50%);\\n pointer-events: none;\\n z-index: 0;\\n}\\n.canvas-react-time-column {\\n position: relative;\\n z-index: 1;\\n}\\n.canvas-react-time-column-label {\\n padding: 4px 0;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n line-height: 1;\\n text-align: center;\\n}\\n.canvas-react-time-column-list {\\n max-height: 196px;\\n overflow-y: auto;\\n padding: 0 4px;\\n border-radius: var(--canvas-react-radius-sm);\\n background: transparent;\\n scroll-behavior: smooth;\\n scroll-snap-type: y mandatory;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n}\\n.canvas-react-time-column-list::-webkit-scrollbar {\\n display: none;\\n}\\n.canvas-react-time-option {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 100%;\\n height: 32px;\\n padding: 0 6px;\\n border: none;\\n border-radius: var(--canvas-react-radius-sm);\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n font-size: var(--canvas-react-font-size);\\n line-height: 1;\\n cursor: pointer;\\n scroll-snap-align: center;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-time-option:hover {\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-time-option-selected {\\n color: var(--canvas-react-color-primary);\\n font-weight: 500;\\n}\\n.canvas-react-time-footer,\\n.canvas-react-time-popup-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 12px;\\n padding: 8px 4px 4px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-time-footer-now,\\n.canvas-react-time-footer-confirm {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n height: 28px;\\n padding: 0 12px;\\n border-radius: var(--canvas-react-radius-sm);\\n font-size: 12px;\\n cursor: pointer;\\n transition:\\n border-color 0.18s ease,\\n background-color 0.18s ease,\\n color 0.18s ease;\\n}\\n.canvas-react-time-footer-now {\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-time-footer-now:hover {\\n color: var(--canvas-react-color-primary-hover);\\n background: rgba(22, 119, 255, 0.06);\\n}\\n.canvas-react-time-footer-confirm {\\n border: 1px solid var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #fff;\\n}\\n.canvas-react-time-footer-confirm:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n background: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-time-range-dropdown {\\n width: 260px;\\n}\\n.canvas-react-time-range-header {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-time-range-content {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n min-height: 0;\\n}\\n.canvas-react-time-range-header-tab {\\n height: 44px;\\n padding: 0 10px;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n cursor: pointer;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-time-range-header-tab + .canvas-react-time-range-header-tab {\\n border-left: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-time-range-header-tab:hover {\\n color: var(--canvas-react-color-primary-hover);\\n background: rgba(22, 119, 255, 0.05);\\n}\\n.canvas-react-time-range-header-tab-active {\\n background: var(--canvas-react-color-bg-active);\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n\")","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n@import \\\"../date/style.css\\\";\\n.canvas-react-datetime-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-datetime {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-datetime:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-datetime-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-datetime-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-datetime-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-datetime .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-datetime-input-wrap:hover,\\n.canvas-react-datetime-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-datetime-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-datetime-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-datetime-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-datetime:hover .canvas-react-datetime-arrow,\\n.canvas-react-datetime-open .canvas-react-datetime-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-datetime-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-datetime-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-datetime-clear:hover {\\n color: #6b7280;\\n transform: translate(-50%, -50%) rotate(90deg);\\n}\\n.canvas-react-datetime:hover .canvas-react-datetime-clear,\\n.canvas-react-datetime-open .canvas-react-datetime-clear,\\n.canvas-react-datetime:focus-within .canvas-react-datetime-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-datetime:hover .canvas-react-datetime-actions-clearable .canvas-react-datetime-arrow,\\n.canvas-react-datetime-open .canvas-react-datetime-actions-clearable .canvas-react-datetime-arrow,\\n.canvas-react-datetime:focus-within .canvas-react-datetime-actions-clearable .canvas-react-datetime-arrow {\\n opacity: 0;\\n}\\n.canvas-react-datetime-clear-icon,\\n.canvas-react-datetime-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-datetime-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-datetime-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-datetime-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-datetime-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-header {\\n display: grid;\\n grid-template-columns: 296px 218px;\\n gap: 8px;\\n align-items: stretch;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-datetime-header-date {\\n border-right: 1px solid var(--canvas-react-color-split, #f0f0f0);\\n}\\n.canvas-react-datetime-header-date .canvas-react-year-header,\\n.canvas-react-datetime-header-time .canvas-react-time-header {\\n border-bottom: none;\\n}\\n.canvas-react-datetime-header-time {\\n display: block;\\n min-width: 0;\\n padding: 0 4px;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-content {\\n display: grid;\\n grid-template-columns: 296px 218px;\\n gap: 8px;\\n flex: 1 1 auto;\\n min-height: 0;\\n align-items: stretch;\\n}\\n.canvas-react-datetime-date-panel {\\n display: flex;\\n flex-direction: column;\\n min-height: 0;\\n border-right: 1px solid var(--canvas-react-color-split, #f0f0f0);\\n}\\n.canvas-react-datetime-time-panel {\\n overflow: hidden;\\n display: flex;\\n min-height: 0;\\n padding: 0 4px;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-header-time .canvas-react-time-header {\\n display: grid;\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 4px;\\n align-items: center;\\n width: 100%;\\n height: 44px;\\n margin-bottom: 0;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-header-time .canvas-react-time-column-label {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n padding: 0;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-panel {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n width: 100%;\\n min-height: 100%;\\n min-width: 210px;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-body {\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-column {\\n display: flex;\\n min-height: 0;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-column-list {\\n flex: 1 1 auto;\\n max-height: none;\\n min-height: 0;\\n}\\n.canvas-react-datetime-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 8px;\\n padding: 8px 0 0;\\n margin-top: 8px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n TimeSelectionPanel,\r\n formatTimeValue,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n} from \"../time/shared\";\r\nimport \"../year/style.css\";\r\nimport \"../time/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDateTimePickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前日期时间值,格式为 YYYY-MM-DD HH:mm:ss。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 年月日时分秒选择器。\r\n */\r\nexport const ReactDateTimePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactDateTimePickerProps\r\n>(function ReactDateTimePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期时间\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"date\" | \"month\" | \"year\" | \"decade\">(\"date\");\r\n const parsedValue = useMemo(() => parseDateTimeValue(value), [value]);\r\n const [draftDateTime, setDraftDateTime] = useState(() =>\r\n createDraftDateTime(parsedValue),\r\n );\r\n const yearPanelStart = useMemo(\r\n () => resolveDecadeStart(draftDateTime.year),\r\n [draftDateTime.year],\r\n );\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),\r\n [yearPanelStart],\r\n );\r\n const decadeItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10),\r\n [decadePanelStart],\r\n );\r\n const calendarDays = useMemo(\r\n () => buildCalendarDays(draftDateTime.year, draftDateTime.month),\r\n [draftDateTime.month, draftDateTime.year],\r\n );\r\n const displayValue =\r\n parsedValue == null\r\n ? \"\"\r\n : `${formatDateValue(parsedValue)} ${formatTimeValue(parsedValue)}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"date\");\r\n setDraftDateTime(createDraftDateTime(parsedValue));\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-datetime-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-datetime-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-datetime-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-datetime-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-datetime-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-datetime-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={534}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 534 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-date`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, -1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year - 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year - 10 };\r\n }\r\n return { ...prev, year: prev.year - 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"date\") {\r\n setMode(\"month\");\r\n return;\r\n }\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"date\"\r\n ? `${draftDateTime.year}年${String(draftDateTime.month).padStart(2, \"0\")}月`\r\n : mode === \"month\"\r\n ? `${draftDateTime.year}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, 1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year + 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year + 10 };\r\n }\r\n return { ...prev, year: prev.year + 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-time`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>时</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>分</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>秒</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-content`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-date-panel`}>\r\n {mode === \"date\" ? (\r\n <>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div\r\n key={label}\r\n className={`${REACT_COMPONENT_PREFIX}-date-weekday`}\r\n >\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {calendarDays.map((dayItem) => {\r\n const selected =\r\n draftDateTime.year === dayItem.year &&\r\n draftDateTime.month === dayItem.month &&\r\n draftDateTime.day === dayItem.day;\r\n return (\r\n <button\r\n key={`${dayItem.year}-${dayItem.month}-${dayItem.day}`}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: dayItem.year,\r\n month: dayItem.month,\r\n day: dayItem.day,\r\n }));\r\n }}\r\n >\r\n {dayItem.day}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n ) : (\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected = Number(month) === draftDateTime.month;\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n month: Number(month),\r\n day: clampDay(prev.year, Number(month), prev.day),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart &&\r\n yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === draftDateTime.year;\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: yearItem,\r\n day: clampDay(yearItem, prev.month, prev.day),\r\n }));\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart &&\r\n yearPanelStart <= decadeStart + 9;\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: decadeStart,\r\n day: clampDay(decadeStart, prev.month, prev.day),\r\n }));\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-time-panel`}>\r\n <TimeSelectionPanel\r\n value={formatTimeValue(draftDateTime)}\r\n hideHeader\r\n onChange={(nextTimeValue) => {\r\n const nextTime = parseTimeValue(nextTimeValue) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n }));\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n const now = new Date();\r\n const nextTime = parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n setDraftDateTime({\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n });\r\n setMode(\"date\");\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(\r\n `${formatDateValue(draftDateTime)} ${formatTimeValue(draftDateTime)}`,\r\n );\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\ninterface ParsedDateTimeValue {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hour: string;\r\n minute: string;\r\n second: string;\r\n}\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n}) {\r\n const { event, onBlur, popupRef, setOpen } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction parseDateTimeValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(\r\n /^(\\d{4})-(\\d{2})-(\\d{2})\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/,\r\n );\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n const timeValue = parseTimeValue(`${matched[4]}:${matched[5]}:${matched[6]}`);\r\n if (!timeValue) {\r\n return null;\r\n }\r\n if (month < 1 || month > 12) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return {\r\n year,\r\n month,\r\n day,\r\n hour: timeValue.hour,\r\n minute: timeValue.minute,\r\n second: timeValue.second,\r\n } satisfies ParsedDateTimeValue;\r\n}\r\n\r\nfunction createDraftDateTime(value: ParsedDateTimeValue | null): ParsedDateTimeValue {\r\n const now = new Date();\r\n const currentTime = parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n return (\r\n value ?? {\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: currentTime.hour,\r\n minute: currentTime.minute,\r\n second: currentTime.second,\r\n }\r\n );\r\n}\r\n\r\nfunction formatDateValue(value: { year: number; month: number; day: number }) {\r\n return `${value.year}-${String(value.month).padStart(2, \"0\")}-${String(value.day).padStart(2, \"0\")}`;\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth({\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n }, -1);\r\n const nextMonthDate = shiftMonth({\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n }, 1);\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: Array<{\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n }> = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(\r\n value: ParsedDateTimeValue,\r\n delta: number,\r\n): ParsedDateTimeValue {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n const year = date.getFullYear();\r\n const month = date.getMonth() + 1;\r\n return {\r\n ...value,\r\n year,\r\n month,\r\n day: clampDay(year, month, value.day),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction clampDay(year: number, month: number, day: number) {\r\n return Math.min(day, getDaysInMonth(year, month));\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../datetime/style.css\\\";\\n.canvas-react-datetime-range-control {\\n position: relative;\\n}\\n.canvas-react-datetime-range-hidden-input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n border: 0;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-datetime-range-values {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-datetime-range-value {\\n position: relative;\\n display: flex;\\n flex: 1 1 0;\\n align-items: center;\\n justify-content: flex-start;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: 1;\\n text-align: left;\\n box-sizing: border-box;\\n cursor: pointer;\\n}\\n.canvas-react-datetime-range-value::after {\\n position: absolute;\\n right: 0;\\n bottom: -1px;\\n left: 0;\\n height: 2px;\\n border-radius: 999px;\\n background: transparent;\\n content: \\\"\\\";\\n transition: background-color 0.18s ease;\\n}\\n.canvas-react-datetime-range-value-active::after {\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-datetime-range-value-text {\\n display: block;\\n width: 100%;\\n min-width: 0;\\n height: auto;\\n padding: 0;\\n border: none;\\n outline: none;\\n overflow: hidden;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n@supports (height: 1lh) {\\n .canvas-react-datetime-range-value-text {\\n height: 1lh;\\n }\\n}\\n.canvas-react-datetime-range-value-text::placeholder {\\n color: inherit;\\n opacity: 1;\\n}\\n.canvas-react-datetime-range-separator {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n padding: 0 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-datetime-range-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport type { ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n TimeSelectionPanel,\r\n formatTimeValue,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n} from \"../time/shared\";\r\nimport \"../year/style.css\";\r\nimport \"../time/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDateTimeRangePickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 当前日期时间区间值,格式为 `[开始日期时间, 结束日期时间]`。\r\n */\r\n value?: [string, string];\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: [string, string]) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 区间分隔符。\r\n */\r\n rangeSeparator?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 日期时间区间选择器。\r\n */\r\nexport const ReactDateTimeRangePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactDateTimeRangePickerProps\r\n>(function ReactDateTimeRangePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期时间区间\",\r\n popupClassName,\r\n rangeSeparator = \" ~ \",\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const startInputRef = useRef<HTMLInputElement | null>(null);\r\n const endInputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [activePart, setActivePart] = useState<\"start\" | \"end\">(\"start\");\r\n const [mode, setMode] = useState<\"date\" | \"month\" | \"year\" | \"decade\">(\r\n \"date\",\r\n );\r\n const [draftRange, setDraftRange] = useState(() =>\r\n parseDateTimeRangeValue(value, rangeSeparator),\r\n );\r\n const activeValue = useMemo(\r\n () => (activePart === \"start\" ? draftRange.start : draftRange.end),\r\n [activePart, draftRange.end, draftRange.start],\r\n );\r\n const parsedActiveValue = useMemo(\r\n () => parseDateTimeValue(activeValue),\r\n [activeValue],\r\n );\r\n const [draftDateTime, setDraftDateTime] = useState(() =>\r\n createDraftDateTime(parsedActiveValue),\r\n );\r\n const showClear =\r\n allowClear &&\r\n !disabled &&\r\n (draftRange.start.length > 0 || draftRange.end.length > 0);\r\n const yearPanelStart = useMemo(\r\n () => resolveDecadeStart(draftDateTime.year),\r\n [draftDateTime.year],\r\n );\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),\r\n [yearPanelStart],\r\n );\r\n const decadeItems = useMemo(\r\n () =>\r\n Array.from(\r\n { length: 12 },\r\n (_, index) => decadePanelStart - 10 + index * 10,\r\n ),\r\n [decadePanelStart],\r\n );\r\n const calendarDays = useMemo(\r\n () => buildCalendarDays(draftDateTime.year, draftDateTime.month),\r\n [draftDateTime.month, draftDateTime.year],\r\n );\r\n\r\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n startInputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n }, [rangeSeparator, value]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"date\");\r\n setDraftDateTime(createDraftDateTime(parsedActiveValue));\r\n }, [activePart, open, parsedActiveValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-datetime-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime`,\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-control`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-datetime-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-datetime-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-range-values`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value`,\r\n activePart === \"start\" &&\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"start\");\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n startInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n {...restProps}\r\n ref={startInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.start}\r\n placeholder=\"YYYY-MM-DD HH:mm:ss\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"start\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-separator`}\r\n >\r\n {rangeSeparator.trim()}\r\n </span>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value`,\r\n activePart === \"end\" &&\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"end\");\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n ref={endInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.end}\r\n placeholder=\"YYYY-MM-DD HH:mm:ss\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"end\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n </div>\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-datetime-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.([\"\", \"\"]);\r\n startInputRef.current?.blur();\r\n endInputRef.current?.blur();\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-clear-icon`}\r\n />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={534}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 534 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-date`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, -1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year - 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year - 10 };\r\n }\r\n return { ...prev, year: prev.year - 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"date\") {\r\n setMode(\"month\");\r\n return;\r\n }\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"date\"\r\n ? `${draftDateTime.year}年${String(draftDateTime.month).padStart(2, \"0\")}月`\r\n : mode === \"month\"\r\n ? `${draftDateTime.year}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, 1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year + 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year + 10 };\r\n }\r\n return { ...prev, year: prev.year + 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-time`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 时\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 分\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 秒\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-content`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-date-panel`}>\r\n {mode === \"date\" ? (\r\n <>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div\r\n key={label}\r\n className={`${REACT_COMPONENT_PREFIX}-date-weekday`}\r\n >\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {calendarDays.map((dayItem) => {\r\n const selected =\r\n parsedActiveValue?.year === dayItem.year &&\r\n parsedActiveValue?.month === dayItem.month &&\r\n parsedActiveValue?.day === dayItem.day;\r\n return (\r\n <button\r\n key={`${dayItem.year}-${dayItem.month}-${dayItem.day}`}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: dayItem.year,\r\n month: dayItem.month,\r\n day: dayItem.day,\r\n }));\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: formatDateTimeValue({\r\n ...draftDateTime,\r\n year: dayItem.year,\r\n month: dayItem.month,\r\n day: dayItem.day,\r\n }),\r\n }));\r\n }}\r\n >\r\n {dayItem.day}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n ) : (\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected = Number(month) === draftDateTime.month;\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n month: Number(month),\r\n day: clampDay(\r\n prev.year,\r\n Number(month),\r\n prev.day,\r\n ),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart &&\r\n yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === draftDateTime.year;\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: yearItem,\r\n day: clampDay(yearItem, prev.month, prev.day),\r\n }));\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart &&\r\n yearPanelStart <= decadeStart + 9;\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: decadeStart,\r\n day: clampDay(\r\n decadeStart,\r\n prev.month,\r\n prev.day,\r\n ),\r\n }));\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-time-panel`}>\r\n <TimeSelectionPanel\r\n value={formatTimeValue(draftDateTime)}\r\n hideHeader\r\n onChange={(nextTimeValue) => {\r\n const nextTime =\r\n parseTimeValue(nextTimeValue) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n const nextValue = {\r\n ...draftDateTime,\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n };\r\n setDraftDateTime(nextValue);\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: formatDateTimeValue(nextValue),\r\n }));\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n const now = new Date();\r\n const nextTime =\r\n parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n const nextValue = {\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n };\r\n setDraftDateTime(nextValue);\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: formatDateTimeValue(nextValue),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n return;\r\n }\r\n if (\r\n compareDateTimeValue(draftRange.end, draftRange.start) < 0\r\n ) {\r\n setActivePart(\"start\");\r\n return;\r\n }\r\n onChange?.([draftRange.start, draftRange.end]);\r\n setOpen(false);\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n triggerRef: React.RefObject<HTMLDivElement | null>;\r\n}) {\r\n const { event, onBlur, popupRef, setOpen, triggerRef } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n relatedTarget &&\r\n (popupRef.current?.contains(relatedTarget) ||\r\n triggerRef.current?.contains(relatedTarget))\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction parseDateTimeRangeValue(\r\n value: [string, string] | undefined,\r\n _rangeSeparator: string,\r\n) {\r\n const [rawStart = \"\", rawEnd = \"\"] = value ?? [\"\", \"\"];\r\n const start = parseDateTimeValue(rawStart.trim()) ? rawStart.trim() : \"\";\r\n const end = parseDateTimeValue(rawEnd.trim()) ? rawEnd.trim() : \"\";\r\n return { end, start };\r\n}\r\n\r\ninterface ParsedDateTimeValue {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hour: string;\r\n minute: string;\r\n second: string;\r\n}\r\n\r\nfunction parseDateTimeValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(\r\n /^(\\d{4})-(\\d{2})-(\\d{2})\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/,\r\n );\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n const timeValue = parseTimeValue(`${matched[4]}:${matched[5]}:${matched[6]}`);\r\n if (!timeValue) {\r\n return null;\r\n }\r\n if (month < 1 || month > 12) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return {\r\n year,\r\n month,\r\n day,\r\n hour: timeValue.hour,\r\n minute: timeValue.minute,\r\n second: timeValue.second,\r\n } satisfies ParsedDateTimeValue;\r\n}\r\n\r\nfunction createDraftDateTime(\r\n value: ParsedDateTimeValue | null,\r\n): ParsedDateTimeValue {\r\n const now = new Date();\r\n const currentTime =\r\n parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n return (\r\n value ?? {\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: currentTime.hour,\r\n minute: currentTime.minute,\r\n second: currentTime.second,\r\n }\r\n );\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth(\r\n {\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n },\r\n -1,\r\n );\r\n const nextMonthDate = shiftMonth(\r\n {\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n },\r\n 1,\r\n );\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: Array<{\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n }> = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(\r\n value: ParsedDateTimeValue,\r\n delta: number,\r\n): ParsedDateTimeValue {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n const year = date.getFullYear();\r\n const month = date.getMonth() + 1;\r\n return {\r\n ...value,\r\n year,\r\n month,\r\n day: clampDay(year, month, value.day),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction clampDay(year: number, month: number, day: number) {\r\n return Math.min(day, getDaysInMonth(year, month));\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n\r\nfunction formatDateTimeValue(value: ParsedDateTimeValue) {\r\n return `${value.year}-${String(value.month).padStart(2, \"0\")}-${String(value.day).padStart(2, \"0\")} ${formatTimeValue(value)}`;\r\n}\r\n\r\nfunction compareDateTimeValue(left: string, right: string) {\r\n if (!left || !right) {\r\n return 0;\r\n }\r\n return left.localeCompare(right);\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-number-input-affix-wrapper {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-number-input-affix-wrapper:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-number-input-affix-wrapper:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-number-input-affix-wrapper-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-number-input {\\n box-sizing: border-box;\\n flex: 1 1 auto;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: none;\\n background: transparent;\\n color: inherit;\\n font-size: inherit;\\n outline: none;\\n appearance: textfield;\\n -moz-appearance: textfield;\\n}\\n.canvas-react-number-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-number-input::-webkit-outer-spin-button,\\n.canvas-react-number-input::-webkit-inner-spin-button {\\n margin: 0;\\n -webkit-appearance: none;\\n}\\n.canvas-react-number-input-suffix {\\n display: inline-flex;\\n align-items: center;\\n padding-right: var(--canvas-react-control-padding-inline, 11px);\\n}\\n.canvas-react-number-input-clear {\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-number-input-affix-wrapper:hover .canvas-react-number-input-clear,\\n.canvas-react-number-input-affix-wrapper:focus-within .canvas-react-number-input-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-number-input-clear:hover {\\n color: #6b7280;\\n transform: rotate(90deg);\\n}\\n.canvas-react-number-input-clear-icon,\\n.canvas-react-number-input-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-number-input-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-number-input-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactNumberInputProps\r\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"value\" | \"onChange\"> {\r\n /**\r\n * 当前值。\r\n */\r\n value?: number | null;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: number | null) => void;\r\n /**\r\n * 回车确认回调。\r\n */\r\n onPressEnter?: (event: KeyboardEvent<HTMLInputElement>) => void;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 清空回调。\r\n */\r\n onClear?: () => void;\r\n}\r\n\r\n/**\r\n * 基础数字输入框。\r\n */\r\nexport const ReactNumberInput = forwardRef<HTMLInputElement, ReactNumberInputProps>(\r\n function ReactNumberInput(props, ref) {\r\n const {\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onKeyDown,\r\n onPressEnter,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const [inputValue, setInputValue] = useState(toDisplayValue(value));\r\n\r\n useEffect(() => {\r\n setInputValue(toDisplayValue(value));\r\n }, [value]);\r\n\r\n return (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-number-input-affix-wrapper`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-number-input-affix-wrapper-disabled`,\r\n )}\r\n style={style as CSSProperties}\r\n >\r\n <input\r\n {...restProps}\r\n ref={ref}\r\n disabled={disabled}\r\n type=\"number\"\r\n value={inputValue}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-number-input`,\r\n className,\r\n )}\r\n onChange={(event) => {\r\n const nextText = event.target.value;\r\n setInputValue(nextText);\r\n onChange?.(parseNumberValue(nextText));\r\n }}\r\n onBlur={(event) => {\r\n setInputValue(toDisplayValue(parseNumberValue(event.target.value)));\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.key === \"Enter\") {\r\n onPressEnter?.(event);\r\n }\r\n }}\r\n />\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseNumberValue(value: string) {\r\n if (value.trim().length === 0) {\r\n return null;\r\n }\r\n\r\n const nextValue = Number(value);\r\n return Number.isFinite(nextValue) ? nextValue : null;\r\n}\r\n\r\nfunction toDisplayValue(value?: number | null) {\r\n return value == null ? \"\" : String(value);\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-input-range {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n overflow: hidden;\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-input-range:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-input-range:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-input-range-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-input-range > .canvas-react-number-input-affix-wrapper,\\n.canvas-react-input-range > .canvas-react-number-input-affix-wrapper:hover,\\n.canvas-react-input-range > .canvas-react-number-input-affix-wrapper:focus-within {\\n flex: 1 1 0;\\n width: 0;\\n height: 100%;\\n border: 0;\\n border-radius: 0;\\n box-shadow: none;\\n}\\n.canvas-react-input-range-separator {\\n flex: 0 0 auto;\\n color: #9ca3af;\\n line-height: 1;\\n}\\n\")","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n type FocusEvent,\n type InputHTMLAttributes,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport {\n ReactNumberInput,\n type ReactNumberInputProps,\n} from \"../number-input/index\";\nimport \"./style.css\";\n\nexport type ReactInputRangeValue = [number | null, number | null];\n\nexport interface ReactInputRangeProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"className\" | \"onChange\" | \"placeholder\" | \"style\" | \"value\"\n> {\n /** 当前数值范围。 */\n value?: ReactInputRangeValue;\n /** 数值范围变化回调。 */\n onChange?: (value: ReactInputRangeValue) => void;\n /** 起止输入框占位文本。 */\n placeholder?: [string, string];\n /** 范围分隔符。 */\n rangeSeparator?: string;\n /** 外层类名。 */\n className?: string;\n /** 外层样式。 */\n style?: CSSProperties;\n /** 回车确认回调。 */\n onPressEnter?: ReactNumberInputProps[\"onPressEnter\"];\n}\n\n/**\n * 双数值输入范围组件。\n */\nexport const ReactInputRange = forwardRef<\n HTMLInputElement,\n ReactInputRangeProps\n>(function ReactInputRange(props, ref) {\n const {\n autoFocus,\n className,\n disabled,\n max,\n min,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n onPressEnter,\n placeholder = [\"最小值\", \"最大值\"],\n rangeSeparator = \"~\",\n step,\n style,\n value = [null, null],\n ...restProps\n } = props;\n const rootRef = useRef<HTMLSpanElement | null>(null);\n const startInputRef = useRef<HTMLInputElement | null>(null);\n\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\n\n useEffect(() => {\n if (autoFocus) {\n startInputRef.current?.focus();\n }\n }, [autoFocus]);\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n if (nextTarget && rootRef.current?.contains(nextTarget)) {\n return;\n }\n onBlur?.(event);\n };\n\n return (\n <span\n ref={rootRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-input-range`,\n disabled && `${REACT_COMPONENT_PREFIX}-input-range-disabled`,\n className,\n )}\n style={style}\n >\n <ReactNumberInput\n {...restProps}\n ref={startInputRef}\n value={value[0]}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n placeholder={placeholder[0]}\n onChange={(nextValue) => onChange?.([nextValue, value[1]])}\n onFocus={onFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onPressEnter={onPressEnter}\n />\n <span className={`${REACT_COMPONENT_PREFIX}-input-range-separator`}>\n {rangeSeparator}\n </span>\n <ReactNumberInput\n {...restProps}\n value={value[1]}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n placeholder={placeholder[1]}\n onChange={(nextValue) => onChange?.([value[0], nextValue])}\n onFocus={onFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onPressEnter={onPressEnter}\n />\n </span>\n );\n});\n","import styleInject from '#style-inject';styleInject(\".canvas-react-image-preview {\\n position: fixed;\\n inset: 0;\\n z-index: 1100;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 48px;\\n background: rgba(0, 0, 0, 0.72);\\n backdrop-filter: blur(2px);\\n opacity: 0;\\n transition: opacity 0.2s ease;\\n}\\n.canvas-react-image-preview-entered {\\n opacity: 1;\\n}\\n.canvas-react-image-preview-leave {\\n opacity: 0;\\n}\\n.canvas-react-image-preview-image {\\n max-width: 90vw;\\n max-height: 86vh;\\n object-fit: contain;\\n border-radius: 4px;\\n box-shadow: 0 12px 48px rgba(0, 0, 0, 0.32);\\n opacity: 0;\\n transition: transform 0.2s ease, opacity 0.2s ease;\\n user-select: none;\\n}\\n.canvas-react-image-preview-entered .canvas-react-image-preview-image {\\n opacity: 1;\\n}\\n.canvas-react-image-preview-leave .canvas-react-image-preview-image {\\n opacity: 0;\\n}\\n.canvas-react-image-preview-close {\\n position: fixed;\\n top: 20px;\\n right: 24px;\\n width: 40px;\\n height: 40px;\\n padding: 0;\\n border: 0;\\n border-radius: 50%;\\n color: #fff;\\n background: rgba(255, 255, 255, 0.14);\\n font: 30px/38px sans-serif;\\n cursor: pointer;\\n}\\n.canvas-react-image-preview-toolbar {\\n position: fixed;\\n bottom: 28px;\\n left: 50%;\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n padding: 6px 10px;\\n color: #fff;\\n background: rgba(0, 0, 0, 0.64);\\n border-radius: 22px;\\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.24);\\n transform: translateX(-50%);\\n opacity: 0;\\n transition: opacity 0.2s ease;\\n}\\n.canvas-react-image-preview-entered .canvas-react-image-preview-toolbar {\\n opacity: 1;\\n}\\n.canvas-react-image-preview-tool {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n padding: 0;\\n border: 0;\\n border-radius: 6px;\\n color: inherit;\\n background: transparent;\\n font: 20px/1 sans-serif;\\n cursor: pointer;\\n}\\n.canvas-react-image-preview-tool:hover:not(:disabled) {\\n background: rgba(255, 255, 255, 0.16);\\n}\\n.canvas-react-image-preview-tool:disabled {\\n color: rgba(255, 255, 255, 0.35);\\n cursor: not-allowed;\\n}\\n.canvas-react-image-preview-scale {\\n min-width: 48px;\\n color: rgba(255, 255, 255, 0.88);\\n font-size: 12px;\\n text-align: center;\\n}\\n\")","import { useEffect, useRef, useState, type ReactNode } from \"react\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactImagePreviewProps {\r\n open: boolean;\r\n src: string;\r\n alt?: string;\r\n onClose: () => void;\r\n}\r\n\r\n/**\r\n * 图片遮罩预览组件。\r\n */\r\nexport function ReactImagePreview(props: ReactImagePreviewProps) {\r\n const { open, src, alt = \"preview\", onClose } = props;\r\n const [scale, setScale] = useState(1);\r\n const [rotation, setRotation] = useState(0);\r\n const [flipX, setFlipX] = useState(false);\r\n const [flipY, setFlipY] = useState(false);\r\n const [motionState, setMotionState] = useState<\"enter\" | \"entered\" | \"leave\">(\r\n \"enter\",\r\n );\r\n const closeTimerRef = useRef<number | null>(null);\r\n\r\n const requestClose = () => {\r\n if (motionState === \"leave\") return;\r\n setMotionState(\"leave\");\r\n closeTimerRef.current = window.setTimeout(onClose, 200);\r\n };\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n setScale(1);\r\n setRotation(0);\r\n setFlipX(false);\r\n setFlipY(false);\r\n setMotionState(\"enter\");\r\n const frame = requestAnimationFrame(() => setMotionState(\"entered\"));\r\n return () => cancelAnimationFrame(frame);\r\n }, [open, src]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === \"Escape\") requestClose();\r\n };\r\n window.addEventListener(\"keydown\", handleKeyDown);\r\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\r\n }, [open, motionState]);\r\n\r\n useEffect(\r\n () => () => {\r\n if (closeTimerRef.current != null) {\r\n window.clearTimeout(closeTimerRef.current);\r\n }\r\n },\r\n [],\r\n );\r\n\r\n if (!open) return null;\r\n return (\r\n <div\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview ${REACT_COMPONENT_PREFIX}-image-preview-${motionState}`}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n onMouseDown={(event) => {\r\n if (event.target === event.currentTarget) requestClose();\r\n }}\r\n >\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-close`}\r\n aria-label=\"关闭预览\"\r\n onClick={requestClose}\r\n >\r\n ×\r\n </button>\r\n <img\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-image`}\r\n src={src}\r\n alt={alt}\r\n style={{\r\n transform: `scale(${scale * (flipX ? -1 : 1)}, ${scale * (flipY ? -1 : 1)}) rotate(${rotation}deg)`,\r\n }}\r\n />\r\n <div\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-toolbar`}\r\n role=\"toolbar\"\r\n aria-label=\"图片预览工具栏\"\r\n >\r\n <PreviewToolButton\r\n label=\"上下翻转\"\r\n onClick={() => setFlipY((value) => !value)}\r\n >\r\n ↕\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"左右翻转\"\r\n onClick={() => setFlipX((value) => !value)}\r\n >\r\n ↔\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"逆时针旋转\"\r\n onClick={() => setRotation((value) => value - 90)}\r\n >\r\n ↶\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"顺时针旋转\"\r\n onClick={() => setRotation((value) => value + 90)}\r\n >\r\n ↷\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"缩小\"\r\n disabled={scale <= 0.5}\r\n onClick={() => setScale((value) => Math.max(value - 0.25, 0.5))}\r\n >\r\n −\r\n </PreviewToolButton>\r\n <span className={`${REACT_COMPONENT_PREFIX}-image-preview-scale`}>\r\n {Math.round(scale * 100)}%\r\n </span>\r\n <PreviewToolButton\r\n label=\"放大\"\r\n disabled={scale >= 3}\r\n onClick={() => setScale((value) => Math.min(value + 0.25, 3))}\r\n >\r\n +\r\n </PreviewToolButton>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nfunction PreviewToolButton(props: {\r\n label: string;\r\n children: ReactNode;\r\n disabled?: boolean;\r\n onClick: () => void;\r\n}) {\r\n return (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-tool`}\r\n title={props.label}\r\n aria-label={props.label}\r\n disabled={props.disabled}\r\n onClick={props.onClick}\r\n >\r\n {props.children}\r\n </button>\r\n );\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../year/style.css\\\";\\n.canvas-react-month-grid {\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 12px 8px;\\n}\\n.canvas-react-month-cell {\\n height: 48px;\\n font-weight: 600;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactMonthPickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前月份值,格式为 YYYY-MM。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\n\r\n/**\r\n * 基础月份选择器。\r\n */\r\nexport const ReactMonthPicker = forwardRef<HTMLInputElement, ReactMonthPickerProps>(\r\n function ReactMonthPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择月份\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"month\" | \"year\" | \"decade\">(\"month\");\r\n const parsedValue = useMemo(() => parseMonthValue(value), [value]);\r\n const [panelYear, setPanelYear] = useState(\r\n () => parsedValue?.year ?? new Date().getFullYear(),\r\n );\r\n const yearPanelStart = useMemo(() => resolveDecadeStart(panelYear), [panelYear]);\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index);\r\n }, [yearPanelStart]);\r\n const decadeItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);\r\n }, [decadePanelStart]);\r\n const displayValue =\r\n parsedValue == null ? \"\" : `${parsedValue.year}-${parsedValue.month}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"month\");\r\n setPanelYear(parsedValue?.year ?? new Date().getFullYear());\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={264}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 264 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-year-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"month\") {\r\n return prev - 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev - 10;\r\n }\r\n return prev - 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"month\"\r\n ? `${panelYear}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"month\") {\r\n return prev + 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev + 10;\r\n }\r\n return prev + 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected =\r\n parsedValue?.year === panelYear && parsedValue.month === month;\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(`${panelYear}-${month}`);\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart && yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === panelYear;\r\n\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(yearItem);\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart && yearPanelStart <= decadeStart + 9;\r\n\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(decadeStart);\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseMonthValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(\\d{2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const month = matched[2];\r\n if (!MONTHS.includes(month)) {\r\n return null;\r\n }\r\n\r\n return {\r\n month,\r\n year: Number(matched[1]),\r\n };\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import * as React from \"react\";\n\nlet compatibleIdSeed = 0;\n\n/**\n * 兼容旧版 React 的稳定 ID。\n *\n * React 18 及以上优先使用内建 `useId`;\n * 低版本则回退到当前运行时内的自增 ID。\n */\nexport function useCompatibleId(prefix = \"canvas-react-id\") {\n const nativeUseId = (React as typeof React & {\n useId?: () => string;\n }).useId;\n\n const fallbackIdRef = React.useRef<string>();\n if (!fallbackIdRef.current) {\n compatibleIdSeed += 1;\n fallbackIdRef.current = `${prefix}-${compatibleIdSeed}`;\n }\n\n return nativeUseId ? nativeUseId() : fallbackIdRef.current;\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-modal-root,\\n.canvas-react-modal-root * {\\n box-sizing: border-box;\\n}\\n.canvas-react-modal-root {\\n position: fixed;\\n inset: 0;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n line-height: 1.5;\\n}\\n.canvas-react-modal-root-passthrough {\\n pointer-events: none;\\n}\\n.canvas-react-modal-root-passthrough .canvas-react-modal {\\n pointer-events: auto;\\n}\\n.canvas-react-modal-mask {\\n position: absolute;\\n inset: 0;\\n background: rgba(0, 0, 0, 0.45);\\n}\\n.canvas-react-modal-wrap {\\n position: absolute;\\n inset: 0;\\n overflow: auto;\\n padding: 100px 24px 24px;\\n pointer-events: none;\\n}\\n.canvas-react-modal-root-centered .canvas-react-modal-wrap {\\n display: flex;\\n align-items: center;\\n padding-top: 24px;\\n}\\n.canvas-react-modal-root-fullscreen .canvas-react-modal-wrap {\\n padding: 0;\\n overflow: hidden;\\n}\\n.canvas-react-modal {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n width: 520px;\\n max-width: calc(100vw - 48px);\\n max-height: calc(100vh - 124px);\\n margin: 0 auto;\\n overflow: hidden;\\n border-radius: var(--canvas-react-radius-md, 8px);\\n background: var(--canvas-react-color-bg, #ffffff);\\n box-shadow: 0 12px 40px rgba(15, 23, 42, 0.22);\\n outline: none;\\n pointer-events: auto;\\n}\\n.canvas-react-modal-root-centered .canvas-react-modal {\\n max-height: calc(100vh - 48px);\\n}\\n.canvas-react-modal.canvas-react-modal-fullscreen {\\n width: 100% !important;\\n max-width: none;\\n height: 100%;\\n max-height: none;\\n border-radius: 0;\\n}\\n.canvas-react-modal-header {\\n display: flex;\\n flex: 0 0 auto;\\n align-items: center;\\n min-height: 56px;\\n padding: 0 16px 0 24px;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-modal-header-draggable {\\n cursor: move;\\n user-select: none;\\n}\\n.canvas-react-modal-title {\\n min-width: 0;\\n flex: 1 1 auto;\\n color: var(--canvas-react-color-text);\\n font-size: 16px;\\n font-weight: 600;\\n overflow-wrap: anywhere;\\n}\\n.canvas-react-modal-tools {\\n display: flex;\\n flex: 0 0 auto;\\n align-items: center;\\n gap: 4px;\\n margin-left: 16px;\\n}\\n.canvas-react-modal-tool {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n padding: 0;\\n border: 0;\\n border-radius: var(--canvas-react-radius-sm, 6px);\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n cursor: pointer;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-modal-tool:hover {\\n background: var(--canvas-react-color-bg-hover);\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-modal-tool:focus-visible,\\n.canvas-react-modal-button:focus-visible {\\n outline: 2px solid var(--canvas-react-color-primary);\\n outline-offset: 2px;\\n}\\n.canvas-react-modal-fullscreen-icon {\\n position: relative;\\n display: block;\\n width: 15px;\\n height: 15px;\\n border: 1.5px solid currentColor;\\n}\\n.canvas-react-modal-fullscreen-icon-exit::before {\\n position: absolute;\\n inset: 3px -4px -4px 3px;\\n border-right: 1.5px solid currentColor;\\n border-bottom: 1.5px solid currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-modal-close-icon {\\n position: relative;\\n display: block;\\n width: 16px;\\n height: 16px;\\n}\\n.canvas-react-modal-close-icon::before,\\n.canvas-react-modal-close-icon::after {\\n position: absolute;\\n top: 7px;\\n left: 1px;\\n width: 14px;\\n height: 1.5px;\\n border-radius: 1px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-modal-close-icon::before {\\n transform: rotate(45deg);\\n}\\n.canvas-react-modal-close-icon::after {\\n transform: rotate(-45deg);\\n}\\n.canvas-react-modal-body {\\n min-height: 0;\\n flex: 1 1 auto;\\n overflow: auto;\\n padding: 20px 24px;\\n}\\n.canvas-react-modal-footer {\\n display: flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: flex-end;\\n gap: 8px;\\n padding: 12px 24px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-modal-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n height: var(--canvas-react-control-height, 32px);\\n min-width: 64px;\\n padding: 0 var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm, 6px);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font: inherit;\\n line-height: 1;\\n white-space: nowrap;\\n cursor: pointer;\\n transition:\\n border-color 0.18s ease,\\n background-color 0.18s ease,\\n color 0.18s ease,\\n opacity 0.18s ease;\\n}\\n.canvas-react-modal-button:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-modal-button-primary {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #ffffff;\\n}\\n.canvas-react-modal-button-primary:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n background: var(--canvas-react-color-primary-hover);\\n color: #ffffff;\\n}\\n.canvas-react-modal-button:disabled {\\n opacity: 0.56;\\n cursor: not-allowed;\\n}\\n.canvas-react-modal-loading {\\n width: 14px;\\n height: 14px;\\n border: 2px solid rgba(255, 255, 255, 0.45);\\n border-top-color: #ffffff;\\n border-radius: 50%;\\n animation: canvas-react-modal-loading 0.8s linear infinite;\\n}\\n.canvas-react-modal-motion-enter-active,\\n.canvas-react-modal-motion-leave-active {\\n transition: opacity 0.2s ease;\\n}\\n.canvas-react-modal-motion-enter-active .canvas-react-modal,\\n.canvas-react-modal-motion-leave-active .canvas-react-modal {\\n transition: opacity 0.2s ease, transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);\\n}\\n.canvas-react-modal-motion-enter-from,\\n.canvas-react-modal-motion-leave-to {\\n opacity: 0;\\n}\\n.canvas-react-modal-motion-enter-from .canvas-react-modal,\\n.canvas-react-modal-motion-leave-to .canvas-react-modal {\\n opacity: 0;\\n transform: scale(0.96) translateY(-8px);\\n}\\n@keyframes canvas-react-modal-loading {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n@media (max-width: 575px) {\\n .canvas-react-modal-wrap {\\n padding: 24px 12px;\\n }\\n .canvas-react-modal {\\n max-width: calc(100vw - 24px);\\n max-height: calc(100vh - 48px);\\n }\\n .canvas-react-modal-header {\\n padding-right: 12px;\\n padding-left: 16px;\\n }\\n .canvas-react-modal-body {\\n padding: 16px;\\n }\\n .canvas-react-modal-footer {\\n padding: 12px 16px;\\n }\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .canvas-react-modal-motion-enter-active,\\n .canvas-react-modal-motion-leave-active,\\n .canvas-react-modal-motion-enter-active .canvas-react-modal,\\n .canvas-react-modal-motion-leave-active .canvas-react-modal {\\n transition-duration: 0.01ms;\\n }\\n}\\n\")","import {\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useCompatibleId } from \"../../shared/compatible-id\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { useReactTransition } from \"../transition/index\";\nimport \"./style.css\";\n\nconst MODAL_MOTION_DURATION = 200;\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(\",\");\n\nlet bodyScrollLockCount = 0;\nlet bodyOverflowBeforeLock = \"\";\n\n/**\n * Modal 按钮属性。\n */\nexport type ReactModalButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"onClick\" | \"type\"\n>;\n\n/**\n * Modal 取消事件。\n */\nexport type ReactModalCancelEvent =\n | ReactMouseEvent<HTMLElement>\n | KeyboardEvent;\n\nexport interface ReactModalProps {\n /** 是否显示 Modal。 */\n open: boolean;\n /** 标题内容。 */\n title?: ReactNode;\n /** Modal 内容。 */\n children?: ReactNode;\n /** 底部内容,传入 false 时隐藏。 */\n footer?: ReactNode | false;\n /** Modal 宽度。@default 520 */\n width?: number | string;\n /** 是否垂直居中。@default false */\n centered?: boolean;\n /** 是否显示遮罩。@default true */\n mask?: boolean;\n /** 点击遮罩是否允许关闭。@default true */\n maskClosable?: boolean;\n /** 按下 Esc 是否允许关闭。@default true */\n keyboard?: boolean;\n /** 是否显示关闭按钮。@default true */\n closable?: boolean;\n /** 是否提供全屏切换操作。@default true */\n fullscreenable?: boolean;\n /** 是否允许拖拽标题栏移动 Modal。@default false */\n draggable?: boolean;\n /** 当前是否全屏,传入后进入受控模式。 */\n fullscreen?: boolean;\n /** 默认是否全屏。@default false */\n defaultFullscreen?: boolean;\n /** 全屏状态变化回调。 */\n onFullscreenChange?: (fullscreen: boolean) => void;\n /** 确认按钮文案。 */\n okText?: ReactNode;\n /** 取消按钮文案。 */\n cancelText?: ReactNode;\n /** 确认按钮是否加载中。 */\n confirmLoading?: boolean;\n /** 确认按钮属性。 */\n okButtonProps?: ReactModalButtonProps;\n /** 取消按钮属性。 */\n cancelButtonProps?: ReactModalButtonProps;\n /** 点击确认回调。 */\n onOk?: (event: ReactMouseEvent<HTMLButtonElement>) => void | Promise<void>;\n /** 关闭请求回调。 */\n onCancel?: (event: ReactModalCancelEvent) => void;\n /** 完成关闭动画后的回调。 */\n afterClose?: () => void;\n /** 打开状态切换完成后的回调。 */\n afterOpenChange?: (open: boolean) => void;\n /** 兼容属性;Modal 关闭动画后默认卸载内容。 */\n destroyOnClose?: boolean;\n /** 关闭后是否将焦点还原到打开前的元素。@default true */\n focusTriggerAfterClose?: boolean;\n /** 自定义层级。@default 1000 */\n zIndex?: number;\n /** Modal 面板类名。 */\n className?: string;\n /** Modal 根节点类名。 */\n rootClassName?: string;\n /** Modal 面板样式。 */\n style?: CSSProperties;\n /** 内容区域样式。 */\n bodyStyle?: CSSProperties;\n /** 遮罩样式。 */\n maskStyle?: CSSProperties;\n /** 指定 Modal 挂载容器。 */\n getContainer?: HTMLElement | (() => HTMLElement);\n}\n\n/**\n * 支持全屏操作的通用 Modal 组件。\n */\nexport function ReactModal(props: ReactModalProps) {\n const {\n afterClose,\n afterOpenChange,\n bodyStyle,\n cancelButtonProps,\n cancelText = \"取消\",\n centered = false,\n children,\n className,\n closable = true,\n confirmLoading,\n defaultFullscreen = false,\n draggable = false,\n focusTriggerAfterClose = true,\n footer,\n fullscreen,\n fullscreenable = true,\n getContainer,\n keyboard = true,\n mask = true,\n maskClosable = true,\n maskStyle,\n okButtonProps,\n okText = \"确定\",\n onCancel,\n onFullscreenChange,\n onOk,\n open,\n rootClassName,\n style,\n title,\n width = 520,\n zIndex = 1000,\n } = props;\n const transition = useReactTransition({\n duration: MODAL_MOTION_DURATION,\n name: `${REACT_COMPONENT_PREFIX}-modal-motion`,\n show: open,\n });\n const [innerFullscreen, setInnerFullscreen] = useState(defaultFullscreen);\n const [innerConfirmLoading, setInnerConfirmLoading] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const panelRef = useRef<HTMLDivElement | null>(null);\n const dragRef = useRef<{\n startX: number;\n startY: number;\n offsetX: number;\n offsetY: number;\n } | null>(null);\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n const wasRenderedRef = useRef(false);\n const afterOpenChangeRef = useRef(afterOpenChange);\n const previousOpenRef = useRef<boolean>();\n afterOpenChangeRef.current = afterOpenChange;\n const titleId = useCompatibleId(`${REACT_COMPONENT_PREFIX}-modal-title`);\n const controlledFullscreen = fullscreen !== undefined;\n const mergedFullscreen = controlledFullscreen\n ? Boolean(fullscreen)\n : innerFullscreen;\n const mergedConfirmLoading = confirmLoading ?? innerConfirmLoading;\n const hasTitle = title !== null && title !== undefined && title !== false;\n\n useEffect(() => {\n if (previousOpenRef.current === open) {\n return;\n }\n previousOpenRef.current = open;\n afterOpenChangeRef.current?.(open);\n }, [open]);\n\n useEffect(() => {\n if (!draggable || !transition.rendered) return;\n const handleMouseMove = (event: globalThis.MouseEvent) => {\n const drag = dragRef.current;\n if (!drag) return;\n setDragOffset({\n x: drag.offsetX + event.clientX - drag.startX,\n y: drag.offsetY + event.clientY - drag.startY,\n });\n };\n const handleMouseUp = () => {\n dragRef.current = null;\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [draggable, transition.rendered]);\n\n useEffect(() => {\n if (!open) {\n dragRef.current = null;\n setDragOffset({ x: 0, y: 0 });\n }\n }, [open]);\n\n useEffect(() => {\n if (!transition.rendered) {\n if (wasRenderedRef.current) {\n wasRenderedRef.current = false;\n afterClose?.();\n if (focusTriggerAfterClose) {\n restoreFocusRef.current?.focus();\n }\n restoreFocusRef.current = null;\n }\n return;\n }\n\n if (!wasRenderedRef.current) {\n wasRenderedRef.current = true;\n restoreFocusRef.current =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n }\n\n if (mask) {\n lockBodyScroll();\n return unlockBodyScroll;\n }\n }, [afterClose, focusTriggerAfterClose, mask, transition.rendered]);\n\n useEffect(() => {\n if (!mask || !open || !transition.rendered) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n panelRef.current?.focus();\n });\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [mask, open, transition.rendered]);\n\n useEffect(() => {\n if (!mask || !transition.rendered) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && keyboard && open) {\n event.preventDefault();\n onCancel?.(event);\n return;\n }\n\n if (event.key !== \"Tab\" || !open) {\n return;\n }\n trapFocus(event, panelRef.current);\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [keyboard, mask, onCancel, open, transition.rendered]);\n\n const setFullscreen = (nextFullscreen: boolean) => {\n if (!controlledFullscreen) {\n setInnerFullscreen(nextFullscreen);\n }\n if (nextFullscreen !== mergedFullscreen) {\n onFullscreenChange?.(nextFullscreen);\n }\n };\n\n const handleOk = (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (mergedConfirmLoading || okButtonProps?.disabled) {\n return;\n }\n\n const result = onOk?.(event);\n if (!isPromiseLike(result)) {\n return;\n }\n\n setInnerConfirmLoading(true);\n Promise.resolve(result)\n .catch(() => undefined)\n .finally(() => {\n setInnerConfirmLoading(false);\n });\n };\n\n if (!transition.rendered || typeof document === \"undefined\") {\n return null;\n }\n\n const container = resolveContainer(getContainer);\n if (!container) {\n return null;\n }\n\n const {\n className: okButtonClassName,\n disabled: okButtonDisabled,\n ...restOkButtonProps\n } = okButtonProps ?? {};\n const {\n className: cancelButtonClassName,\n disabled: cancelButtonDisabled,\n ...restCancelButtonProps\n } = cancelButtonProps ?? {};\n\n const defaultFooter = (\n <>\n <button\n {...restCancelButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-button`,\n cancelButtonClassName,\n )}\n disabled={mergedConfirmLoading || cancelButtonDisabled}\n onClick={onCancel}\n >\n {cancelText}\n </button>\n <button\n {...restOkButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-button`,\n `${REACT_COMPONENT_PREFIX}-modal-button-primary`,\n okButtonClassName,\n )}\n disabled={mergedConfirmLoading || okButtonDisabled}\n onClick={handleOk}\n >\n {mergedConfirmLoading ? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-modal-loading`}\n aria-hidden=\"true\"\n />\n ) : null}\n <span>{okText}</span>\n </button>\n </>\n );\n\n return createPortal(\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-root`,\n !mask && `${REACT_COMPONENT_PREFIX}-modal-root-passthrough`,\n centered && `${REACT_COMPONENT_PREFIX}-modal-root-centered`,\n mergedFullscreen && `${REACT_COMPONENT_PREFIX}-modal-root-fullscreen`,\n transition.className,\n rootClassName,\n )}\n style={{ zIndex }}\n >\n {mask ? (\n <div\n className={`${REACT_COMPONENT_PREFIX}-modal-mask`}\n style={maskStyle}\n aria-hidden=\"true\"\n onMouseDown={(event) => {\n if (maskClosable && event.target === event.currentTarget) {\n onCancel?.(event);\n }\n }}\n />\n ) : null}\n <div className={`${REACT_COMPONENT_PREFIX}-modal-wrap`}>\n <div\n ref={panelRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal`,\n mergedFullscreen && `${REACT_COMPONENT_PREFIX}-modal-fullscreen`,\n className,\n )}\n style={{\n width,\n ...style,\n ...(draggable && !mergedFullscreen\n ? {\n position: \"relative\",\n left: dragOffset.x,\n top: dragOffset.y,\n }\n : undefined),\n }}\n role=\"dialog\"\n aria-modal={mask ? \"true\" : undefined}\n aria-label={hasTitle ? undefined : \"对话框\"}\n aria-labelledby={hasTitle ? titleId : undefined}\n tabIndex={-1}\n >\n {hasTitle || closable || fullscreenable ? (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-header`,\n draggable && !mergedFullscreen\n ? `${REACT_COMPONENT_PREFIX}-modal-header-draggable`\n : undefined,\n )}\n onMouseDown={(event) => {\n if (!draggable || mergedFullscreen || event.button !== 0) {\n return;\n }\n if ((event.target as HTMLElement).closest(\"button\")) {\n return;\n }\n dragRef.current = {\n startX: event.clientX,\n startY: event.clientY,\n offsetX: dragOffset.x,\n offsetY: dragOffset.y,\n };\n event.preventDefault();\n }}\n >\n <div\n id={hasTitle ? titleId : undefined}\n className={`${REACT_COMPONENT_PREFIX}-modal-title`}\n >\n {title}\n </div>\n <div className={`${REACT_COMPONENT_PREFIX}-modal-tools`}>\n {fullscreenable ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-modal-tool`}\n title={mergedFullscreen ? \"退出全屏\" : \"全屏\"}\n aria-label={mergedFullscreen ? \"退出全屏\" : \"全屏\"}\n aria-pressed={mergedFullscreen}\n onClick={() => setFullscreen(!mergedFullscreen)}\n >\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-fullscreen-icon`,\n mergedFullscreen &&\n `${REACT_COMPONENT_PREFIX}-modal-fullscreen-icon-exit`,\n )}\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n {closable ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-modal-tool`}\n title=\"关闭\"\n aria-label=\"关闭\"\n onClick={onCancel}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-modal-close-icon`}\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n </div>\n </div>\n ) : null}\n <div\n className={`${REACT_COMPONENT_PREFIX}-modal-body`}\n style={bodyStyle}\n >\n {children}\n </div>\n {footer === false ? null : (\n <div className={`${REACT_COMPONENT_PREFIX}-modal-footer`}>\n {footer ?? defaultFooter}\n </div>\n )}\n </div>\n </div>\n </div>,\n container,\n );\n}\n\nfunction resolveContainer(\n getContainer?: HTMLElement | (() => HTMLElement),\n): HTMLElement | null {\n if (typeof document === \"undefined\") {\n return null;\n }\n return typeof getContainer === \"function\"\n ? getContainer()\n : (getContainer ?? document.body);\n}\n\nfunction trapFocus(event: KeyboardEvent, panel: HTMLElement | null) {\n if (!panel) {\n return;\n }\n\n const focusableElements = Array.from(\n panel.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((element) => element.offsetParent !== null);\n if (focusableElements.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n\n const first = focusableElements[0];\n const last = focusableElements[focusableElements.length - 1];\n const active = document.activeElement;\n if (event.shiftKey && (active === first || !panel.contains(active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && (active === last || !panel.contains(active))) {\n event.preventDefault();\n first.focus();\n }\n}\n\nfunction lockBodyScroll() {\n if (bodyScrollLockCount === 0) {\n bodyOverflowBeforeLock = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n }\n bodyScrollLockCount += 1;\n}\n\nfunction unlockBodyScroll() {\n bodyScrollLockCount = Math.max(0, bodyScrollLockCount - 1);\n if (bodyScrollLockCount === 0) {\n document.body.style.overflow = bodyOverflowBeforeLock;\n }\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as Promise<void>).then === \"function\"\n );\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-input-number {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: stretch;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n overflow: hidden;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-input-number:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-input-number-focused {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-input-number-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-input-number-handler {\\n position: relative;\\n display: flex;\\n flex: 0 0 28px;\\n align-items: center;\\n justify-content: center;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n cursor: pointer;\\n transition: color 0.16s ease, background-color 0.16s ease;\\n}\\n.canvas-react-input-number-handler-down {\\n border-right: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-input-number-handler-up {\\n border-left: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-input-number-handler:hover:not(:disabled) {\\n color: var(--canvas-react-color-primary);\\n background: rgba(22, 119, 255, 0.06);\\n}\\n.canvas-react-input-number-handler:disabled {\\n color: #c4c7cf;\\n cursor: not-allowed;\\n}\\n.canvas-react-input-number-handler-icon {\\n position: relative;\\n display: block;\\n width: 10px;\\n height: 10px;\\n}\\n.canvas-react-input-number-handler-icon::before,\\n.canvas-react-input-number-handler-icon::after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n background: currentColor;\\n border-radius: 1px;\\n transform: translate(-50%, -50%);\\n}\\n.canvas-react-input-number-handler-icon::before {\\n width: 10px;\\n height: 1.5px;\\n}\\n.canvas-react-input-number-handler-up .canvas-react-input-number-handler-icon::after {\\n width: 1.5px;\\n height: 10px;\\n}\\n.canvas-react-input-number-input-wrap {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-input-number-input {\\n box-sizing: border-box;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0 8px;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font-size: inherit;\\n outline: none;\\n text-align: center;\\n appearance: textfield;\\n -moz-appearance: textfield;\\n}\\n.canvas-react-input-number-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-input-number-input::-webkit-outer-spin-button,\\n.canvas-react-input-number-input::-webkit-inner-spin-button {\\n margin: 0;\\n -webkit-appearance: none;\\n}\\n.canvas-react-input-number-addon {\\n flex: 0 0 auto;\\n padding-right: 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n line-height: 1;\\n user-select: none;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type KeyboardEvent,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactInputNumberProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n | \"size\"\r\n | \"value\"\r\n | \"defaultValue\"\r\n | \"onChange\"\r\n | \"min\"\r\n | \"max\"\r\n | \"step\"\r\n | \"prefix\"\r\n > {\r\n /**\r\n * 当前值。\r\n */\r\n value?: number | null;\r\n /**\r\n * 默认值(非受控)。\r\n */\r\n defaultValue?: number | null;\r\n /**\r\n * 最小值。\r\n */\r\n min?: number;\r\n /**\r\n * 最大值。\r\n */\r\n max?: number;\r\n /**\r\n * 步进。\r\n * @default 1\r\n */\r\n step?: number;\r\n /**\r\n * 小数精度;不传时按 step 推断。\r\n */\r\n precision?: number;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: number | null) => void;\r\n /**\r\n * 失焦或回车时规范化后的回调。\r\n */\r\n onCommit?: (value: number | null) => void;\r\n /**\r\n * 右侧附加内容,如 `%`。\r\n */\r\n addonAfter?: ReactNode;\r\n /**\r\n * 自定义格式化显示。\r\n */\r\n formatter?: (value: number | null) => string;\r\n /**\r\n * 自定义解析输入文本。\r\n */\r\n parser?: (text: string) => number | null;\r\n}\r\n\r\n/**\r\n * 左减右加数字计步器。\r\n */\r\nexport const ReactInputNumber = forwardRef<HTMLInputElement, ReactInputNumberProps>(\r\n function ReactInputNumber(props, ref) {\r\n const {\r\n addonAfter,\r\n className,\r\n defaultValue = null,\r\n disabled,\r\n formatter,\r\n max,\r\n min,\r\n onBlur,\r\n onChange,\r\n onCommit,\r\n onFocus,\r\n onKeyDown,\r\n parser,\r\n precision,\r\n step = 1,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const isControlled = value !== undefined;\r\n const [innerValue, setInnerValue] = useState<number | null>(\r\n isControlled ? (value ?? null) : defaultValue,\r\n );\r\n const currentValue = isControlled ? (value ?? null) : innerValue;\r\n const [draftText, setDraftText] = useState(\r\n formatDisplayValue(\r\n currentValue,\r\n formatter,\r\n resolvePrecision(precision, step),\r\n step,\r\n ),\r\n );\r\n const [focused, setFocused] = useState(false);\r\n const resolvedPrecision = useMemo(\r\n () => resolvePrecision(precision, step),\r\n [precision, step],\r\n );\r\n\r\n useEffect(() => {\r\n if (!focused) {\r\n setDraftText(\r\n formatDisplayValue(currentValue, formatter, resolvedPrecision, step),\r\n );\r\n }\r\n }, [currentValue, focused, formatter, resolvedPrecision, step]);\r\n\r\n const commitValue = (nextValue: number | null) => {\r\n const normalized = normalizeNumberValue(nextValue, {\r\n min,\r\n max,\r\n precision: resolvedPrecision,\r\n });\r\n if (!isControlled) {\r\n setInnerValue(normalized);\r\n }\r\n onChange?.(normalized);\r\n onCommit?.(normalized);\r\n setDraftText(\r\n formatDisplayValue(normalized, formatter, resolvedPrecision, step),\r\n );\r\n return normalized;\r\n };\r\n\r\n const stepBy = (direction: 1 | -1) => {\r\n if (disabled) {\r\n return;\r\n }\r\n const base =\r\n currentValue == null || !Number.isFinite(currentValue) ? 0 : currentValue;\r\n const next = base + direction * step;\r\n commitValue(next);\r\n };\r\n\r\n const atMin =\r\n currentValue != null && min != null && currentValue <= min + Number.EPSILON;\r\n const atMax =\r\n currentValue != null && max != null && currentValue >= max - Number.EPSILON;\r\n\r\n return (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-input-number`,\r\n focused && `${REACT_COMPONENT_PREFIX}-input-number-focused`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-input-number-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n >\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n disabled={disabled || atMin}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler`,\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler-down`,\r\n )}\r\n aria-label=\"减少\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n stepBy(-1);\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-input-number-handler-icon`}\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n <span className={`${REACT_COMPONENT_PREFIX}-input-number-input-wrap`}>\r\n <input\r\n {...restProps}\r\n ref={ref}\r\n disabled={disabled}\r\n inputMode=\"decimal\"\r\n value={draftText}\r\n className={`${REACT_COMPONENT_PREFIX}-input-number-input`}\r\n onFocus={(event) => {\r\n setFocused(true);\r\n onFocus?.(event);\r\n }}\r\n onChange={(event) => {\r\n const nextText = event.target.value;\r\n setDraftText(nextText);\r\n const parsed = parser\r\n ? parser(nextText)\r\n : parseNumberText(nextText);\r\n if (!isControlled) {\r\n setInnerValue(parsed);\r\n }\r\n onChange?.(parsed);\r\n }}\r\n onBlur={(event) => {\r\n setFocused(false);\r\n const parsed = parser\r\n ? parser(event.target.value)\r\n : parseNumberText(event.target.value);\r\n commitValue(parsed);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event: KeyboardEvent<HTMLInputElement>) => {\r\n if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n stepBy(1);\r\n } else if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n stepBy(-1);\r\n } else if (event.key === \"Enter\") {\r\n const parsed = parser\r\n ? parser(event.currentTarget.value)\r\n : parseNumberText(event.currentTarget.value);\r\n commitValue(parsed);\r\n }\r\n onKeyDown?.(event);\r\n }}\r\n />\r\n {addonAfter != null ? (\r\n <span className={`${REACT_COMPONENT_PREFIX}-input-number-addon`}>\r\n {addonAfter}\r\n </span>\r\n ) : null}\r\n </span>\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n disabled={disabled || atMax}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler`,\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler-up`,\r\n )}\r\n aria-label=\"增加\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n stepBy(1);\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-input-number-handler-icon`}\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseNumberText(value: string) {\r\n const text = value.trim().replace(/%/g, \"\");\r\n if (!text) {\r\n return null;\r\n }\r\n const nextValue = Number(text);\r\n return Number.isFinite(nextValue) ? nextValue : null;\r\n}\r\n\r\nfunction resolvePrecision(precision: number | undefined, step: number) {\r\n if (typeof precision === \"number\" && Number.isInteger(precision) && precision >= 0) {\r\n return precision;\r\n }\r\n const stepText = String(step);\r\n if (!stepText.includes(\".\")) {\r\n return 0;\r\n }\r\n return stepText.split(\".\")[1]?.length ?? 0;\r\n}\r\n\r\nfunction normalizeNumberValue(\r\n value: number | null,\r\n options: { min?: number; max?: number; precision: number },\r\n) {\r\n if (value == null || !Number.isFinite(value)) {\r\n return null;\r\n }\r\n let next = value;\r\n if (options.min != null) {\r\n next = Math.max(options.min, next);\r\n }\r\n if (options.max != null) {\r\n next = Math.min(options.max, next);\r\n }\r\n const factor = 10 ** options.precision;\r\n return Math.round(next * factor) / factor;\r\n}\r\n\r\nfunction formatDisplayValue(\r\n value: number | null,\r\n formatter: ((value: number | null) => string) | undefined,\r\n precision: number,\r\n step: number,\r\n) {\r\n if (formatter) {\r\n return formatter(value);\r\n }\r\n if (value == null || !Number.isFinite(value)) {\r\n return \"\";\r\n }\r\n const digits = resolvePrecision(precision, step);\r\n return digits > 0 ? value.toFixed(digits) : String(Math.round(value));\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-pagination {\\n --canvas-react-pagination-control-size: 32px;\\n --canvas-react-pagination-gap: 8px;\\n --canvas-react-pagination-padding-inline: 10px;\\n --canvas-react-control-height: var(--canvas-react-pagination-control-size);\\n display: flex;\\n align-items: center;\\n flex-wrap: nowrap;\\n gap: var(--canvas-react-pagination-gap);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n white-space: nowrap;\\n}\\n.canvas-react-pagination-small {\\n --canvas-react-pagination-control-size: 24px;\\n --canvas-react-pagination-gap: 4px;\\n --canvas-react-pagination-padding-inline: 6px;\\n}\\n.canvas-react-pagination > .canvas-react-select-wrap {\\n flex: 0 0 auto;\\n width: auto;\\n height: auto;\\n}\\n.canvas-react-pagination > .canvas-react-select-wrap > .canvas-react-select {\\n flex-shrink: 0;\\n}\\n.canvas-react-pagination-large {\\n --canvas-react-pagination-control-size: 40px;\\n --canvas-react-pagination-gap: 10px;\\n --canvas-react-pagination-padding-inline: 14px;\\n}\\n.canvas-react-pagination-pages {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--canvas-react-pagination-gap);\\n flex-wrap: nowrap;\\n}\\n.canvas-react-pagination-button,\\n.canvas-react-pagination-page {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: var(--canvas-react-pagination-control-size);\\n height: var(--canvas-react-pagination-control-size);\\n padding: 0 var(--canvas-react-pagination-padding-inline);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n color 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-pagination-button {\\n position: relative;\\n width: var(--canvas-react-pagination-control-size);\\n min-width: var(--canvas-react-pagination-control-size);\\n padding: 0;\\n}\\n.canvas-react-pagination-button:hover,\\n.canvas-react-pagination-page:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-pagination-page-active {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-bg-active);\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-pagination-button:disabled,\\n.canvas-react-pagination-page:disabled {\\n opacity: 0.48;\\n cursor: not-allowed;\\n}\\n.canvas-react-pagination-ellipsis {\\n color: var(--canvas-react-color-text-muted);\\n}\\n.canvas-react-pagination-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 7px;\\n height: 7px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transition:\\n border-color 0.18s ease,\\n transform 0.18s ease,\\n opacity 0.18s ease;\\n}\\n.canvas-react-pagination-arrow-prev {\\n transform: translate(-42%, -50%) rotate(135deg);\\n}\\n.canvas-react-pagination-arrow-next {\\n transform: translate(-58%, -50%) rotate(-45deg);\\n}\\n.canvas-react-pagination-button:hover .canvas-react-pagination-arrow {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-pagination-button:disabled .canvas-react-pagination-arrow {\\n opacity: 0.56;\\n}\\n.canvas-react-pagination-quick {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--canvas-react-pagination-gap);\\n flex-wrap: nowrap;\\n}\\n.canvas-react-pagination-total {\\n color: var(--canvas-react-color-text-muted);\\n}\\n.canvas-react-pagination button,\\n.canvas-react-pagination input {\\n font-family: inherit;\\n font-weight: inherit;\\n font-size: inherit;\\n}\\n\")","import { useMemo, useState, type CSSProperties } from \"react\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { ReactInput } from \"../input/index\";\nimport { ReactSelect } from \"../select/index\";\nimport \"./style.css\";\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** 分页器节点级 DOM 样式;当前页样式覆盖普通页码样式。 */\nexport type ReactPaginationStyles = Partial<\n Record<\n | \"root\"\n | \"total\"\n | \"pages\"\n | \"pageItem\"\n | \"activePageItem\"\n | \"prevButton\"\n | \"nextButton\"\n | \"prevIcon\"\n | \"nextIcon\"\n | \"ellipsis\"\n | \"sizeChanger\"\n | \"quickJumper\"\n | \"quickJumperText\"\n | \"quickJumperInput\",\n CSSProperties\n >\n>;\n\nexport interface ReactPaginationProps {\n /** 分页器容器的 DOM 样式。 */\n style?: CSSProperties;\n /** 节点样式;styles.root 优先于 style。 */\n styles?: ReactPaginationStyles;\n /**\n * 分页器尺寸。\n * @default \"middle\"\n */\n size?: \"small\" | \"middle\" | \"large\";\n /**\n * 当前页码,从 1 开始。\n */\n current: number;\n /**\n * 总条数。\n */\n total: number;\n /**\n * 每页条数。\n */\n pageSize?: number;\n /**\n * 每页条数候选。非空候选中缺少当前 pageSize 时自动补入。\n * @default [10, 20, 50, 100]\n */\n pageSizeOptions?: number[];\n /**\n * 是否禁用。\n */\n disabled?: boolean;\n /**\n * 是否显示页大小切换。\n */\n showSizeChanger?: boolean;\n /**\n * 是否显示快速跳转。\n */\n showQuickJumper?: boolean;\n /**\n * 是否使用更紧凑的页码数量。\n */\n showLessItems?: boolean;\n /**\n * 是否简易模式。\n */\n simple?: boolean;\n /**\n * 总数文案。\n */\n showTotal?: (total: number, range: [number, number]) => string;\n /**\n * 页码变化回调。\n */\n onChange?: (page: number, pageSize: number) => void;\n /**\n * 每页条数变化回调。\n */\n onPageSizeChange?: (page: number, pageSize: number) => void;\n}\n\n/**\n * 基础分页器。\n */\nexport function ReactPagination(props: ReactPaginationProps) {\n const {\n current,\n disabled,\n onChange,\n onPageSizeChange,\n pageSize = 10,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showLessItems,\n showQuickJumper,\n showSizeChanger,\n showTotal,\n simple,\n size = \"middle\",\n total,\n style: rootStyle,\n styles,\n } = props;\n const style = { ...rootStyle, ...styles?.root };\n const [quickValue, setQuickValue] = useState(\"\");\n const resolvedPageSizeOptions = useMemo(() => {\n if (\n pageSizeOptions.length === 0 ||\n pageSizeOptions.includes(pageSize) ||\n !Number.isSafeInteger(pageSize) ||\n pageSize <= 0\n ) {\n return pageSizeOptions;\n }\n return [...pageSizeOptions, pageSize].sort((left, right) => left - right);\n }, [pageSizeOptions, pageSize]);\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const safeCurrent = clampPage(current, totalPages);\n const range: [number, number] =\n total === 0\n ? [0, 0]\n : [\n (safeCurrent - 1) * pageSize + 1,\n Math.min(safeCurrent * pageSize, total),\n ];\n const pages = useMemo(\n () => buildPageItems(safeCurrent, totalPages, showLessItems),\n [safeCurrent, totalPages, showLessItems],\n );\n\n const jumpToPage = (page: number) => {\n if (disabled) {\n return;\n }\n\n const nextPage = clampPage(page, totalPages);\n onChange?.(nextPage, pageSize);\n };\n\n const handleQuickCommit = () => {\n if (!quickValue.trim()) {\n return;\n }\n\n jumpToPage(Number(quickValue));\n setQuickValue(\"\");\n };\n\n return (\n <div\n style={\n {\n ...style,\n ...(style?.borderColor\n ? { \"--canvas-react-color-border\": style.borderColor }\n : {}),\n ...(style?.backgroundColor\n ? { \"--canvas-react-color-bg\": style.backgroundColor }\n : {}),\n ...(style?.color\n ? {\n \"--canvas-react-color-text\": style.color,\n \"--canvas-react-color-text-muted\": style.color,\n }\n : {}),\n ...(style?.fontSize\n ? {\n \"--canvas-react-font-size\":\n typeof style.fontSize === \"number\"\n ? `${style.fontSize}px`\n : style.fontSize,\n }\n : {}),\n } as CSSProperties\n }\n className={`${REACT_COMPONENT_PREFIX}-pagination ${REACT_COMPONENT_PREFIX}-pagination-${size}`}\n >\n {showTotal ? (\n <span\n style={styles?.total}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n {showTotal(total, range)}\n </span>\n ) : null}\n\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-pagination-button`}\n aria-label=\"上一页\"\n style={styles?.prevButton}\n disabled={disabled || safeCurrent <= 1}\n onClick={() => jumpToPage(safeCurrent - 1)}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-pagination-arrow ${REACT_COMPONENT_PREFIX}-pagination-arrow-prev`}\n style={styles?.prevIcon}\n />\n </button>\n\n {simple ? (\n <span\n style={styles?.pageItem}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n {safeCurrent} / {totalPages}\n </span>\n ) : (\n <div\n style={styles?.pages}\n className={`${REACT_COMPONENT_PREFIX}-pagination-pages`}\n >\n {pages.map((item, index) =>\n item === \"...\" ? (\n <span\n key={`ellipsis-${index}`}\n className={`${REACT_COMPONENT_PREFIX}-pagination-ellipsis`}\n style={styles?.ellipsis}\n >\n ...\n </span>\n ) : (\n <button\n key={item}\n type=\"button\"\n style={{\n ...styles?.pageItem,\n ...(item === safeCurrent\n ? styles?.activePageItem\n : undefined),\n }}\n className={[\n `${REACT_COMPONENT_PREFIX}-pagination-page`,\n item === safeCurrent\n ? `${REACT_COMPONENT_PREFIX}-pagination-page-active`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={disabled}\n onClick={() => jumpToPage(item)}\n >\n {item}\n </button>\n ),\n )}\n </div>\n )}\n\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-pagination-button`}\n aria-label=\"下一页\"\n style={styles?.nextButton}\n disabled={disabled || safeCurrent >= totalPages}\n onClick={() => jumpToPage(safeCurrent + 1)}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-pagination-arrow ${REACT_COMPONENT_PREFIX}-pagination-arrow-next`}\n style={styles?.nextIcon}\n />\n </button>\n\n {showSizeChanger && resolvedPageSizeOptions.length ? (\n <ReactSelect\n value={String(pageSize)}\n disabled={disabled}\n style={{\n width: resolvePaginationSelectWidth(size, resolvedPageSizeOptions),\n ...styles?.sizeChanger,\n }}\n options={resolvedPageSizeOptions.map((size) => ({\n label: `${size} / 页`,\n value: size,\n }))}\n onChange={(value) => {\n const nextPageSize = Number(value);\n if (!Number.isFinite(nextPageSize)) {\n return;\n }\n\n onPageSizeChange?.(1, nextPageSize);\n }}\n />\n ) : null}\n\n {showQuickJumper ? (\n <div\n style={styles?.quickJumper}\n className={`${REACT_COMPONENT_PREFIX}-pagination-quick`}\n >\n <span\n style={styles?.quickJumperText}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n 跳至\n </span>\n <ReactInput\n value={quickValue}\n disabled={disabled}\n style={{\n width: resolvePaginationInputWidth(size),\n ...styles?.quickJumperInput,\n }}\n onChange={(event) => {\n setQuickValue(event.target.value.replace(/[^\\d]/g, \"\"));\n }}\n onPressEnter={() => {\n handleQuickCommit();\n }}\n onBlur={() => {\n handleQuickCommit();\n }}\n />\n <span\n style={styles?.quickJumperText}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n 页\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction resolvePaginationSelectWidth(\n size: NonNullable<ReactPaginationProps[\"size\"]>,\n pageSizeOptions: number[],\n) {\n const minWidth = size === \"large\" ? 120 : 108;\n const digits = Math.max(\n 1,\n ...pageSizeOptions.map((value) => String(value).length),\n );\n // ch 随字体预留数字宽度,额外包含“ / 页”、箭头、内边距和边框。\n return `max(${minWidth}px, calc(${digits}ch + 3em + 44px))`;\n}\n\nfunction resolvePaginationInputWidth(\n size: NonNullable<ReactPaginationProps[\"size\"]>,\n) {\n return size === \"small\" ? 56 : size === \"large\" ? 80 : 72;\n}\n\nfunction buildPageItems(\n current: number,\n totalPages: number,\n showLessItems?: boolean,\n) {\n if (totalPages <= 1) {\n return [1];\n }\n\n const buffer = showLessItems ? 1 : 2;\n const start = Math.max(2, current - buffer);\n const end = Math.min(totalPages - 1, current + buffer);\n const items: Array<number | \"...\"> = [1];\n\n if (start > 2) {\n items.push(\"...\");\n }\n\n for (let page = start; page <= end; page += 1) {\n items.push(page);\n }\n\n if (end < totalPages - 1) {\n items.push(\"...\");\n }\n\n items.push(totalPages);\n return items;\n}\n\nfunction clampPage(page: number, totalPages: number) {\n if (!Number.isFinite(page)) {\n return 1;\n }\n\n return Math.min(Math.max(1, Math.trunc(page)), totalPages);\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-popconfirm-trigger {\\n display: inline-flex;\\n max-width: 100%;\\n}\\n.canvas-react-popconfirm-trigger-disabled {\\n cursor: not-allowed;\\n}\\n.canvas-react-popconfirm-popup {\\n overflow: visible;\\n}\\n.canvas-react-popconfirm {\\n position: relative;\\n box-sizing: border-box;\\n width: max-content;\\n min-width: 180px;\\n max-width: 320px;\\n padding: 12px;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n line-height: 1.5;\\n}\\n.canvas-react-popconfirm-arrow {\\n position: absolute;\\n z-index: 1;\\n box-sizing: border-box;\\n width: 10px;\\n height: 10px;\\n border: 0;\\n background: var(--canvas-react-color-bg, #ffffff);\\n pointer-events: none;\\n transform: rotate(45deg);\\n}\\n.canvas-react-popup[data-placement^=bottom] .canvas-react-popconfirm-arrow {\\n top: -5px;\\n border-top: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-left: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement^=top] .canvas-react-popconfirm-arrow {\\n bottom: -5px;\\n border-right: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-bottom: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement$=Left] .canvas-react-popconfirm-arrow {\\n left: 24px;\\n}\\n.canvas-react-popup[data-placement$=Right] .canvas-react-popconfirm-arrow {\\n right: 24px;\\n}\\n.canvas-react-popup[data-placement^=left] .canvas-react-popconfirm-arrow {\\n right: -5px;\\n border-top: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-right: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement^=right] .canvas-react-popconfirm-arrow {\\n left: -5px;\\n border-bottom: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-left: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement$=Top] .canvas-react-popconfirm-arrow {\\n top: 18px;\\n}\\n.canvas-react-popup[data-placement$=Bottom] .canvas-react-popconfirm-arrow {\\n bottom: 18px;\\n}\\n.canvas-react-popconfirm-message {\\n display: flex;\\n align-items: flex-start;\\n gap: 8px;\\n}\\n.canvas-react-popconfirm-icon {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 16px;\\n height: 16px;\\n margin-top: 2px;\\n color: #faad14;\\n font-size: 12px;\\n line-height: 1;\\n}\\n.canvas-react-popconfirm-default-icon {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 14px;\\n height: 14px;\\n border-radius: 50%;\\n background: #faad14;\\n color: #ffffff;\\n font-size: 11px;\\n font-weight: 700;\\n line-height: 1;\\n}\\n.canvas-react-popconfirm-text {\\n min-width: 0;\\n}\\n.canvas-react-popconfirm-title {\\n color: var(--canvas-react-color-text);\\n font-weight: 500;\\n word-break: break-word;\\n}\\n.canvas-react-popconfirm-description {\\n margin-top: 4px;\\n color: var(--canvas-react-color-text-muted);\\n word-break: break-word;\\n}\\n.canvas-react-popconfirm-actions {\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n gap: 8px;\\n margin-top: 12px;\\n}\\n.canvas-react-popconfirm-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n height: 26px;\\n min-width: 48px;\\n padding: 0 10px;\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: 12px;\\n line-height: 1;\\n white-space: nowrap;\\n cursor: pointer;\\n transition:\\n border-color 0.18s ease,\\n background-color 0.18s ease,\\n color 0.18s ease,\\n opacity 0.18s ease;\\n}\\n.canvas-react-popconfirm-button:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-popconfirm-button-primary {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #ffffff;\\n}\\n.canvas-react-popconfirm-button-primary:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n background: var(--canvas-react-color-primary-hover);\\n color: #ffffff;\\n}\\n.canvas-react-popconfirm-button:disabled {\\n opacity: 0.56;\\n cursor: not-allowed;\\n}\\n.canvas-react-popconfirm-button:disabled:hover {\\n border-color: var(--canvas-react-color-border);\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-popconfirm-button-primary:disabled:hover {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #ffffff;\\n}\\n.canvas-react-popconfirm-loading {\\n width: 12px;\\n height: 12px;\\n border: 2px solid rgba(255, 255, 255, 0.45);\\n border-top-color: #ffffff;\\n border-radius: 50%;\\n animation: canvas-react-popconfirm-loading 0.8s linear infinite;\\n}\\n@keyframes canvas-react-popconfirm-loading {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n\")","import {\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from \"react\";\nimport { useCompatibleId } from \"../../shared/compatible-id\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { ReactPopup, type ReactPopupProps } from \"../popup/index\";\nimport \"./style.css\";\n\n/**\n * 确认气泡弹出位置。\n */\nexport type ReactPopconfirmPlacement = NonNullable<\n ReactPopupProps[\"placement\"]\n>;\n\n/**\n * 确认气泡按钮属性。\n */\nexport type ReactPopconfirmButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"onClick\" | \"type\"\n>;\n\ntype ReactPopconfirmConfirmResult = void | Promise<void>;\n\nexport interface ReactPopconfirmProps {\n /**\n * 触发确认气泡的内容。\n */\n children: ReactNode;\n /**\n * 确认标题。\n */\n title: ReactNode;\n /**\n * 补充说明。\n */\n description?: ReactNode;\n /**\n * 是否显示确认气泡,传入后进入受控模式。\n */\n open?: boolean;\n /**\n * 默认是否显示确认气泡。\n */\n defaultOpen?: boolean;\n /**\n * 是否禁用确认气泡。\n */\n disabled?: boolean;\n /**\n * 确认气泡位置。\n */\n placement?: ReactPopconfirmPlacement;\n /**\n * 与触发元素的间距。\n */\n offset?: number;\n /**\n * 自定义层级。\n */\n zIndex?: number;\n /**\n * 图标内容,传入 null 时隐藏默认图标。\n */\n icon?: ReactNode;\n /**\n * 确认按钮文案。\n */\n okText?: ReactNode;\n /**\n * 取消按钮文案。\n */\n cancelText?: ReactNode;\n /**\n * 是否显示取消按钮。\n */\n showCancel?: boolean;\n /**\n * 确认按钮是否加载中。\n */\n confirmLoading?: boolean;\n /**\n * 确认按钮属性。\n */\n okButtonProps?: ReactPopconfirmButtonProps;\n /**\n * 取消按钮属性。\n */\n cancelButtonProps?: ReactPopconfirmButtonProps;\n /**\n * 点击确认回调。\n */\n onConfirm?: (\n event: ReactMouseEvent<HTMLButtonElement>,\n ) => ReactPopconfirmConfirmResult;\n /**\n * 点击取消回调。\n */\n onCancel?: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n /**\n * 打开状态变化回调。\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * 触发器类名。\n */\n className?: string;\n /**\n * 触发器样式。\n */\n style?: CSSProperties;\n /**\n * 弹层面板类名。\n */\n popupClassName?: string;\n /**\n * 弹层面板样式。\n */\n popupStyle?: CSSProperties;\n}\n\n/**\n * 点击触发的确认气泡组件。\n */\nexport function ReactPopconfirm(props: ReactPopconfirmProps) {\n const {\n cancelButtonProps,\n cancelText = \"取消\",\n children,\n className,\n confirmLoading,\n defaultOpen = false,\n description,\n disabled = false,\n icon,\n offset = 8,\n okButtonProps,\n okText = \"确定\",\n onCancel,\n onConfirm,\n onOpenChange,\n open,\n placement = \"topLeft\",\n popupClassName,\n popupStyle,\n showCancel = true,\n style,\n title,\n zIndex,\n } = props;\n const triggerRef = useRef<HTMLSpanElement | null>(null);\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const [innerConfirmLoading, setInnerConfirmLoading] = useState(false);\n const titleId = useCompatibleId(\"canvas-react-popconfirm-title\");\n const descriptionId = useCompatibleId(\"canvas-react-popconfirm-description\");\n const controlled = open !== undefined;\n const mergedOpen = controlled ? Boolean(open) : innerOpen;\n const popupOpen = mergedOpen && !disabled;\n const mergedConfirmLoading = confirmLoading ?? innerConfirmLoading;\n const hasTitle = title !== null && title !== undefined && title !== false;\n const hasDescription =\n description !== null && description !== undefined && description !== false;\n const {\n className: okButtonClassName,\n disabled: okButtonDisabled,\n ...restOkButtonProps\n } = okButtonProps ?? {};\n const {\n className: cancelButtonClassName,\n disabled: cancelButtonDisabled,\n ...restCancelButtonProps\n } = cancelButtonProps ?? {};\n\n useEffect(() => {\n if (!disabled || !mergedOpen) {\n return;\n }\n\n if (!controlled) {\n setInnerOpen(false);\n }\n onOpenChange?.(false);\n }, [controlled, disabled, mergedOpen, onOpenChange]);\n\n const setOpen = (nextOpen: boolean) => {\n const safeOpen = disabled ? false : nextOpen;\n if (!controlled) {\n setInnerOpen(safeOpen);\n }\n if (safeOpen !== mergedOpen) {\n onOpenChange?.(safeOpen);\n }\n };\n\n const handleConfirm = (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (mergedConfirmLoading || okButtonDisabled) {\n return;\n }\n\n const result = onConfirm?.(event);\n if (isPromiseLike(result)) {\n setInnerConfirmLoading(true);\n Promise.resolve(result)\n .then(() => {\n setOpen(false);\n })\n .catch(() => undefined)\n .finally(() => {\n setInnerConfirmLoading(false);\n });\n return;\n }\n\n setOpen(false);\n };\n\n return (\n <>\n <span\n ref={triggerRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-trigger`,\n disabled && `${REACT_COMPONENT_PREFIX}-popconfirm-trigger-disabled`,\n className,\n )}\n style={style}\n aria-expanded={popupOpen}\n aria-haspopup=\"dialog\"\n onClick={() => {\n if (disabled) {\n return;\n }\n\n setOpen(!mergedOpen);\n }}\n >\n {children}\n </span>\n <ReactPopup\n open={popupOpen}\n anchorRef={triggerRef}\n offset={offset}\n placement={placement}\n zIndex={zIndex}\n surfaceClassName={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-popup`,\n `${REACT_COMPONENT_PREFIX}-popconfirm-placement-${placement}`,\n popupClassName,\n )}\n surfaceStyle={popupStyle}\n onOpenChange={setOpen}\n >\n <div\n className={`${REACT_COMPONENT_PREFIX}-popconfirm`}\n role=\"alertdialog\"\n aria-labelledby={hasTitle ? titleId : undefined}\n aria-describedby={hasDescription ? descriptionId : undefined}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-arrow`}\n aria-hidden=\"true\"\n />\n <div className={`${REACT_COMPONENT_PREFIX}-popconfirm-message`}>\n {icon !== null ? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-icon`}\n aria-hidden=\"true\"\n >\n {icon ?? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-default-icon`}\n >\n !\n </span>\n )}\n </span>\n ) : null}\n <div className={`${REACT_COMPONENT_PREFIX}-popconfirm-text`}>\n {hasTitle ? (\n <div\n id={titleId}\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-title`}\n >\n {title}\n </div>\n ) : null}\n {hasDescription ? (\n <div\n id={descriptionId}\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-description`}\n >\n {description}\n </div>\n ) : null}\n </div>\n </div>\n <div className={`${REACT_COMPONENT_PREFIX}-popconfirm-actions`}>\n {showCancel ? (\n <button\n {...restCancelButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-button`,\n `${REACT_COMPONENT_PREFIX}-popconfirm-button-cancel`,\n cancelButtonClassName,\n )}\n disabled={mergedConfirmLoading || cancelButtonDisabled}\n onClick={(event) => {\n onCancel?.(event);\n setOpen(false);\n }}\n >\n {cancelText}\n </button>\n ) : null}\n <button\n {...restOkButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-button`,\n `${REACT_COMPONENT_PREFIX}-popconfirm-button-primary`,\n okButtonClassName,\n )}\n disabled={mergedConfirmLoading || okButtonDisabled}\n onClick={handleConfirm}\n >\n {mergedConfirmLoading ? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-loading`}\n aria-hidden=\"true\"\n />\n ) : null}\n <span>{okText}</span>\n </button>\n </div>\n </div>\n </ReactPopup>\n </>\n );\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as Promise<void>).then === \"function\"\n );\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../year/style.css\\\";\\n.canvas-react-quarter-grid {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 12px 8px;\\n}\\n.canvas-react-quarter-cell {\\n height: 56px;\\n font-size: 16px;\\n font-weight: 600;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactQuarterPickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前季度值,格式为 YYYY-QN。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst QUARTERS = [\"Q1\", \"Q2\", \"Q3\", \"Q4\"] as const;\r\n\r\n/**\r\n * 基础季度选择器。\r\n */\r\nexport const ReactQuarterPicker = forwardRef<HTMLInputElement, ReactQuarterPickerProps>(\r\n function ReactQuarterPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择季度\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"quarter\" | \"year\" | \"decade\">(\"quarter\");\r\n const parsedValue = useMemo(() => parseQuarterValue(value), [value]);\r\n const [panelYear, setPanelYear] = useState(\r\n () => parsedValue?.year ?? new Date().getFullYear(),\r\n );\r\n const yearPanelStart = useMemo(() => resolveDecadeStart(panelYear), [panelYear]);\r\n const decadePanelStart = useMemo(() => {\r\n return Math.floor(yearPanelStart / 100) * 100;\r\n }, [yearPanelStart]);\r\n const yearItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index);\r\n }, [yearPanelStart]);\r\n const decadeItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);\r\n }, [decadePanelStart]);\r\n const displayValue =\r\n parsedValue == null ? \"\" : `${parsedValue.year}-${parsedValue.quarter}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"quarter\");\r\n setPanelYear(parsedValue?.year ?? new Date().getFullYear());\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={264}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 264 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-year-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"quarter\") {\r\n return prev - 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev - 10;\r\n }\r\n return prev - 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"quarter\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"quarter\"\r\n ? `${panelYear}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"quarter\") {\r\n return prev + 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev + 10;\r\n }\r\n return prev + 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"quarter\" && `${REACT_COMPONENT_PREFIX}-quarter-grid`,\r\n )}\r\n >\r\n {mode === \"quarter\"\r\n ? QUARTERS.map((quarter) => {\r\n const selected =\r\n parsedValue?.year === panelYear && parsedValue.quarter === quarter;\r\n return (\r\n <button\r\n key={quarter}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-quarter-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(`${panelYear}-${quarter}`);\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {quarter}\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart && yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === panelYear;\r\n\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(yearItem);\r\n setMode(\"quarter\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart && yearPanelStart <= decadeStart + 9;\r\n\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(decadeStart);\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseQuarterValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(Q[1-4])$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n return {\r\n year: Number(matched[1]),\r\n quarter: matched[2] as (typeof QUARTERS)[number],\r\n };\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-resizable-panels {\\n display: flex;\\n width: 100%;\\n height: 100%;\\n min-width: 0;\\n min-height: 0;\\n overflow: auto;\\n background: var(--canvas-react-color-bg, #ffffff);\\n}\\n.canvas-react-resizable-panels-horizontal {\\n flex-direction: row;\\n}\\n.canvas-react-resizable-panels-vertical {\\n flex-direction: column;\\n}\\n.canvas-react-resizable-panels-resizing {\\n cursor: inherit;\\n}\\n.canvas-react-resizable-panels-item {\\n display: contents;\\n}\\n.canvas-react-resizable-panel {\\n min-width: 0;\\n min-height: 0;\\n overflow: auto;\\n}\\n.canvas-react-resizable-panels-animated:not(.canvas-react-resizable-panels-resizing) .canvas-react-resizable-panel {\\n transition:\\n flex-basis 0.22s cubic-bezier(0.2, 0, 0, 1),\\n width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n opacity 0.14s ease;\\n}\\n.canvas-react-resizable-panel-collapsed {\\n visibility: hidden;\\n overflow: hidden;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-resizable-panels-animated:not(.canvas-react-resizable-panels-resizing) .canvas-react-resizable-panel-collapsed {\\n transition:\\n flex-basis 0.22s cubic-bezier(0.2, 0, 0, 1),\\n width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n opacity 0.14s ease,\\n visibility 0s linear 0.22s;\\n}\\n.canvas-react-resizable-panels-divider {\\n position: relative;\\n z-index: 1;\\n flex: 0 0 9px;\\n touch-action: none;\\n outline: none;\\n}\\n.canvas-react-resizable-panels-divider-horizontal {\\n align-self: stretch;\\n width: 9px;\\n min-height: 24px;\\n cursor: col-resize;\\n}\\n.canvas-react-resizable-panels-divider-vertical {\\n width: auto;\\n min-width: 24px;\\n height: 9px;\\n cursor: row-resize;\\n}\\n.canvas-react-resizable-panels-animated .canvas-react-resizable-panels-divider {\\n transition:\\n flex-basis 0.22s cubic-bezier(0.2, 0, 0, 1),\\n width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n opacity 0.14s ease;\\n}\\n.canvas-react-resizable-panels-divider-collapsed {\\n flex-basis: 0;\\n overflow: hidden;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-collapsed {\\n width: 0;\\n min-width: 0;\\n}\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-collapsed {\\n height: 0;\\n min-height: 0;\\n}\\n.canvas-react-resizable-panels-divider-line {\\n position: absolute;\\n background: var(--canvas-react-color-border, #d9d9d9);\\n transition:\\n width 0.16s ease,\\n height 0.16s ease,\\n background-color 0.16s ease,\\n transform 0.16s ease;\\n}\\n.canvas-react-resizable-panels-divider-horizontal .canvas-react-resizable-panels-divider-line {\\n inset: 0 auto 0 4px;\\n width: 1px;\\n}\\n.canvas-react-resizable-panels-divider-vertical .canvas-react-resizable-panels-divider-line {\\n inset: 4px 0 auto;\\n height: 1px;\\n}\\n.canvas-react-resizable-panels-divider-horizontal:hover .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-horizontal:focus-visible .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-active .canvas-react-resizable-panels-divider-line {\\n width: 3px;\\n background: var(--canvas-react-color-primary, #1677ff);\\n transform: translateX(-1px);\\n}\\n.canvas-react-resizable-panels-divider-vertical:hover .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-vertical:focus-visible .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-active .canvas-react-resizable-panels-divider-line {\\n height: 3px;\\n background: var(--canvas-react-color-primary, #1677ff);\\n transform: translateY(-1px);\\n}\\n.canvas-react-resizable-panels-divider:focus-visible {\\n box-shadow: inset 0 0 0 2px rgba(22, 119, 255, 0.12);\\n}\\n.canvas-react-resizable-panels-divider-disabled {\\n cursor: default;\\n}\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-disabled .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-disabled:hover .canvas-react-resizable-panels-divider-line {\\n width: 1px;\\n background: var(--canvas-react-color-border, #d9d9d9);\\n transform: none;\\n}\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-disabled .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-disabled:hover .canvas-react-resizable-panels-divider-line {\\n height: 1px;\\n background: var(--canvas-react-color-border, #d9d9d9);\\n transform: none;\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .canvas-react-resizable-panels-animated .canvas-react-resizable-panel,\\n .canvas-react-resizable-panels-animated .canvas-react-resizable-panels-divider,\\n .canvas-react-resizable-panels-divider-line {\\n transition-duration: 0.01ms;\\n transition-delay: 0s;\\n }\\n}\\n\")","import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nconst DEFAULT_MIN_SIZE = 80;\nconst DEFAULT_KEYBOARD_STEP = 10;\n\n/** 面板排列方向。 */\nexport type ReactResizablePanelsDirection = \"horizontal\" | \"vertical\";\n\n/** 可调整面板配置。 */\nexport interface ReactResizablePanel {\n /** 面板唯一标识。 */\n id: string;\n /** 面板内容。 */\n content: ReactNode;\n /** 是否显示当前面板。@default true */\n visible?: boolean;\n /** 是否折叠当前面板;折叠时保留内容挂载。@default false */\n collapsed?: boolean;\n /** 初始尺寸,单位为像素。 */\n size?: number;\n /** 最小尺寸,单位为像素。@default 80 */\n minSize?: number;\n /** 最大尺寸,单位为像素。 */\n maxSize?: number;\n /** 是否允许拖拽当前面板之后的分隔条。@default true */\n resizable?: boolean;\n /** 面板类名。 */\n className?: string;\n /** 面板样式。 */\n style?: CSSProperties;\n}\n\n/** 面板尺寸映射。 */\nexport type ReactResizablePanelSizes = Partial<Record<string, number>>;\n\n/** 面板调整信息。 */\nexport interface ReactResizablePanelsResizeInfo {\n /** 分隔条之前的面板标识。 */\n beforePanelId: string;\n /** 分隔条之后的面板标识。 */\n afterPanelId: string;\n /** 面板排列方向。 */\n direction: ReactResizablePanelsDirection;\n}\n\nexport interface ReactResizablePanelsProps {\n /** 面板配置。 */\n panels: ReactResizablePanel[];\n /** 面板排列方向。@default \"horizontal\" */\n direction?: ReactResizablePanelsDirection;\n /** 是否为面板展开、折叠及尺寸变化启用过渡动画。@default false */\n animated?: boolean;\n /** 当前面板尺寸,传入后进入受控模式。 */\n sizes?: ReactResizablePanelSizes;\n /** 默认面板尺寸。 */\n defaultSizes?: ReactResizablePanelSizes;\n /** 尺寸变化回调。 */\n onSizesChange?: (\n sizes: ReactResizablePanelSizes,\n info: ReactResizablePanelsResizeInfo,\n ) => void;\n /** 开始调整尺寸回调。 */\n onResizeStart?: (info: ReactResizablePanelsResizeInfo) => void;\n /** 完成调整尺寸回调。 */\n onResizeEnd?: (\n sizes: ReactResizablePanelSizes,\n info: ReactResizablePanelsResizeInfo,\n ) => void;\n /** 键盘方向键单次调整的像素值。@default 10 */\n keyboardStep?: number;\n /** 根节点类名。 */\n className?: string;\n /** 根节点样式。 */\n style?: CSSProperties;\n}\n\ninterface ResizeSession extends ReactResizablePanelsResizeInfo {\n pointerId: number;\n startPointerPosition: number;\n startBeforeSize: number;\n startAfterSize: number;\n latestSizes: ReactResizablePanelSizes;\n previousBodyCursor: string;\n previousBodyUserSelect: string;\n}\n\n/**\n * 支持多栏、多行以及嵌套布局的可调整面板组件。\n */\nexport function ReactResizablePanels(props: ReactResizablePanelsProps) {\n const {\n animated = false,\n className,\n defaultSizes,\n direction = \"horizontal\",\n keyboardStep = DEFAULT_KEYBOARD_STEP,\n onResizeEnd,\n onResizeStart,\n onSizesChange,\n panels,\n sizes,\n style,\n } = props;\n const [innerSizes, setInnerSizes] = useState<ReactResizablePanelSizes>(\n () => ({\n ...defaultSizes,\n }),\n );\n const [resizingDividerId, setResizingDividerId] = useState<string | null>(\n null,\n );\n const panelRefs = useRef<Record<string, HTMLDivElement | null>>({});\n const resizeSessionRef = useRef<ResizeSession | null>(null);\n const controlled = sizes !== undefined;\n const mergedSizes = controlled ? sizes : innerSizes;\n const visiblePanels = panels.filter((panel) => panel.visible !== false);\n\n useEffect(\n () => () => {\n const session = resizeSessionRef.current;\n if (!session) {\n return;\n }\n document.body.style.cursor = session.previousBodyCursor;\n document.body.style.userSelect = session.previousBodyUserSelect;\n resizeSessionRef.current = null;\n },\n [],\n );\n\n const applySizes = (\n nextSizes: ReactResizablePanelSizes,\n info: ReactResizablePanelsResizeInfo,\n ) => {\n if (!controlled) {\n setInnerSizes(nextSizes);\n }\n if (resizeSessionRef.current) {\n resizeSessionRef.current.latestSizes = nextSizes;\n }\n onSizesChange?.(nextSizes, info);\n };\n\n const resizePair = (params: {\n delta: number;\n beforePanel: ReactResizablePanel;\n afterPanel: ReactResizablePanel;\n startBeforeSize: number;\n startAfterSize: number;\n }) => {\n const { afterPanel, beforePanel, delta, startAfterSize, startBeforeSize } =\n params;\n const nextPair = resolveResizablePanelSizes({\n afterMaxSize: afterPanel.maxSize,\n afterMinSize: afterPanel.minSize,\n beforeMaxSize: beforePanel.maxSize,\n beforeMinSize: beforePanel.minSize,\n delta,\n startAfterSize,\n startBeforeSize,\n });\n const info = createResizeInfo(beforePanel.id, afterPanel.id, direction);\n const nextSizes = {\n ...mergedSizes,\n [beforePanel.id]: nextPair.beforeSize,\n [afterPanel.id]: nextPair.afterSize,\n };\n applySizes(nextSizes, info);\n return nextSizes;\n };\n\n const startResize = (\n event: ReactPointerEvent<HTMLDivElement>,\n beforePanel: ReactResizablePanel,\n afterPanel: ReactResizablePanel,\n ) => {\n if (event.button !== 0) {\n return;\n }\n const beforeElement = panelRefs.current[beforePanel.id];\n const afterElement = panelRefs.current[afterPanel.id];\n if (!beforeElement || !afterElement) {\n return;\n }\n\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n const startBeforeSize = resolveElementSize(beforeElement, direction);\n const startAfterSize = resolveElementSize(afterElement, direction);\n const info = createResizeInfo(beforePanel.id, afterPanel.id, direction);\n resizeSessionRef.current = {\n ...info,\n latestSizes: {\n ...mergedSizes,\n [beforePanel.id]: startBeforeSize,\n [afterPanel.id]: startAfterSize,\n },\n pointerId: event.pointerId,\n previousBodyCursor: document.body.style.cursor,\n previousBodyUserSelect: document.body.style.userSelect,\n startAfterSize,\n startBeforeSize,\n startPointerPosition: resolvePointerPosition(event, direction),\n };\n document.body.style.cursor = resolveResizeCursor(direction);\n document.body.style.userSelect = \"none\";\n setResizingDividerId(beforePanel.id);\n onResizeStart?.(info);\n };\n\n const moveResize = (\n event: ReactPointerEvent<HTMLDivElement>,\n beforePanel: ReactResizablePanel,\n afterPanel: ReactResizablePanel,\n ) => {\n const session = resizeSessionRef.current;\n if (!session || session.pointerId !== event.pointerId) {\n return;\n }\n resizePair({\n afterPanel,\n beforePanel,\n delta:\n resolvePointerPosition(event, direction) - session.startPointerPosition,\n startAfterSize: session.startAfterSize,\n startBeforeSize: session.startBeforeSize,\n });\n };\n\n const finishResize = (event: ReactPointerEvent<HTMLDivElement>) => {\n const session = resizeSessionRef.current;\n if (!session || session.pointerId !== event.pointerId) {\n return;\n }\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n document.body.style.cursor = session.previousBodyCursor;\n document.body.style.userSelect = session.previousBodyUserSelect;\n resizeSessionRef.current = null;\n setResizingDividerId(null);\n onResizeEnd?.(session.latestSizes, {\n afterPanelId: session.afterPanelId,\n beforePanelId: session.beforePanelId,\n direction: session.direction,\n });\n };\n\n const handleDividerKeyDown = (\n event: ReactKeyboardEvent<HTMLDivElement>,\n beforePanel: ReactResizablePanel,\n afterPanel: ReactResizablePanel,\n ) => {\n const deltaDirection = resolveKeyboardDeltaDirection(event.key, direction);\n if (deltaDirection === 0) {\n return;\n }\n const beforeElement = panelRefs.current[beforePanel.id];\n const afterElement = panelRefs.current[afterPanel.id];\n if (!beforeElement || !afterElement) {\n return;\n }\n\n event.preventDefault();\n const step = normalizePositiveNumber(keyboardStep, DEFAULT_KEYBOARD_STEP);\n const nextSizes = resizePair({\n afterPanel,\n beforePanel,\n delta: deltaDirection * step,\n startAfterSize: resolveElementSize(afterElement, direction),\n startBeforeSize: resolveElementSize(beforeElement, direction),\n });\n onResizeEnd?.(\n nextSizes,\n createResizeInfo(beforePanel.id, afterPanel.id, direction),\n );\n };\n\n return (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-resizable-panels`,\n `${REACT_COMPONENT_PREFIX}-resizable-panels-${direction}`,\n animated && `${REACT_COMPONENT_PREFIX}-resizable-panels-animated`,\n resizingDividerId !== null &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-resizing`,\n className,\n )}\n style={style}\n >\n {visiblePanels.map((panel, index) => {\n const nextPanel = visiblePanels[index + 1];\n const configuredSize = mergedSizes[panel.id] ?? panel.size;\n const collapsed = panel.collapsed === true;\n const minSize = collapsed\n ? 0\n : normalizePositiveNumber(panel.minSize, DEFAULT_MIN_SIZE);\n const maxSize = collapsed\n ? 0\n : normalizeMaxSize(panel.maxSize, minSize);\n const panelStyle = collapsed\n ? resolveCollapsedPanelStyle(direction)\n : resolvePanelStyle({\n configuredSize,\n direction,\n isLast: index === visiblePanels.length - 1,\n maxSize,\n minSize,\n });\n const dividerCollapsed = nextPanel\n ? collapsed || nextPanel.collapsed === true\n : false;\n const dividerDisabled = panel.resizable === false || dividerCollapsed;\n\n return (\n <div\n className={`${REACT_COMPONENT_PREFIX}-resizable-panels-item`}\n key={panel.id}\n >\n <div\n ref={(element) => {\n panelRefs.current[panel.id] = element;\n }}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-resizable-panel`,\n collapsed &&\n `${REACT_COMPONENT_PREFIX}-resizable-panel-collapsed`,\n panel.className,\n )}\n style={{\n ...panelStyle,\n ...panel.style,\n ...(collapsed ? panelStyle : undefined),\n }}\n data-panel-id={panel.id}\n aria-hidden={collapsed || undefined}\n >\n {panel.content}\n </div>\n {nextPanel ? (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider`,\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-${direction}`,\n dividerDisabled &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-disabled`,\n dividerCollapsed &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-collapsed`,\n resizingDividerId === panel.id &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-active`,\n )}\n role=\"separator\"\n aria-label={`调整 ${panel.id} 与 ${nextPanel.id} 的${\n direction === \"horizontal\" ? \"宽度\" : \"高度\"\n }`}\n aria-disabled={dividerDisabled}\n aria-orientation={\n direction === \"horizontal\" ? \"vertical\" : \"horizontal\"\n }\n aria-valuemin={minSize}\n aria-valuemax={Number.isFinite(maxSize) ? maxSize : undefined}\n aria-valuenow={\n configuredSize == null\n ? undefined\n : Math.round(configuredSize)\n }\n tabIndex={dividerDisabled ? -1 : 0}\n onKeyDown={(event) => {\n if (!dividerDisabled) {\n handleDividerKeyDown(event, panel, nextPanel);\n }\n }}\n onPointerCancel={finishResize}\n onPointerDown={(event) => {\n if (!dividerDisabled) {\n startResize(event, panel, nextPanel);\n }\n }}\n onPointerMove={(event) => {\n if (!dividerDisabled) {\n moveResize(event, panel, nextPanel);\n }\n }}\n onPointerUp={finishResize}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-resizable-panels-divider-line`}\n aria-hidden=\"true\"\n />\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\n/** 根据拖拽距离与相邻面板约束计算新尺寸。 */\nexport function resolveResizablePanelSizes(params: {\n delta: number;\n startBeforeSize: number;\n startAfterSize: number;\n beforeMinSize?: number;\n beforeMaxSize?: number;\n afterMinSize?: number;\n afterMaxSize?: number;\n}) {\n const {\n afterMaxSize,\n afterMinSize,\n beforeMaxSize,\n beforeMinSize,\n delta,\n startAfterSize,\n startBeforeSize,\n } = params;\n const safeBeforeMin = normalizePositiveNumber(\n beforeMinSize,\n DEFAULT_MIN_SIZE,\n );\n const safeAfterMin = normalizePositiveNumber(afterMinSize, DEFAULT_MIN_SIZE);\n const safeBeforeMax = normalizeMaxSize(beforeMaxSize, safeBeforeMin);\n const safeAfterMax = normalizeMaxSize(afterMaxSize, safeAfterMin);\n const minDelta = Math.max(\n safeBeforeMin - startBeforeSize,\n startAfterSize - safeAfterMax,\n );\n const maxDelta = Math.min(\n safeBeforeMax - startBeforeSize,\n startAfterSize - safeAfterMin,\n );\n const safeDelta = clamp(\n Number.isFinite(delta) ? delta : 0,\n minDelta,\n maxDelta,\n );\n\n return {\n afterSize: Math.round((startAfterSize - safeDelta) * 100) / 100,\n beforeSize: Math.round((startBeforeSize + safeDelta) * 100) / 100,\n };\n}\n\nfunction createResizeInfo(\n beforePanelId: string,\n afterPanelId: string,\n direction: ReactResizablePanelsDirection,\n): ReactResizablePanelsResizeInfo {\n return { afterPanelId, beforePanelId, direction };\n}\n\nfunction resolveElementSize(\n element: HTMLElement,\n direction: ReactResizablePanelsDirection,\n) {\n const rect = element.getBoundingClientRect();\n return direction === \"horizontal\" ? rect.width : rect.height;\n}\n\nfunction resolvePointerPosition(\n event: ReactPointerEvent<HTMLDivElement>,\n direction: ReactResizablePanelsDirection,\n) {\n return direction === \"horizontal\" ? event.clientX : event.clientY;\n}\n\nfunction resolveResizeCursor(direction: ReactResizablePanelsDirection) {\n return direction === \"horizontal\" ? \"col-resize\" : \"row-resize\";\n}\n\nfunction resolveKeyboardDeltaDirection(\n key: string,\n direction: ReactResizablePanelsDirection,\n) {\n if (direction === \"horizontal\") {\n return key === \"ArrowLeft\" ? -1 : key === \"ArrowRight\" ? 1 : 0;\n }\n return key === \"ArrowUp\" ? -1 : key === \"ArrowDown\" ? 1 : 0;\n}\n\nfunction resolveCollapsedPanelStyle(\n direction: ReactResizablePanelsDirection,\n): CSSProperties {\n return direction === \"horizontal\"\n ? { flex: \"0 0 0px\", maxWidth: 0, minWidth: 0, width: 0 }\n : { flex: \"0 0 0px\", height: 0, maxHeight: 0, minHeight: 0 };\n}\n\nfunction resolvePanelStyle(params: {\n configuredSize?: number;\n direction: ReactResizablePanelsDirection;\n isLast: boolean;\n maxSize: number;\n minSize: number;\n}): CSSProperties {\n const { configuredSize, direction, isLast, maxSize, minSize } = params;\n const size = normalizeOptionalSize(configuredSize, minSize, maxSize);\n const flex =\n size == null ? \"1 1 0\" : isLast ? `1 1 ${size}px` : `0 0 ${size}px`;\n return direction === \"horizontal\"\n ? {\n flex,\n maxWidth: Number.isFinite(maxSize) ? maxSize : undefined,\n minWidth: minSize,\n width: size,\n }\n : {\n flex,\n height: size,\n maxHeight: Number.isFinite(maxSize) ? maxSize : undefined,\n minHeight: minSize,\n };\n}\n\nfunction normalizeOptionalSize(\n value: number | undefined,\n minSize: number,\n maxSize: number,\n) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return undefined;\n }\n return clamp(value, minSize, maxSize);\n}\n\nfunction normalizePositiveNumber(value: number | undefined, fallback: number) {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : fallback;\n}\n\nfunction normalizeMaxSize(value: number | undefined, minSize: number) {\n return typeof value === \"number\" && Number.isFinite(value)\n ? Math.max(value, minSize)\n : Number.POSITIVE_INFINITY;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n if (min > max) {\n return min;\n }\n return Math.min(Math.max(value, min), max);\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-cascader {\\n width: 100%;\\n min-width: 0;\\n}\\n.canvas-react-cascader > .canvas-react-input-affix-wrapper {\\n width: 100%;\\n}\\n.canvas-react-cascader-menus {\\n display: flex;\\n max-width: calc(100vw - 24px);\\n overflow: auto;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n}\\n.canvas-react-cascader-menu {\\n flex: 0 0 auto;\\n min-width: 120px;\\n max-width: 320px;\\n max-height: min(256px, calc(100vh - 48px));\\n overflow: auto;\\n padding: 4px;\\n}\\n.canvas-react-cascader-menu + .canvas-react-cascader-menu {\\n border-left: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-cascader-option {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 20px;\\n padding: 5px 10px;\\n line-height: 22px;\\n border-radius: var(--canvas-react-radius-sm);\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n.canvas-react-cascader-option[aria-selected=true] {\\n color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-bg-active);\\n}\\n.canvas-react-cascader-option[data-active=true] {\\n background: var(--canvas-react-color-bg-hover, #f5f5f5);\\n}\\n.canvas-react-cascader-option[aria-disabled=true] {\\n opacity: 0.4;\\n cursor: not-allowed;\\n}\\n.canvas-react-cascader-empty {\\n padding: 8px 10px;\\n color: var(--canvas-react-color-text-muted);\\n}\\n.canvas-react-cascader-chevron {\\n width: 7px;\\n height: 7px;\\n flex: 0 0 auto;\\n margin-left: 8px;\\n border-top: 1.5px solid #9ca3af;\\n border-right: 1.5px solid #9ca3af;\\n transform: rotate(45deg);\\n transform-origin: center;\\n transition: transform 0.18s ease, border-color 0.18s ease;\\n}\\n.canvas-react-cascader-option:not([aria-disabled=true]):hover .canvas-react-cascader-chevron,\\n.canvas-react-cascader-option[aria-selected=true] .canvas-react-cascader-chevron {\\n border-color: #6b7280;\\n transform: rotate(135deg);\\n}\\n\")","import { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\nimport { ReactPopup } from \"../popup/index\";\nimport \"../select/style.css\";\nimport \"./style.css\";\n\n/** 级联选择树节点;值保留原始字符串或数字类型。 */\nexport interface ReactCascaderOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n children?: ReactCascaderOption[];\n}\n\n/** 选择来源及是否已完成路径选择。 */\nexport interface ReactCascaderChangeInfo {\n trigger: \"mouse\" | \"keyboard\" | \"clear\";\n complete: boolean;\n}\n\n/** 单路径级联选择配置。 */\nexport interface ReactCascaderProps extends Omit<\n ReactInputProps,\n \"value\" | \"defaultValue\" | \"onChange\" | \"onPressEnter\" | \"displayRender\"\n> {\n value?: (string | number)[];\n options?: ReactCascaderOption[];\n showSearch?: boolean;\n changeOnSelect?: boolean;\n expandTrigger?: \"click\" | \"hover\";\n displayRender?: (\n labels: string[],\n selectedOptions: ReactCascaderOption[],\n ) => string;\n onChange?: (\n value: (string | number)[],\n selectedOptions: ReactCascaderOption[],\n info: ReactCascaderChangeInfo,\n ) => void;\n}\n\n/** 沿当前值路径查找选项,不将数字值转换成字符串。 */\nfunction resolvePath(\n options: ReactCascaderOption[],\n value: (string | number)[],\n) {\n const path: ReactCascaderOption[] = [];\n for (const part of value) {\n const item = options.find((option) => option.value === part);\n if (!item) break;\n path.push(item);\n options = item.children ?? [];\n }\n return path;\n}\n\nconst EMPTY_OPTIONS: ReactCascaderOption[] = [];\nconst EMPTY_VALUE: (string | number)[] = [];\n\n/** 多列展开的级联选择器,复用现有输入框、浮层及主题。 */\nexport function ReactCascader(props: ReactCascaderProps) {\n const {\n value = EMPTY_VALUE,\n options = EMPTY_OPTIONS,\n showSearch = false,\n changeOnSelect = false,\n expandTrigger = \"click\",\n displayRender,\n onChange,\n allowClear = true,\n disabled,\n readOnly,\n onFocus,\n onBlur,\n onClick,\n onKeyDown,\n ...inputProps\n } = props;\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const popupRef = useRef<HTMLDivElement>(null);\n const popupId = useId();\n const selected = useMemo(() => resolvePath(options, value), [options, value]);\n const [path, setPath] = useState(selected);\n const [open, setOpen] = useState(false);\n const [keyword, setKeyword] = useState(\"\");\n const [typing, setTyping] = useState(false);\n const [focus, setFocus] = useState({ column: 0, index: -1 });\n const interactive = !disabled && !readOnly;\n useEffect(() => {\n setPath(selected);\n }, [selected]);\n const labels = value.map(\n (part, index) => selected[index]?.label ?? String(part),\n );\n const text = displayRender?.(labels, selected) ?? labels.join(\" / \");\n const columns: ReactCascaderOption[][] = [options];\n for (const item of path) {\n if (!item.children?.length) break;\n columns.push(item.children);\n }\n const searching = showSearch && keyword.trim().length > 0;\n const results = useMemo(() => {\n if (!keyword.trim()) return [];\n const matches: ReactCascaderOption[][] = [];\n const visit = (\n items: ReactCascaderOption[],\n parents: ReactCascaderOption[],\n ) => {\n for (const item of items) {\n if (item.disabled) continue;\n const next = [...parents, item];\n if (\n (!item.children?.length || changeOnSelect) &&\n next\n .map((part) => part.label)\n .join(\" / \")\n .toLocaleLowerCase()\n .includes(keyword.trim().toLocaleLowerCase())\n )\n matches.push(next);\n if (item.children?.length) visit(item.children, next);\n }\n };\n visit(options, []);\n return matches;\n }, [options, keyword, changeOnSelect]);\n\n useEffect(() => {\n popupRef.current\n ?.querySelector<HTMLElement>(\"[data-active='true']\")\n ?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [focus, open]);\n\n /** 展开中间节点不会结束编辑;末级、搜索结果和清空才完成选择。 */\n const choose = (\n next: ReactCascaderOption[],\n trigger: \"mouse\" | \"keyboard\",\n fromSearch = false,\n ) => {\n const item = next[next.length - 1];\n if (!item || next.some((option) => option.disabled)) return;\n setPath(next);\n const complete = !item.children?.length || fromSearch;\n if (complete || changeOnSelect)\n onChange?.(\n next.map((option) => option.value),\n next,\n { trigger, complete },\n );\n if (complete) {\n setOpen(false);\n setKeyword(\"\");\n setTyping(false);\n }\n };\n const show = () => {\n if (!interactive) return;\n setOpen(true);\n setPath(selected);\n };\n return (\n <div\n ref={anchorRef}\n className={`canvas-react-cascader${open && interactive ? \" canvas-react-cascader-open\" : \"\"}`}\n >\n <ReactInput\n ref={inputRef}\n {...inputProps}\n disabled={disabled}\n readOnly={readOnly || !showSearch}\n allowClear={false}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? popupId : undefined}\n aria-activedescendant={\n open && focus.index >= 0\n ? `${popupId}-${searching ? 0 : focus.column}-${focus.index}`\n : undefined\n }\n value={open && showSearch && typing ? keyword : text}\n onFocus={(event) => {\n show();\n onFocus?.(event);\n }}\n onClick={(event) => {\n show();\n onClick?.(event);\n }}\n onBlur={(event) => {\n setOpen(false);\n setKeyword(\"\");\n setTyping(false);\n onBlur?.(event);\n }}\n onChange={(event) => {\n setTyping(true);\n setKeyword(event.target.value);\n setOpen(true);\n setFocus({ column: 0, index: -1 });\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !interactive) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n setKeyword(\"\");\n setTyping(false);\n return;\n }\n if (\n ![\n \"ArrowDown\",\n \"ArrowUp\",\n \"ArrowRight\",\n \"ArrowLeft\",\n \"Enter\",\n ].includes(event.key)\n )\n return;\n event.preventDefault();\n setOpen(true);\n const column = searching\n ? 0\n : Math.min(focus.column, columns.length - 1);\n const items = searching\n ? results.map((result) => result[result.length - 1])\n : columns[column];\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\n let index = focus.index;\n if (index < 0) index = direction === 1 ? -1 : 0;\n for (let count = 0; count < items.length; count++) {\n index = (index + direction + items.length) % items.length;\n if (!items[index].disabled) {\n setFocus({ column, index });\n break;\n }\n }\n } else if (event.key === \"ArrowLeft\" && !searching) {\n const previous = Math.max(0, column - 1);\n setFocus({\n column: previous,\n index: columns[previous].indexOf(path[previous]),\n });\n } else {\n const item = items[focus.index];\n if (!item || item.disabled) return;\n const next = searching\n ? results[focus.index]\n : [...path.slice(0, column), item];\n if (event.key === \"Enter\") choose(next, \"keyboard\", searching);\n else if (event.key !== \"ArrowRight\") return;\n if (!searching && item.children?.length) {\n setPath(next);\n setFocus({\n column: column + 1,\n index: item.children.findIndex((child) => !child.disabled),\n });\n }\n }\n }}\n suffix={\n <span\n className={`canvas-react-select-actions${allowClear && interactive && value.length > 0 ? \" canvas-react-select-actions-clearable\" : \"\"}`}\n onPointerDown={(event) => {\n if (!interactive) return;\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n if (!interactive) return;\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n if (!interactive) return;\n event.stopPropagation();\n inputRef.current?.focus({ preventScroll: true });\n show();\n }}\n >\n {allowClear && interactive && value.length > 0 ? (\n <button\n type=\"button\"\n className=\"canvas-react-select-clear\"\n tabIndex={-1}\n aria-label=\"清空级联选择\"\n onPointerDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n inputRef.current?.focus({ preventScroll: true });\n setKeyword(\"\");\n setTyping(false);\n setPath([]);\n setFocus({ column: 0, index: -1 });\n setOpen(true);\n onChange?.([], [], { trigger: \"clear\", complete: false });\n }}\n >\n <span\n className=\"canvas-react-select-clear-icon\"\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n <span\n className={`canvas-react-select-arrow${open && interactive ? \" canvas-react-select-arrow-open\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </span>\n }\n />\n <ReactPopup\n constrainHeight\n open={open && interactive}\n anchorRef={anchorRef}\n onOpenChange={setOpen}\n surfaceClassName=\"canvas-react-cascader-popup\"\n >\n <div\n ref={popupRef}\n id={popupId}\n className=\"canvas-react-cascader-menus\"\n >\n {(searching\n ? [results.map((result) => result[result.length - 1])]\n : columns\n ).map((items, column) => (\n <div\n key={column}\n role=\"listbox\"\n aria-label={searching ? \"搜索结果\" : `第 ${column + 1} 级选项`}\n className=\"canvas-react-cascader-menu\"\n >\n {items.length === 0 ? (\n <div className=\"canvas-react-cascader-empty\">暂无数据</div>\n ) : (\n items.map((item, index) => {\n const next = searching\n ? results[index]\n : [...path.slice(0, column), item];\n const active =\n focus.column === column && focus.index === index;\n return (\n <div\n key={index}\n id={`${popupId}-${column}-${index}`}\n role=\"option\"\n aria-selected={path[column] === item}\n aria-disabled={!!item.disabled}\n data-active={active}\n className=\"canvas-react-cascader-option\"\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => {\n if (item.disabled) return;\n setFocus({ column, index });\n if (\n expandTrigger === \"hover\" &&\n !searching &&\n item.children?.length\n )\n setPath(next);\n }}\n onClick={() => {\n setFocus({ column, index });\n choose(next, \"mouse\", searching);\n }}\n >\n <span>\n {searching\n ? next.map((part) => part.label).join(\" / \")\n : item.label}\n </span>\n {!searching && item.children?.length ? (\n <span\n className=\"canvas-react-cascader-chevron\"\n aria-hidden=\"true\"\n />\n ) : null}\n </div>\n );\n })\n )}\n </div>\n ))}\n </div>\n </ReactPopup>\n </div>\n );\n}\n","import { forwardRef, useEffect, useState } from \"react\";\nimport {\n ReactSelect,\n type ReactSelectChangeInfo,\n type ReactSelectFilterOption,\n type ReactSelectOption,\n type ReactSelectProps,\n} from \"../select/index\";\n\nexport interface ReactAutoCompleteProps extends Omit<\n ReactSelectProps,\n \"allowCustomValue\" | \"onChange\" | \"onInputValueChange\" | \"onPressEnter\"\n> {\n /** 当前值。 */\n value?: string | number;\n /** 选项列表。 */\n options: ReactSelectOption[];\n /** 值变化回调。 */\n onChange?: (value: string | number, info: ReactSelectChangeInfo) => void;\n /** 输入变化回调。 */\n onInputValueChange?: (value: string) => void;\n /** 可选的回车扩展回调;返回刷新后的候选项时才重新映射输入值。 */\n onPressEnter?: (\n input: string,\n ) => void | ReactSelectOption[] | Promise<void | ReactSelectOption[]>;\n}\n\n/**\n * 支持自由输入的下拉输入框,可选扩展回车异步刷新候选项。\n */\nexport const ReactAutoComplete = forwardRef<\n HTMLInputElement,\n ReactAutoCompleteProps\n>(function ReactAutoComplete(props, ref) {\n const {\n onChange,\n onInputValueChange,\n onPressEnter,\n options: initialOptions,\n value,\n ...restProps\n } = props;\n const [options, setOptions] = useState(initialOptions);\n\n useEffect(() => {\n setOptions(initialOptions);\n }, [initialOptions]);\n\n return (\n <ReactSelect\n {...restProps}\n ref={ref}\n allowCustomValue\n showSearch\n value={value}\n options={options}\n onChange={(nextValue, info) => {\n onChange?.(\n options.find((option) => String(option.value) === String(nextValue))\n ?.value ?? nextValue,\n info,\n );\n }}\n onInputValueChange={(input) => {\n onInputValueChange?.(input);\n onChange?.(input, { trigger: \"input\" });\n }}\n onPressEnter={async (input) => {\n const nextOptions = await onPressEnter?.(input);\n if (nextOptions) {\n setOptions(nextOptions);\n }\n onChange?.(\n nextOptions ? resolveAutoCompleteValue(input, nextOptions) : input,\n { trigger: \"keyboard\" },\n );\n }}\n />\n );\n});\n\n/**\n * 按文本或值映射 AutoComplete 输入,未命中时保留自由输入。\n */\nexport function resolveAutoCompleteValue(\n input: string,\n options: ReactSelectOption[],\n) {\n const normalizedInput = input.toLowerCase();\n return (\n options.find(\n (option) =>\n option.label.toLowerCase() === normalizedInput ||\n String(option.value).toLowerCase() === normalizedInput,\n )?.value ?? input\n );\n}\n\nexport type { ReactSelectFilterOption, ReactSelectOption };\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n formatTimeValue,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n TimeSelectionPanel,\r\n} from \"./shared\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactTimePickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n popupClassName?: string;\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\n/**\r\n * 基础时间选择器,支持时分秒面板选择。\r\n */\r\nexport const ReactTimePicker = forwardRef<HTMLInputElement, ReactTimePickerProps>(\r\n function ReactTimePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"HH:mm:ss\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [draftValue, setDraftValue] = useState(value ?? \"\");\r\n const parsedValue = useMemo(() => parseTimeValue(value), [value]);\r\n const displayValue = parsedValue ? formatTimeValue(parsedValue) : (value ?? \"\");\r\n const showClear =\r\n allowClear && !disabled && typeof value === \"string\" && value.trim().length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n setDraftValue(value ?? \"\");\r\n }, [value]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-time-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-time-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setDraftValue(value ?? \"\");\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-time-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-time-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftValue(value ?? \"\");\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftValue(value ?? \"\");\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-time-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={230}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 230 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-time-popup-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>时</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>分</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>秒</div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-content`}>\r\n <TimeSelectionPanel\r\n value={draftValue || DEFAULT_TIME_VALUE}\r\n hideHeader\r\n onChange={setDraftValue}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftValue(getCurrentTimeValue());\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(draftValue || DEFAULT_TIME_VALUE);\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n}) {\r\n const { event, onBlur, popupRef, setOpen } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport type { ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n TimeSelectionPanel,\r\n} from \"../time/shared\";\r\nimport \"../time/style.css\";\r\n\r\nexport interface ReactTimeRangePickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n /**\r\n * 当前时间范围值,格式为 `[开始时间, 结束时间]`。\r\n */\r\n value?: [string, string];\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: [string, string]) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 范围分隔符。\r\n */\r\n rangeSeparator?: string;\r\n}\r\n\r\n/**\r\n * 基础时间范围选择器。\r\n */\r\nexport const ReactTimeRangePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactTimeRangePickerProps\r\n>(function ReactTimeRangePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"HH:mm:ss ~ HH:mm:ss\",\r\n popupClassName,\r\n rangeSeparator = \" ~ \",\r\n style,\r\n value,\r\n showArrow = true,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const startInputRef = useRef<HTMLInputElement | null>(null);\r\n const endInputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const [open, setOpen] = useState(false);\r\n const [activePart, setActivePart] = useState<\"start\" | \"end\">(\"start\");\r\n const skipFocusOpenRef = useRef(false);\r\n const [draftRange, setDraftRange] = useState(() =>\r\n parseTimeRangeValue(value, rangeSeparator),\r\n );\r\n\r\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n startInputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n }, [rangeSeparator, value]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time`,\r\n `${REACT_COMPONENT_PREFIX}-time-range-control`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-time-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={() => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n }}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-range-values`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-range-value`,\r\n activePart === \"start\" &&\r\n `${REACT_COMPONENT_PREFIX}-time-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"start\");\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n startInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n {...restProps}\r\n ref={startInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.start}\r\n placeholder={placeholder.split(rangeSeparator)[0] || \"HH:mm:ss\"}\r\n className={`${REACT_COMPONENT_PREFIX}-time-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"start\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleRangeInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-range-separator`}>\r\n {rangeSeparator.trim()}\r\n </span>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-range-value`,\r\n activePart === \"end\" &&\r\n `${REACT_COMPONENT_PREFIX}-time-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"end\");\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n ref={endInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.end}\r\n placeholder={\r\n placeholder.split(rangeSeparator)[1]?.trim() || \"HH:mm:ss\"\r\n }\r\n className={`${REACT_COMPONENT_PREFIX}-time-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"end\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleRangeInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n </div>\r\n {showArrow ? (\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-actions`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-arrow-open`,\r\n )}\r\n />\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={260}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-dropdown`,\r\n `${REACT_COMPONENT_PREFIX}-time-range-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 260 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-time-range-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 时\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 分\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 秒\r\n </div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-content`}>\r\n <TimeSelectionPanel\r\n value={activePart === \"start\" ? draftRange.start : draftRange.end}\r\n hideHeader\r\n onChange={(nextValue) => {\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: nextValue,\r\n }));\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: getCurrentTimeValue(),\r\n }));\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n return;\r\n }\r\n\r\n if (compareTimeValue(draftRange.end, draftRange.start) < 0) {\r\n setActivePart(\"start\");\r\n return;\r\n }\r\n\r\n onChange?.([draftRange.start, draftRange.end]);\r\n setOpen(false);\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\nfunction parseTimeRangeValue(\r\n value: [string, string] | undefined,\r\n _rangeSeparator: string,\r\n) {\r\n const [rawStart = \"\", rawEnd = \"\"] = value ?? [\"\", \"\"];\r\n const start = parseTimeValue(rawStart.trim())\r\n ? rawStart.trim()\r\n : DEFAULT_TIME_VALUE;\r\n const end = parseTimeValue(rawEnd.trim())\r\n ? rawEnd.trim()\r\n : DEFAULT_TIME_VALUE;\r\n\r\n return { end, start };\r\n}\r\nfunction handleRangeInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n triggerRef: React.RefObject<HTMLDivElement | null>;\r\n}) {\r\n const { event, onBlur, popupRef, setOpen, triggerRef } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n relatedTarget &&\r\n (popupRef.current?.contains(relatedTarget) ||\r\n triggerRef.current?.contains(relatedTarget))\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction compareTimeValue(left: string, right: string) {\r\n const leftValue = parseTimeValue(left);\r\n const rightValue = parseTimeValue(right);\r\n if (!leftValue || !rightValue) {\r\n return 0;\r\n }\r\n\r\n const leftSeconds =\r\n Number(leftValue.hour) * 3600 +\r\n Number(leftValue.minute) * 60 +\r\n Number(leftValue.second);\r\n const rightSeconds =\r\n Number(rightValue.hour) * 3600 +\r\n Number(rightValue.minute) * 60 +\r\n Number(rightValue.second);\r\n\r\n return leftSeconds - rightSeconds;\r\n}\r\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactYearPickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前年份值。\r\n */\r\n value?: string | number;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\n/**\r\n * 基础年份选择器。\r\n */\r\nexport const ReactYearPicker = forwardRef<HTMLInputElement, ReactYearPickerProps>(\r\n function ReactYearPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择年份\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"year\" | \"decade\">(\"year\");\r\n const selectedYear = useMemo(() => parseYearValue(value), [value]);\r\n const [panelStartYear, setPanelStartYear] = useState(() =>\r\n resolveDecadeStart(selectedYear ?? new Date().getFullYear()),\r\n );\r\n const displayValue =\r\n selectedYear == null ? \"\" : String(selectedYear);\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n const yearItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => panelStartYear - 1 + index);\r\n }, [panelStartYear]);\r\n const decadePanelStart = useMemo(() => {\r\n return Math.floor(panelStartYear / 100) * 100;\r\n }, [panelStartYear]);\r\n const decadeItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);\r\n }, [decadePanelStart]);\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"year\");\r\n setPanelStartYear(resolveDecadeStart(selectedYear ?? new Date().getFullYear()));\r\n }, [open, selectedYear]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={264}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 264 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-year-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组年份\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelStartYear((prev) => prev - (mode === \"year\" ? 10 : 100));\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setMode(\"decade\");\r\n }}\r\n >\r\n {mode === \"year\"\r\n ? `${panelStartYear}年-${panelStartYear + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组年份\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelStartYear((prev) => prev + (mode === \"year\" ? 10 : 100));\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-grid`}>\r\n {mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= panelStartYear && yearItem <= panelStartYear + 9;\r\n const selected = yearItem === selectedYear;\r\n\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(String(yearItem));\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n panelStartYear >= decadeStart && panelStartYear <= decadeStart + 9;\r\n\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelStartYear(decadeStart);\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseYearValue(value?: string | number) {\r\n if (typeof value === \"number\" && Number.isFinite(value)) {\r\n return Math.trunc(value);\r\n }\r\n if (typeof value === \"string\" && value.trim().length > 0) {\r\n const nextValue = Number(value);\r\n return Number.isFinite(nextValue) ? Math.trunc(nextValue) : null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\".canvas-react-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n min-height: 32px;\\n padding: 4px 14px;\\n border: 1px solid var(--cc-border-color, #d9d9d9);\\n border-radius: 6px;\\n color: var(--cc-text-color, #1f2937);\\n background: var(--cc-surface-color, #fff);\\n cursor: pointer;\\n}\\n.canvas-react-button:hover:not(:disabled) {\\n color: #1677ff;\\n border-color: #1677ff;\\n}\\n.canvas-react-button:disabled {\\n cursor: not-allowed;\\n opacity: 0.5;\\n}\\n.canvas-react-button-primary {\\n color: #fff;\\n border-color: #1677ff;\\n background: #1677ff;\\n}\\n.canvas-react-button-danger {\\n color: #dc2626;\\n border-color: #fca5a5;\\n}\\n.canvas-react-button-small {\\n min-height: 24px;\\n padding: 2px 8px;\\n}\\n.canvas-react-button-large {\\n min-height: 40px;\\n padding: 6px 18px;\\n}\\n.canvas-react-button-icon {\\n display: inline-flex;\\n}\\n.canvas-react-row {\\n display: flex;\\n flex-flow: row wrap;\\n}\\n.canvas-react-col {\\n min-width: 0;\\n padding-inline: 8px;\\n}\\n.canvas-react-radio-group {\\n display: flex;\\n gap: 16px;\\n}\\n.canvas-react-radio {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n cursor: pointer;\\n}\\n.canvas-react-radio input {\\n position: absolute;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-radio-mark {\\n width: 14px;\\n height: 14px;\\n border: 1px solid #94a3b8;\\n border-radius: 50%;\\n box-sizing: border-box;\\n}\\n.canvas-react-radio input:checked + .canvas-react-radio-mark {\\n border: 4px solid #1677ff;\\n}\\n.canvas-react-form-item {\\n display: flex;\\n flex-direction: column;\\n gap: 6px;\\n margin-bottom: 16px;\\n}\\n.canvas-react-form-label {\\n color: #334155;\\n font-size: 14px;\\n}\\n.canvas-react-form-error {\\n color: #dc2626;\\n font-size: 12px;\\n}\\n.canvas-react-textarea {\\n width: 100%;\\n min-height: 72px;\\n padding: 8px 10px;\\n border: 1px solid #d9d9d9;\\n border-radius: 6px;\\n box-sizing: border-box;\\n font: inherit;\\n resize: vertical;\\n}\\n.canvas-react-message-host {\\n position: fixed;\\n z-index: 3000;\\n top: 24px;\\n left: 50%;\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n transform: translateX(-50%);\\n pointer-events: none;\\n}\\n.canvas-react-message {\\n padding: 9px 14px;\\n border: 1px solid #e2e8f0;\\n border-radius: 8px;\\n color: #334155;\\n background: #fff;\\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.14);\\n}\\n.canvas-react-message-error {\\n color: #b91c1c;\\n border-color: #fecaca;\\n}\\n\")","import {\n cloneElement,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\"\n> {\n /** 按钮视觉类型。 */\n type?: \"default\" | \"primary\" | \"text\";\n /** 原生 button type。 */\n htmlType?: ButtonHTMLAttributes<HTMLButtonElement>[\"type\"];\n /** 按钮图标。 */\n icon?: ReactNode;\n /** 危险操作样式。 */\n danger?: boolean;\n /** 紧凑尺寸。 */\n size?: \"small\" | \"middle\" | \"large\";\n}\n\n/** 通用按钮。 */\nexport function ReactButton({\n children,\n className,\n danger,\n htmlType = \"button\",\n icon,\n size = \"middle\",\n type = \"default\",\n ...props\n}: ReactButtonProps) {\n return (\n <button\n {...props}\n type={htmlType}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-button`,\n `${REACT_COMPONENT_PREFIX}-button-${type}`,\n `${REACT_COMPONENT_PREFIX}-button-${size}`,\n danger && `${REACT_COMPONENT_PREFIX}-button-danger`,\n className,\n )}\n >\n {icon ? (\n <span className={`${REACT_COMPONENT_PREFIX}-button-icon`}>{icon}</span>\n ) : null}\n {children}\n </button>\n );\n}\n\nexport interface ReactFlexProps extends HTMLAttributes<HTMLDivElement> {\n vertical?: boolean;\n justify?: CSSProperties[\"justifyContent\"];\n align?: CSSProperties[\"alignItems\"];\n gap?: CSSProperties[\"gap\"];\n}\n\n/** Flex 布局容器。 */\nexport function ReactFlex({\n vertical,\n justify,\n align,\n gap,\n style,\n ...props\n}: ReactFlexProps) {\n return (\n <div\n {...props}\n style={{\n display: \"flex\",\n flexDirection: vertical ? \"column\" : \"row\",\n justifyContent: justify,\n alignItems: align,\n gap,\n ...style,\n }}\n />\n );\n}\n\nexport interface ReactRowProps extends HTMLAttributes<HTMLDivElement> {\n gutter?: number;\n}\n\n/** 二十四栅格行。 */\nexport function ReactRow({ gutter = 0, style, ...props }: ReactRowProps) {\n return (\n <div\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-row`,\n props.className,\n )}\n style={{ marginInline: -gutter / 2, ...style }}\n />\n );\n}\n\nexport interface ReactColProps extends HTMLAttributes<HTMLDivElement> {\n span?: number;\n}\n\n/** 二十四栅格列。 */\nexport function ReactCol({ span = 24, style, ...props }: ReactColProps) {\n return (\n <div\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-col`,\n props.className,\n )}\n style={{\n flex: `0 0 ${(span / 24) * 100}%`,\n maxWidth: `${(span / 24) * 100}%`,\n ...style,\n }}\n />\n );\n}\n\nexport interface ReactTooltipProps {\n title?: ReactNode;\n children: ReactElement;\n placement?: string;\n destroyTooltipOnHide?: boolean;\n}\n\n/** 轻量提示;文本标题使用浏览器原生 tooltip,保证无额外弹层依赖。 */\nexport function ReactTooltip({ title, children }: ReactTooltipProps) {\n return cloneElement(children, {\n title: typeof title === \"string\" ? title : undefined,\n \"aria-label\": typeof title === \"string\" ? title : undefined,\n } as HTMLAttributes<HTMLElement>);\n}\n\ninterface ReactRadioGroupContextValue {\n value?: string | number;\n onChange?: (event: { target: { value: string | number } }) => void;\n}\n\nconst RadioGroupContext = createContext<ReactRadioGroupContextValue>({});\n\nexport interface ReactRadioProps extends Omit<\n HTMLAttributes<HTMLLabelElement>,\n \"onChange\"\n> {\n value: string | number;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (event: { target: { value: string | number } }) => void;\n}\n\nfunction ReactRadioOption({\n value,\n checked,\n disabled,\n onChange,\n children,\n className,\n ...props\n}: ReactRadioProps) {\n const group = useContext(RadioGroupContext);\n const selected = checked ?? String(group.value ?? \"\") === String(value);\n return (\n <label\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-radio`,\n disabled && `${REACT_COMPONENT_PREFIX}-radio-disabled`,\n className,\n )}\n >\n <input\n type=\"radio\"\n checked={selected}\n disabled={disabled}\n onChange={() => {\n const event = { target: { value } };\n onChange?.(event);\n group.onChange?.(event);\n }}\n />\n <span className={`${REACT_COMPONENT_PREFIX}-radio-mark`} />\n <span>{children}</span>\n </label>\n );\n}\n\nexport interface ReactRadioGroupProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\"\n> {\n value?: string | number;\n onChange?: (event: { target: { value: string | number } }) => void;\n}\n\nfunction ReactRadioGroup({\n value,\n onChange,\n className,\n ...props\n}: ReactRadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ value, onChange }}>\n <div\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-radio-group`,\n className,\n )}\n />\n </RadioGroupContext.Provider>\n );\n}\n\n/** 单选框及其分组组件。 */\nexport const ReactRadio = Object.assign(ReactRadioOption, {\n Group: ReactRadioGroup,\n});\n\nexport interface ReactTextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\n/** 多行文本输入框。 */\nexport function ReactTextArea({ className, ...props }: ReactTextAreaProps) {\n return (\n <textarea\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-textarea`,\n className,\n )}\n />\n );\n}\n\nexport type ReactFormValues = Record<string, unknown>;\n\nexport interface ReactFormRuleContext {\n getFieldValue: (name: string) => any;\n}\n\nexport interface ReactFormRuleConfig {\n required?: boolean;\n message?: string;\n type?: \"number\" | \"integer\" | \"string\";\n min?: number;\n max?: number;\n validator?: (rule: ReactFormRuleConfig, value: any) => void | Promise<void>;\n}\n\nexport type ReactFormRule =\n | ReactFormRuleConfig\n | ((context: ReactFormRuleContext) => ReactFormRuleConfig);\n\nexport interface ReactFormInstance<T extends object = any> {\n getFieldValue: (name: string) => any;\n setFieldsValue: (values: Partial<T>) => void;\n resetFields: () => void;\n validateFields: () => Promise<T>;\n /** @internal */\n __store: FormStore;\n}\n\ninterface FormStore {\n values: ReactFormValues;\n initialValues: ReactFormValues;\n errors: Record<string, string>;\n rules: Map<string, ReactFormRule[]>;\n listeners: Set<() => void>;\n revision: number;\n notify: () => void;\n}\n\nfunction createFormInstance<T extends object>(): ReactFormInstance<T> {\n const store: FormStore = {\n values: {},\n initialValues: {},\n errors: {},\n rules: new Map(),\n listeners: new Set(),\n revision: 0,\n notify() {\n store.revision += 1;\n store.listeners.forEach((listener) => listener());\n },\n };\n return {\n __store: store,\n getFieldValue: (name) => store.values[name],\n setFieldsValue(values) {\n store.values = { ...store.values, ...values };\n Object.keys(values).forEach((name) => {\n delete store.errors[name];\n });\n store.notify();\n },\n resetFields() {\n store.values = { ...store.initialValues };\n store.errors = {};\n store.notify();\n },\n async validateFields() {\n const errors: Record<string, string> = {};\n for (const [name, rules] of store.rules) {\n const value = store.values[name];\n for (const rawRule of rules) {\n const rule =\n typeof rawRule === \"function\"\n ? rawRule({ getFieldValue: (field) => store.values[field] })\n : rawRule;\n if (\n rule.required &&\n (value === undefined || value === null || value === \"\")\n ) {\n errors[name] = rule.message ?? \"此项为必填项\";\n break;\n }\n if (\n (rule.type === \"number\" || rule.type === \"integer\") &&\n typeof value === \"number\" &&\n rule.min !== undefined &&\n value < rule.min\n ) {\n errors[name] = rule.message ?? `不能小于 ${rule.min}`;\n break;\n }\n if (\n (rule.type === \"number\" || rule.type === \"integer\") &&\n typeof value === \"number\" &&\n rule.max !== undefined &&\n value > rule.max\n ) {\n errors[name] = rule.message ?? `不能大于 ${rule.max}`;\n break;\n }\n if (\n rule.type === \"integer\" &&\n typeof value === \"number\" &&\n !Number.isInteger(value)\n ) {\n errors[name] = rule.message ?? \"请输入整数\";\n break;\n }\n if (rule.validator) {\n try {\n await rule.validator(rule, value);\n } catch (error) {\n errors[name] =\n error instanceof Error ? error.message : \"校验失败\";\n break;\n }\n }\n }\n }\n store.errors = errors;\n store.notify();\n if (Object.keys(errors).length > 0) {\n return Promise.reject({\n errorFields: errors,\n values: { ...store.values },\n });\n }\n return { ...store.values } as T;\n },\n };\n}\n\n/** 创建表单实例。 */\nexport function useReactForm<T extends object = any>() {\n const formRef = useRef<ReactFormInstance<T>>();\n if (!formRef.current) formRef.current = createFormInstance<T>();\n return [formRef.current] as const;\n}\n\n/** 订阅表单字段值。 */\nexport function useReactFormWatch(name: string, form: ReactFormInstance) {\n return useSyncExternalStore(\n (listener) => {\n form.__store.listeners.add(listener);\n return () => form.__store.listeners.delete(listener);\n },\n () => form.__store.revision,\n () => 0,\n ) >= 0\n ? form.getFieldValue(name)\n : undefined;\n}\n\nconst FormContext = createContext<ReactFormInstance | null>(null);\n\nexport interface ReactFormProps extends Omit<\n HTMLAttributes<HTMLFormElement>,\n \"onSubmit\"\n> {\n form: ReactFormInstance;\n initialValues?: ReactFormValues;\n layout?: \"vertical\" | \"horizontal\";\n}\n\nfunction ReactFormRoot({\n form,\n initialValues,\n layout = \"vertical\",\n className,\n children,\n ...props\n}: ReactFormProps) {\n const initialKey = useMemo(\n () => JSON.stringify(initialValues ?? {}),\n [initialValues],\n );\n useEffect(() => {\n form.__store.initialValues = { ...initialValues };\n form.__store.values = { ...initialValues, ...form.__store.values };\n form.__store.notify();\n }, [form, initialKey]);\n return (\n <FormContext.Provider value={form}>\n <form\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-form`,\n `${REACT_COMPONENT_PREFIX}-form-${layout}`,\n className,\n )}\n onSubmit={(event) => event.preventDefault()}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n\nexport interface ReactFormItemProps {\n label?: ReactNode;\n name: string;\n children: ReactElement;\n rules?: ReactFormRule[];\n dependencies?: string[];\n initialValue?: unknown;\n}\n\nfunction ReactFormItem({\n label,\n name,\n children,\n rules = [],\n initialValue,\n}: ReactFormItemProps) {\n const form = useContext(FormContext);\n if (!form) throw new Error(\"ReactForm.Item 必须在 ReactForm 内使用\");\n useSyncExternalStore(\n (listener) => {\n form.__store.listeners.add(listener);\n return () => form.__store.listeners.delete(listener);\n },\n () => form.__store.revision,\n () => 0,\n );\n useEffect(() => {\n form.__store.rules.set(name, rules);\n if (form.getFieldValue(name) === undefined && initialValue !== undefined) {\n form.setFieldsValue({ [name]: initialValue });\n }\n return () => {\n form.__store.rules.delete(name);\n };\n }, [form, initialValue, name, rules]);\n const childProps = children.props as Record<string, unknown>;\n const value = form.getFieldValue(name);\n return (\n <label className={`${REACT_COMPONENT_PREFIX}-form-item`}>\n {label ? (\n <span className={`${REACT_COMPONENT_PREFIX}-form-label`}>{label}</span>\n ) : null}\n {cloneElement(children, {\n value: value ?? \"\",\n onChange: (...args: unknown[]) => {\n const first = args[0] as { target?: { value?: unknown } } | unknown;\n const nextValue =\n typeof first === \"object\" && first !== null && \"target\" in first\n ? (first as { target?: { value?: unknown } }).target?.value\n : first;\n form.setFieldsValue({ [name]: nextValue });\n const childOnChange = childProps.onChange;\n if (typeof childOnChange === \"function\") childOnChange(...args);\n },\n } as Record<string, unknown>)}\n {form.__store.errors[name] ? (\n <span className={`${REACT_COMPONENT_PREFIX}-form-error`}>\n {form.__store.errors[name]}\n </span>\n ) : null}\n </label>\n );\n}\n\n/** 带字段绑定和异步校验的轻量表单。 */\nexport const ReactForm = Object.assign(ReactFormRoot, {\n Item: ReactFormItem,\n useForm: useReactForm,\n useWatch: useReactFormWatch,\n});\n\nexport type ReactMessageType = \"info\" | \"success\" | \"warning\" | \"error\";\n\nfunction showMessage(type: ReactMessageType, content: ReactNode) {\n if (typeof document === \"undefined\") return;\n const hostId = `${REACT_COMPONENT_PREFIX}-message-host`;\n let host = document.getElementById(hostId);\n if (!host) {\n host = document.createElement(\"div\");\n host.id = hostId;\n host.className = hostId;\n document.body.appendChild(host);\n }\n const item = document.createElement(\"div\");\n item.className = `${REACT_COMPONENT_PREFIX}-message ${REACT_COMPONENT_PREFIX}-message-${type}`;\n item.textContent =\n typeof content === \"string\" ? content : String(content ?? \"\");\n host.appendChild(item);\n window.setTimeout(() => item.remove(), 3000);\n}\n\n/** 全局消息提示服务。 */\nexport const reactMessage = {\n info: (content: ReactNode) => showMessage(\"info\", content),\n success: (content: ReactNode) => showMessage(\"success\", content),\n warning: (content: ReactNode) => showMessage(\"warning\", content),\n error: (content: ReactNode) => showMessage(\"error\", content),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["#style-inject:#style-inject","../src/styles/variables.css","../src/shared/class-names.ts","../src/shared/prefix.ts","../src/components/checkbox/style.css","../src/components/checkbox/index.tsx","../src/components/input/style.css","../src/components/input/index.tsx","../src/shared/content-scale.tsx","../src/components/transition/index.tsx","../src/components/popup/style.css","../src/components/popup/index.tsx","../src/components/virtual-list/style.css","../src/components/virtual-list/index.tsx","../src/components/select/style.css","../src/components/select/index.tsx","../src/components/filter-panel/index.tsx","../src/components/color/style.css","../src/components/color/index.tsx","../src/components/year/style.css","../src/components/date/style.css","../src/components/date/index.tsx","../src/components/date-range/style.css","../src/components/date-range/index.tsx","../src/components/time/shared.tsx","../src/components/time/style.css","../src/components/datetime/style.css","../src/components/datetime/index.tsx","../src/components/datetime-range/style.css","../src/components/datetime-range/index.tsx","../src/components/number-input/style.css","../src/components/number-input/index.tsx","../src/components/input-range/style.css","../src/components/input-range/index.tsx","../src/components/image-preview/style.css","../src/components/image-preview/index.tsx","../src/components/month/style.css","../src/components/month/index.tsx","../src/shared/compatible-id.ts","../src/components/modal/style.css","../src/components/modal/index.tsx","../src/components/input-number/style.css","../src/components/input-number/index.tsx","../src/components/pagination/style.css","../src/components/pagination/index.tsx","../src/components/popconfirm/style.css","../src/components/popconfirm/index.tsx","../src/components/quarter/style.css","../src/components/quarter/index.tsx","../src/components/resizable-panels/style.css","../src/components/resizable-panels/index.tsx","../src/components/cascader/cascader-selection.ts","../src/components/cascader/style.css","../src/components/cascader/index.tsx","../src/components/tree-select/tree-select-utils.ts","../src/components/tree-select/style.css","../src/components/tree-select/index.tsx","../src/components/auto-complete/index.tsx","../src/components/time/index.tsx","../src/components/time-range/index.tsx","../src/components/year/index.tsx","../src/components/compat/style.css","../src/components/compat/index.tsx"],"names":["ReactCheckbox","forwardRef","ReactInput","jsxs","jsx","useRef","useState","useLayoutEffect","useEffect","useMemo","useImperativeHandle","ReactSelect","Fragment","ReactColorPicker","clamp","ReactDatePicker","WEEKDAY_LABELS","ReactDateRangePicker","shiftMonth","buildCalendarDays","parseDateValue","getDaysInMonth","MONTHS","ReactDateTimePicker","resolveDecadeStart","handleInputBlur","ReactDateTimeRangePicker","parseDateTimeValue","createDraftDateTime","clampDay","ReactNumberInput","ReactInputRange","ReactMonthPicker","createPortal","ReactInputNumber","size","isPromiseLike","ReactQuarterPicker","useId","ReactAutoComplete","ReactTimePicker","ReactTimeRangePicker","ReactYearPicker","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root {\\n --canvas-react-color-primary: #1677ff;\\n --canvas-react-color-primary-hover: #4096ff;\\n --canvas-react-color-border: #d9d9d9;\\n --canvas-react-color-border-strong: #bfbfbf;\\n --canvas-react-color-text: #1f2937;\\n --canvas-react-color-text-muted: #6b7280;\\n --canvas-react-color-bg: #ffffff;\\n --canvas-react-color-bg-soft: #f5f5f5;\\n --canvas-react-color-bg-hover: #f3f4f6;\\n --canvas-react-color-bg-active: #e6f4ff;\\n --canvas-react-shadow-focus: 0 0 0 2px rgba(22, 119, 255, 0.12);\\n --canvas-react-shadow-popup: 0 8px 24px rgba(15, 23, 42, 0.16);\\n --canvas-react-radius-sm: 6px;\\n --canvas-react-radius-md: 8px;\\n --canvas-react-control-height: 32px;\\n --canvas-react-font-size: 14px;\\n --canvas-react-control-padding-inline: 11px;\\n --canvas-react-control-padding-block: 0px;\\n --canvas-react-content-zoom: 1;\\n}\\n.canvas-react-scrollbar {\\n scrollbar-width: thin;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar {\\n width: 8px;\\n height: 8px;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-thumb {\\n min-height: 32px;\\n border: 2px solid transparent;\\n border-radius: 999px;\\n background: #aeb4bd;\\n background-clip: content-box;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-thumb:hover {\\n background: #8f98a5;\\n background-clip: content-box;\\n}\\n.canvas-react-scrollbar::-webkit-scrollbar-corner {\\n background: transparent;\\n}\\n\")","/**\n * 拼接类名。\n */\nexport function joinClassNames(...values: Array<string | false | null | undefined>) {\n return values.filter(Boolean).join(\" \");\n}\n","/**\n * React 基础组件统一类名前缀。\n */\nexport const REACT_COMPONENT_PREFIX = \"canvas-react\";\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-checkbox {\\n display: inline-flex;\\n align-items: center;\\n gap: 8px;\\n min-width: 0;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n cursor: pointer;\\n user-select: none;\\n}\\n.canvas-react-checkbox-disabled {\\n opacity: 0.56;\\n cursor: not-allowed;\\n}\\n.canvas-react-checkbox-input {\\n position: absolute;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-checkbox-box {\\n position: relative;\\n flex: none;\\n width: 16px;\\n height: 16px;\\n box-sizing: border-box;\\n border: 1px solid var(--canvas-react-color-border-strong);\\n border-radius: 4px;\\n background: var(--canvas-react-color-bg);\\n transition:\\n border-color 0.2s ease,\\n background-color 0.2s ease,\\n box-shadow 0.2s ease;\\n}\\n.canvas-react-checkbox:hover .canvas-react-checkbox-box {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-checkbox-input:focus-visible + .canvas-react-checkbox-box {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-checkbox-checked .canvas-react-checkbox-box,\\n.canvas-react-checkbox-indeterminate .canvas-react-checkbox-box {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-checkbox-box::after {\\n position: absolute;\\n content: \\\"\\\";\\n opacity: 0;\\n box-sizing: border-box;\\n transform: scale(0);\\n transition: opacity 0.2s ease, transform 0.2s ease;\\n}\\n.canvas-react-checkbox-checked .canvas-react-checkbox-box::after {\\n top: 50%;\\n left: 22%;\\n width: 5.5px;\\n height: 9px;\\n border-right: 2px solid #fff;\\n border-bottom: 2px solid #fff;\\n transform: translateY(-58%) rotate(45deg) scale(1);\\n transform-origin: center;\\n opacity: 1;\\n}\\n.canvas-react-checkbox-indeterminate .canvas-react-checkbox-box::after {\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n border-bottom: 2px solid #fff;\\n transform: translate(-50%, -50%);\\n opacity: 1;\\n}\\n.canvas-react-checkbox-label {\\n min-width: 0;\\n}\\n\")","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type InputHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactCheckboxRef {\n focus: () => void;\n blur: () => void;\n input: HTMLInputElement | null;\n}\n\nexport interface ReactCheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n /**\n * 半选状态。\n */\n indeterminate?: boolean;\n /**\n * 复选框文案。\n */\n children?: ReactNode;\n}\n\n/**\n * 基础复选框。\n */\nexport const ReactCheckbox = forwardRef<ReactCheckboxRef, ReactCheckboxProps>(\n function ReactCheckbox(props, ref) {\n const {\n checked,\n children,\n className,\n disabled,\n indeterminate = false,\n style,\n ...restProps\n } = props;\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus(),\n blur: () => inputRef.current?.blur(),\n input: inputRef.current,\n }));\n\n return (\n <label\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-checkbox`,\n checked && `${REACT_COMPONENT_PREFIX}-checkbox-checked`,\n indeterminate && `${REACT_COMPONENT_PREFIX}-checkbox-indeterminate`,\n disabled && `${REACT_COMPONENT_PREFIX}-checkbox-disabled`,\n className,\n )}\n style={style}\n >\n <input\n {...restProps}\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n className={`${REACT_COMPONENT_PREFIX}-checkbox-input`}\n />\n <span className={`${REACT_COMPONENT_PREFIX}-checkbox-box`} />\n {children ? (\n <span className={`${REACT_COMPONENT_PREFIX}-checkbox-label`}>{children}</span>\n ) : null}\n </label>\n );\n },\n);\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-input-affix-wrapper {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-input-affix-wrapper:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-input-affix-wrapper:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-input-affix-wrapper-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-input {\\n box-sizing: border-box;\\n flex: 1 1 auto;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: none;\\n background: transparent;\\n color: inherit;\\n font-size: inherit;\\n outline: none;\\n}\\n.canvas-react-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-input-suffix {\\n display: inline-flex;\\n align-items: center;\\n gap: 8px;\\n padding-right: var(--canvas-react-control-padding-inline, 11px);\\n}\\n.canvas-react-input-clear {\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-input-affix-wrapper:hover .canvas-react-input-clear,\\n.canvas-react-input-affix-wrapper:focus-within .canvas-react-input-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-input-clear:hover {\\n color: #6b7280;\\n transform: rotate(90deg);\\n}\\n.canvas-react-input-clear-icon,\\n.canvas-react-input-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-input-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-input-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n\")","import {\n forwardRef,\n type CSSProperties,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /**\n * 回车确认回调。\n */\n onPressEnter?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /**\n * 是否允许清空。\n */\n allowClear?: boolean;\n /**\n * 清空回调。\n */\n onClear?: () => void;\n /**\n * 右侧附加内容。\n */\n suffix?: ReactNode;\n /**\n * 外层容器类名。\n */\n wrapperClassName?: string;\n}\n\n/**\n * 基础文本输入框。\n */\nexport const ReactInput = forwardRef<HTMLInputElement, ReactInputProps>(\n function ReactInput(props, ref) {\n const {\n allowClear = true,\n className,\n disabled,\n onChange,\n onClear,\n onKeyDown,\n onPressEnter,\n readOnly,\n style,\n suffix,\n value,\n wrapperClassName,\n ...restProps\n } = props;\n const hasValue = String(value ?? \"\").length > 0;\n const showClear = allowClear && !disabled && !readOnly && hasValue;\n\n return (\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-input-affix-wrapper`,\n disabled && `${REACT_COMPONENT_PREFIX}-input-affix-wrapper-disabled`,\n wrapperClassName,\n )}\n style={style as CSSProperties}\n >\n <input\n {...restProps}\n ref={ref}\n disabled={disabled}\n readOnly={readOnly}\n value={value}\n className={joinClassNames(`${REACT_COMPONENT_PREFIX}-input`, className)}\n onChange={onChange}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.key === \"Enter\") {\n onPressEnter?.(event);\n }\n }}\n />\n {showClear || suffix ? (\n <span className={`${REACT_COMPONENT_PREFIX}-input-suffix`}>\n {showClear ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-input-clear`}\n aria-label=\"清空\"\n tabIndex={-1}\n onMouseDown={(event) => {\n event.preventDefault();\n clearInputValue(event);\n }}\n >\n <span className={`${REACT_COMPONENT_PREFIX}-input-clear-icon`} />\n </button>\n ) : null}\n {suffix}\n </span>\n ) : null}\n </span>\n );\n\n function clearInputValue(event: MouseEvent<HTMLButtonElement>) {\n const input = event.currentTarget\n .closest(`.${REACT_COMPONENT_PREFIX}-input-affix-wrapper`)\n ?.querySelector(\"input\");\n if (!input) {\n return;\n }\n\n const prototype = Object.getPrototypeOf(input) as HTMLInputElement;\n const descriptor = Object.getOwnPropertyDescriptor(prototype, \"value\");\n descriptor?.set?.call(input, \"\");\n input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n onClear?.();\n input.focus();\n }\n },\n);\n","import {\r\n createContext,\r\n useContext,\r\n useMemo,\r\n type ReactNode,\r\n} from \"react\";\r\n\r\nexport interface ReactContentScaleValue {\r\n /**\r\n * 内容缩放比例,1 表示 100%。\r\n */\r\n scale: number;\r\n}\r\n\r\nconst DEFAULT_CONTENT_SCALE: ReactContentScaleValue = {\r\n scale: 1,\r\n};\r\n\r\nconst ReactContentScaleContext =\r\n createContext<ReactContentScaleValue>(DEFAULT_CONTENT_SCALE);\r\n\r\n/**\r\n * 提供内容缩放上下文,供弹出层等 portal 节点同步表格缩放。\r\n */\r\nexport function ReactContentScaleProvider(props: {\r\n scale?: number;\r\n children: ReactNode;\r\n}) {\r\n const { children, scale = 1 } = props;\r\n const value = useMemo<ReactContentScaleValue>(() => {\r\n const nextScale =\r\n typeof scale === \"number\" && Number.isFinite(scale) && scale > 0\r\n ? scale\r\n : 1;\r\n return { scale: nextScale };\r\n }, [scale]);\r\n\r\n return (\r\n <ReactContentScaleContext.Provider value={value}>\r\n {children}\r\n </ReactContentScaleContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * 读取当前内容缩放比例。\r\n */\r\nexport function useReactContentScale() {\r\n return useContext(ReactContentScaleContext);\r\n}\r\n\r\n/**\r\n * 将固定布局尺寸换算为缩放前的布局值(再由 transform scale 还原视觉尺寸)。\r\n */\r\nexport function toContentLayoutSize(size: number, scale: number) {\r\n const nextScale =\r\n typeof scale === \"number\" && Number.isFinite(scale) && scale > 0\r\n ? scale\r\n : 1;\r\n if (nextScale === 1) {\r\n return size;\r\n }\r\n return size / nextScale;\r\n}\r\n","import { useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\n\n/**\n * 过渡动画时长配置。\n */\nexport type ReactTransitionDuration =\n | number\n | {\n enter?: number;\n leave?: number;\n };\n\n/**\n * Vue 风格的过渡阶段。\n */\nexport type ReactTransitionPhase =\n | \"enter-from\"\n | \"enter-to\"\n | \"entered\"\n | \"leave-from\"\n | \"leave-to\";\n\n/**\n * 过渡组件提供给渲染函数的状态。\n */\nexport interface ReactTransitionState {\n /** 当前阶段对应的 CSS 类名。 */\n className?: string;\n /** 当前过渡阶段。 */\n phase: ReactTransitionPhase;\n /** 子节点当前是否需要挂载。 */\n rendered: boolean;\n}\n\n/**\n * 过渡状态配置。\n */\nexport interface ReactTransitionOptions {\n /** 是否显示内容。 */\n show: boolean;\n /** CSS 类名前缀。 */\n name?: string;\n /** 进入和离开动画时长。 */\n duration?: ReactTransitionDuration;\n /** 首次显示时是否执行进入动画。 */\n appear?: boolean;\n}\n\n/**\n * 过渡组件属性。\n */\nexport interface ReactTransitionProps extends ReactTransitionOptions {\n /** 根据过渡状态渲染内容。 */\n children: (state: ReactTransitionState) => ReactNode;\n}\n\n/**\n * 提供 Vue 风格 CSS 阶段的过渡状态。\n */\nexport function useReactTransition(\n options: ReactTransitionOptions,\n): ReactTransitionState {\n const {\n appear = true,\n duration = 0,\n name = \"canvas-react-transition\",\n show,\n } = options;\n const enterDuration = resolveDuration(duration, \"enter\");\n const leaveDuration = resolveDuration(duration, \"leave\");\n const previousShowRef = useRef(show);\n const [rendered, setRendered] = useState(show);\n const [phase, setPhase] = useState<ReactTransitionPhase>(() => {\n if (!show) {\n return \"leave-to\";\n }\n return appear ? \"enter-from\" : \"entered\";\n });\n\n useLayoutEffect(() => {\n if (previousShowRef.current === show) {\n return;\n }\n previousShowRef.current = show;\n\n if (show) {\n setRendered(true);\n setPhase(\"enter-from\");\n return;\n }\n\n setPhase(\"leave-from\");\n }, [show]);\n\n useLayoutEffect(() => {\n let firstFrameId: number | null = null;\n let secondFrameId: number | null = null;\n let timerId: number | null = null;\n\n if (phase === \"enter-from\" || phase === \"leave-from\") {\n firstFrameId = window.requestAnimationFrame(() => {\n secondFrameId = window.requestAnimationFrame(() => {\n setPhase(phase === \"enter-from\" ? \"enter-to\" : \"leave-to\");\n });\n });\n } else if (phase === \"enter-to\") {\n timerId = window.setTimeout(() => {\n setPhase(\"entered\");\n }, enterDuration);\n } else if (phase === \"leave-to\" && rendered) {\n timerId = window.setTimeout(() => {\n setRendered(false);\n }, leaveDuration);\n }\n\n return () => {\n if (firstFrameId !== null) {\n window.cancelAnimationFrame(firstFrameId);\n }\n if (secondFrameId !== null) {\n window.cancelAnimationFrame(secondFrameId);\n }\n if (timerId !== null) {\n window.clearTimeout(timerId);\n }\n };\n }, [enterDuration, leaveDuration, phase, rendered]);\n\n return {\n className: resolveTransitionClassName(name, phase),\n phase,\n rendered,\n };\n}\n\n/**\n * 在离开动画完成后卸载内容的无包装过渡组件。\n */\nexport function ReactTransition(props: ReactTransitionProps) {\n const { children, ...options } = props;\n const state = useReactTransition(options);\n return state.rendered ? children(state) : null;\n}\n\nfunction resolveTransitionClassName(name: string, phase: ReactTransitionPhase) {\n if (phase === \"entered\") {\n return undefined;\n }\n\n const direction = phase.startsWith(\"enter\") ? \"enter\" : \"leave\";\n return `${name}-${phase} ${name}-${direction}-active`;\n}\n\nfunction resolveDuration(\n duration: ReactTransitionDuration,\n direction: \"enter\" | \"leave\",\n) {\n const value =\n typeof duration === \"number\" ? duration : (duration[direction] ?? 0);\n return Number.isFinite(value) && value > 0 ? value : 0;\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-popup {\\n position: fixed;\\n z-index: 1200;\\n box-sizing: border-box;\\n pointer-events: auto;\\n}\\n.canvas-react-popup-surface {\\n overflow: hidden;\\n border: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-radius: var(--canvas-react-radius-md, 8px);\\n background: var(--canvas-react-color-bg, #ffffff);\\n box-shadow: var( --canvas-react-shadow-popup, 0 8px 24px rgba(15, 23, 42, 0.16) );\\n transform-origin: top center;\\n}\\n.canvas-react-popup-surface-enter-active,\\n.canvas-react-popup-surface-leave-active {\\n transition: opacity 0.18s ease-out, transform 0.18s cubic-bezier(0.16, 1, 0.3, 1);\\n}\\n.canvas-react-popup-surface-enter-from,\\n.canvas-react-popup-surface-leave-to {\\n opacity: 0;\\n transform: translateY(-6px) scale(0.98);\\n}\\n.canvas-react-popup-surface-enter-to,\\n.canvas-react-popup-surface-leave-from {\\n opacity: 1;\\n transform: translate(0) scale(1);\\n}\\n.canvas-react-popup[data-placement^=top] .canvas-react-popup-surface {\\n transform-origin: bottom center;\\n}\\n.canvas-react-popup[data-placement^=top] .canvas-react-popup-surface-enter-from,\\n.canvas-react-popup[data-placement^=top] .canvas-react-popup-surface-leave-to {\\n transform: translateY(6px) scale(0.98);\\n}\\n.canvas-react-popup[data-placement^=bottom] .canvas-react-popup-surface {\\n transform-origin: top center;\\n}\\n.canvas-react-popup[data-placement^=left] .canvas-react-popup-surface {\\n transform-origin: center right;\\n}\\n.canvas-react-popup[data-placement^=left] .canvas-react-popup-surface-enter-from,\\n.canvas-react-popup[data-placement^=left] .canvas-react-popup-surface-leave-to {\\n transform: translateX(6px) scale(0.98);\\n}\\n.canvas-react-popup[data-placement^=right] .canvas-react-popup-surface {\\n transform-origin: center left;\\n}\\n.canvas-react-popup[data-placement^=right] .canvas-react-popup-surface-enter-from,\\n.canvas-react-popup[data-placement^=right] .canvas-react-popup-surface-leave-to {\\n transform: translateX(-6px) scale(0.98);\\n}\\n.canvas-react-popup-leave {\\n pointer-events: none;\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .canvas-react-popup-surface-enter-active,\\n .canvas-react-popup-surface-leave-active {\\n transition-duration: 0.01ms;\\n }\\n}\\n\")","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport {\n toContentLayoutSize,\n useReactContentScale,\n} from \"../../shared/content-scale\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { useReactTransition } from \"../transition/index\";\nimport \"./style.css\";\n\ntype PopupPlacement =\n | \"bottomLeft\"\n | \"bottomRight\"\n | \"topLeft\"\n | \"topRight\"\n | \"rightTop\"\n | \"rightBottom\"\n | \"leftTop\"\n | \"leftBottom\";\n\nconst POPUP_MOTION_DURATION = 180;\n\ninterface PopupAnchorRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface PopupSurfaceRect {\n width: number;\n height: number;\n}\n\ninterface ResolvedPopupPosition {\n placement: PopupPlacement;\n style: CSSProperties;\n}\n\nexport interface ReactPopupProps {\n /** 将面板高度限制在视口内,超出部分在面板内部滚动。 */\n constrainHeight?: boolean;\n /**\n * 是否显示弹层。\n */\n open: boolean;\n /**\n * 触发元素引用。\n */\n anchorRef?: RefObject<HTMLElement | null>;\n /**\n * 外部直接传入的锚点矩形。\n */\n anchorRect?: PopupAnchorRect | null;\n /**\n * 弹层位置。\n */\n placement?: PopupPlacement;\n /**\n * 与锚点的间距。\n */\n offset?: number;\n /**\n * 是否跟随触发器宽度。\n */\n matchAnchorWidth?: boolean;\n /**\n * 最小宽度。\n */\n minWidth?: number;\n /**\n * 自定义层级。\n */\n zIndex?: number;\n /**\n * 弹层容器类名。\n */\n className?: string;\n /**\n * 弹层面板类名。\n */\n surfaceClassName?: string;\n /**\n * 弹层容器样式。\n */\n style?: CSSProperties;\n /**\n * 弹层面板样式。\n */\n surfaceStyle?: CSSProperties;\n /**\n * 打开状态变化回调。\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * 弹层内容。\n */\n children: ReactNode;\n}\n\n/**\n * 通用弹出层组件。\n */\nexport function ReactPopup(props: ReactPopupProps) {\n const {\n anchorRect,\n anchorRef,\n children,\n className,\n matchAnchorWidth = false,\n minWidth,\n offset = 4,\n onOpenChange,\n open,\n placement = \"bottomLeft\",\n style,\n surfaceClassName,\n surfaceStyle,\n constrainHeight = false,\n zIndex = 1200,\n } = props;\n const { scale: contentScale } = useReactContentScale();\n const transition = useReactTransition({\n duration: POPUP_MOTION_DURATION,\n name: `${REACT_COMPONENT_PREFIX}-popup-surface`,\n show: open,\n });\n const { rendered } = transition;\n const [position, setPosition] = useState<ResolvedPopupPosition | null>(null);\n const surfaceRef = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n if (!rendered) {\n return;\n }\n\n const updatePosition = () => {\n const nextAnchor = anchorRect ?? resolveAnchorRect(anchorRef?.current);\n if (!nextAnchor) {\n return;\n }\n const nextPosition = resolvePopupPosition({\n constrainHeight,\n anchor: nextAnchor,\n contentScale,\n matchAnchorWidth,\n minWidth,\n offset,\n placement,\n popupRect: resolvePopupSurfaceRect(surfaceRef.current, contentScale),\n });\n\n setPosition((prev) => {\n if (\n prev?.placement === nextPosition.placement &&\n prev?.style.left === nextPosition.style.left &&\n prev?.style.top === nextPosition.style.top &&\n prev?.style.width === nextPosition.style.width &&\n prev?.style.minWidth === nextPosition.style.minWidth &&\n prev?.style.maxHeight === nextPosition.style.maxHeight\n ) {\n return prev;\n }\n return nextPosition;\n });\n };\n\n const handleResize = () => {\n updatePosition();\n };\n\n const handleScroll = (event: Event) => {\n const target = event.target as Node | null;\n if (target && surfaceRef.current?.contains(target)) {\n return;\n }\n updatePosition();\n };\n\n updatePosition();\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleScroll, true);\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleScroll, true);\n };\n }, [\n anchorRect,\n anchorRef,\n contentScale,\n constrainHeight,\n matchAnchorWidth,\n minWidth,\n offset,\n rendered,\n placement,\n ]);\n\n useLayoutEffect(() => {\n if (!rendered || !position || !surfaceRef.current) {\n return;\n }\n\n const updatePositionBySurface = () => {\n const nextAnchor = anchorRect ?? resolveAnchorRect(anchorRef?.current);\n if (!nextAnchor) {\n return;\n }\n\n const nextPosition = resolvePopupPosition({\n constrainHeight,\n anchor: nextAnchor,\n contentScale,\n matchAnchorWidth,\n minWidth,\n offset,\n placement,\n popupRect: resolvePopupSurfaceRect(surfaceRef.current, contentScale),\n });\n\n setPosition((prev) => {\n if (\n prev?.placement === nextPosition.placement &&\n prev?.style.left === nextPosition.style.left &&\n prev?.style.top === nextPosition.style.top &&\n prev?.style.width === nextPosition.style.width &&\n prev?.style.minWidth === nextPosition.style.minWidth &&\n prev?.style.maxHeight === nextPosition.style.maxHeight\n ) {\n return prev;\n }\n return nextPosition;\n });\n };\n\n updatePositionBySurface();\n const observer = new ResizeObserver(() => {\n updatePositionBySurface();\n });\n observer.observe(surfaceRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [\n anchorRect,\n anchorRef,\n contentScale,\n constrainHeight,\n matchAnchorWidth,\n minWidth,\n offset,\n rendered,\n placement,\n position,\n ]);\n\n useEffect(() => {\n if (!rendered) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (target?.closest(`.${REACT_COMPONENT_PREFIX}-popup`)) {\n return;\n }\n if (anchorRef?.current?.contains(target as Node)) {\n return;\n }\n onOpenChange?.(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onOpenChange?.(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [anchorRef, onOpenChange, rendered]);\n\n if (!rendered || !position) {\n return null;\n }\n\n // 面板按设计尺寸布局,外层 scale 放大到与表格一致的视觉比例。\n const contentScaleStyle =\n contentScale !== 1\n ? ({\n transform: `scale(${contentScale})`,\n transformOrigin: \"top left\",\n } satisfies CSSProperties)\n : undefined;\n\n return createPortal(\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popup`,\n transition.phase.startsWith(\"leave\") &&\n `${REACT_COMPONENT_PREFIX}-popup-leave`,\n className,\n )}\n style={{\n ...position.style,\n ...style,\n ...contentScaleStyle,\n zIndex,\n }}\n data-placement={position.placement}\n >\n <div\n ref={surfaceRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popup-surface`,\n transition.className,\n surfaceClassName,\n )}\n style={resolvePopupSurfaceStyle(surfaceStyle, position.style.maxHeight)}\n >\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n\nexport function resolvePopupPosition(params: {\n constrainHeight?: boolean;\n anchor: PopupAnchorRect;\n contentScale: number;\n matchAnchorWidth: boolean;\n minWidth?: number;\n offset: number;\n placement: PopupPlacement;\n popupRect: PopupSurfaceRect | null;\n}): ResolvedPopupPosition {\n const {\n anchor,\n contentScale,\n matchAnchorWidth,\n minWidth,\n offset,\n placement,\n popupRect,\n } = params;\n const margin = 8;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n // minWidth / 面板固定宽为设计尺寸;视觉尺寸 = 布局 * contentScale。\n // matchAnchorWidth 时布局宽度 = 锚点视觉宽 / scale,保证放大后贴合触发器。\n const layoutMinWidth = typeof minWidth === \"number\" ? minWidth : undefined;\n const layoutAnchorWidth = toContentLayoutSize(anchor.width, contentScale);\n const preferredVisualWidth =\n popupRect?.width ??\n Math.max(\n (minWidth ?? 0) * contentScale,\n matchAnchorWidth ? anchor.width : 0,\n );\n const popupWidth = preferredVisualWidth;\n const maxVisualHeight = Math.max(0, viewportHeight - margin * 2);\n const popupHeight = params.constrainHeight\n ? Math.min(popupRect?.height ?? 0, maxVisualHeight)\n : (popupRect?.height ?? 0);\n const isHorizontalPlacement =\n placement.startsWith(\"left\") || placement.startsWith(\"right\");\n const preferredVertical = placement.startsWith(\"top\")\n ? \"top\"\n : placement.endsWith(\"Top\")\n ? \"top\"\n : \"bottom\";\n const preferredTop = resolveRawTop({\n anchor,\n isHorizontalPlacement,\n offset,\n popupHeight,\n vertical: preferredVertical,\n });\n const resolvedVertical =\n popupHeight > 0 &&\n !fitsInViewport(preferredTop, popupHeight, viewportHeight, margin)\n ? preferredVertical === \"bottom\"\n ? \"top\"\n : \"bottom\"\n : preferredVertical;\n const rawTop = resolveRawTop({\n anchor,\n isHorizontalPlacement,\n offset,\n popupHeight,\n vertical: resolvedVertical,\n });\n const maxTop = Math.max(margin, viewportHeight - popupHeight - margin);\n const top = clamp(rawTop, margin, maxTop);\n const preferredHorizontal = placement.endsWith(\"Right\")\n ? \"right\"\n : placement.startsWith(\"right\")\n ? \"right\"\n : \"left\";\n const preferredLeft = resolveRawLeft({\n anchor,\n horizontal: preferredHorizontal,\n isHorizontalPlacement,\n offset,\n popupWidth,\n });\n const resolvedHorizontal =\n popupWidth > 0 &&\n !fitsInViewport(preferredLeft, popupWidth, viewportWidth, margin)\n ? preferredHorizontal === \"right\"\n ? \"left\"\n : \"right\"\n : preferredHorizontal;\n const rawLeft = resolveRawLeft({\n anchor,\n horizontal: resolvedHorizontal,\n isHorizontalPlacement,\n offset,\n popupWidth,\n });\n const maxLeft = Math.max(margin, viewportWidth - popupWidth - margin);\n const left = clamp(rawLeft, margin, maxLeft);\n\n return {\n placement: resolvePlacement({\n horizontal: resolvedHorizontal,\n isHorizontalPlacement,\n vertical: resolvedVertical,\n }),\n style: {\n ...(params.constrainHeight\n ? { maxHeight: toContentLayoutSize(maxVisualHeight, contentScale) }\n : {}),\n left,\n top,\n width: matchAnchorWidth ? layoutAnchorWidth : undefined,\n minWidth:\n layoutMinWidth ?? (matchAnchorWidth ? layoutAnchorWidth : undefined),\n },\n };\n}\n\n/** 合并面板的自定义高度上限与视口上限,保留较小值。 */\nexport function resolvePopupSurfaceStyle(\n style: CSSProperties | undefined,\n viewportMaxHeight: CSSProperties[\"maxHeight\"],\n): CSSProperties | undefined {\n if (typeof viewportMaxHeight !== \"number\") return style;\n const custom = style?.maxHeight;\n const maxHeight =\n typeof custom === \"number\"\n ? Math.min(custom, viewportMaxHeight)\n : typeof custom === \"string\" && custom !== \"none\"\n ? `min(${custom}, ${viewportMaxHeight}px)`\n : viewportMaxHeight;\n return {\n ...style,\n boxSizing: \"border-box\",\n minHeight: 0,\n maxHeight,\n overflowY: \"auto\",\n overscrollBehaviorY: \"contain\",\n };\n}\n\nfunction resolvePlacement(params: {\n horizontal: \"left\" | \"right\";\n isHorizontalPlacement: boolean;\n vertical: \"top\" | \"bottom\";\n}): PopupPlacement {\n const { horizontal, isHorizontalPlacement, vertical } = params;\n if (isHorizontalPlacement) {\n if (horizontal === \"left\") {\n return vertical === \"top\" ? \"leftTop\" : \"leftBottom\";\n }\n return vertical === \"top\" ? \"rightTop\" : \"rightBottom\";\n }\n\n if (vertical === \"top\") {\n return horizontal === \"left\" ? \"topLeft\" : \"topRight\";\n }\n return horizontal === \"left\" ? \"bottomLeft\" : \"bottomRight\";\n}\n\nfunction resolveRawTop(params: {\n anchor: PopupAnchorRect;\n isHorizontalPlacement: boolean;\n offset: number;\n popupHeight: number;\n vertical: \"top\" | \"bottom\";\n}) {\n const { anchor, isHorizontalPlacement, offset, popupHeight, vertical } =\n params;\n if (isHorizontalPlacement) {\n return vertical === \"bottom\"\n ? anchor.y + anchor.height - popupHeight\n : anchor.y;\n }\n\n return vertical === \"top\"\n ? anchor.y - offset - popupHeight\n : anchor.y + anchor.height + offset;\n}\n\nfunction resolveRawLeft(params: {\n anchor: PopupAnchorRect;\n horizontal: \"left\" | \"right\";\n isHorizontalPlacement: boolean;\n offset: number;\n popupWidth: number;\n}) {\n const { anchor, horizontal, isHorizontalPlacement, offset, popupWidth } =\n params;\n if (isHorizontalPlacement) {\n return horizontal === \"right\"\n ? anchor.x + anchor.width + offset\n : anchor.x - popupWidth - offset;\n }\n\n return horizontal === \"right\"\n ? anchor.x + anchor.width - popupWidth\n : anchor.x;\n}\n\nfunction fitsInViewport(\n start: number,\n size: number,\n viewportSize: number,\n margin: number,\n) {\n return start >= margin && start + size <= viewportSize - margin;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n if (max < min) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nfunction resolveAnchorRect(\n element?: HTMLElement | null,\n): PopupAnchorRect | null {\n if (!element) {\n return null;\n }\n\n const rect = element.getBoundingClientRect();\n return {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction resolvePopupSurfaceRect(\n element: HTMLElement | null,\n contentScale = 1,\n) {\n if (!element) {\n return null;\n }\n\n const scale =\n typeof contentScale === \"number\" &&\n Number.isFinite(contentScale) &&\n contentScale > 0\n ? contentScale\n : 1;\n\n // offset* 是 transform 前的布局尺寸,碰撞检测需要视觉尺寸。\n return {\n height: element.offsetHeight * scale,\n width: element.offsetWidth * scale,\n };\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-virtual-list {\\n position: relative;\\n overflow-y: auto;\\n}\\n.canvas-react-virtual-list-inner {\\n position: relative;\\n min-width: 100%;\\n}\\n.canvas-react-virtual-list-empty {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n padding: 0 11px;\\n color: #9ca3af;\\n font-size: var(--canvas-react-font-size);\\n}\\n\")","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactVirtualListRef {\n /**\n * 滚动到指定项。\n */\n scrollToIndex: (index: number) => void;\n /**\n * 当前滚动容器。\n */\n element: HTMLDivElement | null;\n}\n\nexport interface ReactVirtualListRenderMeta {\n /**\n * 当前项样式。\n */\n style: CSSProperties;\n}\n\nexport interface ReactVirtualListProps<Item> {\n /**\n * 数据项。\n */\n items: Item[];\n /**\n * 容器高度。\n */\n height: number;\n /**\n * 单项高度。\n */\n itemHeight: number;\n /**\n * 是否启用虚拟滚动。\n */\n virtual?: boolean;\n /**\n * 额外预渲染项数。\n */\n overscan?: number;\n /**\n * 容器类名。\n */\n className?: string;\n /**\n * 内层类名。\n */\n innerClassName?: string;\n /**\n * 容器样式。\n */\n style?: CSSProperties;\n /**\n * 空状态内容。\n */\n empty?: ReactNode;\n /**\n * 获取项 key。\n */\n itemKey: (item: Item, index: number) => string | number;\n /**\n * 渲染项。\n */\n renderItem: (\n item: Item,\n index: number,\n meta: ReactVirtualListRenderMeta,\n ) => ReactNode;\n}\n\n/**\n * 通用虚拟列表组件。\n */\nexport const ReactVirtualList = forwardRef(function ReactVirtualListInner<Item>(\n props: ReactVirtualListProps<Item>,\n ref: React.ForwardedRef<ReactVirtualListRef>,\n) {\n const {\n className,\n empty,\n height,\n innerClassName,\n itemHeight,\n itemKey,\n items,\n overscan = 2,\n renderItem,\n style,\n virtual = true,\n } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n const useVirtual = virtual && items.length * itemHeight > height;\n const startIndex = useVirtual\n ? Math.max(0, Math.floor(scrollTop / itemHeight) - overscan)\n : 0;\n const endIndex = useVirtual\n ? Math.min(\n items.length - 1,\n Math.ceil((scrollTop + height) / itemHeight) + overscan,\n )\n : items.length - 1;\n const visibleItems = useMemo(\n () => items.slice(startIndex, endIndex + 1),\n [endIndex, items, startIndex],\n );\n\n useImperativeHandle(ref, () => ({\n scrollToIndex: (index: number) => {\n const element = hostRef.current;\n if (!element || index < 0) {\n return;\n }\n\n const itemTop = index * itemHeight;\n const itemBottom = itemTop + itemHeight;\n const viewportTop = element.scrollTop;\n const viewportBottom = viewportTop + height;\n\n if (itemTop < viewportTop) {\n element.scrollTop = itemTop;\n return;\n }\n\n if (itemBottom > viewportBottom) {\n element.scrollTop = itemBottom - height;\n }\n },\n element: hostRef.current,\n }));\n\n return (\n <div\n ref={hostRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-virtual-list`,\n `${REACT_COMPONENT_PREFIX}-scrollbar`,\n className,\n )}\n style={{ height, ...style }}\n onScroll={(event) => {\n setScrollTop(event.currentTarget.scrollTop);\n }}\n >\n {items.length === 0 ? (\n <div className={`${REACT_COMPONENT_PREFIX}-virtual-list-empty`}>\n {empty ?? \"暂无数据\"}\n </div>\n ) : (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-virtual-list-inner`,\n innerClassName,\n )}\n style={{ height: items.length * itemHeight }}\n >\n {visibleItems.map((item, index) => {\n const itemIndex = startIndex + index;\n return renderItem(item, itemIndex, {\n style: useVirtual\n ? {\n position: \"absolute\",\n top: itemIndex * itemHeight,\n left: 0,\n right: 0,\n height: itemHeight,\n }\n : {\n height: itemHeight,\n },\n });\n })}\n </div>\n )}\n </div>\n );\n}) as <Item>(\n props: ReactVirtualListProps<Item> & {\n ref?: React.ForwardedRef<ReactVirtualListRef>;\n },\n) => React.JSX.Element;\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-select-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-select {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-select-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-select .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-select-input-wrap:hover,\\n.canvas-react-select-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-select-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: normal;\\n}\\n.canvas-react-select-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-select:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-select:focus {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-select-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-select-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-select-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-select-arrow {\\n pointer-events: none;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n opacity: 1;\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-select:hover .canvas-react-select-arrow,\\n.canvas-react-select-open .canvas-react-select-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-select-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-select-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-select-clear:hover {\\n color: #6b7280;\\n transform: translate(-50%, -50%) rotate(90deg);\\n}\\n.canvas-react-select:hover .canvas-react-select-clear,\\n.canvas-react-select-open .canvas-react-select-clear,\\n.canvas-react-select:focus-within .canvas-react-select-clear,\\n.canvas-react-cascader:hover .canvas-react-select-clear,\\n.canvas-react-cascader-open .canvas-react-select-clear,\\n.canvas-react-cascader:focus-within .canvas-react-select-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-select:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-select-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-select:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-cascader:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-cascader-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-cascader:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow {\\n opacity: 0;\\n}\\n.canvas-react-select-clear-icon,\\n.canvas-react-select-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-select-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-select-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-select-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-select-list {\\n position: relative;\\n overflow-y: auto;\\n}\\n.canvas-react-select-list-inner {\\n position: relative;\\n}\\n.canvas-react-select-option {\\n display: flex;\\n align-items: center;\\n box-sizing: border-box;\\n width: 100%;\\n padding: 0 11px;\\n border-radius: var(--canvas-react-radius-sm);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n cursor: pointer;\\n}\\n.canvas-react-select-option:hover,\\n.canvas-react-select-option-active {\\n background: var(--canvas-react-color-bg-hover);\\n}\\n.canvas-react-select-option-selected {\\n background: var(--canvas-react-color-bg-active);\\n}\\n.canvas-react-select-option-searching {\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-select-option-searching:hover,\\n.canvas-react-select-option-searching.canvas-react-select-option-active {\\n background: var(--canvas-react-color-bg-active);\\n}\\n.canvas-react-select-option-disabled {\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-select-option-highlight {\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n.canvas-react-select-option-disabled .canvas-react-select-option-highlight {\\n color: inherit;\\n}\\n.canvas-react-select-empty {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n padding: 0 11px;\\n color: #9ca3af;\\n font-size: var(--canvas-react-font-size);\\n}\\n\")","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\nimport { ReactPopup } from \"../popup/index\";\nimport {\n ReactVirtualList,\n type ReactVirtualListRef,\n} from \"../virtual-list/index\";\nimport \"./style.css\";\n\nexport interface ReactSelectOption {\n /**\n * 选项文本。\n */\n label: string;\n /**\n * 选项值。\n */\n value: string | number;\n /**\n * 是否禁用。\n */\n disabled?: boolean;\n}\n\nexport type ReactSelectFilterOption = (\n input: string,\n option: ReactSelectOption,\n) => boolean;\n\nexport interface ReactSelectChangeInfo {\n trigger: \"mouse\" | \"keyboard\" | \"input\" | \"clear\";\n}\n\nexport interface ReactSelectProps extends Omit<\n ReactInputProps,\n \"value\" | \"onChange\" | \"onPressEnter\"\n> {\n /**\n * 当前值。\n */\n value?: string | number;\n /**\n * 选项列表。\n */\n options: ReactSelectOption[];\n /**\n * 值变化回调。\n */\n onChange?: (value: string, info: ReactSelectChangeInfo) => void;\n /**\n * 占位提示。\n */\n placeholder?: string;\n /**\n * 弹层类名。\n */\n popupClassName?: string;\n /**\n * 弹层层级。\n */\n popupZIndex?: number;\n /**\n * 列表高度。\n */\n listHeight?: number;\n /**\n * 单项高度。\n */\n optionHeight?: number;\n /**\n * 是否启用虚拟列表。\n */\n virtual?: boolean;\n /**\n * 是否开启搜索过滤。\n */\n showSearch?: boolean;\n /**\n * 自定义搜索过滤逻辑。\n */\n filterOption?: ReactSelectFilterOption;\n /** 允许输入不在 options 中的值。 */\n allowCustomValue?: boolean;\n /** 搜索输入变化回调。 */\n onInputValueChange?: (value: string) => void;\n /** 回车回调。 */\n onPressEnter?: (value: string) => void | Promise<void>;\n /**\n * 是否允许清空。\n */\n allowClear?: boolean;\n /**\n * 是否显示右侧下拉箭头。\n * @default true\n */\n showArrow?: boolean;\n}\n\n/**\n * 基础下拉选择框。\n */\nexport const ReactSelect = forwardRef<HTMLInputElement, ReactSelectProps>(\n function ReactSelect(props, ref) {\n const {\n autoFocus,\n allowCustomValue = false,\n className,\n disabled,\n filterOption,\n onBlur,\n onChange,\n onInputValueChange,\n onPressEnter,\n onFocus,\n onKeyDown,\n options,\n optionHeight = 32,\n listHeight = 224,\n placeholder,\n popupClassName,\n popupZIndex,\n allowClear = true,\n showArrow = true,\n showSearch = false,\n style,\n value,\n virtual = true,\n ...restProps\n } = props;\n const triggerRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<ReactVirtualListRef | null>(null);\n const skipFocusOpenRef = useRef(false);\n const [open, setOpen] = useState(false);\n const selectedIndex = useMemo(\n () =>\n options.findIndex(\n (option) => String(option.value) === String(value ?? \"\"),\n ),\n [options, value],\n );\n const selectedOption =\n selectedIndex >= 0 ? options[selectedIndex] : undefined;\n const [keyword, setKeyword] = useState(\"\");\n const [searching, setSearching] = useState(false);\n const searchKeyword = searching ? keyword : \"\";\n const filteredOptions = useMemo(\n () =>\n filterSelectOptions(options, searchKeyword, showSearch, filterOption),\n [filterOption, options, searchKeyword, showSearch],\n );\n const [activeIndex, setActiveIndex] = useState(() => {\n return selectedIndex >= 0 ? selectedIndex : 0;\n });\n\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n\n useEffect(() => {\n if (autoFocus) {\n inputRef.current?.focus();\n }\n }, [autoFocus]);\n\n useLayoutEffect(() => {\n if (open && showSearch && !searching) {\n inputRef.current?.select();\n }\n }, [open, searching, showSearch]);\n\n useEffect(() => {\n const nextIndex = filteredOptions.findIndex(\n (option) => String(option.value) === String(value ?? \"\"),\n );\n setActiveIndex(nextIndex >= 0 ? nextIndex : 0);\n }, [filteredOptions, value]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n listRef.current?.scrollToIndex(activeIndex);\n }, [activeIndex, listHeight, open, optionHeight]);\n\n const selectOption = (\n option: ReactSelectOption,\n trigger: ReactSelectChangeInfo[\"trigger\"],\n ) => {\n onChange?.(String(option.value), { trigger });\n setKeyword(option.label);\n setSearching(false);\n setOpen(false);\n inputRef.current?.focus();\n };\n const hasValue = value != null && String(value).length > 0;\n const showClear = allowClear && !disabled && hasValue;\n\n const handleClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n skipFocusOpenRef.current = true;\n setKeyword(\"\");\n setSearching(false);\n setOpen(false);\n onChange?.(\"\", { trigger: \"clear\" });\n inputRef.current?.blur();\n };\n const openSelect = () => {\n setKeyword(\n resolveSelectKeywordOnOpen(\n selectedOption?.label ??\n (allowCustomValue ? String(value ?? \"\") : undefined),\n ),\n );\n setSearching(false);\n setOpen(true);\n };\n\n return (\n <span className={`${REACT_COMPONENT_PREFIX}-select-wrap`}>\n <div\n ref={triggerRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select`,\n open && `${REACT_COMPONENT_PREFIX}-select-open`,\n disabled && `${REACT_COMPONENT_PREFIX}-select-disabled`,\n className,\n )}\n style={style as CSSProperties}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n if (\n (event.target as HTMLElement | null)?.closest(\n `.${REACT_COMPONENT_PREFIX}-select-clear`,\n )\n ) {\n return;\n }\n if (\n (event.target as HTMLElement | null)?.closest(\n `.${REACT_COMPONENT_PREFIX}-select-arrow`,\n )\n ) {\n return;\n }\n inputRef.current?.focus();\n if (!open) {\n openSelect();\n }\n }}\n >\n <ReactInput\n {...restProps}\n ref={inputRef}\n allowClear={false}\n disabled={disabled}\n readOnly={!showSearch}\n value={\n open && showSearch\n ? keyword\n : (selectedOption?.label ??\n (allowCustomValue ? String(value ?? \"\") : \"\"))\n }\n className={joinClassNames(`${REACT_COMPONENT_PREFIX}-select-input`)}\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-select-input-wrap`}\n placeholder={placeholder}\n onFocus={(event) => {\n if (skipFocusOpenRef.current) {\n skipFocusOpenRef.current = false;\n onFocus?.(event);\n return;\n }\n\n if (!open) {\n openSelect();\n }\n onFocus?.(event);\n }}\n onBlur={(event) => {\n setOpen(false);\n if ((!keyword.trim() || !showSearch) && selectedOption) {\n setKeyword(selectedOption.label);\n }\n onBlur?.(event);\n }}\n onChange={(event) => {\n if (!showSearch) {\n return;\n }\n setKeyword(event.target.value);\n setSearching(true);\n onInputValueChange?.(event.target.value);\n setOpen(true);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (disabled) {\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (!open) {\n openSelect();\n return;\n }\n setActiveIndex((prev) =>\n Math.min(prev + 1, Math.max(filteredOptions.length - 1, 0)),\n );\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (!open) {\n openSelect();\n return;\n }\n setActiveIndex((prev) => Math.max(prev - 1, 0));\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (!open) {\n openSelect();\n return;\n }\n const targetOption = resolveSelectEnterOption(filteredOptions);\n if (targetOption && !targetOption.disabled) {\n selectOption(targetOption, \"keyboard\");\n } else if (allowCustomValue && keyword.trim()) {\n void Promise.resolve(onPressEnter?.(keyword.trim()));\n }\n return;\n }\n\n if (event.key === \"Escape\") {\n setKeyword(selectedOption?.label ?? \"\");\n setSearching(false);\n setOpen(false);\n }\n }}\n />\n {showClear || showArrow ? (\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-actions`,\n showClear &&\n `${REACT_COMPONENT_PREFIX}-select-actions-clearable`,\n )}\n >\n {showClear ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-select-clear`}\n aria-label=\"清空\"\n tabIndex={-1}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={handleClear}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-select-clear-icon`}\n />\n </button>\n ) : null}\n {showArrow ? (\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-arrow`,\n open && `${REACT_COMPONENT_PREFIX}-select-arrow-open`,\n )}\n />\n ) : null}\n </span>\n ) : null}\n </div>\n <ReactPopup\n open={open}\n anchorRef={triggerRef}\n matchAnchorWidth\n zIndex={popupZIndex}\n surfaceClassName={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-dropdown`,\n popupClassName,\n )}\n onOpenChange={setOpen}\n >\n <ReactVirtualList\n ref={listRef}\n items={filteredOptions}\n height={Math.min(\n listHeight,\n Math.max(filteredOptions.length, 1) * optionHeight,\n )}\n itemHeight={optionHeight}\n virtual={virtual}\n className={`${REACT_COMPONENT_PREFIX}-select-list`}\n innerClassName={`${REACT_COMPONENT_PREFIX}-select-list-inner`}\n empty={\n <div className={`${REACT_COMPONENT_PREFIX}-select-empty`}>\n 暂无数据\n </div>\n }\n itemKey={(option) => String(option.value)}\n renderItem={(option, optionIndex, meta) => {\n const isSelected = String(option.value) === String(value ?? \"\");\n const isActive = optionIndex === activeIndex;\n const isSearching = showSearch && searchKeyword.trim().length > 0;\n\n return (\n <div\n key={String(option.value)}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-select-option`,\n isSelected &&\n `${REACT_COMPONENT_PREFIX}-select-option-selected`,\n isActive &&\n `${REACT_COMPONENT_PREFIX}-select-option-active`,\n isSearching &&\n `${REACT_COMPONENT_PREFIX}-select-option-searching`,\n option.disabled &&\n `${REACT_COMPONENT_PREFIX}-select-option-disabled`,\n )}\n style={meta.style}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onMouseEnter={() => {\n setActiveIndex(optionIndex);\n }}\n onClick={() => {\n if (option.disabled) {\n return;\n }\n selectOption(option, \"mouse\");\n }}\n >\n {renderSelectOptionLabel(\n option.label,\n showSearch ? searchKeyword : \"\",\n )}\n </div>\n );\n }}\n />\n </ReactPopup>\n </span>\n );\n },\n);\n\n/**\n * 根据搜索配置过滤下拉选项。\n */\nexport function filterSelectOptions(\n options: ReactSelectOption[],\n input: string,\n showSearch: boolean,\n filterOption?: ReactSelectFilterOption,\n) {\n if (!showSearch) {\n return options;\n }\n\n const search = input.trim();\n if (!search) {\n return options;\n }\n if (filterOption) {\n return options.filter((option) => filterOption(search, option));\n }\n\n const normalizedSearch = search.toLowerCase();\n return options.filter((option) => {\n return (\n option.label.toLowerCase().includes(normalizedSearch) ||\n String(option.value).toLowerCase().includes(normalizedSearch)\n );\n });\n}\n\n/**\n * 回车时优先选择过滤结果中的第一项可用选项。\n */\nexport function resolveSelectEnterOption(options: ReactSelectOption[]) {\n return options.find((option) => !option.disabled);\n}\n\n/**\n * 解析下拉打开时的搜索关键字。\n */\nexport function resolveSelectKeywordOnOpen(selectedLabel?: string) {\n return selectedLabel ?? \"\";\n}\n\n/**\n * 将选项文本拆分为普通文本与搜索命中片段。\n */\nexport function splitSelectOptionLabel(\n label: string,\n input: string,\n): Array<{ text: string; highlighted: boolean }> {\n const search = input.trim();\n if (!search) {\n return [{ text: label, highlighted: false }];\n }\n\n const matcher = new RegExp(escapeRegExp(search), \"gi\");\n const parts: Array<{ text: string; highlighted: boolean }> = [];\n let cursor = 0;\n let match = matcher.exec(label);\n while (match) {\n if (match.index > cursor) {\n parts.push({\n text: label.slice(cursor, match.index),\n highlighted: false,\n });\n }\n parts.push({ text: match[0], highlighted: true });\n cursor = match.index + match[0].length;\n match = matcher.exec(label);\n }\n\n if (cursor < label.length) {\n parts.push({ text: label.slice(cursor), highlighted: false });\n }\n\n return parts.length > 0 ? parts : [{ text: label, highlighted: false }];\n}\n\nfunction renderSelectOptionLabel(label: string, input: string) {\n return splitSelectOptionLabel(label, input).map((part, index) =>\n part.highlighted ? (\n <span\n key={`${part.text}-${index}`}\n className={`${REACT_COMPONENT_PREFIX}-select-option-highlight`}\n >\n {part.text}\n </span>\n ) : (\n part.text\n ),\n );\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import { Fragment, useEffect, useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from \"react\";\nimport { ReactCheckbox } from \"../checkbox/index\";\nimport { ReactInput } from \"../input/index\";\nimport { ReactPopup } from \"../popup/index\";\nimport { ReactSelect } from \"../select/index\";\nimport { ReactVirtualList } from \"../virtual-list/index\";\n\n/** 通用过滤条件操作符。 */\nexport type ReactFilterConditionOperator =\n | \"none\" | \"eq\" | \"neq\" | \"gt\" | \"gte\" | \"lt\" | \"lte\"\n | \"between\" | \"notBetween\" | \"startsWith\" | \"notStartsWith\"\n | \"endsWith\" | \"notEndsWith\" | \"includes\" | \"notIncludes\"\n | \"blank\" | \"notBlank\";\n\n/** 通用过滤条件。 */\nexport interface ReactFilterPanelCondition {\n operator: ReactFilterConditionOperator;\n value?: string;\n secondValue?: string;\n}\n\n/** 通用过滤面板草稿。 */\nexport interface ReactFilterPanelValue {\n keyword: string;\n mode: \"fuzzy\" | \"exact\";\n searchExact?: boolean;\n selectedKeys?: string[];\n filterType?: \"value\" | \"condition\";\n conditionOperator?: ReactFilterConditionOperator;\n conditionValue?: string;\n conditionSecondValue?: string;\n conditionRelation?: \"and\" | \"or\";\n secondConditionOperator?: ReactFilterConditionOperator;\n secondConditionValue?: string;\n secondConditionSecondValue?: string;\n /** 动态条件列表;存在时优先于旧的两条件字段。 */\n conditions?: ReactFilterPanelCondition[];\n}\n\n/** 通用过滤候选项。 */\nexport interface ReactFilterPanelOption {\n label: string;\n value: string;\n count: number;\n kind?: \"all\" | \"blank\" | \"notBlank\" | \"value\";\n}\n\n/** 通用过滤面板文案。 */\nexport interface ReactFilterPanelTexts {\n title: string;\n valueFilterTab: string;\n conditionFilterTab: string;\n searchPlaceholder: string;\n optionsLabel: string;\n emptyOptions: string;\n loadingOptions: string;\n exactToggleLabel: string;\n allOptionLabel: string;\n blankOptionLabel: string;\n notBlankOptionLabel: string;\n relationLabel: string;\n firstConditionLabel: string;\n secondConditionLabel: string;\n firstValuePlaceholder: string;\n secondValuePlaceholder: string;\n relationAndLabel: string;\n relationOrLabel: string;\n resetAction: string;\n applyAction: string;\n conditionLabel?: string;\n addConditionAction?: string;\n deleteConditionAction?: string;\n}\n\n/** 通用过滤面板请求。 */\nexport interface ReactFilterPanelRequest {\n columnTitle: string;\n anchorRect: { x: number; y: number; width: number; height: number };\n value: ReactFilterPanelValue;\n filterOptionImmediateApply?: boolean;\n options: ReactFilterPanelOption[];\n loadOptions?: (\n signal: AbortSignal,\n ) => ReactFilterPanelOption[] | Promise<ReactFilterPanelOption[]>;\n texts: ReactFilterPanelTexts;\n onApply: (value: ReactFilterPanelValue) => void;\n onReset: () => void;\n onClose: () => void;\n}\n\nconst operators: Array<{ label: string; value: ReactFilterConditionOperator }> = [\n { label: \"不筛选\", value: \"none\" }, { label: \"等于\", value: \"eq\" },\n { label: \"不等于\", value: \"neq\" }, { label: \"大于\", value: \"gt\" },\n { label: \"大于等于\", value: \"gte\" }, { label: \"小于\", value: \"lt\" },\n { label: \"小于等于\", value: \"lte\" }, { label: \"区间\", value: \"between\" },\n { label: \"不在区间\", value: \"notBetween\" }, { label: \"开头是\", value: \"startsWith\" },\n { label: \"开头不是\", value: \"notStartsWith\" }, { label: \"结尾是\", value: \"endsWith\" },\n { label: \"结尾不是\", value: \"notEndsWith\" }, { label: \"包含\", value: \"includes\" },\n { label: \"不包含\", value: \"notIncludes\" }, { label: \"为空\", value: \"blank\" },\n { label: \"不为空\", value: \"notBlank\" },\n];\n\n/** ListTable 与 PivotTable 共用的过滤面板视图。 */\nexport function ReactFilterPanel(props: { request: ReactFilterPanelRequest | null }) {\n const { request } = props;\n const [draft, setDraft] = useState<ReactFilterPanelValue | null>(() => createDraft(request?.value));\n const [tab, setTab] = useState<\"value\" | \"condition\">(resolveTab(request?.value));\n const [options, setOptions] = useState(request?.options ?? []);\n const [loading, setLoading] = useState(Boolean(request?.loadOptions));\n const conditionListRef = useRef<HTMLDivElement | null>(null);\n const [conditionListOverflowing, setConditionListOverflowing] = useState(false);\n\n useEffect(() => {\n setDraft(createDraft(request?.value));\n setTab(resolveTab(request?.value));\n setOptions(request?.options ?? []);\n setLoading(Boolean(request?.loadOptions));\n }, [request]);\n\n useLayoutEffect(() => {\n const element = conditionListRef.current;\n if (!element || tab !== \"condition\") {\n setConditionListOverflowing(false);\n return;\n }\n const measure = () => setConditionListOverflowing(element.scrollHeight > element.clientHeight + 1);\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [draft?.conditions, tab]);\n useEffect(() => {\n if (!request?.loadOptions) return;\n const controller = new AbortController();\n setLoading(true);\n void Promise.resolve(request.loadOptions(controller.signal)).then((items) => {\n if (!controller.signal.aborted) {\n setOptions(items);\n setLoading(false);\n }\n }).catch(() => {\n if (!controller.signal.aborted) {\n setOptions([]);\n setLoading(false);\n }\n });\n return () => controller.abort();\n }, [request]);\n\n const visibleOptions = useMemo(() => {\n const values = options.filter((item) => item.kind !== \"all\");\n const keyword = draft?.keyword.trim().toLowerCase() ?? \"\";\n if (!keyword) return values;\n return values.filter((item) => {\n const label = item.label.toLowerCase();\n const value = item.value.toLowerCase();\n return draft?.searchExact ? label === keyword || value === keyword : label.includes(keyword) || value.includes(keyword);\n });\n }, [draft?.keyword, draft?.searchExact, options]);\n\n if (!request || !draft) return null;\n const selected = new Set(draft.selectedKeys ?? []);\n const visibleKeys = visibleOptions.map((item) => item.value);\n const selectedCount = visibleKeys.filter((value) => selected.has(value)).length;\n const allChecked = visibleKeys.length > 0 && selectedCount === visibleKeys.length;\n const allCount = request.options.find((item) => item.kind === \"all\")?.count ??\n visibleOptions.filter((item) => item.kind === \"value\").reduce((sum, item) => sum + item.count, 0);\n const update = (patch: Partial<ReactFilterPanelValue>) =>\n setDraft((current) => ({ ...(current ?? request.value), ...patch }));\n const updateConditions = (conditions: ReactFilterPanelCondition[]) => {\n const first = conditions[0] ?? createEmptyCondition();\n const second = conditions[1] ?? createEmptyCondition();\n update({\n conditions,\n filterType: \"condition\",\n conditionOperator: first.operator,\n conditionValue: first.value ?? \"\",\n conditionSecondValue: first.secondValue ?? \"\",\n secondConditionOperator: second.operator,\n secondConditionValue: second.value ?? \"\",\n secondConditionSecondValue: second.secondValue ?? \"\",\n });\n };\n const toggle = (keys: string[], checked: boolean) => {\n const next = new Set(draft.selectedKeys ?? []);\n keys.forEach((key) => checked ? next.add(key) : next.delete(key));\n const value = { ...draft, filterType: \"value\" as const, selectedKeys: Array.from(next) };\n setDraft(value);\n if (request.filterOptionImmediateApply) request.onApply(value);\n };\n const apply = () => {\n request.onApply({ ...draft, filterType: tab });\n request.onClose();\n };\n\n return (\n <ReactPopup open anchorRect={request.anchorRect} offset={8} matchAnchorWidth={false}\n minWidth={300} onOpenChange={(open) => { if (!open) request.onClose(); }}\n surfaceStyle={{ width: 300, height: 460, padding: 12, overflow: \"hidden\", boxSizing: \"border-box\" }}>\n <div style={{ height: \"100%\", display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <div style={{ fontSize: 14, fontWeight: 600, color: \"#111827\" }}>\n {request.texts.title} · {request.columnTitle}\n </div>\n <div style={{ display: \"flex\", gap: 8, marginTop: 12 }}>\n <button type=\"button\" style={tabStyle(tab === \"value\")} onClick={() => { setTab(\"value\"); update({ filterType: \"value\" }); }}>\n {request.texts.valueFilterTab}\n </button>\n <button type=\"button\" style={tabStyle(tab === \"condition\")} onClick={() => { setTab(\"condition\"); update({ filterType: \"condition\" }); }}>\n {request.texts.conditionFilterTab}\n </button>\n </div>\n {tab === \"value\" ? (\n <div style={{ display: \"grid\", gap: 12, marginTop: 12, minHeight: 290, alignContent: \"start\", flex: \"1 1 auto\" }}>\n <ReactInput value={draft.keyword} placeholder={request.texts.searchPlaceholder}\n onChange={(event) => update({ keyword: event.target.value, filterType: \"value\" })}\n onPressEnter={apply} style={{ width: \"100%\" }} />\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12, paddingBottom: 8, borderBottom: \"1px solid #f0f0f0\" }}>\n <label style={checkLabelStyle}>\n <ReactCheckbox checked={allChecked} indeterminate={selectedCount > 0 && !allChecked}\n onChange={(event) => toggle(visibleKeys, !!event.target.checked)} />\n <span>{request.texts.allOptionLabel} ({allCount})</span>\n </label>\n <label style={checkLabelStyle}>\n <ReactCheckbox checked={!!draft.searchExact}\n onChange={(event) => update({ searchExact: !!event.target.checked, filterType: \"value\" })} />\n <span>{request.texts.exactToggleLabel}</span>\n </label>\n </div>\n <div style={{ minHeight: 232, borderRadius: 8, border: \"1px solid #f0f0f0\", background: \"#fafafa\", padding: 6 }}>\n {loading || visibleOptions.length === 0 ? (\n <div style={{ minHeight: 220, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", color: \"#9ca3af\", fontSize: 12 }}>\n {loading ? request.texts.loadingOptions : request.texts.emptyOptions}\n </div>\n ) : (\n <ReactVirtualList items={visibleOptions} height={Math.min(220, visibleOptions.length * 40)} itemHeight={40}\n itemKey={(item) => item.value} renderItem={(item, _index, meta) => (\n <label key={item.value} className=\"react-list-table-filter-option\"\n style={{ ...optionStyle, ...meta.style }}>\n <ReactCheckbox checked={selected.has(item.value)}\n onChange={(event) => toggle([item.value], !!event.target.checked)} />\n <span title={optionLabel(item, request.texts)} style={optionTextStyle}>{optionLabel(item, request.texts)}</span>\n <span style={{ color: \"#9ca3af\", fontSize: 12 }}>{item.count}</span>\n </label>\n )} />\n )}\n </div>\n </div>\n ) : (\n <div style={{ marginTop: 12, display: \"flex\", flexDirection: \"column\", gap: 10, minHeight: 0, flex: \"1 1 auto\" }}>\n <div ref={conditionListRef} className=\"react-filter-panel-condition-list\"\n style={{ ...conditionListStyle, overflowY: conditionListOverflowing ? \"auto\" : \"hidden\" }}>\n {(draft.conditions ?? []).map((condition, index, conditions) => (\n <Fragment key={index}>\n {index > 0 ? <div className=\"react-filter-panel-condition-relation\" style={conditionRowStyle}>\n <span style={inlineLabelStyle}>{request.texts.relationLabel}</span>\n <ReactSelect value={draft.conditionRelation === \"or\" ? \"or\" : \"and\"} allowClear={false}\n options={[{ label: request.texts.relationAndLabel, value: \"and\" }, { label: request.texts.relationOrLabel, value: \"or\" }]}\n onChange={(value) => update({ conditionRelation: value as \"and\" | \"or\", filterType: \"condition\" })} style={{ width: \"100%\" }} />\n <span />\n </div> : null}\n <ConditionEditor label={resolveConditionLabel(request.texts, index)} condition={condition}\n texts={request.texts} canDelete={conditions.length > 1}\n onDelete={() => updateConditions(conditions.filter((_item, itemIndex) => itemIndex !== index))}\n onChange={(nextCondition) => updateConditions(conditions.map((item, itemIndex) => itemIndex === index ? nextCondition : item))}\n onSubmit={apply} />\n </Fragment>\n ))}\n </div>\n </div>\n )}\n <div className=\"react-filter-panel-footer\" style={footerStyle}>\n {tab === \"condition\" ? <button type=\"button\" style={addConditionStyle}\n onClick={() => updateConditions([...(draft.conditions ?? []), createEmptyCondition()])}>\n + {request.texts.addConditionAction ?? \"新增条件\"}\n </button> : null}\n <div className=\"react-filter-panel-footer-actions\" style={footerActionsStyle}>\n <button type=\"button\" style={actionStyle(false)} onClick={() => { request.onReset(); request.onClose(); }}>{request.texts.resetAction}</button>\n <button type=\"button\" style={actionStyle(true)} onClick={apply}>{request.texts.applyAction}</button>\n </div>\n </div>\n </div>\n </ReactPopup>\n );\n}\n\nfunction ConditionEditor(props: {\n label: string;\n condition: ReactFilterPanelCondition;\n texts: ReactFilterPanelTexts;\n canDelete: boolean;\n onDelete: () => void;\n onChange: (condition: ReactFilterPanelCondition) => void;\n onSubmit: () => void;\n}) {\n const hidesValue = [\"none\", \"blank\", \"notBlank\"].includes(props.condition.operator);\n const needsSecond = [\"between\", \"notBetween\"].includes(props.condition.operator);\n return <div style={conditionEditorStyle}>\n <div className=\"react-filter-panel-condition-row\" style={conditionRowStyle}>\n <span style={inlineLabelStyle}>{props.label}</span>\n <ReactSelect value={props.condition.operator} options={operators} allowClear={false}\n onChange={(value) => props.onChange({ ...props.condition, operator: value as ReactFilterConditionOperator })} style={{ width: \"100%\" }} />\n {props.canDelete ? <button type=\"button\" title={`${props.texts.deleteConditionAction ?? \"删除条件\"} ${props.label}`}\n aria-label={`${props.texts.deleteConditionAction ?? \"删除条件\"} ${props.label}`} style={deleteConditionStyle} onClick={props.onDelete}>×</button> : <span />}\n </div>\n {hidesValue ? null : <div style={conditionValueStyle}>\n <ReactInput value={props.condition.value ?? \"\"} placeholder={props.texts.firstValuePlaceholder} onPressEnter={props.onSubmit}\n onChange={(event) => props.onChange({ ...props.condition, value: event.target.value })} style={{ width: \"100%\" }} />\n {needsSecond ? <ReactInput value={props.condition.secondValue ?? \"\"} placeholder={props.texts.secondValuePlaceholder} onPressEnter={props.onSubmit}\n onChange={(event) => props.onChange({ ...props.condition, secondValue: event.target.value })} style={{ width: \"100%\" }} /> : null}\n </div>}\n </div>;\n}\n\nfunction createDraft(value?: ReactFilterPanelValue | null) {\n if (!value) return null;\n return { ...value, conditions: resolveDraftConditions(value) };\n}\nfunction resolveDraftConditions(value: ReactFilterPanelValue) {\n if (value.conditions?.length) return value.conditions.map((condition) => ({ ...condition }));\n return [\n { operator: value.conditionOperator ?? \"none\", value: value.conditionValue ?? \"\", secondValue: value.conditionSecondValue ?? \"\" },\n { operator: value.secondConditionOperator ?? \"none\", value: value.secondConditionValue ?? \"\", secondValue: value.secondConditionSecondValue ?? \"\" },\n ] satisfies ReactFilterPanelCondition[];\n}\nfunction createEmptyCondition(): ReactFilterPanelCondition {\n return { operator: \"none\", value: \"\", secondValue: \"\" };\n}\nfunction resolveConditionLabel(texts: ReactFilterPanelTexts, index: number) {\n if (index === 0) return texts.firstConditionLabel;\n if (index === 1) return texts.secondConditionLabel;\n return `${texts.conditionLabel ?? \"条件\"} ${index + 1}`;\n}\nfunction resolveTab(value?: ReactFilterPanelValue | null) {\n return value?.filterType === \"condition\" || value?.conditionOperator && value.conditionOperator !== \"none\" ? \"condition\" : \"value\";\n}\nfunction optionLabel(item: ReactFilterPanelOption, texts: ReactFilterPanelTexts) {\n if (item.kind === \"blank\") return texts.blankOptionLabel;\n if (item.kind === \"notBlank\") return texts.notBlankOptionLabel;\n return item.label;\n}\nconst checkLabelStyle: CSSProperties = { display: \"inline-flex\", alignItems: \"center\", gap: 8, color: \"#374151\", fontSize: 14 };\nconst optionStyle: CSSProperties = { display: \"flex\", alignItems: \"center\", gap: 8, minHeight: 40, padding: \"4px 8px\", borderRadius: 6, color: \"#374151\", fontSize: 14, cursor: \"pointer\", boxSizing: \"border-box\" };\nconst optionTextStyle: CSSProperties = { display: \"block\", flex: \"1 1 0\", width: 0, minWidth: 0, overflow: \"hidden\", whiteSpace: \"nowrap\", textOverflow: \"ellipsis\" };\nconst conditionListStyle: CSSProperties = { display: \"grid\", gap: 8, minHeight: 0, flex: \"1 1 auto\", alignContent: \"start\", paddingRight: 3 };\nconst conditionEditorStyle: CSSProperties = { display: \"grid\", gap: 8 };\nconst conditionRowStyle: CSSProperties = { display: \"grid\", gridTemplateColumns: \"56px minmax(0, 1fr) 22px\", alignItems: \"center\", gap: 8 };\nconst inlineLabelStyle: CSSProperties = { color: \"#6b7280\", fontSize: 12, whiteSpace: \"nowrap\" };\nconst conditionValueStyle: CSSProperties = { display: \"grid\", gap: 8, marginLeft: 64, marginRight: 30 };\nconst addConditionStyle: CSSProperties = { height: 32, padding: \"0 10px\", border: \"1px solid #91caff\", borderRadius: 6, background: \"#f0f7ff\", color: \"#1677ff\", cursor: \"pointer\", whiteSpace: \"nowrap\" };\nconst deleteConditionStyle: CSSProperties = { width: 22, height: 22, padding: 0, border: 0, borderRadius: 4, background: \"transparent\", color: \"#9ca3af\", fontSize: 18, lineHeight: \"20px\", cursor: \"pointer\" };\nconst footerStyle: CSSProperties = { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 8 };\nconst footerActionsStyle: CSSProperties = { display: \"flex\", gap: 8, marginLeft: \"auto\" };\nfunction tabStyle(active: boolean): CSSProperties { return { flex: 1, height: 32, border: active ? \"1px solid #1677ff\" : \"1px solid #d9d9d9\", borderRadius: 6, background: active ? \"#e6f4ff\" : \"#fff\", color: active ? \"#1677ff\" : \"#374151\", cursor: \"pointer\" }; }\nfunction actionStyle(primary: boolean): CSSProperties { return { minWidth: 72, height: 32, padding: \"0 12px\", borderRadius: 6, border: primary ? \"1px solid #1677ff\" : \"1px solid #d9d9d9\", background: primary ? \"#1677ff\" : \"#fff\", color: primary ? \"#fff\" : \"#374151\", cursor: \"pointer\" }; }\n","import styleInject from '#style-inject';styleInject(\".canvas-react-color-wrap {\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n min-height: 0;\\n box-sizing: border-box;\\n}\\n.canvas-react-color {\\n display: flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n min-height: 0;\\n box-sizing: border-box;\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\\n cursor: pointer;\\n}\\n.canvas-react-color:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-color-open,\\n.canvas-react-color:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-color-disabled {\\n color: #9ca3af;\\n background: var(--canvas-react-color-bg-soft);\\n cursor: not-allowed;\\n}\\n.canvas-react-color-preview {\\n flex: 0 0 auto;\\n width: calc(24px * var(--canvas-react-content-zoom, 1));\\n height: calc(24px * var(--canvas-react-content-zoom, 1));\\n margin-left: 3px;\\n box-sizing: border-box;\\n border: 1px solid rgba(0, 0, 0, 0.12);\\n border-radius: 4px;\\n}\\n.canvas-react-color-input-wrap {\\n flex: 1;\\n min-width: 0;\\n height: 100%;\\n min-height: 0;\\n border: 0;\\n box-shadow: none;\\n}\\n.canvas-react-color .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-color-input-wrap:hover,\\n.canvas-react-color-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-color-input {\\n cursor: pointer;\\n text-transform: uppercase;\\n}\\n.canvas-react-color-arrow {\\n flex: 0 0 auto;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n margin-right: var(--canvas-react-control-padding-inline, 11px);\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: rotate(45deg) translateY(-2px);\\n transition: transform 0.18s ease;\\n}\\n.canvas-react-color-arrow-open {\\n transform: rotate(225deg) translate(-1px, -1px);\\n}\\n.canvas-react-color-dropdown {\\n overflow: hidden;\\n}\\n.canvas-react-color-panel {\\n padding: 12px;\\n box-sizing: border-box;\\n}\\n.canvas-react-color-saturation {\\n position: relative;\\n height: 150px;\\n overflow: hidden;\\n border-radius: 6px;\\n cursor: crosshair;\\n background-image:\\n linear-gradient(\\n to top,\\n #000,\\n transparent),\\n linear-gradient(\\n to right,\\n #fff,\\n transparent);\\n touch-action: none;\\n}\\n.canvas-react-color-saturation-thumb {\\n position: absolute;\\n width: 12px;\\n height: 12px;\\n border: 2px solid #fff;\\n border-radius: 50%;\\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.28), 0 1px 3px rgba(0, 0, 0, 0.28);\\n transform: translate(-50%, -50%);\\n pointer-events: none;\\n}\\n.canvas-react-color-controls {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n margin-top: 12px;\\n}\\n.canvas-react-color-current {\\n flex: 0 0 28px;\\n height: 28px;\\n box-sizing: border-box;\\n border: 1px solid rgba(0, 0, 0, 0.12);\\n border-radius: 50%;\\n}\\n.canvas-react-color-hue {\\n width: 100%;\\n height: 12px;\\n margin: 0;\\n appearance: none;\\n border-radius: 999px;\\n background:\\n linear-gradient(\\n to right,\\n #f00,\\n #ff0,\\n #0f0,\\n #0ff,\\n #00f,\\n #f0f,\\n #f00);\\n cursor: pointer;\\n}\\n.canvas-react-color-hue::-webkit-slider-thumb {\\n width: 14px;\\n height: 14px;\\n appearance: none;\\n border: 2px solid #fff;\\n border-radius: 50%;\\n background: transparent;\\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.28);\\n}\\n.canvas-react-color-value-row {\\n display: grid;\\n grid-template-columns: 36px 1fr;\\n align-items: center;\\n gap: 8px;\\n margin-top: 12px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-color-value-row .canvas-react-input-affix-wrapper {\\n height: 28px;\\n}\\n.canvas-react-color-presets {\\n display: grid;\\n grid-template-columns: repeat(8, 20px);\\n gap: 7px;\\n margin-top: 12px;\\n}\\n.canvas-react-color-preset {\\n width: 20px;\\n height: 20px;\\n padding: 0;\\n box-sizing: border-box;\\n border: 1px solid rgba(0, 0, 0, 0.12);\\n border-radius: 4px;\\n cursor: pointer;\\n transition: transform 0.16s ease, box-shadow 0.16s ease;\\n}\\n.canvas-react-color-preset:hover {\\n transform: scale(1.12);\\n}\\n.canvas-react-color-preset-selected {\\n box-shadow: 0 0 0 2px #fff, 0 0 0 3px var(--canvas-react-color-primary);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"./style.css\";\r\n\r\nconst DEFAULT_COLOR = \"#1677ff\";\r\nconst PRESET_COLORS = [\r\n \"#ff4d4f\",\r\n \"#fa8c16\",\r\n \"#fadb14\",\r\n \"#52c41a\",\r\n \"#13c2c2\",\r\n \"#1677ff\",\r\n \"#2f54eb\",\r\n \"#722ed1\",\r\n \"#eb2f96\",\r\n \"#000000\",\r\n \"#8c8c8c\",\r\n \"#ffffff\",\r\n];\r\n\r\nexport interface ReactColorPickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n /** 当前颜色值。 */\r\n value?: string;\r\n /** 颜色变化回调,返回标准六位 HEX。 */\r\n onChange?: (value: string) => void;\r\n /** 弹层类名。 */\r\n popupClassName?: string;\r\n /** 预设颜色。 */\r\n presets?: string[];\r\n}\r\n\r\n/**\r\n * AntD 风格颜色选择器。\r\n */\r\nexport const ReactColorPicker = forwardRef<\r\n HTMLInputElement,\r\n ReactColorPickerProps\r\n>(function ReactColorPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择颜色\",\r\n popupClassName,\r\n presets = PRESET_COLORS,\r\n style,\r\n value,\r\n showArrow = true,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const resolvedValue = normalizeHexColor(value) ?? DEFAULT_COLOR;\r\n const [open, setOpen] = useState(false);\r\n const [draftValue, setDraftValue] = useState(resolvedValue);\r\n const [hexText, setHexText] = useState(resolvedValue.toUpperCase());\r\n const hsv = useMemo(() => hexToHsv(draftValue), [draftValue]);\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n setDraftValue(resolvedValue);\r\n setHexText(resolvedValue.toUpperCase());\r\n }, [resolvedValue]);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n const updateValue = (nextValue: string) => {\r\n setDraftValue(nextValue);\r\n setHexText(nextValue.toUpperCase());\r\n onChange?.(nextValue);\r\n };\r\n\r\n const updateSaturation = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n const rect = event.currentTarget.getBoundingClientRect();\r\n const saturation = clamp((event.clientX - rect.left) / rect.width, 0, 1);\r\n const brightness = clamp(\r\n 1 - (event.clientY - rect.top) / rect.height,\r\n 0,\r\n 1,\r\n );\r\n updateValue(hsvToHex({ ...hsv, saturation, brightness }));\r\n };\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-color-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color`,\r\n open && `${REACT_COMPONENT_PREFIX}-color-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-color-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={() => {\r\n if (!disabled) {\r\n inputRef.current?.focus();\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-color-preview`}\r\n style={{ backgroundColor: draftValue }}\r\n />\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={value ? draftValue.toUpperCase() : \"\"}\r\n placeholder={placeholder}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-color-input-wrap`}\r\n className={`${REACT_COMPONENT_PREFIX}-color-input`}\r\n onFocus={(event) => {\r\n setOpen(true);\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (!event.defaultPrevented && event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-color-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={240}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 240 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div ref={popupRef} className={`${REACT_COMPONENT_PREFIX}-color-panel`}>\r\n <div\r\n className={`${REACT_COMPONENT_PREFIX}-color-saturation`}\r\n style={{ backgroundColor: `hsl(${hsv.hue} 100% 50%)` }}\r\n onPointerDown={(event) => {\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n updateSaturation(event);\r\n }}\r\n onPointerMove={(event) => {\r\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\r\n updateSaturation(event);\r\n }\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-color-saturation-thumb`}\r\n style={{\r\n left: `${hsv.saturation * 100}%`,\r\n top: `${(1 - hsv.brightness) * 100}%`,\r\n backgroundColor: draftValue,\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-color-controls`}>\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-color-current`}\r\n style={{ backgroundColor: draftValue }}\r\n />\r\n <input\r\n className={`${REACT_COMPONENT_PREFIX}-color-hue`}\r\n type=\"range\"\r\n min={0}\r\n max={360}\r\n value={Math.round(hsv.hue)}\r\n aria-label=\"色相\"\r\n onChange={(event) => {\r\n updateValue(\r\n hsvToHex({ ...hsv, hue: Number(event.target.value) }),\r\n );\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-color-value-row`}>\r\n <span>HEX</span>\r\n <ReactInput\r\n value={hexText}\r\n allowClear={false}\r\n aria-label=\"HEX 颜色值\"\r\n onChange={(event) => {\r\n const nextText = event.target.value.toUpperCase();\r\n setHexText(nextText);\r\n const nextValue = normalizeHexColor(nextText);\r\n if (nextValue) {\r\n updateValue(nextValue);\r\n }\r\n }}\r\n onBlur={() => {\r\n setHexText(draftValue.toUpperCase());\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-color-presets`}>\r\n {presets.map((preset) => {\r\n const normalizedPreset = normalizeHexColor(preset);\r\n return normalizedPreset ? (\r\n <button\r\n type=\"button\"\r\n key={normalizedPreset}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-color-preset`,\r\n normalizedPreset === draftValue &&\r\n `${REACT_COMPONENT_PREFIX}-color-preset-selected`,\r\n )}\r\n style={{ backgroundColor: normalizedPreset }}\r\n title={normalizedPreset.toUpperCase()}\r\n onMouseDown={(event) => event.preventDefault()}\r\n onClick={() => updateValue(normalizedPreset)}\r\n />\r\n ) : null;\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\ninterface HsvColor {\r\n hue: number;\r\n saturation: number;\r\n brightness: number;\r\n}\r\n\r\n/**\r\n * 将 HEX 颜色转换为 HSV。\r\n */\r\nexport function hexToHsv(value: string): HsvColor {\r\n const normalized = normalizeHexColor(value) ?? DEFAULT_COLOR;\r\n const red = Number.parseInt(normalized.slice(1, 3), 16) / 255;\r\n const green = Number.parseInt(normalized.slice(3, 5), 16) / 255;\r\n const blue = Number.parseInt(normalized.slice(5, 7), 16) / 255;\r\n const max = Math.max(red, green, blue);\r\n const min = Math.min(red, green, blue);\r\n const delta = max - min;\r\n let hue = 0;\r\n if (delta > 0) {\r\n if (max === red) hue = 60 * (((green - blue) / delta) % 6);\r\n else if (max === green) hue = 60 * ((blue - red) / delta + 2);\r\n else hue = 60 * ((red - green) / delta + 4);\r\n }\r\n return {\r\n hue: hue < 0 ? hue + 360 : hue,\r\n saturation: max === 0 ? 0 : delta / max,\r\n brightness: max,\r\n };\r\n}\r\n\r\n/**\r\n * 将 HSV 颜色转换为标准六位 HEX。\r\n */\r\nexport function hsvToHex(color: HsvColor) {\r\n const hue = ((color.hue % 360) + 360) % 360;\r\n const chroma = color.brightness * color.saturation;\r\n const x = chroma * (1 - Math.abs(((hue / 60) % 2) - 1));\r\n const offset = color.brightness - chroma;\r\n const [red, green, blue] =\r\n hue < 60\r\n ? [chroma, x, 0]\r\n : hue < 120\r\n ? [x, chroma, 0]\r\n : hue < 180\r\n ? [0, chroma, x]\r\n : hue < 240\r\n ? [0, x, chroma]\r\n : hue < 300\r\n ? [x, 0, chroma]\r\n : [chroma, 0, x];\r\n return `#${[red, green, blue]\r\n .map((channel) =>\r\n Math.round((channel + offset) * 255)\r\n .toString(16)\r\n .padStart(2, \"0\"),\r\n )\r\n .join(\"\")}`;\r\n}\r\n\r\n/**\r\n * 规范化三位或六位 HEX 颜色。\r\n */\r\nexport function normalizeHexColor(value: unknown) {\r\n const text = String(value ?? \"\")\r\n .trim()\r\n .toLowerCase();\r\n if (/^#[0-9a-f]{6}$/.test(text)) {\r\n return text;\r\n }\r\n if (/^#[0-9a-f]{3}$/.test(text)) {\r\n return `#${text\r\n .slice(1)\r\n .split(\"\")\r\n .map((char) => `${char}${char}`)\r\n .join(\"\")}`;\r\n }\r\n return null;\r\n}\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-year-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-year {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-year:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-year-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-year-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-year-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-year .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-year-input-wrap:hover,\\n.canvas-react-year-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-year-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-year-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-year-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-year:hover .canvas-react-year-arrow,\\n.canvas-react-year-open .canvas-react-year-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-year-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-year-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-year:hover .canvas-react-year-clear,\\n.canvas-react-year-open .canvas-react-year-clear,\\n.canvas-react-year:focus-within .canvas-react-year-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-year:hover .canvas-react-year-actions-clearable .canvas-react-year-arrow,\\n.canvas-react-year-open .canvas-react-year-actions-clearable .canvas-react-year-arrow,\\n.canvas-react-year:focus-within .canvas-react-year-actions-clearable .canvas-react-year-arrow {\\n opacity: 0;\\n}\\n.canvas-react-year-clear-icon,\\n.canvas-react-year-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-year-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-year-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-year-dropdown {\\n padding: 0;\\n}\\n.canvas-react-year-panel {\\n overflow: hidden;\\n border-radius: 12px;\\n}\\n.canvas-react-year-header {\\n display: grid;\\n grid-template-columns: 40px 1fr 40px;\\n align-items: center;\\n height: 44px;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-year-title {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text);\\n font-size: 16px;\\n font-weight: 600;\\n line-height: 1;\\n text-align: center;\\n cursor: pointer;\\n transition: color 0.18s ease;\\n}\\n.canvas-react-year-title:hover {\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-year-nav {\\n position: relative;\\n height: 100%;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n cursor: pointer;\\n transition: color 0.18s ease, background-color 0.18s ease;\\n}\\n.canvas-react-year-nav:hover {\\n color: var(--canvas-react-color-primary);\\n background: rgba(22, 119, 255, 0.05);\\n}\\n.canvas-react-year-nav-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 7px;\\n height: 7px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transition: border-color 0.18s ease, transform 0.18s ease;\\n}\\n.canvas-react-year-nav:hover .canvas-react-year-nav-arrow {\\n border-color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-year-nav-arrow-left {\\n transform: translate(-42%, -50%) rotate(135deg);\\n}\\n.canvas-react-year-nav-arrow-right {\\n transform: translate(-58%, -50%) rotate(-45deg);\\n}\\n.canvas-react-year-grid {\\n display: grid;\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 8px 4px;\\n padding: 16px 12px 12px;\\n}\\n.canvas-react-year-cell {\\n height: 40px;\\n border: none;\\n border-radius: var(--canvas-react-radius-sm);\\n background: transparent;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n cursor: pointer;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-year-cell:hover {\\n background: var(--canvas-react-color-bg-hover);\\n}\\n.canvas-react-year-cell-selected {\\n background: var(--canvas-react-color-bg-active);\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n.canvas-react-year-cell-muted {\\n color: #c4c7cf;\\n}\\n\")","import styleInject from '#style-inject';styleInject(\"@import \\\"../month/style.css\\\";\\n.canvas-react-date-panel {\\n padding-bottom: 8px;\\n}\\n.canvas-react-date-weekdays,\\n.canvas-react-date-grid {\\n display: grid;\\n grid-template-columns: repeat(7, minmax(0, 1fr));\\n gap: 6px 4px;\\n padding: 0 12px;\\n}\\n.canvas-react-date-weekdays {\\n padding-top: 12px;\\n padding-bottom: 8px;\\n}\\n.canvas-react-date-weekday {\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n line-height: 1;\\n text-align: center;\\n}\\n.canvas-react-date-cell {\\n height: 36px;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDatePickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前日期值,格式为 YYYY-MM-DD。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 基础日期选择器。\r\n */\r\nexport const ReactDatePicker = forwardRef<HTMLInputElement, ReactDatePickerProps>(\r\n function ReactDatePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"date\" | \"month\" | \"year\" | \"decade\">(\"date\");\r\n const parsedValue = useMemo(() => parseDateValue(value), [value]);\r\n const [panelDate, setPanelDate] = useState(() => ({\r\n day: parsedValue?.day ?? 1,\r\n month: parsedValue?.month ?? new Date().getMonth() + 1,\r\n year: parsedValue?.year ?? new Date().getFullYear(),\r\n }));\r\n const yearPanelStart = useMemo(\r\n () => resolveDecadeStart(panelDate.year),\r\n [panelDate.year],\r\n );\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),\r\n [yearPanelStart],\r\n );\r\n const decadeItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10),\r\n [decadePanelStart],\r\n );\r\n const calendarDays = useMemo(\r\n () => buildCalendarDays(panelDate.year, panelDate.month),\r\n [panelDate.month, panelDate.year],\r\n );\r\n const displayValue =\r\n parsedValue == null\r\n ? \"\"\r\n : `${parsedValue.year}-${String(parsedValue.month).padStart(2, \"0\")}-${String(parsedValue.day).padStart(2, \"0\")}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"date\");\r\n setPanelDate({\r\n day: parsedValue?.day ?? 1,\r\n month: parsedValue?.month ?? new Date().getMonth() + 1,\r\n year: parsedValue?.year ?? new Date().getFullYear(),\r\n });\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={296}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 296 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-panel`,\r\n `${REACT_COMPONENT_PREFIX}-date-panel`,\r\n )}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, -1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year - 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year - 10 };\r\n }\r\n return { ...prev, year: prev.year - 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"date\") {\r\n setMode(\"month\");\r\n return;\r\n }\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"date\"\r\n ? `${panelDate.year}年${String(panelDate.month).padStart(2, \"0\")}月`\r\n : mode === \"month\"\r\n ? `${panelDate.year}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, 1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year + 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year + 10 };\r\n }\r\n return { ...prev, year: prev.year + 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n {mode === \"date\" ? (\r\n <>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div\r\n key={label}\r\n className={`${REACT_COMPONENT_PREFIX}-date-weekday`}\r\n >\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {calendarDays.map((dayItem) => {\r\n const selected =\r\n parsedValue?.year === dayItem.year &&\r\n parsedValue?.month === dayItem.month &&\r\n parsedValue?.day === dayItem.day;\r\n return (\r\n <button\r\n key={`${dayItem.year}-${dayItem.month}-${dayItem.day}`}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(\r\n `${dayItem.year}-${String(dayItem.month).padStart(2, \"0\")}-${String(dayItem.day).padStart(2, \"0\")}`,\r\n );\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {dayItem.day}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n ) : (\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected =\r\n parsedValue?.year === panelDate.year &&\r\n parsedValue.month === Number(month);\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => ({\r\n ...prev,\r\n month: Number(month),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart && yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === panelDate.year;\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => ({\r\n ...prev,\r\n year: yearItem,\r\n }));\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart &&\r\n yearPanelStart <= decadeStart + 9;\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelDate((prev) => ({\r\n ...prev,\r\n year: decadeStart,\r\n }));\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseDateValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n if (\r\n !Number.isInteger(year) ||\r\n !Number.isInteger(month) ||\r\n !Number.isInteger(day) ||\r\n month < 1 ||\r\n month > 12\r\n ) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return { day, month, year };\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth({ year, month, day: 1 }, -1);\r\n const nextMonthDate = shiftMonth({ year, month, day: 1 }, 1);\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: Array<{\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n }> = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(\r\n value: { year: number; month: number; day: number },\r\n delta: number,\r\n) {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n return {\r\n day: 1,\r\n month: date.getMonth() + 1,\r\n year: date.getFullYear(),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n@import \\\"../date/style.css\\\";\\n@import \\\"../time/style.css\\\";\\n.canvas-react-date-range-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-date-range {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-date-range-control {\\n position: relative;\\n}\\n.canvas-react-date-range:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-date-range-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-date-range-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-date-range-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-date-range .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-date-range-input-wrap:hover,\\n.canvas-react-date-range-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-date-range-hidden-input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n border: 0;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-date-range-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-date-range-values {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-date-range-value {\\n position: relative;\\n display: flex;\\n flex: 1 1 0;\\n flex-direction: row;\\n justify-content: flex-start;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: 1;\\n text-align: left;\\n box-sizing: border-box;\\n cursor: pointer;\\n}\\n.canvas-react-date-range-value::after {\\n position: absolute;\\n right: 0;\\n bottom: -1px;\\n left: 0;\\n height: 2px;\\n border-radius: 999px;\\n background: transparent;\\n content: \\\"\\\";\\n transition: background-color 0.18s ease;\\n}\\n.canvas-react-date-range-value-active::after {\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-date-range-value-text {\\n display: block;\\n width: 100%;\\n min-width: 0;\\n height: auto;\\n padding: 0;\\n border: none;\\n outline: none;\\n overflow: hidden;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n@supports (height: 1lh) {\\n .canvas-react-date-range-value-text {\\n height: 1lh;\\n }\\n}\\n.canvas-react-date-range-value-text::placeholder {\\n color: inherit;\\n opacity: 1;\\n}\\n.canvas-react-date-range-separator {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n padding: 0 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-date-range-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-date-range-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-date-range:hover .canvas-react-date-range-arrow,\\n.canvas-react-date-range-open .canvas-react-date-range-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-date-range-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-date-range-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-date-range:hover .canvas-react-date-range-clear,\\n.canvas-react-date-range-open .canvas-react-date-range-clear,\\n.canvas-react-date-range:focus-within .canvas-react-date-range-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-date-range-clear-icon,\\n.canvas-react-date-range-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-date-range-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-date-range-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-date-range-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-date-range-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n.canvas-react-date-range-calendars {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-date-range-calendar {\\n display: flex;\\n flex-direction: column;\\n min-width: 0;\\n min-height: 0;\\n}\\n.canvas-react-date-range-calendar + .canvas-react-date-range-calendar {\\n border-left: 1px solid var(--canvas-react-color-split, #f0f0f0);\\n}\\n.canvas-react-date-range-calendar .canvas-react-year-title {\\n cursor: default;\\n}\\n.canvas-react-date-range-calendar .canvas-react-year-nav:disabled {\\n cursor: default;\\n opacity: 0;\\n}\\n.canvas-react-date-range-calendar .canvas-react-date-grid {\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-date-range-cell {\\n position: relative;\\n border-radius: 0;\\n}\\n.canvas-react-date-range-cell.canvas-react-year-cell-selected {\\n background: rgba(22, 119, 255, 0.12);\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n.canvas-react-date-range-cell::before {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n background: transparent;\\n content: \\\"\\\";\\n}\\n.canvas-react-date-range-cell-in-range {\\n background: rgba(22, 119, 255, 0.12);\\n}\\n.canvas-react-date-range-cell-in-range::before {\\n background: transparent;\\n}\\n.canvas-react-date-range-cell-range-start {\\n border-top-left-radius: var(--canvas-react-radius-sm);\\n border-bottom-left-radius: var(--canvas-react-radius-sm);\\n}\\n.canvas-react-date-range-cell-range-start::before {\\n left: 0;\\n}\\n.canvas-react-date-range-cell-range-end {\\n border-top-right-radius: var(--canvas-react-radius-sm);\\n border-bottom-right-radius: var(--canvas-react-radius-sm);\\n}\\n.canvas-react-date-range-cell-range-end::before {\\n right: 0;\\n}\\n.canvas-react-date-range-cell-range-start.canvas-react-date-range-cell-range-end {\\n border-radius: var(--canvas-react-radius-sm);\\n}\\n.canvas-react-date-range-cell-range-start.canvas-react-date-range-cell-range-end::before {\\n left: 0;\\n right: 0;\\n}\\n.canvas-react-date-range-cell-text {\\n position: relative;\\n z-index: 1;\\n}\\n.canvas-react-date-range-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 12px;\\n padding: 8px 4px 4px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport type { ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDateRangePickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 当前日期区间值,格式为 `[开始日期, 结束日期]`。\r\n */\r\n value?: [string, string];\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: [string, string]) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 区间分隔符。\r\n */\r\n rangeSeparator?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 日期区间选择器。\r\n */\r\nexport const ReactDateRangePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactDateRangePickerProps\r\n>(function ReactDateRangePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期区间\",\r\n popupClassName,\r\n rangeSeparator = \" ~ \",\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const startInputRef = useRef<HTMLInputElement | null>(null);\r\n const endInputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [activePart, setActivePart] = useState<\"start\" | \"end\">(\"start\");\r\n const [draftRange, setDraftRange] = useState(() =>\r\n parseDateRangeValue(value, rangeSeparator),\r\n );\r\n const [hoverDate, setHoverDate] = useState<string | null>(null);\r\n const [leftPanel, setLeftPanel] = useState(() =>\r\n resolveInitialPanelMonth(parseDateRangeValue(value, rangeSeparator)),\r\n );\r\n const rightPanel = useMemo(() => shiftMonth(leftPanel, 1), [leftPanel]);\r\n const leftCalendarDays = useMemo(\r\n () => buildCalendarDays(leftPanel.year, leftPanel.month),\r\n [leftPanel.month, leftPanel.year],\r\n );\r\n const rightCalendarDays = useMemo(\r\n () => buildCalendarDays(rightPanel.year, rightPanel.month),\r\n [rightPanel.month, rightPanel.year],\r\n );\r\n const showClear =\r\n allowClear &&\r\n !disabled &&\r\n (draftRange.start.length > 0 || draftRange.end.length > 0);\r\n\r\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n startInputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n }, [rangeSeparator, value]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-date-range-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range`,\r\n `${REACT_COMPONENT_PREFIX}-date-range-control`,\r\n open && `${REACT_COMPONENT_PREFIX}-date-range-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-date-range-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-date-range-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-values`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-value`,\r\n activePart === \"start\" &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"start\");\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n startInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n {...restProps}\r\n ref={startInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.start}\r\n placeholder=\"YYYY-MM-DD\"\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"start\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n <span className={`${REACT_COMPONENT_PREFIX}-date-range-separator`}>\r\n {rangeSeparator.trim()}\r\n </span>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-value`,\r\n activePart === \"end\" &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"end\");\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n ref={endInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.end}\r\n placeholder=\"YYYY-MM-DD\"\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"end\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n const nextRange = parseDateRangeValue(value, rangeSeparator);\r\n setDraftRange(nextRange);\r\n setLeftPanel(resolveInitialPanelMonth(nextRange));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n </div>\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-actions`,\r\n showClear &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.([\"\", \"\"]);\r\n startInputRef.current?.blur();\r\n endInputRef.current?.blur();\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-clear-icon`}\r\n />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-date-range-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={616}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-date-range-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 616 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-calendars`}>\r\n <DateRangeCalendar\r\n monthDate={leftPanel}\r\n showPrev\r\n showNext={false}\r\n startValue={draftRange.start}\r\n endValue={draftRange.end}\r\n hoverValue={hoverDate}\r\n days={leftCalendarDays}\r\n onPrev={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, -1));\r\n }}\r\n onNext={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, 1));\r\n }}\r\n onHover={setHoverDate}\r\n onSelect={(nextDate) => {\r\n setDraftRange((prev) =>\r\n resolveNextRange(prev, nextDate, activePart),\r\n );\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n }\r\n }}\r\n />\r\n <DateRangeCalendar\r\n monthDate={rightPanel}\r\n showPrev={false}\r\n showNext\r\n startValue={draftRange.start}\r\n endValue={draftRange.end}\r\n hoverValue={hoverDate}\r\n days={rightCalendarDays}\r\n onPrev={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, -1));\r\n }}\r\n onNext={() => {\r\n setLeftPanel((prev) => shiftMonth(prev, 1));\r\n }}\r\n onHover={setHoverDate}\r\n onSelect={(nextDate) => {\r\n setDraftRange((prev) =>\r\n resolveNextRange(prev, nextDate, activePart),\r\n );\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n }\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n const today = formatDateOnly(new Date());\r\n setDraftRange((prev) =>\r\n resolveNextRange(prev, today, activePart),\r\n );\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n }\r\n }}\r\n >\r\n 今天\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (!draftRange.start || !draftRange.end) {\r\n return;\r\n }\r\n onChange?.([draftRange.start, draftRange.end]);\r\n setOpen(false);\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\nfunction DateRangeCalendar(props: {\r\n monthDate: { month: number; year: number };\r\n days: CalendarDayItem[];\r\n startValue: string;\r\n endValue: string;\r\n hoverValue: string | null;\r\n showPrev: boolean;\r\n showNext: boolean;\r\n onPrev: () => void;\r\n onNext: () => void;\r\n onHover: (value: string | null) => void;\r\n onSelect: (value: string) => void;\r\n}) {\r\n const {\r\n days,\r\n endValue,\r\n hoverValue,\r\n monthDate,\r\n onHover,\r\n onNext,\r\n onPrev,\r\n onSelect,\r\n showNext,\r\n showPrev,\r\n startValue,\r\n } = props;\r\n\r\n return (\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-range-calendar`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一月\"\r\n disabled={!showPrev}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (showPrev) {\r\n onPrev();\r\n }\r\n }}\r\n >\r\n {showPrev ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n ) : null}\r\n </button>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-title`}>\r\n {monthDate.year}年{String(monthDate.month).padStart(2, \"0\")}月\r\n </div>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一月\"\r\n disabled={!showNext}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (showNext) {\r\n onNext();\r\n }\r\n }}\r\n >\r\n {showNext ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n ) : null}\r\n </button>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div key={label} className={`${REACT_COMPONENT_PREFIX}-date-weekday`}>\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {days.map((dayItem) => {\r\n const dateValue = `${dayItem.year}-${String(dayItem.month).padStart(2, \"0\")}-${String(dayItem.day).padStart(2, \"0\")}`;\r\n const selectedStart = startValue === dateValue;\r\n const selectedEnd = endValue === dateValue;\r\n const inRange = isDateInRange(\r\n dateValue,\r\n startValue,\r\n endValue,\r\n hoverValue,\r\n );\r\n const cellStyle = inRange\r\n ? {\r\n backgroundColor: \"rgba(22, 119, 255, 0.12)\",\r\n borderBottomLeftRadius: selectedStart ? \"6px\" : \"0\",\r\n borderBottomRightRadius: selectedEnd ? \"6px\" : \"0\",\r\n borderTopLeftRadius: selectedStart ? \"6px\" : \"0\",\r\n borderTopRightRadius: selectedEnd ? \"6px\" : \"0\",\r\n }\r\n : undefined;\r\n return (\r\n <button\r\n key={dateValue}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-range-cell`,\r\n inRange && `${REACT_COMPONENT_PREFIX}-date-range-cell-in-range`,\r\n selectedStart &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-cell-range-start`,\r\n selectedEnd &&\r\n `${REACT_COMPONENT_PREFIX}-date-range-cell-range-end`,\r\n (selectedStart || selectedEnd) &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n style={cellStyle}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onMouseEnter={() => {\r\n onHover(dateValue);\r\n }}\r\n onMouseLeave={() => {\r\n onHover(null);\r\n }}\r\n onClick={() => {\r\n onSelect(dateValue);\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-date-range-cell-text`}\r\n >\r\n {dayItem.day}\r\n </span>\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\ntype CalendarDayItem = {\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n};\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n triggerRef: React.RefObject<HTMLDivElement | null>;\r\n}) {\r\n const { event, onBlur, popupRef, setOpen, triggerRef } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n relatedTarget &&\r\n (popupRef.current?.contains(relatedTarget) ||\r\n triggerRef.current?.contains(relatedTarget))\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction parseDateRangeValue(\r\n value: [string, string] | undefined,\r\n _rangeSeparator: string,\r\n) {\r\n const [rawStart = \"\", rawEnd = \"\"] = value ?? [\"\", \"\"];\r\n const start = parseDateValue(rawStart.trim()) ? rawStart.trim() : \"\";\r\n const end = parseDateValue(rawEnd.trim()) ? rawEnd.trim() : \"\";\r\n return { end, start };\r\n}\r\n\r\nfunction parseDateValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n if (\r\n !Number.isInteger(year) ||\r\n !Number.isInteger(month) ||\r\n !Number.isInteger(day) ||\r\n month < 1 ||\r\n month > 12\r\n ) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return { day, month, year };\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth({ year, month }, -1);\r\n const nextMonthDate = shiftMonth({ year, month }, 1);\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: CalendarDayItem[] = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(value: { month: number; year: number }, delta: number) {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n return {\r\n month: date.getMonth() + 1,\r\n year: date.getFullYear(),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction resolveInitialPanelMonth(range: { start: string; end: string }) {\r\n const start = parseDateValue(range.start);\r\n const base = start ?? parseDateValue(range.end);\r\n if (base) {\r\n return {\r\n month: base.month,\r\n year: base.year,\r\n };\r\n }\r\n const now = new Date();\r\n return {\r\n month: now.getMonth() + 1,\r\n year: now.getFullYear(),\r\n };\r\n}\r\n\r\nfunction resolveNextRange(\r\n range: { start: string; end: string },\r\n nextDate: string,\r\n activePart: \"start\" | \"end\",\r\n) {\r\n if (activePart === \"start\") {\r\n if (!range.end || compareDateValue(nextDate, range.end) <= 0) {\r\n return { end: range.end, start: nextDate };\r\n }\r\n return { end: \"\", start: nextDate };\r\n }\r\n\r\n if (!range.start) {\r\n return { end: \"\", start: nextDate };\r\n }\r\n\r\n if (compareDateValue(nextDate, range.start) < 0) {\r\n return { end: range.start, start: nextDate };\r\n }\r\n\r\n return { end: nextDate, start: range.start };\r\n}\r\n\r\nfunction compareDateValue(left: string, right: string) {\r\n return left.localeCompare(right);\r\n}\r\n\r\nfunction isDateInRange(\r\n dateValue: string,\r\n startValue: string,\r\n endValue: string,\r\n hoverValue: string | null,\r\n) {\r\n if (startValue && endValue) {\r\n return (\r\n compareDateValue(dateValue, startValue) >= 0 &&\r\n compareDateValue(dateValue, endValue) <= 0\r\n );\r\n }\r\n\r\n if (startValue && hoverValue) {\r\n const rangeStart =\r\n compareDateValue(startValue, hoverValue) <= 0 ? startValue : hoverValue;\r\n const rangeEnd =\r\n compareDateValue(startValue, hoverValue) <= 0 ? hoverValue : startValue;\r\n return (\r\n compareDateValue(dateValue, rangeStart) >= 0 &&\r\n compareDateValue(dateValue, rangeEnd) <= 0\r\n );\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction formatDateOnly(date: Date) {\r\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\r\n}\r\n","import { useEffect, useRef } from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\n\r\nexport const HOURS = createPaddedOptions(24);\r\nexport const MINUTES = createPaddedOptions(60);\r\nexport const SECONDS = createPaddedOptions(60);\r\nexport const DEFAULT_TIME_VALUE = \"00:00:00\";\r\n\r\nexport interface ParsedTimeValue {\r\n hour: string;\r\n minute: string;\r\n second: string;\r\n}\r\n\r\n/**\r\n * 通用时分秒滚轮面板。\r\n */\r\nexport function TimeSelectionPanel(props: {\r\n value?: string;\r\n onChange: (value: string) => void;\r\n footer?: React.ReactNode;\r\n hideHeader?: boolean;\r\n}) {\r\n const { footer, hideHeader = false, onChange, value } = props;\r\n const parsedValue = parseTimeValue(value) ?? parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n\r\n return (\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-panel`}>\r\n {hideHeader ? null : (\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>时</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>分</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>秒</div>\r\n </div>\r\n )}\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-body`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-selection-highlight`} />\r\n <TimeColumn\r\n options={HOURS}\r\n selectedValue={parsedValue.hour}\r\n onSelect={(hour) => {\r\n onChange(\r\n formatTimeValue({\r\n hour,\r\n minute: parsedValue.minute,\r\n second: parsedValue.second,\r\n }),\r\n );\r\n }}\r\n />\r\n <TimeColumn\r\n options={MINUTES}\r\n selectedValue={parsedValue.minute}\r\n onSelect={(minute) => {\r\n onChange(\r\n formatTimeValue({\r\n hour: parsedValue.hour,\r\n minute,\r\n second: parsedValue.second,\r\n }),\r\n );\r\n }}\r\n />\r\n <TimeColumn\r\n options={SECONDS}\r\n selectedValue={parsedValue.second}\r\n onSelect={(second) => {\r\n onChange(\r\n formatTimeValue({\r\n hour: parsedValue.hour,\r\n minute: parsedValue.minute,\r\n second,\r\n }),\r\n );\r\n }}\r\n />\r\n </div>\r\n {footer}\r\n </div>\r\n );\r\n}\r\n\r\nfunction TimeColumn(props: {\r\n options: string[];\r\n selectedValue?: string;\r\n onSelect: (value: string) => void;\r\n}) {\r\n const { onSelect, options, selectedValue } = props;\r\n const listRef = useRef<HTMLDivElement | null>(null);\r\n const scrollTimerRef = useRef<number | null>(null);\r\n const ignoreScrollRef = useRef(false);\r\n\r\n const scrollToValue = (nextValue: string, behavior: ScrollBehavior) => {\r\n const listElement = listRef.current;\r\n if (!listElement) {\r\n return;\r\n }\r\n\r\n const targetElement = listElement.querySelector<HTMLElement>(\r\n `.${REACT_COMPONENT_PREFIX}-time-option[data-value=\"${nextValue}\"]`,\r\n );\r\n if (!targetElement) {\r\n return;\r\n }\r\n\r\n const centeredPadding = Math.max(\r\n (listElement.clientHeight - targetElement.offsetHeight) / 2,\r\n 0,\r\n );\r\n listElement.style.paddingTop = `${centeredPadding}px`;\r\n listElement.style.paddingBottom = `${centeredPadding}px`;\r\n\r\n const targetTop =\r\n targetElement.offsetTop -\r\n (listElement.clientHeight - targetElement.offsetHeight) / 2;\r\n const maxScrollTop = Math.max(\r\n listElement.scrollHeight - listElement.clientHeight,\r\n 0,\r\n );\r\n const nextScrollTop = Math.min(Math.max(targetTop, 0), maxScrollTop);\r\n\r\n ignoreScrollRef.current = true;\r\n if (behavior === \"smooth\") {\r\n listElement.scrollTo({\r\n top: nextScrollTop,\r\n behavior,\r\n });\r\n } else {\r\n listElement.scrollTop = nextScrollTop;\r\n }\r\n window.setTimeout(() => {\r\n ignoreScrollRef.current = false;\r\n }, behavior === \"smooth\" ? 180 : 120);\r\n };\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (scrollTimerRef.current != null) {\r\n window.clearTimeout(scrollTimerRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n const listElement = listRef.current;\r\n if (!listElement) {\r\n return;\r\n }\r\n\r\n const selectedElement = listElement.querySelector<HTMLElement>(\r\n `.${REACT_COMPONENT_PREFIX}-time-option-selected`,\r\n );\r\n if (!selectedElement) {\r\n return;\r\n }\r\n scrollToValue(selectedElement.dataset.value ?? selectedValue ?? \"\", \"auto\");\r\n }, [selectedValue]);\r\n\r\n return (\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column`}>\r\n <div\r\n ref={listRef}\r\n className={`${REACT_COMPONENT_PREFIX}-time-column-list`}\r\n onScroll={() => {\r\n if (ignoreScrollRef.current) {\r\n return;\r\n }\r\n if (scrollTimerRef.current != null) {\r\n window.clearTimeout(scrollTimerRef.current);\r\n }\r\n\r\n scrollTimerRef.current = window.setTimeout(() => {\r\n const listElement = listRef.current;\r\n if (!listElement) {\r\n return;\r\n }\r\n\r\n const optionElements = Array.from(\r\n listElement.querySelectorAll<HTMLElement>(\r\n `.${REACT_COMPONENT_PREFIX}-time-option`,\r\n ),\r\n );\r\n if (optionElements.length === 0) {\r\n return;\r\n }\r\n\r\n const listCenter = listElement.scrollTop + listElement.clientHeight / 2;\r\n const nearestOption = optionElements.reduce((closest, current) => {\r\n const currentCenter = current.offsetTop + current.offsetHeight / 2;\r\n const closestCenter = closest.offsetTop + closest.offsetHeight / 2;\r\n return Math.abs(currentCenter - listCenter) <\r\n Math.abs(closestCenter - listCenter)\r\n ? current\r\n : closest;\r\n });\r\n\r\n const nextValue = nearestOption.dataset.value;\r\n if (nextValue && nextValue !== selectedValue) {\r\n scrollToValue(nextValue, \"smooth\");\r\n onSelect(nextValue);\r\n }\r\n }, 120);\r\n }}\r\n >\r\n {options.map((option) => {\r\n const selected = option === selectedValue;\r\n return (\r\n <button\r\n key={option}\r\n type=\"button\"\r\n data-value={option}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-option`,\r\n selected && `${REACT_COMPONENT_PREFIX}-time-option-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onSelect(option);\r\n }}\r\n >\r\n {option}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function parseTimeValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const hour = Number(matched[1]);\r\n const minute = Number(matched[2]);\r\n const second = Number(matched[3]);\r\n if (\r\n !Number.isInteger(hour) ||\r\n !Number.isInteger(minute) ||\r\n !Number.isInteger(second) ||\r\n hour < 0 ||\r\n hour > 23 ||\r\n minute < 0 ||\r\n minute > 59 ||\r\n second < 0 ||\r\n second > 59\r\n ) {\r\n return null;\r\n }\r\n\r\n return {\r\n hour: matched[1].padStart(2, \"0\"),\r\n minute: matched[2].padStart(2, \"0\"),\r\n second: matched[3].padStart(2, \"0\"),\r\n } satisfies ParsedTimeValue;\r\n}\r\n\r\nexport function formatTimeValue(value: ParsedTimeValue) {\r\n return `${value.hour}:${value.minute}:${value.second}`;\r\n}\r\n\r\nexport function createPaddedOptions(count: number) {\r\n return Array.from({ length: count }, (_, index) => String(index).padStart(2, \"0\"));\r\n}\r\n\r\nexport function getCurrentTimeValue() {\r\n const now = new Date();\r\n return formatTimeValue({\r\n hour: String(now.getHours()).padStart(2, \"0\"),\r\n minute: String(now.getMinutes()).padStart(2, \"0\"),\r\n second: String(now.getSeconds()).padStart(2, \"0\"),\r\n });\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-time-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-time {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-time:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-time-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-time-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-time-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-time .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-time-input-wrap:hover,\\n.canvas-react-time-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-time-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-time-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-time-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-time:hover .canvas-react-time-arrow,\\n.canvas-react-time-open .canvas-react-time-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-time-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-time-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-time-clear:hover {\\n color: #6b7280;\\n transform: translate(-50%, -50%) rotate(90deg);\\n}\\n.canvas-react-time:hover .canvas-react-time-clear,\\n.canvas-react-time-open .canvas-react-time-clear,\\n.canvas-react-time:focus-within .canvas-react-time-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-time:hover .canvas-react-time-actions-clearable .canvas-react-time-arrow,\\n.canvas-react-time-open .canvas-react-time-actions-clearable .canvas-react-time-arrow,\\n.canvas-react-time:focus-within .canvas-react-time-actions-clearable .canvas-react-time-arrow {\\n opacity: 0;\\n}\\n.canvas-react-time-clear-icon,\\n.canvas-react-time-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-time-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-time-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-time-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-time-popup-panel,\\n.canvas-react-time-range-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n.canvas-react-time-range-control {\\n position: relative;\\n}\\n.canvas-react-time-range-hidden-input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n border: 0;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-time-range-values {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-time-range-value {\\n position: relative;\\n display: flex;\\n flex: 1 1 0;\\n align-items: center;\\n justify-content: flex-start;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: 1;\\n text-align: left;\\n box-sizing: border-box;\\n cursor: pointer;\\n}\\n.canvas-react-time-range-value::after {\\n position: absolute;\\n right: 0;\\n bottom: -1px;\\n left: 0;\\n height: 2px;\\n border-radius: 999px;\\n background: transparent;\\n content: \\\"\\\";\\n transition: background-color 0.18s ease;\\n}\\n.canvas-react-time-range-value-active::after {\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-time-range-value-text {\\n display: block;\\n width: 100%;\\n min-width: 0;\\n height: auto;\\n padding: 0;\\n border: none;\\n outline: none;\\n overflow: hidden;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n@supports (height: 1lh) {\\n .canvas-react-time-range-value-text {\\n height: 1lh;\\n }\\n}\\n.canvas-react-time-range-value-text::placeholder {\\n color: inherit;\\n opacity: 1;\\n}\\n.canvas-react-time-range-separator {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n padding: 0 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-time-popup-header {\\n padding: 0 4px;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n box-sizing: border-box;\\n}\\n.canvas-react-time-panel {\\n min-width: 216px;\\n}\\n.canvas-react-time-header,\\n.canvas-react-time-body {\\n display: grid;\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 4px;\\n}\\n.canvas-react-time-header {\\n align-items: center;\\n height: 44px;\\n margin-bottom: 4px;\\n}\\n.canvas-react-time-popup-header .canvas-react-time-header {\\n height: 44px;\\n margin-bottom: 0;\\n}\\n.canvas-react-time-body {\\n position: relative;\\n}\\n.canvas-react-time-popup-content {\\n display: flex;\\n flex: 1 1 auto;\\n min-height: 0;\\n padding: 0 4px;\\n box-sizing: border-box;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-panel {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n width: 100%;\\n min-height: 100%;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-body {\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-column {\\n display: flex;\\n min-height: 0;\\n}\\n.canvas-react-time-popup-content .canvas-react-time-column-list {\\n flex: 1 1 auto;\\n max-height: none;\\n min-height: 0;\\n}\\n.canvas-react-time-selection-highlight {\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 50%;\\n height: 32px;\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg-active);\\n transform: translateY(-50%);\\n pointer-events: none;\\n z-index: 0;\\n}\\n.canvas-react-time-column {\\n position: relative;\\n z-index: 1;\\n}\\n.canvas-react-time-column-label {\\n padding: 4px 0;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n line-height: 1;\\n text-align: center;\\n}\\n.canvas-react-time-column-list {\\n max-height: 196px;\\n overflow-y: auto;\\n padding: 0 4px;\\n border-radius: var(--canvas-react-radius-sm);\\n background: transparent;\\n scroll-behavior: smooth;\\n scroll-snap-type: y mandatory;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n}\\n.canvas-react-time-column-list::-webkit-scrollbar {\\n display: none;\\n}\\n.canvas-react-time-option {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 100%;\\n height: 32px;\\n padding: 0 6px;\\n border: none;\\n border-radius: var(--canvas-react-radius-sm);\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n font-size: var(--canvas-react-font-size);\\n line-height: 1;\\n cursor: pointer;\\n scroll-snap-align: center;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-time-option:hover {\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-time-option-selected {\\n color: var(--canvas-react-color-primary);\\n font-weight: 500;\\n}\\n.canvas-react-time-footer,\\n.canvas-react-time-popup-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 12px;\\n padding: 8px 4px 4px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-time-footer-now,\\n.canvas-react-time-footer-confirm {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n height: 28px;\\n padding: 0 12px;\\n border-radius: var(--canvas-react-radius-sm);\\n font-size: 12px;\\n cursor: pointer;\\n transition:\\n border-color 0.18s ease,\\n background-color 0.18s ease,\\n color 0.18s ease;\\n}\\n.canvas-react-time-footer-now {\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-time-footer-now:hover {\\n color: var(--canvas-react-color-primary-hover);\\n background: rgba(22, 119, 255, 0.06);\\n}\\n.canvas-react-time-footer-confirm {\\n border: 1px solid var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #fff;\\n}\\n.canvas-react-time-footer-confirm:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n background: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-time-range-dropdown {\\n width: 260px;\\n}\\n.canvas-react-time-range-header {\\n display: grid;\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-time-range-content {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n min-height: 0;\\n}\\n.canvas-react-time-range-header-tab {\\n height: 44px;\\n padding: 0 10px;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n cursor: pointer;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-time-range-header-tab + .canvas-react-time-range-header-tab {\\n border-left: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-time-range-header-tab:hover {\\n color: var(--canvas-react-color-primary-hover);\\n background: rgba(22, 119, 255, 0.05);\\n}\\n.canvas-react-time-range-header-tab-active {\\n background: var(--canvas-react-color-bg-active);\\n color: var(--canvas-react-color-primary);\\n font-weight: 600;\\n}\\n\")","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n@import \\\"../date/style.css\\\";\\n.canvas-react-datetime-wrap {\\n position: relative;\\n display: inline-flex;\\n width: 100%;\\n height: 100%;\\n}\\n.canvas-react-datetime {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-datetime:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-datetime-open {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-datetime-disabled {\\n color: #9ca3af;\\n background: #fafafa;\\n cursor: not-allowed;\\n}\\n.canvas-react-datetime-input-wrap {\\n flex: 1 1 auto;\\n width: 100%;\\n height: 100%;\\n border: none;\\n background: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-datetime .canvas-react-input-affix-wrapper {\\n height: 100%;\\n min-height: 0;\\n}\\n.canvas-react-datetime-input-wrap:hover,\\n.canvas-react-datetime-input-wrap:focus-within {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.canvas-react-datetime-input {\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n line-height: 1;\\n}\\n.canvas-react-datetime-actions {\\n position: relative;\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 1em;\\n min-width: 12px;\\n height: 1em;\\n min-height: 12px;\\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\\n}\\n.canvas-react-datetime-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 0.5em;\\n height: 0.5em;\\n min-width: 6px;\\n min-height: 6px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transform: translate(-50%, -58%) rotate(45deg);\\n transition:\\n opacity 0.18s ease,\\n transform 0.18s ease,\\n border-color 0.18s ease;\\n}\\n.canvas-react-datetime:hover .canvas-react-datetime-arrow,\\n.canvas-react-datetime-open .canvas-react-datetime-arrow {\\n border-color: #6b7280;\\n}\\n.canvas-react-datetime-arrow-open {\\n border-color: #6b7280;\\n transform: translate(-50%, -42%) rotate(225deg);\\n}\\n.canvas-react-datetime-clear {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transform: translate(-50%, -50%) rotate(0deg);\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-datetime-clear:hover {\\n color: #6b7280;\\n transform: translate(-50%, -50%) rotate(90deg);\\n}\\n.canvas-react-datetime:hover .canvas-react-datetime-clear,\\n.canvas-react-datetime-open .canvas-react-datetime-clear,\\n.canvas-react-datetime:focus-within .canvas-react-datetime-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-datetime:hover .canvas-react-datetime-actions-clearable .canvas-react-datetime-arrow,\\n.canvas-react-datetime-open .canvas-react-datetime-actions-clearable .canvas-react-datetime-arrow,\\n.canvas-react-datetime:focus-within .canvas-react-datetime-actions-clearable .canvas-react-datetime-arrow {\\n opacity: 0;\\n}\\n.canvas-react-datetime-clear-icon,\\n.canvas-react-datetime-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-datetime-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-datetime-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n.canvas-react-datetime-dropdown {\\n padding: 4px;\\n}\\n.canvas-react-datetime-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-header {\\n display: grid;\\n grid-template-columns: 296px 218px;\\n gap: 8px;\\n align-items: stretch;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-datetime-header-date {\\n border-right: 1px solid var(--canvas-react-color-split, #f0f0f0);\\n}\\n.canvas-react-datetime-header-date .canvas-react-year-header,\\n.canvas-react-datetime-header-time .canvas-react-time-header {\\n border-bottom: none;\\n}\\n.canvas-react-datetime-header-time {\\n display: block;\\n min-width: 0;\\n padding: 0 4px;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-content {\\n display: grid;\\n grid-template-columns: 296px 218px;\\n gap: 8px;\\n flex: 1 1 auto;\\n min-height: 0;\\n align-items: stretch;\\n}\\n.canvas-react-datetime-date-panel {\\n display: flex;\\n flex-direction: column;\\n min-height: 0;\\n border-right: 1px solid var(--canvas-react-color-split, #f0f0f0);\\n}\\n.canvas-react-datetime-time-panel {\\n overflow: hidden;\\n display: flex;\\n min-height: 0;\\n padding: 0 4px;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-header-time .canvas-react-time-header {\\n display: grid;\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 4px;\\n align-items: center;\\n width: 100%;\\n height: 44px;\\n margin-bottom: 0;\\n box-sizing: border-box;\\n}\\n.canvas-react-datetime-header-time .canvas-react-time-column-label {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 100%;\\n padding: 0;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-panel {\\n display: flex;\\n flex: 1 1 auto;\\n flex-direction: column;\\n width: 100%;\\n min-height: 100%;\\n min-width: 210px;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-body {\\n flex: 1 1 auto;\\n min-height: 0;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-column {\\n display: flex;\\n min-height: 0;\\n}\\n.canvas-react-datetime-time-panel .canvas-react-time-column-list {\\n flex: 1 1 auto;\\n max-height: none;\\n min-height: 0;\\n}\\n.canvas-react-datetime-footer {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 8px;\\n padding: 8px 0 0;\\n margin-top: 8px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n TimeSelectionPanel,\r\n formatTimeValue,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n} from \"../time/shared\";\r\nimport \"../year/style.css\";\r\nimport \"../time/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDateTimePickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前日期时间值,格式为 YYYY-MM-DD HH:mm:ss。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 年月日时分秒选择器。\r\n */\r\nexport const ReactDateTimePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactDateTimePickerProps\r\n>(function ReactDateTimePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期时间\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"date\" | \"month\" | \"year\" | \"decade\">(\"date\");\r\n const parsedValue = useMemo(() => parseDateTimeValue(value), [value]);\r\n const [draftDateTime, setDraftDateTime] = useState(() =>\r\n createDraftDateTime(parsedValue),\r\n );\r\n const yearPanelStart = useMemo(\r\n () => resolveDecadeStart(draftDateTime.year),\r\n [draftDateTime.year],\r\n );\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),\r\n [yearPanelStart],\r\n );\r\n const decadeItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10),\r\n [decadePanelStart],\r\n );\r\n const calendarDays = useMemo(\r\n () => buildCalendarDays(draftDateTime.year, draftDateTime.month),\r\n [draftDateTime.month, draftDateTime.year],\r\n );\r\n const displayValue =\r\n parsedValue == null\r\n ? \"\"\r\n : `${formatDateValue(parsedValue)} ${formatTimeValue(parsedValue)}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"date\");\r\n setDraftDateTime(createDraftDateTime(parsedValue));\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-datetime-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-datetime-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-datetime-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-datetime-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-datetime-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-datetime-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={534}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 534 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-date`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, -1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year - 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year - 10 };\r\n }\r\n return { ...prev, year: prev.year - 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"date\") {\r\n setMode(\"month\");\r\n return;\r\n }\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"date\"\r\n ? `${draftDateTime.year}年${String(draftDateTime.month).padStart(2, \"0\")}月`\r\n : mode === \"month\"\r\n ? `${draftDateTime.year}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, 1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year + 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year + 10 };\r\n }\r\n return { ...prev, year: prev.year + 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-time`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>时</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>分</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>秒</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-content`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-date-panel`}>\r\n {mode === \"date\" ? (\r\n <>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div\r\n key={label}\r\n className={`${REACT_COMPONENT_PREFIX}-date-weekday`}\r\n >\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {calendarDays.map((dayItem) => {\r\n const selected =\r\n draftDateTime.year === dayItem.year &&\r\n draftDateTime.month === dayItem.month &&\r\n draftDateTime.day === dayItem.day;\r\n return (\r\n <button\r\n key={`${dayItem.year}-${dayItem.month}-${dayItem.day}`}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: dayItem.year,\r\n month: dayItem.month,\r\n day: dayItem.day,\r\n }));\r\n }}\r\n >\r\n {dayItem.day}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n ) : (\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected = Number(month) === draftDateTime.month;\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n month: Number(month),\r\n day: clampDay(prev.year, Number(month), prev.day),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart &&\r\n yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === draftDateTime.year;\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: yearItem,\r\n day: clampDay(yearItem, prev.month, prev.day),\r\n }));\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart &&\r\n yearPanelStart <= decadeStart + 9;\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: decadeStart,\r\n day: clampDay(decadeStart, prev.month, prev.day),\r\n }));\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-time-panel`}>\r\n <TimeSelectionPanel\r\n value={formatTimeValue(draftDateTime)}\r\n hideHeader\r\n onChange={(nextTimeValue) => {\r\n const nextTime = parseTimeValue(nextTimeValue) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n }));\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n const now = new Date();\r\n const nextTime = parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n setDraftDateTime({\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n });\r\n setMode(\"date\");\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(\r\n `${formatDateValue(draftDateTime)} ${formatTimeValue(draftDateTime)}`,\r\n );\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\ninterface ParsedDateTimeValue {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hour: string;\r\n minute: string;\r\n second: string;\r\n}\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n}) {\r\n const { event, onBlur, popupRef, setOpen } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction parseDateTimeValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(\r\n /^(\\d{4})-(\\d{2})-(\\d{2})\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/,\r\n );\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n const timeValue = parseTimeValue(`${matched[4]}:${matched[5]}:${matched[6]}`);\r\n if (!timeValue) {\r\n return null;\r\n }\r\n if (month < 1 || month > 12) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return {\r\n year,\r\n month,\r\n day,\r\n hour: timeValue.hour,\r\n minute: timeValue.minute,\r\n second: timeValue.second,\r\n } satisfies ParsedDateTimeValue;\r\n}\r\n\r\nfunction createDraftDateTime(value: ParsedDateTimeValue | null): ParsedDateTimeValue {\r\n const now = new Date();\r\n const currentTime = parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n return (\r\n value ?? {\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: currentTime.hour,\r\n minute: currentTime.minute,\r\n second: currentTime.second,\r\n }\r\n );\r\n}\r\n\r\nfunction formatDateValue(value: { year: number; month: number; day: number }) {\r\n return `${value.year}-${String(value.month).padStart(2, \"0\")}-${String(value.day).padStart(2, \"0\")}`;\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth({\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n }, -1);\r\n const nextMonthDate = shiftMonth({\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n }, 1);\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: Array<{\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n }> = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(\r\n value: ParsedDateTimeValue,\r\n delta: number,\r\n): ParsedDateTimeValue {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n const year = date.getFullYear();\r\n const month = date.getMonth() + 1;\r\n return {\r\n ...value,\r\n year,\r\n month,\r\n day: clampDay(year, month, value.day),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction clampDay(year: number, month: number, day: number) {\r\n return Math.min(day, getDaysInMonth(year, month));\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../datetime/style.css\\\";\\n.canvas-react-datetime-range-control {\\n position: relative;\\n}\\n.canvas-react-datetime-range-hidden-input {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n border: 0;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-datetime-range-values {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-datetime-range-value {\\n position: relative;\\n display: flex;\\n flex: 1 1 0;\\n align-items: center;\\n justify-content: flex-start;\\n min-width: 0;\\n height: 100%;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: 1;\\n text-align: left;\\n box-sizing: border-box;\\n cursor: pointer;\\n}\\n.canvas-react-datetime-range-value::after {\\n position: absolute;\\n right: 0;\\n bottom: -1px;\\n left: 0;\\n height: 2px;\\n border-radius: 999px;\\n background: transparent;\\n content: \\\"\\\";\\n transition: background-color 0.18s ease;\\n}\\n.canvas-react-datetime-range-value-active::after {\\n background: var(--canvas-react-color-primary);\\n}\\n.canvas-react-datetime-range-value-text {\\n display: block;\\n width: 100%;\\n min-width: 0;\\n height: auto;\\n padding: 0;\\n border: none;\\n outline: none;\\n overflow: hidden;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n line-height: normal;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n cursor: pointer;\\n}\\n@supports (height: 1lh) {\\n .canvas-react-datetime-range-value-text {\\n height: 1lh;\\n }\\n}\\n.canvas-react-datetime-range-value-text::placeholder {\\n color: inherit;\\n opacity: 1;\\n}\\n.canvas-react-datetime-range-separator {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n padding: 0 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n}\\n.canvas-react-datetime-range-panel {\\n display: flex;\\n flex-direction: column;\\n height: 400px;\\n box-sizing: border-box;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport type { ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n TimeSelectionPanel,\r\n formatTimeValue,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n} from \"../time/shared\";\r\nimport \"../year/style.css\";\r\nimport \"../time/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactDateTimeRangePickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 当前日期时间区间值,格式为 `[开始日期时间, 结束日期时间]`。\r\n */\r\n value?: [string, string];\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: [string, string]) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 区间分隔符。\r\n */\r\n rangeSeparator?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\nconst WEEKDAY_LABELS = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\r\n\r\n/**\r\n * 日期时间区间选择器。\r\n */\r\nexport const ReactDateTimeRangePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactDateTimeRangePickerProps\r\n>(function ReactDateTimeRangePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择日期时间区间\",\r\n popupClassName,\r\n rangeSeparator = \" ~ \",\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const startInputRef = useRef<HTMLInputElement | null>(null);\r\n const endInputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [activePart, setActivePart] = useState<\"start\" | \"end\">(\"start\");\r\n const [mode, setMode] = useState<\"date\" | \"month\" | \"year\" | \"decade\">(\r\n \"date\",\r\n );\r\n const [draftRange, setDraftRange] = useState(() =>\r\n parseDateTimeRangeValue(value, rangeSeparator),\r\n );\r\n const activeValue = useMemo(\r\n () => (activePart === \"start\" ? draftRange.start : draftRange.end),\r\n [activePart, draftRange.end, draftRange.start],\r\n );\r\n const parsedActiveValue = useMemo(\r\n () => parseDateTimeValue(activeValue),\r\n [activeValue],\r\n );\r\n const [draftDateTime, setDraftDateTime] = useState(() =>\r\n createDraftDateTime(parsedActiveValue),\r\n );\r\n const showClear =\r\n allowClear &&\r\n !disabled &&\r\n (draftRange.start.length > 0 || draftRange.end.length > 0);\r\n const yearPanelStart = useMemo(\r\n () => resolveDecadeStart(draftDateTime.year),\r\n [draftDateTime.year],\r\n );\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(\r\n () => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),\r\n [yearPanelStart],\r\n );\r\n const decadeItems = useMemo(\r\n () =>\r\n Array.from(\r\n { length: 12 },\r\n (_, index) => decadePanelStart - 10 + index * 10,\r\n ),\r\n [decadePanelStart],\r\n );\r\n const calendarDays = useMemo(\r\n () => buildCalendarDays(draftDateTime.year, draftDateTime.month),\r\n [draftDateTime.month, draftDateTime.year],\r\n );\r\n\r\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n startInputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n }, [rangeSeparator, value]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"date\");\r\n setDraftDateTime(createDraftDateTime(parsedActiveValue));\r\n }, [activePart, open, parsedActiveValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-datetime-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime`,\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-control`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-datetime-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-datetime-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-range-values`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value`,\r\n activePart === \"start\" &&\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"start\");\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n startInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n {...restProps}\r\n ref={startInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.start}\r\n placeholder=\"YYYY-MM-DD HH:mm:ss\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"start\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-separator`}\r\n >\r\n {rangeSeparator.trim()}\r\n </span>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value`,\r\n activePart === \"end\" &&\r\n `${REACT_COMPONENT_PREFIX}-datetime-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"end\");\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n ref={endInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.end}\r\n placeholder=\"YYYY-MM-DD HH:mm:ss\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"end\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseDateTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n </div>\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-datetime-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.([\"\", \"\"]);\r\n startInputRef.current?.blur();\r\n endInputRef.current?.blur();\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-clear-icon`}\r\n />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-datetime-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={534}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-datetime-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 534 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-datetime-range-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-date`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, -1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year - 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year - 10 };\r\n }\r\n return { ...prev, year: prev.year - 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"date\") {\r\n setMode(\"month\");\r\n return;\r\n }\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"date\"\r\n ? `${draftDateTime.year}年${String(draftDateTime.month).padStart(2, \"0\")}月`\r\n : mode === \"month\"\r\n ? `${draftDateTime.year}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => {\r\n if (mode === \"date\") {\r\n return shiftMonth(prev, 1);\r\n }\r\n if (mode === \"month\") {\r\n return { ...prev, year: prev.year + 1 };\r\n }\r\n if (mode === \"year\") {\r\n return { ...prev, year: prev.year + 10 };\r\n }\r\n return { ...prev, year: prev.year + 100 };\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-header-time`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 时\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 分\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 秒\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-content`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-date-panel`}>\r\n {mode === \"date\" ? (\r\n <>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-weekdays`}>\r\n {WEEKDAY_LABELS.map((label) => (\r\n <div\r\n key={label}\r\n className={`${REACT_COMPONENT_PREFIX}-date-weekday`}\r\n >\r\n {label}\r\n </div>\r\n ))}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-date-grid`}>\r\n {calendarDays.map((dayItem) => {\r\n const selected =\r\n parsedActiveValue?.year === dayItem.year &&\r\n parsedActiveValue?.month === dayItem.month &&\r\n parsedActiveValue?.day === dayItem.day;\r\n return (\r\n <button\r\n key={`${dayItem.year}-${dayItem.month}-${dayItem.day}`}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-date-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !dayItem.inCurrentMonth &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: dayItem.year,\r\n month: dayItem.month,\r\n day: dayItem.day,\r\n }));\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: formatDateTimeValue({\r\n ...draftDateTime,\r\n year: dayItem.year,\r\n month: dayItem.month,\r\n day: dayItem.day,\r\n }),\r\n }));\r\n }}\r\n >\r\n {dayItem.day}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </>\r\n ) : (\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected = Number(month) === draftDateTime.month;\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n month: Number(month),\r\n day: clampDay(\r\n prev.year,\r\n Number(month),\r\n prev.day,\r\n ),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart &&\r\n yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === draftDateTime.year;\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: yearItem,\r\n day: clampDay(yearItem, prev.month, prev.day),\r\n }));\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart &&\r\n yearPanelStart <= decadeStart + 9;\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftDateTime((prev) => ({\r\n ...prev,\r\n year: decadeStart,\r\n day: clampDay(\r\n decadeStart,\r\n prev.month,\r\n prev.day,\r\n ),\r\n }));\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-time-panel`}>\r\n <TimeSelectionPanel\r\n value={formatTimeValue(draftDateTime)}\r\n hideHeader\r\n onChange={(nextTimeValue) => {\r\n const nextTime =\r\n parseTimeValue(nextTimeValue) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n const nextValue = {\r\n ...draftDateTime,\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n };\r\n setDraftDateTime(nextValue);\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: formatDateTimeValue(nextValue),\r\n }));\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-datetime-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n const now = new Date();\r\n const nextTime =\r\n parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n const nextValue = {\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: nextTime.hour,\r\n minute: nextTime.minute,\r\n second: nextTime.second,\r\n };\r\n setDraftDateTime(nextValue);\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: formatDateTimeValue(nextValue),\r\n }));\r\n setMode(\"date\");\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n return;\r\n }\r\n if (\r\n compareDateTimeValue(draftRange.end, draftRange.start) < 0\r\n ) {\r\n setActivePart(\"start\");\r\n return;\r\n }\r\n onChange?.([draftRange.start, draftRange.end]);\r\n setOpen(false);\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n triggerRef: React.RefObject<HTMLDivElement | null>;\r\n}) {\r\n const { event, onBlur, popupRef, setOpen, triggerRef } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n relatedTarget &&\r\n (popupRef.current?.contains(relatedTarget) ||\r\n triggerRef.current?.contains(relatedTarget))\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction parseDateTimeRangeValue(\r\n value: [string, string] | undefined,\r\n _rangeSeparator: string,\r\n) {\r\n const [rawStart = \"\", rawEnd = \"\"] = value ?? [\"\", \"\"];\r\n const start = parseDateTimeValue(rawStart.trim()) ? rawStart.trim() : \"\";\r\n const end = parseDateTimeValue(rawEnd.trim()) ? rawEnd.trim() : \"\";\r\n return { end, start };\r\n}\r\n\r\ninterface ParsedDateTimeValue {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hour: string;\r\n minute: string;\r\n second: string;\r\n}\r\n\r\nfunction parseDateTimeValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(\r\n /^(\\d{4})-(\\d{2})-(\\d{2})\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/,\r\n );\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const year = Number(matched[1]);\r\n const month = Number(matched[2]);\r\n const day = Number(matched[3]);\r\n const timeValue = parseTimeValue(`${matched[4]}:${matched[5]}:${matched[6]}`);\r\n if (!timeValue) {\r\n return null;\r\n }\r\n if (month < 1 || month > 12) {\r\n return null;\r\n }\r\n\r\n const maxDay = getDaysInMonth(year, month);\r\n if (day < 1 || day > maxDay) {\r\n return null;\r\n }\r\n\r\n return {\r\n year,\r\n month,\r\n day,\r\n hour: timeValue.hour,\r\n minute: timeValue.minute,\r\n second: timeValue.second,\r\n } satisfies ParsedDateTimeValue;\r\n}\r\n\r\nfunction createDraftDateTime(\r\n value: ParsedDateTimeValue | null,\r\n): ParsedDateTimeValue {\r\n const now = new Date();\r\n const currentTime =\r\n parseTimeValue(getCurrentTimeValue()) ??\r\n parseTimeValue(DEFAULT_TIME_VALUE)!;\r\n return (\r\n value ?? {\r\n year: now.getFullYear(),\r\n month: now.getMonth() + 1,\r\n day: now.getDate(),\r\n hour: currentTime.hour,\r\n minute: currentTime.minute,\r\n second: currentTime.second,\r\n }\r\n );\r\n}\r\n\r\nfunction buildCalendarDays(year: number, month: number) {\r\n const firstDay = new Date(year, month - 1, 1);\r\n const firstWeekday = firstDay.getDay();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const prevMonthDate = shiftMonth(\r\n {\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n },\r\n -1,\r\n );\r\n const nextMonthDate = shiftMonth(\r\n {\r\n year,\r\n month,\r\n day: 1,\r\n hour: \"00\",\r\n minute: \"00\",\r\n second: \"00\",\r\n },\r\n 1,\r\n );\r\n const prevMonthDays = getDaysInMonth(prevMonthDate.year, prevMonthDate.month);\r\n const cells: Array<{\r\n day: number;\r\n inCurrentMonth: boolean;\r\n month: number;\r\n year: number;\r\n }> = [];\r\n\r\n for (let index = 0; index < firstWeekday; index += 1) {\r\n cells.push({\r\n day: prevMonthDays - firstWeekday + index + 1,\r\n inCurrentMonth: false,\r\n month: prevMonthDate.month,\r\n year: prevMonthDate.year,\r\n });\r\n }\r\n\r\n for (let day = 1; day <= daysInMonth; day += 1) {\r\n cells.push({\r\n day,\r\n inCurrentMonth: true,\r\n month,\r\n year,\r\n });\r\n }\r\n\r\n let nextDay = 1;\r\n while (cells.length < 42) {\r\n cells.push({\r\n day: nextDay,\r\n inCurrentMonth: false,\r\n month: nextMonthDate.month,\r\n year: nextMonthDate.year,\r\n });\r\n nextDay += 1;\r\n }\r\n\r\n return cells;\r\n}\r\n\r\nfunction shiftMonth(\r\n value: ParsedDateTimeValue,\r\n delta: number,\r\n): ParsedDateTimeValue {\r\n const date = new Date(value.year, value.month - 1 + delta, 1);\r\n const year = date.getFullYear();\r\n const month = date.getMonth() + 1;\r\n return {\r\n ...value,\r\n year,\r\n month,\r\n day: clampDay(year, month, value.day),\r\n };\r\n}\r\n\r\nfunction getDaysInMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nfunction clampDay(year: number, month: number, day: number) {\r\n return Math.min(day, getDaysInMonth(year, month));\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n\r\nfunction formatDateTimeValue(value: ParsedDateTimeValue) {\r\n return `${value.year}-${String(value.month).padStart(2, \"0\")}-${String(value.day).padStart(2, \"0\")} ${formatTimeValue(value)}`;\r\n}\r\n\r\nfunction compareDateTimeValue(left: string, right: string) {\r\n if (!left || !right) {\r\n return 0;\r\n }\r\n return left.localeCompare(right);\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-number-input-affix-wrapper {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-number-input-affix-wrapper:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-number-input-affix-wrapper:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-number-input-affix-wrapper-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-number-input {\\n box-sizing: border-box;\\n flex: 1 1 auto;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\\n border: none;\\n background: transparent;\\n color: inherit;\\n font-size: inherit;\\n outline: none;\\n appearance: textfield;\\n -moz-appearance: textfield;\\n}\\n.canvas-react-number-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-number-input::-webkit-outer-spin-button,\\n.canvas-react-number-input::-webkit-inner-spin-button {\\n margin: 0;\\n -webkit-appearance: none;\\n}\\n.canvas-react-number-input-suffix {\\n display: inline-flex;\\n align-items: center;\\n padding-right: var(--canvas-react-control-padding-inline, 11px);\\n}\\n.canvas-react-number-input-clear {\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 12px;\\n height: 12px;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: #9ca3af;\\n opacity: 0;\\n pointer-events: none;\\n cursor: pointer;\\n transition:\\n color 0.2s ease,\\n opacity 0.2s ease,\\n transform 0.18s ease;\\n}\\n.canvas-react-number-input-affix-wrapper:hover .canvas-react-number-input-clear,\\n.canvas-react-number-input-affix-wrapper:focus-within .canvas-react-number-input-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-number-input-clear:hover {\\n color: #6b7280;\\n transform: rotate(90deg);\\n}\\n.canvas-react-number-input-clear-icon,\\n.canvas-react-number-input-clear-icon::before {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 8px;\\n height: 1.25px;\\n margin-top: -0.625px;\\n margin-left: -4px;\\n border-radius: 999px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-number-input-clear-icon {\\n transform: rotate(45deg);\\n}\\n.canvas-react-number-input-clear-icon::before {\\n transform: rotate(90deg);\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactNumberInputProps\r\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"value\" | \"onChange\"> {\r\n /**\r\n * 当前值。\r\n */\r\n value?: number | null;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: number | null) => void;\r\n /**\r\n * 回车确认回调。\r\n */\r\n onPressEnter?: (event: KeyboardEvent<HTMLInputElement>) => void;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 清空回调。\r\n */\r\n onClear?: () => void;\r\n}\r\n\r\n/**\r\n * 基础数字输入框。\r\n */\r\nexport const ReactNumberInput = forwardRef<HTMLInputElement, ReactNumberInputProps>(\r\n function ReactNumberInput(props, ref) {\r\n const {\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onKeyDown,\r\n onPressEnter,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const [inputValue, setInputValue] = useState(toDisplayValue(value));\r\n\r\n useEffect(() => {\r\n setInputValue(toDisplayValue(value));\r\n }, [value]);\r\n\r\n return (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-number-input-affix-wrapper`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-number-input-affix-wrapper-disabled`,\r\n )}\r\n style={style as CSSProperties}\r\n >\r\n <input\r\n {...restProps}\r\n ref={ref}\r\n disabled={disabled}\r\n type=\"number\"\r\n value={inputValue}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-number-input`,\r\n className,\r\n )}\r\n onChange={(event) => {\r\n const nextText = event.target.value;\r\n setInputValue(nextText);\r\n onChange?.(parseNumberValue(nextText));\r\n }}\r\n onBlur={(event) => {\r\n setInputValue(toDisplayValue(parseNumberValue(event.target.value)));\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.key === \"Enter\") {\r\n onPressEnter?.(event);\r\n }\r\n }}\r\n />\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseNumberValue(value: string) {\r\n if (value.trim().length === 0) {\r\n return null;\r\n }\r\n\r\n const nextValue = Number(value);\r\n return Number.isFinite(nextValue) ? nextValue : null;\r\n}\r\n\r\nfunction toDisplayValue(value?: number | null) {\r\n return value == null ? \"\" : String(value);\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-input-range {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: center;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n overflow: hidden;\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n outline: none;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-input-range:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-input-range:focus-within {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-input-range-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-input-range > .canvas-react-number-input-affix-wrapper,\\n.canvas-react-input-range > .canvas-react-number-input-affix-wrapper:hover,\\n.canvas-react-input-range > .canvas-react-number-input-affix-wrapper:focus-within {\\n flex: 1 1 0;\\n width: 0;\\n height: 100%;\\n border: 0;\\n border-radius: 0;\\n box-shadow: none;\\n}\\n.canvas-react-input-range-separator {\\n flex: 0 0 auto;\\n color: #9ca3af;\\n line-height: 1;\\n}\\n\")","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n type FocusEvent,\n type InputHTMLAttributes,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport {\n ReactNumberInput,\n type ReactNumberInputProps,\n} from \"../number-input/index\";\nimport \"./style.css\";\n\nexport type ReactInputRangeValue = [number | null, number | null];\n\nexport interface ReactInputRangeProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"className\" | \"onChange\" | \"placeholder\" | \"style\" | \"value\"\n> {\n /** 当前数值范围。 */\n value?: ReactInputRangeValue;\n /** 数值范围变化回调。 */\n onChange?: (value: ReactInputRangeValue) => void;\n /** 起止输入框占位文本。 */\n placeholder?: [string, string];\n /** 范围分隔符。 */\n rangeSeparator?: string;\n /** 外层类名。 */\n className?: string;\n /** 外层样式。 */\n style?: CSSProperties;\n /** 回车确认回调。 */\n onPressEnter?: ReactNumberInputProps[\"onPressEnter\"];\n}\n\n/**\n * 双数值输入范围组件。\n */\nexport const ReactInputRange = forwardRef<\n HTMLInputElement,\n ReactInputRangeProps\n>(function ReactInputRange(props, ref) {\n const {\n autoFocus,\n className,\n disabled,\n max,\n min,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n onPressEnter,\n placeholder = [\"最小值\", \"最大值\"],\n rangeSeparator = \"~\",\n step,\n style,\n value = [null, null],\n ...restProps\n } = props;\n const rootRef = useRef<HTMLSpanElement | null>(null);\n const startInputRef = useRef<HTMLInputElement | null>(null);\n\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\n\n useEffect(() => {\n if (autoFocus) {\n startInputRef.current?.focus();\n }\n }, [autoFocus]);\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n const nextTarget = event.relatedTarget as Node | null;\n if (nextTarget && rootRef.current?.contains(nextTarget)) {\n return;\n }\n onBlur?.(event);\n };\n\n return (\n <span\n ref={rootRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-input-range`,\n disabled && `${REACT_COMPONENT_PREFIX}-input-range-disabled`,\n className,\n )}\n style={style}\n >\n <ReactNumberInput\n {...restProps}\n ref={startInputRef}\n value={value[0]}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n placeholder={placeholder[0]}\n onChange={(nextValue) => onChange?.([nextValue, value[1]])}\n onFocus={onFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onPressEnter={onPressEnter}\n />\n <span className={`${REACT_COMPONENT_PREFIX}-input-range-separator`}>\n {rangeSeparator}\n </span>\n <ReactNumberInput\n {...restProps}\n value={value[1]}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n placeholder={placeholder[1]}\n onChange={(nextValue) => onChange?.([value[0], nextValue])}\n onFocus={onFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onPressEnter={onPressEnter}\n />\n </span>\n );\n});\n","import styleInject from '#style-inject';styleInject(\".canvas-react-image-preview {\\n position: fixed;\\n inset: 0;\\n z-index: 1100;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 48px;\\n background: rgba(0, 0, 0, 0.72);\\n backdrop-filter: blur(2px);\\n opacity: 0;\\n transition: opacity 0.2s ease;\\n}\\n.canvas-react-image-preview-entered {\\n opacity: 1;\\n}\\n.canvas-react-image-preview-leave {\\n opacity: 0;\\n}\\n.canvas-react-image-preview-image {\\n max-width: 90vw;\\n max-height: 86vh;\\n object-fit: contain;\\n border-radius: 4px;\\n box-shadow: 0 12px 48px rgba(0, 0, 0, 0.32);\\n opacity: 0;\\n transition: transform 0.2s ease, opacity 0.2s ease;\\n user-select: none;\\n}\\n.canvas-react-image-preview-entered .canvas-react-image-preview-image {\\n opacity: 1;\\n}\\n.canvas-react-image-preview-leave .canvas-react-image-preview-image {\\n opacity: 0;\\n}\\n.canvas-react-image-preview-close {\\n position: fixed;\\n top: 20px;\\n right: 24px;\\n width: 40px;\\n height: 40px;\\n padding: 0;\\n border: 0;\\n border-radius: 50%;\\n color: #fff;\\n background: rgba(255, 255, 255, 0.14);\\n font: 30px/38px sans-serif;\\n cursor: pointer;\\n}\\n.canvas-react-image-preview-toolbar {\\n position: fixed;\\n bottom: 28px;\\n left: 50%;\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n padding: 6px 10px;\\n color: #fff;\\n background: rgba(0, 0, 0, 0.64);\\n border-radius: 22px;\\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.24);\\n transform: translateX(-50%);\\n opacity: 0;\\n transition: opacity 0.2s ease;\\n}\\n.canvas-react-image-preview-entered .canvas-react-image-preview-toolbar {\\n opacity: 1;\\n}\\n.canvas-react-image-preview-tool {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n padding: 0;\\n border: 0;\\n border-radius: 6px;\\n color: inherit;\\n background: transparent;\\n font: 20px/1 sans-serif;\\n cursor: pointer;\\n}\\n.canvas-react-image-preview-tool:hover:not(:disabled) {\\n background: rgba(255, 255, 255, 0.16);\\n}\\n.canvas-react-image-preview-tool:disabled {\\n color: rgba(255, 255, 255, 0.35);\\n cursor: not-allowed;\\n}\\n.canvas-react-image-preview-scale {\\n min-width: 48px;\\n color: rgba(255, 255, 255, 0.88);\\n font-size: 12px;\\n text-align: center;\\n}\\n\")","import { useEffect, useRef, useState, type ReactNode } from \"react\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactImagePreviewProps {\r\n open: boolean;\r\n src: string;\r\n alt?: string;\r\n onClose: () => void;\r\n}\r\n\r\n/**\r\n * 图片遮罩预览组件。\r\n */\r\nexport function ReactImagePreview(props: ReactImagePreviewProps) {\r\n const { open, src, alt = \"preview\", onClose } = props;\r\n const [scale, setScale] = useState(1);\r\n const [rotation, setRotation] = useState(0);\r\n const [flipX, setFlipX] = useState(false);\r\n const [flipY, setFlipY] = useState(false);\r\n const [motionState, setMotionState] = useState<\"enter\" | \"entered\" | \"leave\">(\r\n \"enter\",\r\n );\r\n const closeTimerRef = useRef<number | null>(null);\r\n\r\n const requestClose = () => {\r\n if (motionState === \"leave\") return;\r\n setMotionState(\"leave\");\r\n closeTimerRef.current = window.setTimeout(onClose, 200);\r\n };\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n setScale(1);\r\n setRotation(0);\r\n setFlipX(false);\r\n setFlipY(false);\r\n setMotionState(\"enter\");\r\n const frame = requestAnimationFrame(() => setMotionState(\"entered\"));\r\n return () => cancelAnimationFrame(frame);\r\n }, [open, src]);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === \"Escape\") requestClose();\r\n };\r\n window.addEventListener(\"keydown\", handleKeyDown);\r\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\r\n }, [open, motionState]);\r\n\r\n useEffect(\r\n () => () => {\r\n if (closeTimerRef.current != null) {\r\n window.clearTimeout(closeTimerRef.current);\r\n }\r\n },\r\n [],\r\n );\r\n\r\n if (!open) return null;\r\n return (\r\n <div\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview ${REACT_COMPONENT_PREFIX}-image-preview-${motionState}`}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n onMouseDown={(event) => {\r\n if (event.target === event.currentTarget) requestClose();\r\n }}\r\n >\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-close`}\r\n aria-label=\"关闭预览\"\r\n onClick={requestClose}\r\n >\r\n ×\r\n </button>\r\n <img\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-image`}\r\n src={src}\r\n alt={alt}\r\n style={{\r\n transform: `scale(${scale * (flipX ? -1 : 1)}, ${scale * (flipY ? -1 : 1)}) rotate(${rotation}deg)`,\r\n }}\r\n />\r\n <div\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-toolbar`}\r\n role=\"toolbar\"\r\n aria-label=\"图片预览工具栏\"\r\n >\r\n <PreviewToolButton\r\n label=\"上下翻转\"\r\n onClick={() => setFlipY((value) => !value)}\r\n >\r\n ↕\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"左右翻转\"\r\n onClick={() => setFlipX((value) => !value)}\r\n >\r\n ↔\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"逆时针旋转\"\r\n onClick={() => setRotation((value) => value - 90)}\r\n >\r\n ↶\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"顺时针旋转\"\r\n onClick={() => setRotation((value) => value + 90)}\r\n >\r\n ↷\r\n </PreviewToolButton>\r\n <PreviewToolButton\r\n label=\"缩小\"\r\n disabled={scale <= 0.5}\r\n onClick={() => setScale((value) => Math.max(value - 0.25, 0.5))}\r\n >\r\n −\r\n </PreviewToolButton>\r\n <span className={`${REACT_COMPONENT_PREFIX}-image-preview-scale`}>\r\n {Math.round(scale * 100)}%\r\n </span>\r\n <PreviewToolButton\r\n label=\"放大\"\r\n disabled={scale >= 3}\r\n onClick={() => setScale((value) => Math.min(value + 0.25, 3))}\r\n >\r\n +\r\n </PreviewToolButton>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nfunction PreviewToolButton(props: {\r\n label: string;\r\n children: ReactNode;\r\n disabled?: boolean;\r\n onClick: () => void;\r\n}) {\r\n return (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-image-preview-tool`}\r\n title={props.label}\r\n aria-label={props.label}\r\n disabled={props.disabled}\r\n onClick={props.onClick}\r\n >\r\n {props.children}\r\n </button>\r\n );\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../year/style.css\\\";\\n.canvas-react-month-grid {\\n grid-template-columns: repeat(3, minmax(0, 1fr));\\n gap: 12px 8px;\\n}\\n.canvas-react-month-cell {\\n height: 48px;\\n font-weight: 600;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactMonthPickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前月份值,格式为 YYYY-MM。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) =>\r\n String(index + 1).padStart(2, \"0\"),\r\n);\r\n\r\n/**\r\n * 基础月份选择器。\r\n */\r\nexport const ReactMonthPicker = forwardRef<HTMLInputElement, ReactMonthPickerProps>(\r\n function ReactMonthPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择月份\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"month\" | \"year\" | \"decade\">(\"month\");\r\n const parsedValue = useMemo(() => parseMonthValue(value), [value]);\r\n const [panelYear, setPanelYear] = useState(\r\n () => parsedValue?.year ?? new Date().getFullYear(),\r\n );\r\n const yearPanelStart = useMemo(() => resolveDecadeStart(panelYear), [panelYear]);\r\n const decadePanelStart = useMemo(\r\n () => Math.floor(yearPanelStart / 100) * 100,\r\n [yearPanelStart],\r\n );\r\n const yearItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index);\r\n }, [yearPanelStart]);\r\n const decadeItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);\r\n }, [decadePanelStart]);\r\n const displayValue =\r\n parsedValue == null ? \"\" : `${parsedValue.year}-${parsedValue.month}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"month\");\r\n setPanelYear(parsedValue?.year ?? new Date().getFullYear());\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={264}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 264 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-year-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"month\") {\r\n return prev - 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev - 10;\r\n }\r\n return prev - 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"month\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"month\"\r\n ? `${panelYear}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"month\") {\r\n return prev + 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev + 10;\r\n }\r\n return prev + 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"month\" && `${REACT_COMPONENT_PREFIX}-month-grid`,\r\n )}\r\n >\r\n {mode === \"month\"\r\n ? MONTHS.map((month) => {\r\n const selected =\r\n parsedValue?.year === panelYear && parsedValue.month === month;\r\n return (\r\n <button\r\n key={month}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-month-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(`${panelYear}-${month}`);\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {month}月\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart && yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === panelYear;\r\n\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(yearItem);\r\n setMode(\"month\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart && yearPanelStart <= decadeStart + 9;\r\n\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(decadeStart);\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseMonthValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(\\d{2})$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n const month = matched[2];\r\n if (!MONTHS.includes(month)) {\r\n return null;\r\n }\r\n\r\n return {\r\n month,\r\n year: Number(matched[1]),\r\n };\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import * as React from \"react\";\n\nlet compatibleIdSeed = 0;\n\n/**\n * 兼容旧版 React 的稳定 ID。\n *\n * React 18 及以上优先使用内建 `useId`;\n * 低版本则回退到当前运行时内的自增 ID。\n */\nexport function useCompatibleId(prefix = \"canvas-react-id\") {\n const nativeUseId = (React as typeof React & {\n useId?: () => string;\n }).useId;\n\n const fallbackIdRef = React.useRef<string>();\n if (!fallbackIdRef.current) {\n compatibleIdSeed += 1;\n fallbackIdRef.current = `${prefix}-${compatibleIdSeed}`;\n }\n\n return nativeUseId ? nativeUseId() : fallbackIdRef.current;\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-modal-root,\\n.canvas-react-modal-root * {\\n box-sizing: border-box;\\n}\\n.canvas-react-modal-root {\\n position: fixed;\\n inset: 0;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n line-height: 1.5;\\n}\\n.canvas-react-modal-root-passthrough {\\n pointer-events: none;\\n}\\n.canvas-react-modal-root-passthrough .canvas-react-modal {\\n pointer-events: auto;\\n}\\n.canvas-react-modal-mask {\\n position: absolute;\\n inset: 0;\\n background: rgba(0, 0, 0, 0.45);\\n}\\n.canvas-react-modal-wrap {\\n position: absolute;\\n inset: 0;\\n overflow: auto;\\n padding: 100px 24px 24px;\\n pointer-events: none;\\n}\\n.canvas-react-modal-root-centered .canvas-react-modal-wrap {\\n display: flex;\\n align-items: center;\\n padding-top: 24px;\\n}\\n.canvas-react-modal-root-fullscreen .canvas-react-modal-wrap {\\n padding: 0;\\n overflow: hidden;\\n}\\n.canvas-react-modal {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n width: 520px;\\n max-width: calc(100vw - 48px);\\n max-height: calc(100vh - 124px);\\n margin: 0 auto;\\n overflow: hidden;\\n border-radius: var(--canvas-react-radius-md, 8px);\\n background: var(--canvas-react-color-bg, #ffffff);\\n box-shadow: 0 12px 40px rgba(15, 23, 42, 0.22);\\n outline: none;\\n pointer-events: auto;\\n}\\n.canvas-react-modal-root-centered .canvas-react-modal {\\n max-height: calc(100vh - 48px);\\n}\\n.canvas-react-modal.canvas-react-modal-fullscreen {\\n width: 100% !important;\\n max-width: none;\\n height: 100%;\\n max-height: none;\\n border-radius: 0;\\n}\\n.canvas-react-modal-header {\\n display: flex;\\n flex: 0 0 auto;\\n align-items: center;\\n min-height: 56px;\\n padding: 0 16px 0 24px;\\n border-bottom: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-modal-header-draggable {\\n cursor: move;\\n user-select: none;\\n}\\n.canvas-react-modal-title {\\n min-width: 0;\\n flex: 1 1 auto;\\n color: var(--canvas-react-color-text);\\n font-size: 16px;\\n font-weight: 600;\\n overflow-wrap: anywhere;\\n}\\n.canvas-react-modal-tools {\\n display: flex;\\n flex: 0 0 auto;\\n align-items: center;\\n gap: 4px;\\n margin-left: 16px;\\n}\\n.canvas-react-modal-tool {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n padding: 0;\\n border: 0;\\n border-radius: var(--canvas-react-radius-sm, 6px);\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n cursor: pointer;\\n transition: background-color 0.18s ease, color 0.18s ease;\\n}\\n.canvas-react-modal-tool:hover {\\n background: var(--canvas-react-color-bg-hover);\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-modal-tool:focus-visible,\\n.canvas-react-modal-button:focus-visible {\\n outline: 2px solid var(--canvas-react-color-primary);\\n outline-offset: 2px;\\n}\\n.canvas-react-modal-fullscreen-icon {\\n position: relative;\\n display: block;\\n width: 15px;\\n height: 15px;\\n border: 1.5px solid currentColor;\\n}\\n.canvas-react-modal-fullscreen-icon-exit::before {\\n position: absolute;\\n inset: 3px -4px -4px 3px;\\n border-right: 1.5px solid currentColor;\\n border-bottom: 1.5px solid currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-modal-close-icon {\\n position: relative;\\n display: block;\\n width: 16px;\\n height: 16px;\\n}\\n.canvas-react-modal-close-icon::before,\\n.canvas-react-modal-close-icon::after {\\n position: absolute;\\n top: 7px;\\n left: 1px;\\n width: 14px;\\n height: 1.5px;\\n border-radius: 1px;\\n background: currentColor;\\n content: \\\"\\\";\\n}\\n.canvas-react-modal-close-icon::before {\\n transform: rotate(45deg);\\n}\\n.canvas-react-modal-close-icon::after {\\n transform: rotate(-45deg);\\n}\\n.canvas-react-modal-body {\\n min-height: 0;\\n flex: 1 1 auto;\\n overflow: auto;\\n padding: 20px 24px;\\n}\\n.canvas-react-modal-footer {\\n display: flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: flex-end;\\n gap: 8px;\\n padding: 12px 24px;\\n border-top: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-modal-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n height: var(--canvas-react-control-height, 32px);\\n min-width: 64px;\\n padding: 0 var(--canvas-react-control-padding-inline, 11px);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm, 6px);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font: inherit;\\n line-height: 1;\\n white-space: nowrap;\\n cursor: pointer;\\n transition:\\n border-color 0.18s ease,\\n background-color 0.18s ease,\\n color 0.18s ease,\\n opacity 0.18s ease;\\n}\\n.canvas-react-modal-button:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-modal-button-primary {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #ffffff;\\n}\\n.canvas-react-modal-button-primary:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n background: var(--canvas-react-color-primary-hover);\\n color: #ffffff;\\n}\\n.canvas-react-modal-button:disabled {\\n opacity: 0.56;\\n cursor: not-allowed;\\n}\\n.canvas-react-modal-loading {\\n width: 14px;\\n height: 14px;\\n border: 2px solid rgba(255, 255, 255, 0.45);\\n border-top-color: #ffffff;\\n border-radius: 50%;\\n animation: canvas-react-modal-loading 0.8s linear infinite;\\n}\\n.canvas-react-modal-motion-enter-active,\\n.canvas-react-modal-motion-leave-active {\\n transition: opacity 0.2s ease;\\n}\\n.canvas-react-modal-motion-enter-active .canvas-react-modal,\\n.canvas-react-modal-motion-leave-active .canvas-react-modal {\\n transition: opacity 0.2s ease, transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);\\n}\\n.canvas-react-modal-motion-enter-from,\\n.canvas-react-modal-motion-leave-to {\\n opacity: 0;\\n}\\n.canvas-react-modal-motion-enter-from .canvas-react-modal,\\n.canvas-react-modal-motion-leave-to .canvas-react-modal {\\n opacity: 0;\\n transform: scale(0.96) translateY(-8px);\\n}\\n@keyframes canvas-react-modal-loading {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n@media (max-width: 575px) {\\n .canvas-react-modal-wrap {\\n padding: 24px 12px;\\n }\\n .canvas-react-modal {\\n max-width: calc(100vw - 24px);\\n max-height: calc(100vh - 48px);\\n }\\n .canvas-react-modal-header {\\n padding-right: 12px;\\n padding-left: 16px;\\n }\\n .canvas-react-modal-body {\\n padding: 16px;\\n }\\n .canvas-react-modal-footer {\\n padding: 12px 16px;\\n }\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .canvas-react-modal-motion-enter-active,\\n .canvas-react-modal-motion-leave-active,\\n .canvas-react-modal-motion-enter-active .canvas-react-modal,\\n .canvas-react-modal-motion-leave-active .canvas-react-modal {\\n transition-duration: 0.01ms;\\n }\\n}\\n\")","import {\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useCompatibleId } from \"../../shared/compatible-id\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { useReactTransition } from \"../transition/index\";\nimport \"./style.css\";\n\nconst MODAL_MOTION_DURATION = 200;\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(\",\");\n\nlet bodyScrollLockCount = 0;\nlet bodyOverflowBeforeLock = \"\";\n\n/**\n * Modal 按钮属性。\n */\nexport type ReactModalButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"onClick\" | \"type\"\n>;\n\n/**\n * Modal 取消事件。\n */\nexport type ReactModalCancelEvent =\n | ReactMouseEvent<HTMLElement>\n | KeyboardEvent;\n\nexport interface ReactModalProps {\n /** 是否显示 Modal。 */\n open: boolean;\n /** 标题内容。 */\n title?: ReactNode;\n /** Modal 内容。 */\n children?: ReactNode;\n /** 底部内容,传入 false 时隐藏。 */\n footer?: ReactNode | false;\n /** Modal 宽度。@default 520 */\n width?: number | string;\n /** 是否垂直居中。@default false */\n centered?: boolean;\n /** 是否显示遮罩。@default true */\n mask?: boolean;\n /** 点击遮罩是否允许关闭。@default true */\n maskClosable?: boolean;\n /** 按下 Esc 是否允许关闭。@default true */\n keyboard?: boolean;\n /** 是否显示关闭按钮。@default true */\n closable?: boolean;\n /** 是否提供全屏切换操作。@default true */\n fullscreenable?: boolean;\n /** 是否允许拖拽标题栏移动 Modal。@default false */\n draggable?: boolean;\n /** 当前是否全屏,传入后进入受控模式。 */\n fullscreen?: boolean;\n /** 默认是否全屏。@default false */\n defaultFullscreen?: boolean;\n /** 全屏状态变化回调。 */\n onFullscreenChange?: (fullscreen: boolean) => void;\n /** 确认按钮文案。 */\n okText?: ReactNode;\n /** 取消按钮文案。 */\n cancelText?: ReactNode;\n /** 确认按钮是否加载中。 */\n confirmLoading?: boolean;\n /** 确认按钮属性。 */\n okButtonProps?: ReactModalButtonProps;\n /** 取消按钮属性。 */\n cancelButtonProps?: ReactModalButtonProps;\n /** 点击确认回调。 */\n onOk?: (event: ReactMouseEvent<HTMLButtonElement>) => void | Promise<void>;\n /** 关闭请求回调。 */\n onCancel?: (event: ReactModalCancelEvent) => void;\n /** 完成关闭动画后的回调。 */\n afterClose?: () => void;\n /** 打开状态切换完成后的回调。 */\n afterOpenChange?: (open: boolean) => void;\n /** 兼容属性;Modal 关闭动画后默认卸载内容。 */\n destroyOnClose?: boolean;\n /** 关闭后是否将焦点还原到打开前的元素。@default true */\n focusTriggerAfterClose?: boolean;\n /** 自定义层级。@default 1000 */\n zIndex?: number;\n /** Modal 面板类名。 */\n className?: string;\n /** Modal 根节点类名。 */\n rootClassName?: string;\n /** Modal 面板样式。 */\n style?: CSSProperties;\n /** 内容区域样式。 */\n bodyStyle?: CSSProperties;\n /** 遮罩样式。 */\n maskStyle?: CSSProperties;\n /** 指定 Modal 挂载容器。 */\n getContainer?: HTMLElement | (() => HTMLElement);\n}\n\n/**\n * 支持全屏操作的通用 Modal 组件。\n */\nexport function ReactModal(props: ReactModalProps) {\n const {\n afterClose,\n afterOpenChange,\n bodyStyle,\n cancelButtonProps,\n cancelText = \"取消\",\n centered = false,\n children,\n className,\n closable = true,\n confirmLoading,\n defaultFullscreen = false,\n draggable = false,\n focusTriggerAfterClose = true,\n footer,\n fullscreen,\n fullscreenable = true,\n getContainer,\n keyboard = true,\n mask = true,\n maskClosable = true,\n maskStyle,\n okButtonProps,\n okText = \"确定\",\n onCancel,\n onFullscreenChange,\n onOk,\n open,\n rootClassName,\n style,\n title,\n width = 520,\n zIndex = 1000,\n } = props;\n const transition = useReactTransition({\n duration: MODAL_MOTION_DURATION,\n name: `${REACT_COMPONENT_PREFIX}-modal-motion`,\n show: open,\n });\n const [innerFullscreen, setInnerFullscreen] = useState(defaultFullscreen);\n const [innerConfirmLoading, setInnerConfirmLoading] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const panelRef = useRef<HTMLDivElement | null>(null);\n const dragRef = useRef<{\n startX: number;\n startY: number;\n offsetX: number;\n offsetY: number;\n } | null>(null);\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n const wasRenderedRef = useRef(false);\n const afterOpenChangeRef = useRef(afterOpenChange);\n const previousOpenRef = useRef<boolean>();\n afterOpenChangeRef.current = afterOpenChange;\n const titleId = useCompatibleId(`${REACT_COMPONENT_PREFIX}-modal-title`);\n const controlledFullscreen = fullscreen !== undefined;\n const mergedFullscreen = controlledFullscreen\n ? Boolean(fullscreen)\n : innerFullscreen;\n const mergedConfirmLoading = confirmLoading ?? innerConfirmLoading;\n const hasTitle = title !== null && title !== undefined && title !== false;\n\n useEffect(() => {\n if (previousOpenRef.current === open) {\n return;\n }\n previousOpenRef.current = open;\n afterOpenChangeRef.current?.(open);\n }, [open]);\n\n useEffect(() => {\n if (!draggable || !transition.rendered) return;\n const handleMouseMove = (event: globalThis.MouseEvent) => {\n const drag = dragRef.current;\n if (!drag) return;\n setDragOffset({\n x: drag.offsetX + event.clientX - drag.startX,\n y: drag.offsetY + event.clientY - drag.startY,\n });\n };\n const handleMouseUp = () => {\n dragRef.current = null;\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [draggable, transition.rendered]);\n\n useEffect(() => {\n if (!open) {\n dragRef.current = null;\n setDragOffset({ x: 0, y: 0 });\n }\n }, [open]);\n\n useEffect(() => {\n if (!transition.rendered) {\n if (wasRenderedRef.current) {\n wasRenderedRef.current = false;\n afterClose?.();\n if (focusTriggerAfterClose) {\n restoreFocusRef.current?.focus();\n }\n restoreFocusRef.current = null;\n }\n return;\n }\n\n if (!wasRenderedRef.current) {\n wasRenderedRef.current = true;\n restoreFocusRef.current =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n }\n\n if (mask) {\n lockBodyScroll();\n return unlockBodyScroll;\n }\n }, [afterClose, focusTriggerAfterClose, mask, transition.rendered]);\n\n useEffect(() => {\n if (!mask || !open || !transition.rendered) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n panelRef.current?.focus();\n });\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [mask, open, transition.rendered]);\n\n useEffect(() => {\n if (!mask || !transition.rendered) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && keyboard && open) {\n event.preventDefault();\n onCancel?.(event);\n return;\n }\n\n if (event.key !== \"Tab\" || !open) {\n return;\n }\n trapFocus(event, panelRef.current);\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [keyboard, mask, onCancel, open, transition.rendered]);\n\n const setFullscreen = (nextFullscreen: boolean) => {\n if (!controlledFullscreen) {\n setInnerFullscreen(nextFullscreen);\n }\n if (nextFullscreen !== mergedFullscreen) {\n onFullscreenChange?.(nextFullscreen);\n }\n };\n\n const handleOk = (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (mergedConfirmLoading || okButtonProps?.disabled) {\n return;\n }\n\n const result = onOk?.(event);\n if (!isPromiseLike(result)) {\n return;\n }\n\n setInnerConfirmLoading(true);\n Promise.resolve(result)\n .catch(() => undefined)\n .finally(() => {\n setInnerConfirmLoading(false);\n });\n };\n\n if (!transition.rendered || typeof document === \"undefined\") {\n return null;\n }\n\n const container = resolveContainer(getContainer);\n if (!container) {\n return null;\n }\n\n const {\n className: okButtonClassName,\n disabled: okButtonDisabled,\n ...restOkButtonProps\n } = okButtonProps ?? {};\n const {\n className: cancelButtonClassName,\n disabled: cancelButtonDisabled,\n ...restCancelButtonProps\n } = cancelButtonProps ?? {};\n\n const defaultFooter = (\n <>\n <button\n {...restCancelButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-button`,\n cancelButtonClassName,\n )}\n disabled={mergedConfirmLoading || cancelButtonDisabled}\n onClick={onCancel}\n >\n {cancelText}\n </button>\n <button\n {...restOkButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-button`,\n `${REACT_COMPONENT_PREFIX}-modal-button-primary`,\n okButtonClassName,\n )}\n disabled={mergedConfirmLoading || okButtonDisabled}\n onClick={handleOk}\n >\n {mergedConfirmLoading ? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-modal-loading`}\n aria-hidden=\"true\"\n />\n ) : null}\n <span>{okText}</span>\n </button>\n </>\n );\n\n return createPortal(\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-root`,\n !mask && `${REACT_COMPONENT_PREFIX}-modal-root-passthrough`,\n centered && `${REACT_COMPONENT_PREFIX}-modal-root-centered`,\n mergedFullscreen && `${REACT_COMPONENT_PREFIX}-modal-root-fullscreen`,\n transition.className,\n rootClassName,\n )}\n style={{ zIndex }}\n >\n {mask ? (\n <div\n className={`${REACT_COMPONENT_PREFIX}-modal-mask`}\n style={maskStyle}\n aria-hidden=\"true\"\n onMouseDown={(event) => {\n if (maskClosable && event.target === event.currentTarget) {\n onCancel?.(event);\n }\n }}\n />\n ) : null}\n <div className={`${REACT_COMPONENT_PREFIX}-modal-wrap`}>\n <div\n ref={panelRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal`,\n mergedFullscreen && `${REACT_COMPONENT_PREFIX}-modal-fullscreen`,\n className,\n )}\n style={{\n width,\n ...style,\n ...(draggable && !mergedFullscreen\n ? {\n position: \"relative\",\n left: dragOffset.x,\n top: dragOffset.y,\n }\n : undefined),\n }}\n role=\"dialog\"\n aria-modal={mask ? \"true\" : undefined}\n aria-label={hasTitle ? undefined : \"对话框\"}\n aria-labelledby={hasTitle ? titleId : undefined}\n tabIndex={-1}\n >\n {hasTitle || closable || fullscreenable ? (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-header`,\n draggable && !mergedFullscreen\n ? `${REACT_COMPONENT_PREFIX}-modal-header-draggable`\n : undefined,\n )}\n onMouseDown={(event) => {\n if (!draggable || mergedFullscreen || event.button !== 0) {\n return;\n }\n if ((event.target as HTMLElement).closest(\"button\")) {\n return;\n }\n dragRef.current = {\n startX: event.clientX,\n startY: event.clientY,\n offsetX: dragOffset.x,\n offsetY: dragOffset.y,\n };\n event.preventDefault();\n }}\n >\n <div\n id={hasTitle ? titleId : undefined}\n className={`${REACT_COMPONENT_PREFIX}-modal-title`}\n >\n {title}\n </div>\n <div className={`${REACT_COMPONENT_PREFIX}-modal-tools`}>\n {fullscreenable ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-modal-tool`}\n title={mergedFullscreen ? \"退出全屏\" : \"全屏\"}\n aria-label={mergedFullscreen ? \"退出全屏\" : \"全屏\"}\n aria-pressed={mergedFullscreen}\n onClick={() => setFullscreen(!mergedFullscreen)}\n >\n <span\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-modal-fullscreen-icon`,\n mergedFullscreen &&\n `${REACT_COMPONENT_PREFIX}-modal-fullscreen-icon-exit`,\n )}\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n {closable ? (\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-modal-tool`}\n title=\"关闭\"\n aria-label=\"关闭\"\n onClick={onCancel}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-modal-close-icon`}\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n </div>\n </div>\n ) : null}\n <div\n className={`${REACT_COMPONENT_PREFIX}-modal-body`}\n style={bodyStyle}\n >\n {children}\n </div>\n {footer === false ? null : (\n <div className={`${REACT_COMPONENT_PREFIX}-modal-footer`}>\n {footer ?? defaultFooter}\n </div>\n )}\n </div>\n </div>\n </div>,\n container,\n );\n}\n\nfunction resolveContainer(\n getContainer?: HTMLElement | (() => HTMLElement),\n): HTMLElement | null {\n if (typeof document === \"undefined\") {\n return null;\n }\n return typeof getContainer === \"function\"\n ? getContainer()\n : (getContainer ?? document.body);\n}\n\nfunction trapFocus(event: KeyboardEvent, panel: HTMLElement | null) {\n if (!panel) {\n return;\n }\n\n const focusableElements = Array.from(\n panel.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((element) => element.offsetParent !== null);\n if (focusableElements.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n\n const first = focusableElements[0];\n const last = focusableElements[focusableElements.length - 1];\n const active = document.activeElement;\n if (event.shiftKey && (active === first || !panel.contains(active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && (active === last || !panel.contains(active))) {\n event.preventDefault();\n first.focus();\n }\n}\n\nfunction lockBodyScroll() {\n if (bodyScrollLockCount === 0) {\n bodyOverflowBeforeLock = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n }\n bodyScrollLockCount += 1;\n}\n\nfunction unlockBodyScroll() {\n bodyScrollLockCount = Math.max(0, bodyScrollLockCount - 1);\n if (bodyScrollLockCount === 0) {\n document.body.style.overflow = bodyOverflowBeforeLock;\n }\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as Promise<void>).then === \"function\"\n );\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-input-number {\\n box-sizing: border-box;\\n display: inline-flex;\\n align-items: stretch;\\n width: 100%;\\n min-width: 0;\\n height: var(--canvas-react-control-height);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n overflow: hidden;\\n transition:\\n border-color 0.2s ease,\\n box-shadow 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-input-number:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-input-number-focused {\\n border-color: var(--canvas-react-color-primary);\\n box-shadow: var(--canvas-react-shadow-focus);\\n}\\n.canvas-react-input-number-disabled {\\n background: #fafafa;\\n color: #9ca3af;\\n cursor: not-allowed;\\n}\\n.canvas-react-input-number-handler {\\n position: relative;\\n display: flex;\\n flex: 0 0 28px;\\n align-items: center;\\n justify-content: center;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: transparent;\\n color: var(--canvas-react-color-text-muted);\\n cursor: pointer;\\n transition: color 0.16s ease, background-color 0.16s ease;\\n}\\n.canvas-react-input-number-handler-down {\\n border-right: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-input-number-handler-up {\\n border-left: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-input-number-handler:hover:not(:disabled) {\\n color: var(--canvas-react-color-primary);\\n background: rgba(22, 119, 255, 0.06);\\n}\\n.canvas-react-input-number-handler:disabled {\\n color: #c4c7cf;\\n cursor: not-allowed;\\n}\\n.canvas-react-input-number-handler-icon {\\n position: relative;\\n display: block;\\n width: 10px;\\n height: 10px;\\n}\\n.canvas-react-input-number-handler-icon::before,\\n.canvas-react-input-number-handler-icon::after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n background: currentColor;\\n border-radius: 1px;\\n transform: translate(-50%, -50%);\\n}\\n.canvas-react-input-number-handler-icon::before {\\n width: 10px;\\n height: 1.5px;\\n}\\n.canvas-react-input-number-handler-up .canvas-react-input-number-handler-icon::after {\\n width: 1.5px;\\n height: 10px;\\n}\\n.canvas-react-input-number-input-wrap {\\n display: flex;\\n flex: 1 1 auto;\\n align-items: center;\\n min-width: 0;\\n height: 100%;\\n}\\n.canvas-react-input-number-input {\\n box-sizing: border-box;\\n width: 100%;\\n min-width: 0;\\n height: 100%;\\n padding: 0 8px;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font-size: inherit;\\n outline: none;\\n text-align: center;\\n appearance: textfield;\\n -moz-appearance: textfield;\\n}\\n.canvas-react-input-number-input::placeholder {\\n color: #9ca3af;\\n}\\n.canvas-react-input-number-input::-webkit-outer-spin-button,\\n.canvas-react-input-number-input::-webkit-inner-spin-button {\\n margin: 0;\\n -webkit-appearance: none;\\n}\\n.canvas-react-input-number-addon {\\n flex: 0 0 auto;\\n padding-right: 8px;\\n color: var(--canvas-react-color-text-muted);\\n font-size: 12px;\\n line-height: 1;\\n user-select: none;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type CSSProperties,\r\n type InputHTMLAttributes,\r\n type KeyboardEvent,\r\n type ReactNode,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactInputNumberProps\r\n extends Omit<\r\n InputHTMLAttributes<HTMLInputElement>,\r\n | \"size\"\r\n | \"value\"\r\n | \"defaultValue\"\r\n | \"onChange\"\r\n | \"min\"\r\n | \"max\"\r\n | \"step\"\r\n | \"prefix\"\r\n > {\r\n /**\r\n * 当前值。\r\n */\r\n value?: number | null;\r\n /**\r\n * 默认值(非受控)。\r\n */\r\n defaultValue?: number | null;\r\n /**\r\n * 最小值。\r\n */\r\n min?: number;\r\n /**\r\n * 最大值。\r\n */\r\n max?: number;\r\n /**\r\n * 步进。\r\n * @default 1\r\n */\r\n step?: number;\r\n /**\r\n * 小数精度;不传时按 step 推断。\r\n */\r\n precision?: number;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: number | null) => void;\r\n /**\r\n * 失焦或回车时规范化后的回调。\r\n */\r\n onCommit?: (value: number | null) => void;\r\n /**\r\n * 右侧附加内容,如 `%`。\r\n */\r\n addonAfter?: ReactNode;\r\n /**\r\n * 自定义格式化显示。\r\n */\r\n formatter?: (value: number | null) => string;\r\n /**\r\n * 自定义解析输入文本。\r\n */\r\n parser?: (text: string) => number | null;\r\n}\r\n\r\n/**\r\n * 左减右加数字计步器。\r\n */\r\nexport const ReactInputNumber = forwardRef<HTMLInputElement, ReactInputNumberProps>(\r\n function ReactInputNumber(props, ref) {\r\n const {\r\n addonAfter,\r\n className,\r\n defaultValue = null,\r\n disabled,\r\n formatter,\r\n max,\r\n min,\r\n onBlur,\r\n onChange,\r\n onCommit,\r\n onFocus,\r\n onKeyDown,\r\n parser,\r\n precision,\r\n step = 1,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const isControlled = value !== undefined;\r\n const [innerValue, setInnerValue] = useState<number | null>(\r\n isControlled ? (value ?? null) : defaultValue,\r\n );\r\n const currentValue = isControlled ? (value ?? null) : innerValue;\r\n const [draftText, setDraftText] = useState(\r\n formatDisplayValue(\r\n currentValue,\r\n formatter,\r\n resolvePrecision(precision, step),\r\n step,\r\n ),\r\n );\r\n const [focused, setFocused] = useState(false);\r\n const resolvedPrecision = useMemo(\r\n () => resolvePrecision(precision, step),\r\n [precision, step],\r\n );\r\n\r\n useEffect(() => {\r\n if (!focused) {\r\n setDraftText(\r\n formatDisplayValue(currentValue, formatter, resolvedPrecision, step),\r\n );\r\n }\r\n }, [currentValue, focused, formatter, resolvedPrecision, step]);\r\n\r\n const commitValue = (nextValue: number | null) => {\r\n const normalized = normalizeNumberValue(nextValue, {\r\n min,\r\n max,\r\n precision: resolvedPrecision,\r\n });\r\n if (!isControlled) {\r\n setInnerValue(normalized);\r\n }\r\n onChange?.(normalized);\r\n onCommit?.(normalized);\r\n setDraftText(\r\n formatDisplayValue(normalized, formatter, resolvedPrecision, step),\r\n );\r\n return normalized;\r\n };\r\n\r\n const stepBy = (direction: 1 | -1) => {\r\n if (disabled) {\r\n return;\r\n }\r\n const base =\r\n currentValue == null || !Number.isFinite(currentValue) ? 0 : currentValue;\r\n const next = base + direction * step;\r\n commitValue(next);\r\n };\r\n\r\n const atMin =\r\n currentValue != null && min != null && currentValue <= min + Number.EPSILON;\r\n const atMax =\r\n currentValue != null && max != null && currentValue >= max - Number.EPSILON;\r\n\r\n return (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-input-number`,\r\n focused && `${REACT_COMPONENT_PREFIX}-input-number-focused`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-input-number-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n >\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n disabled={disabled || atMin}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler`,\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler-down`,\r\n )}\r\n aria-label=\"减少\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n stepBy(-1);\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-input-number-handler-icon`}\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n <span className={`${REACT_COMPONENT_PREFIX}-input-number-input-wrap`}>\r\n <input\r\n {...restProps}\r\n ref={ref}\r\n disabled={disabled}\r\n inputMode=\"decimal\"\r\n value={draftText}\r\n className={`${REACT_COMPONENT_PREFIX}-input-number-input`}\r\n onFocus={(event) => {\r\n setFocused(true);\r\n onFocus?.(event);\r\n }}\r\n onChange={(event) => {\r\n const nextText = event.target.value;\r\n setDraftText(nextText);\r\n const parsed = parser\r\n ? parser(nextText)\r\n : parseNumberText(nextText);\r\n if (!isControlled) {\r\n setInnerValue(parsed);\r\n }\r\n onChange?.(parsed);\r\n }}\r\n onBlur={(event) => {\r\n setFocused(false);\r\n const parsed = parser\r\n ? parser(event.target.value)\r\n : parseNumberText(event.target.value);\r\n commitValue(parsed);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event: KeyboardEvent<HTMLInputElement>) => {\r\n if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n stepBy(1);\r\n } else if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n stepBy(-1);\r\n } else if (event.key === \"Enter\") {\r\n const parsed = parser\r\n ? parser(event.currentTarget.value)\r\n : parseNumberText(event.currentTarget.value);\r\n commitValue(parsed);\r\n }\r\n onKeyDown?.(event);\r\n }}\r\n />\r\n {addonAfter != null ? (\r\n <span className={`${REACT_COMPONENT_PREFIX}-input-number-addon`}>\r\n {addonAfter}\r\n </span>\r\n ) : null}\r\n </span>\r\n <button\r\n type=\"button\"\r\n tabIndex={-1}\r\n disabled={disabled || atMax}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler`,\r\n `${REACT_COMPONENT_PREFIX}-input-number-handler-up`,\r\n )}\r\n aria-label=\"增加\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n stepBy(1);\r\n }}\r\n >\r\n <span\r\n className={`${REACT_COMPONENT_PREFIX}-input-number-handler-icon`}\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseNumberText(value: string) {\r\n const text = value.trim().replace(/%/g, \"\");\r\n if (!text) {\r\n return null;\r\n }\r\n const nextValue = Number(text);\r\n return Number.isFinite(nextValue) ? nextValue : null;\r\n}\r\n\r\nfunction resolvePrecision(precision: number | undefined, step: number) {\r\n if (typeof precision === \"number\" && Number.isInteger(precision) && precision >= 0) {\r\n return precision;\r\n }\r\n const stepText = String(step);\r\n if (!stepText.includes(\".\")) {\r\n return 0;\r\n }\r\n return stepText.split(\".\")[1]?.length ?? 0;\r\n}\r\n\r\nfunction normalizeNumberValue(\r\n value: number | null,\r\n options: { min?: number; max?: number; precision: number },\r\n) {\r\n if (value == null || !Number.isFinite(value)) {\r\n return null;\r\n }\r\n let next = value;\r\n if (options.min != null) {\r\n next = Math.max(options.min, next);\r\n }\r\n if (options.max != null) {\r\n next = Math.min(options.max, next);\r\n }\r\n const factor = 10 ** options.precision;\r\n return Math.round(next * factor) / factor;\r\n}\r\n\r\nfunction formatDisplayValue(\r\n value: number | null,\r\n formatter: ((value: number | null) => string) | undefined,\r\n precision: number,\r\n step: number,\r\n) {\r\n if (formatter) {\r\n return formatter(value);\r\n }\r\n if (value == null || !Number.isFinite(value)) {\r\n return \"\";\r\n }\r\n const digits = resolvePrecision(precision, step);\r\n return digits > 0 ? value.toFixed(digits) : String(Math.round(value));\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-pagination {\\n --canvas-react-pagination-control-size: 32px;\\n --canvas-react-pagination-gap: 8px;\\n --canvas-react-pagination-padding-inline: 10px;\\n --canvas-react-control-height: var(--canvas-react-pagination-control-size);\\n display: flex;\\n align-items: center;\\n flex-wrap: nowrap;\\n gap: var(--canvas-react-pagination-gap);\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n white-space: nowrap;\\n}\\n.canvas-react-pagination-small {\\n --canvas-react-pagination-control-size: 24px;\\n --canvas-react-pagination-gap: 4px;\\n --canvas-react-pagination-padding-inline: 6px;\\n}\\n.canvas-react-pagination > .canvas-react-select-wrap {\\n flex: 0 0 auto;\\n width: auto;\\n height: auto;\\n}\\n.canvas-react-pagination > .canvas-react-select-wrap > .canvas-react-select {\\n flex-shrink: 0;\\n}\\n.canvas-react-pagination-large {\\n --canvas-react-pagination-control-size: 40px;\\n --canvas-react-pagination-gap: 10px;\\n --canvas-react-pagination-padding-inline: 14px;\\n}\\n.canvas-react-pagination-pages {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--canvas-react-pagination-gap);\\n flex-wrap: nowrap;\\n}\\n.canvas-react-pagination-button,\\n.canvas-react-pagination-page {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: var(--canvas-react-pagination-control-size);\\n height: var(--canvas-react-pagination-control-size);\\n padding: 0 var(--canvas-react-pagination-padding-inline);\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n cursor: pointer;\\n transition:\\n border-color 0.2s ease,\\n color 0.2s ease,\\n background-color 0.2s ease;\\n}\\n.canvas-react-pagination-button {\\n position: relative;\\n width: var(--canvas-react-pagination-control-size);\\n min-width: var(--canvas-react-pagination-control-size);\\n padding: 0;\\n}\\n.canvas-react-pagination-button:hover,\\n.canvas-react-pagination-page:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-pagination-page-active {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-bg-active);\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-pagination-button:disabled,\\n.canvas-react-pagination-page:disabled {\\n opacity: 0.48;\\n cursor: not-allowed;\\n}\\n.canvas-react-pagination-ellipsis {\\n color: var(--canvas-react-color-text-muted);\\n}\\n.canvas-react-pagination-arrow {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 7px;\\n height: 7px;\\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\\n transition:\\n border-color 0.18s ease,\\n transform 0.18s ease,\\n opacity 0.18s ease;\\n}\\n.canvas-react-pagination-arrow-prev {\\n transform: translate(-42%, -50%) rotate(135deg);\\n}\\n.canvas-react-pagination-arrow-next {\\n transform: translate(-58%, -50%) rotate(-45deg);\\n}\\n.canvas-react-pagination-button:hover .canvas-react-pagination-arrow {\\n border-color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-pagination-button:disabled .canvas-react-pagination-arrow {\\n opacity: 0.56;\\n}\\n.canvas-react-pagination-quick {\\n display: inline-flex;\\n align-items: center;\\n gap: var(--canvas-react-pagination-gap);\\n flex-wrap: nowrap;\\n}\\n.canvas-react-pagination-total {\\n color: var(--canvas-react-color-text-muted);\\n}\\n.canvas-react-pagination button,\\n.canvas-react-pagination input {\\n font-family: inherit;\\n font-weight: inherit;\\n font-size: inherit;\\n}\\n\")","import { useMemo, useState, type CSSProperties } from \"react\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { ReactInput } from \"../input/index\";\nimport { ReactSelect } from \"../select/index\";\nimport \"./style.css\";\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\n\n/** 分页器节点级 DOM 样式;当前页样式覆盖普通页码样式。 */\nexport type ReactPaginationStyles = Partial<\n Record<\n | \"root\"\n | \"total\"\n | \"pages\"\n | \"pageItem\"\n | \"activePageItem\"\n | \"prevButton\"\n | \"nextButton\"\n | \"prevIcon\"\n | \"nextIcon\"\n | \"ellipsis\"\n | \"sizeChanger\"\n | \"quickJumper\"\n | \"quickJumperText\"\n | \"quickJumperInput\",\n CSSProperties\n >\n>;\n\nexport interface ReactPaginationProps {\n /** 分页器容器的 DOM 样式。 */\n style?: CSSProperties;\n /** 节点样式;styles.root 优先于 style。 */\n styles?: ReactPaginationStyles;\n /**\n * 分页器尺寸。\n * @default \"middle\"\n */\n size?: \"small\" | \"middle\" | \"large\";\n /**\n * 当前页码,从 1 开始。\n */\n current: number;\n /**\n * 总条数。\n */\n total: number;\n /**\n * 每页条数。\n */\n pageSize?: number;\n /**\n * 每页条数候选。非空候选中缺少当前 pageSize 时自动补入。\n * @default [10, 20, 50, 100]\n */\n pageSizeOptions?: number[];\n /**\n * 是否禁用。\n */\n disabled?: boolean;\n /**\n * 是否显示页大小切换。\n */\n showSizeChanger?: boolean;\n /**\n * 是否显示快速跳转。\n */\n showQuickJumper?: boolean;\n /**\n * 是否使用更紧凑的页码数量。\n */\n showLessItems?: boolean;\n /**\n * 是否简易模式。\n */\n simple?: boolean;\n /**\n * 总数文案。\n */\n showTotal?: (total: number, range: [number, number]) => string;\n /**\n * 页码变化回调。\n */\n onChange?: (page: number, pageSize: number) => void;\n /**\n * 每页条数变化回调。\n */\n onPageSizeChange?: (page: number, pageSize: number) => void;\n}\n\n/**\n * 基础分页器。\n */\nexport function ReactPagination(props: ReactPaginationProps) {\n const {\n current,\n disabled,\n onChange,\n onPageSizeChange,\n pageSize = 10,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showLessItems,\n showQuickJumper,\n showSizeChanger,\n showTotal,\n simple,\n size = \"middle\",\n total,\n style: rootStyle,\n styles,\n } = props;\n const style = { ...rootStyle, ...styles?.root };\n const [quickValue, setQuickValue] = useState(\"\");\n const resolvedPageSizeOptions = useMemo(() => {\n if (\n pageSizeOptions.length === 0 ||\n pageSizeOptions.includes(pageSize) ||\n !Number.isSafeInteger(pageSize) ||\n pageSize <= 0\n ) {\n return pageSizeOptions;\n }\n return [...pageSizeOptions, pageSize].sort((left, right) => left - right);\n }, [pageSizeOptions, pageSize]);\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n const safeCurrent = clampPage(current, totalPages);\n const range: [number, number] =\n total === 0\n ? [0, 0]\n : [\n (safeCurrent - 1) * pageSize + 1,\n Math.min(safeCurrent * pageSize, total),\n ];\n const pages = useMemo(\n () => buildPageItems(safeCurrent, totalPages, showLessItems),\n [safeCurrent, totalPages, showLessItems],\n );\n\n const jumpToPage = (page: number) => {\n if (disabled) {\n return;\n }\n\n const nextPage = clampPage(page, totalPages);\n onChange?.(nextPage, pageSize);\n };\n\n const handleQuickCommit = () => {\n if (!quickValue.trim()) {\n return;\n }\n\n jumpToPage(Number(quickValue));\n setQuickValue(\"\");\n };\n\n return (\n <div\n style={\n {\n ...style,\n ...(style?.borderColor\n ? { \"--canvas-react-color-border\": style.borderColor }\n : {}),\n ...(style?.backgroundColor\n ? { \"--canvas-react-color-bg\": style.backgroundColor }\n : {}),\n ...(style?.color\n ? {\n \"--canvas-react-color-text\": style.color,\n \"--canvas-react-color-text-muted\": style.color,\n }\n : {}),\n ...(style?.fontSize\n ? {\n \"--canvas-react-font-size\":\n typeof style.fontSize === \"number\"\n ? `${style.fontSize}px`\n : style.fontSize,\n }\n : {}),\n } as CSSProperties\n }\n className={`${REACT_COMPONENT_PREFIX}-pagination ${REACT_COMPONENT_PREFIX}-pagination-${size}`}\n >\n {showTotal ? (\n <span\n style={styles?.total}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n {showTotal(total, range)}\n </span>\n ) : null}\n\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-pagination-button`}\n aria-label=\"上一页\"\n style={styles?.prevButton}\n disabled={disabled || safeCurrent <= 1}\n onClick={() => jumpToPage(safeCurrent - 1)}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-pagination-arrow ${REACT_COMPONENT_PREFIX}-pagination-arrow-prev`}\n style={styles?.prevIcon}\n />\n </button>\n\n {simple ? (\n <span\n style={styles?.pageItem}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n {safeCurrent} / {totalPages}\n </span>\n ) : (\n <div\n style={styles?.pages}\n className={`${REACT_COMPONENT_PREFIX}-pagination-pages`}\n >\n {pages.map((item, index) =>\n item === \"...\" ? (\n <span\n key={`ellipsis-${index}`}\n className={`${REACT_COMPONENT_PREFIX}-pagination-ellipsis`}\n style={styles?.ellipsis}\n >\n ...\n </span>\n ) : (\n <button\n key={item}\n type=\"button\"\n style={{\n ...styles?.pageItem,\n ...(item === safeCurrent\n ? styles?.activePageItem\n : undefined),\n }}\n className={[\n `${REACT_COMPONENT_PREFIX}-pagination-page`,\n item === safeCurrent\n ? `${REACT_COMPONENT_PREFIX}-pagination-page-active`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n disabled={disabled}\n onClick={() => jumpToPage(item)}\n >\n {item}\n </button>\n ),\n )}\n </div>\n )}\n\n <button\n type=\"button\"\n className={`${REACT_COMPONENT_PREFIX}-pagination-button`}\n aria-label=\"下一页\"\n style={styles?.nextButton}\n disabled={disabled || safeCurrent >= totalPages}\n onClick={() => jumpToPage(safeCurrent + 1)}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-pagination-arrow ${REACT_COMPONENT_PREFIX}-pagination-arrow-next`}\n style={styles?.nextIcon}\n />\n </button>\n\n {showSizeChanger && resolvedPageSizeOptions.length ? (\n <ReactSelect\n value={String(pageSize)}\n disabled={disabled}\n style={{\n width: resolvePaginationSelectWidth(size, resolvedPageSizeOptions),\n ...styles?.sizeChanger,\n }}\n options={resolvedPageSizeOptions.map((size) => ({\n label: `${size} / 页`,\n value: size,\n }))}\n onChange={(value) => {\n const nextPageSize = Number(value);\n if (!Number.isFinite(nextPageSize)) {\n return;\n }\n\n onPageSizeChange?.(1, nextPageSize);\n }}\n />\n ) : null}\n\n {showQuickJumper ? (\n <div\n style={styles?.quickJumper}\n className={`${REACT_COMPONENT_PREFIX}-pagination-quick`}\n >\n <span\n style={styles?.quickJumperText}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n 跳至\n </span>\n <ReactInput\n value={quickValue}\n disabled={disabled}\n style={{\n width: resolvePaginationInputWidth(size),\n ...styles?.quickJumperInput,\n }}\n onChange={(event) => {\n setQuickValue(event.target.value.replace(/[^\\d]/g, \"\"));\n }}\n onPressEnter={() => {\n handleQuickCommit();\n }}\n onBlur={() => {\n handleQuickCommit();\n }}\n />\n <span\n style={styles?.quickJumperText}\n className={`${REACT_COMPONENT_PREFIX}-pagination-total`}\n >\n 页\n </span>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction resolvePaginationSelectWidth(\n size: NonNullable<ReactPaginationProps[\"size\"]>,\n pageSizeOptions: number[],\n) {\n const minWidth = size === \"large\" ? 120 : 108;\n const digits = Math.max(\n 1,\n ...pageSizeOptions.map((value) => String(value).length),\n );\n // ch 随字体预留数字宽度,额外包含“ / 页”、箭头、内边距和边框。\n return `max(${minWidth}px, calc(${digits}ch + 3em + 44px))`;\n}\n\nfunction resolvePaginationInputWidth(\n size: NonNullable<ReactPaginationProps[\"size\"]>,\n) {\n return size === \"small\" ? 56 : size === \"large\" ? 80 : 72;\n}\n\nfunction buildPageItems(\n current: number,\n totalPages: number,\n showLessItems?: boolean,\n) {\n if (totalPages <= 1) {\n return [1];\n }\n\n const buffer = showLessItems ? 1 : 2;\n const start = Math.max(2, current - buffer);\n const end = Math.min(totalPages - 1, current + buffer);\n const items: Array<number | \"...\"> = [1];\n\n if (start > 2) {\n items.push(\"...\");\n }\n\n for (let page = start; page <= end; page += 1) {\n items.push(page);\n }\n\n if (end < totalPages - 1) {\n items.push(\"...\");\n }\n\n items.push(totalPages);\n return items;\n}\n\nfunction clampPage(page: number, totalPages: number) {\n if (!Number.isFinite(page)) {\n return 1;\n }\n\n return Math.min(Math.max(1, Math.trunc(page)), totalPages);\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-popconfirm-trigger {\\n display: inline-flex;\\n max-width: 100%;\\n}\\n.canvas-react-popconfirm-trigger-disabled {\\n cursor: not-allowed;\\n}\\n.canvas-react-popconfirm-popup {\\n overflow: visible;\\n}\\n.canvas-react-popconfirm {\\n position: relative;\\n box-sizing: border-box;\\n width: max-content;\\n min-width: 180px;\\n max-width: 320px;\\n padding: 12px;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n line-height: 1.5;\\n}\\n.canvas-react-popconfirm-arrow {\\n position: absolute;\\n z-index: 1;\\n box-sizing: border-box;\\n width: 10px;\\n height: 10px;\\n border: 0;\\n background: var(--canvas-react-color-bg, #ffffff);\\n pointer-events: none;\\n transform: rotate(45deg);\\n}\\n.canvas-react-popup[data-placement^=bottom] .canvas-react-popconfirm-arrow {\\n top: -5px;\\n border-top: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-left: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement^=top] .canvas-react-popconfirm-arrow {\\n bottom: -5px;\\n border-right: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-bottom: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement$=Left] .canvas-react-popconfirm-arrow {\\n left: 24px;\\n}\\n.canvas-react-popup[data-placement$=Right] .canvas-react-popconfirm-arrow {\\n right: 24px;\\n}\\n.canvas-react-popup[data-placement^=left] .canvas-react-popconfirm-arrow {\\n right: -5px;\\n border-top: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-right: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement^=right] .canvas-react-popconfirm-arrow {\\n left: -5px;\\n border-bottom: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n border-left: 1px solid var(--canvas-react-color-border, #d9d9d9);\\n}\\n.canvas-react-popup[data-placement$=Top] .canvas-react-popconfirm-arrow {\\n top: 18px;\\n}\\n.canvas-react-popup[data-placement$=Bottom] .canvas-react-popconfirm-arrow {\\n bottom: 18px;\\n}\\n.canvas-react-popconfirm-message {\\n display: flex;\\n align-items: flex-start;\\n gap: 8px;\\n}\\n.canvas-react-popconfirm-icon {\\n display: inline-flex;\\n flex: 0 0 auto;\\n align-items: center;\\n justify-content: center;\\n width: 16px;\\n height: 16px;\\n margin-top: 2px;\\n color: #faad14;\\n font-size: 12px;\\n line-height: 1;\\n}\\n.canvas-react-popconfirm-default-icon {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n width: 14px;\\n height: 14px;\\n border-radius: 50%;\\n background: #faad14;\\n color: #ffffff;\\n font-size: 11px;\\n font-weight: 700;\\n line-height: 1;\\n}\\n.canvas-react-popconfirm-text {\\n min-width: 0;\\n}\\n.canvas-react-popconfirm-title {\\n color: var(--canvas-react-color-text);\\n font-weight: 500;\\n word-break: break-word;\\n}\\n.canvas-react-popconfirm-description {\\n margin-top: 4px;\\n color: var(--canvas-react-color-text-muted);\\n word-break: break-word;\\n}\\n.canvas-react-popconfirm-actions {\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n gap: 8px;\\n margin-top: 12px;\\n}\\n.canvas-react-popconfirm-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n height: 26px;\\n min-width: 48px;\\n padding: 0 10px;\\n border: 1px solid var(--canvas-react-color-border);\\n border-radius: var(--canvas-react-radius-sm);\\n background: var(--canvas-react-color-bg);\\n color: var(--canvas-react-color-text);\\n font-size: 12px;\\n line-height: 1;\\n white-space: nowrap;\\n cursor: pointer;\\n transition:\\n border-color 0.18s ease,\\n background-color 0.18s ease,\\n color 0.18s ease,\\n opacity 0.18s ease;\\n}\\n.canvas-react-popconfirm-button:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n color: var(--canvas-react-color-primary-hover);\\n}\\n.canvas-react-popconfirm-button-primary {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #ffffff;\\n}\\n.canvas-react-popconfirm-button-primary:hover {\\n border-color: var(--canvas-react-color-primary-hover);\\n background: var(--canvas-react-color-primary-hover);\\n color: #ffffff;\\n}\\n.canvas-react-popconfirm-button:disabled {\\n opacity: 0.56;\\n cursor: not-allowed;\\n}\\n.canvas-react-popconfirm-button:disabled:hover {\\n border-color: var(--canvas-react-color-border);\\n color: var(--canvas-react-color-text);\\n}\\n.canvas-react-popconfirm-button-primary:disabled:hover {\\n border-color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-primary);\\n color: #ffffff;\\n}\\n.canvas-react-popconfirm-loading {\\n width: 12px;\\n height: 12px;\\n border: 2px solid rgba(255, 255, 255, 0.45);\\n border-top-color: #ffffff;\\n border-radius: 50%;\\n animation: canvas-react-popconfirm-loading 0.8s linear infinite;\\n}\\n@keyframes canvas-react-popconfirm-loading {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n\")","import {\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from \"react\";\nimport { useCompatibleId } from \"../../shared/compatible-id\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport { ReactPopup, type ReactPopupProps } from \"../popup/index\";\nimport \"./style.css\";\n\n/**\n * 确认气泡弹出位置。\n */\nexport type ReactPopconfirmPlacement = NonNullable<\n ReactPopupProps[\"placement\"]\n>;\n\n/**\n * 确认气泡按钮属性。\n */\nexport type ReactPopconfirmButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"onClick\" | \"type\"\n>;\n\ntype ReactPopconfirmConfirmResult = void | Promise<void>;\n\nexport interface ReactPopconfirmProps {\n /**\n * 触发确认气泡的内容。\n */\n children: ReactNode;\n /**\n * 确认标题。\n */\n title: ReactNode;\n /**\n * 补充说明。\n */\n description?: ReactNode;\n /**\n * 是否显示确认气泡,传入后进入受控模式。\n */\n open?: boolean;\n /**\n * 默认是否显示确认气泡。\n */\n defaultOpen?: boolean;\n /**\n * 是否禁用确认气泡。\n */\n disabled?: boolean;\n /**\n * 确认气泡位置。\n */\n placement?: ReactPopconfirmPlacement;\n /**\n * 与触发元素的间距。\n */\n offset?: number;\n /**\n * 自定义层级。\n */\n zIndex?: number;\n /**\n * 图标内容,传入 null 时隐藏默认图标。\n */\n icon?: ReactNode;\n /**\n * 确认按钮文案。\n */\n okText?: ReactNode;\n /**\n * 取消按钮文案。\n */\n cancelText?: ReactNode;\n /**\n * 是否显示取消按钮。\n */\n showCancel?: boolean;\n /**\n * 确认按钮是否加载中。\n */\n confirmLoading?: boolean;\n /**\n * 确认按钮属性。\n */\n okButtonProps?: ReactPopconfirmButtonProps;\n /**\n * 取消按钮属性。\n */\n cancelButtonProps?: ReactPopconfirmButtonProps;\n /**\n * 点击确认回调。\n */\n onConfirm?: (\n event: ReactMouseEvent<HTMLButtonElement>,\n ) => ReactPopconfirmConfirmResult;\n /**\n * 点击取消回调。\n */\n onCancel?: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n /**\n * 打开状态变化回调。\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * 触发器类名。\n */\n className?: string;\n /**\n * 触发器样式。\n */\n style?: CSSProperties;\n /**\n * 弹层面板类名。\n */\n popupClassName?: string;\n /**\n * 弹层面板样式。\n */\n popupStyle?: CSSProperties;\n}\n\n/**\n * 点击触发的确认气泡组件。\n */\nexport function ReactPopconfirm(props: ReactPopconfirmProps) {\n const {\n cancelButtonProps,\n cancelText = \"取消\",\n children,\n className,\n confirmLoading,\n defaultOpen = false,\n description,\n disabled = false,\n icon,\n offset = 8,\n okButtonProps,\n okText = \"确定\",\n onCancel,\n onConfirm,\n onOpenChange,\n open,\n placement = \"topLeft\",\n popupClassName,\n popupStyle,\n showCancel = true,\n style,\n title,\n zIndex,\n } = props;\n const triggerRef = useRef<HTMLSpanElement | null>(null);\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const [innerConfirmLoading, setInnerConfirmLoading] = useState(false);\n const titleId = useCompatibleId(\"canvas-react-popconfirm-title\");\n const descriptionId = useCompatibleId(\"canvas-react-popconfirm-description\");\n const controlled = open !== undefined;\n const mergedOpen = controlled ? Boolean(open) : innerOpen;\n const popupOpen = mergedOpen && !disabled;\n const mergedConfirmLoading = confirmLoading ?? innerConfirmLoading;\n const hasTitle = title !== null && title !== undefined && title !== false;\n const hasDescription =\n description !== null && description !== undefined && description !== false;\n const {\n className: okButtonClassName,\n disabled: okButtonDisabled,\n ...restOkButtonProps\n } = okButtonProps ?? {};\n const {\n className: cancelButtonClassName,\n disabled: cancelButtonDisabled,\n ...restCancelButtonProps\n } = cancelButtonProps ?? {};\n\n useEffect(() => {\n if (!disabled || !mergedOpen) {\n return;\n }\n\n if (!controlled) {\n setInnerOpen(false);\n }\n onOpenChange?.(false);\n }, [controlled, disabled, mergedOpen, onOpenChange]);\n\n const setOpen = (nextOpen: boolean) => {\n const safeOpen = disabled ? false : nextOpen;\n if (!controlled) {\n setInnerOpen(safeOpen);\n }\n if (safeOpen !== mergedOpen) {\n onOpenChange?.(safeOpen);\n }\n };\n\n const handleConfirm = (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (mergedConfirmLoading || okButtonDisabled) {\n return;\n }\n\n const result = onConfirm?.(event);\n if (isPromiseLike(result)) {\n setInnerConfirmLoading(true);\n Promise.resolve(result)\n .then(() => {\n setOpen(false);\n })\n .catch(() => undefined)\n .finally(() => {\n setInnerConfirmLoading(false);\n });\n return;\n }\n\n setOpen(false);\n };\n\n return (\n <>\n <span\n ref={triggerRef}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-trigger`,\n disabled && `${REACT_COMPONENT_PREFIX}-popconfirm-trigger-disabled`,\n className,\n )}\n style={style}\n aria-expanded={popupOpen}\n aria-haspopup=\"dialog\"\n onClick={() => {\n if (disabled) {\n return;\n }\n\n setOpen(!mergedOpen);\n }}\n >\n {children}\n </span>\n <ReactPopup\n open={popupOpen}\n anchorRef={triggerRef}\n offset={offset}\n placement={placement}\n zIndex={zIndex}\n surfaceClassName={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-popup`,\n `${REACT_COMPONENT_PREFIX}-popconfirm-placement-${placement}`,\n popupClassName,\n )}\n surfaceStyle={popupStyle}\n onOpenChange={setOpen}\n >\n <div\n className={`${REACT_COMPONENT_PREFIX}-popconfirm`}\n role=\"alertdialog\"\n aria-labelledby={hasTitle ? titleId : undefined}\n aria-describedby={hasDescription ? descriptionId : undefined}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-arrow`}\n aria-hidden=\"true\"\n />\n <div className={`${REACT_COMPONENT_PREFIX}-popconfirm-message`}>\n {icon !== null ? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-icon`}\n aria-hidden=\"true\"\n >\n {icon ?? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-default-icon`}\n >\n !\n </span>\n )}\n </span>\n ) : null}\n <div className={`${REACT_COMPONENT_PREFIX}-popconfirm-text`}>\n {hasTitle ? (\n <div\n id={titleId}\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-title`}\n >\n {title}\n </div>\n ) : null}\n {hasDescription ? (\n <div\n id={descriptionId}\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-description`}\n >\n {description}\n </div>\n ) : null}\n </div>\n </div>\n <div className={`${REACT_COMPONENT_PREFIX}-popconfirm-actions`}>\n {showCancel ? (\n <button\n {...restCancelButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-button`,\n `${REACT_COMPONENT_PREFIX}-popconfirm-button-cancel`,\n cancelButtonClassName,\n )}\n disabled={mergedConfirmLoading || cancelButtonDisabled}\n onClick={(event) => {\n onCancel?.(event);\n setOpen(false);\n }}\n >\n {cancelText}\n </button>\n ) : null}\n <button\n {...restOkButtonProps}\n type=\"button\"\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-popconfirm-button`,\n `${REACT_COMPONENT_PREFIX}-popconfirm-button-primary`,\n okButtonClassName,\n )}\n disabled={mergedConfirmLoading || okButtonDisabled}\n onClick={handleConfirm}\n >\n {mergedConfirmLoading ? (\n <span\n className={`${REACT_COMPONENT_PREFIX}-popconfirm-loading`}\n aria-hidden=\"true\"\n />\n ) : null}\n <span>{okText}</span>\n </button>\n </div>\n </div>\n </ReactPopup>\n </>\n );\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as Promise<void>).then === \"function\"\n );\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../year/style.css\\\";\\n.canvas-react-quarter-grid {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n gap: 12px 8px;\\n}\\n.canvas-react-quarter-cell {\\n height: 56px;\\n font-size: 16px;\\n font-weight: 600;\\n}\\n\")","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"../year/style.css\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactQuarterPickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前季度值,格式为 YYYY-QN。\r\n */\r\n value?: string;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\nconst QUARTERS = [\"Q1\", \"Q2\", \"Q3\", \"Q4\"] as const;\r\n\r\n/**\r\n * 基础季度选择器。\r\n */\r\nexport const ReactQuarterPicker = forwardRef<HTMLInputElement, ReactQuarterPickerProps>(\r\n function ReactQuarterPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择季度\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"quarter\" | \"year\" | \"decade\">(\"quarter\");\r\n const parsedValue = useMemo(() => parseQuarterValue(value), [value]);\r\n const [panelYear, setPanelYear] = useState(\r\n () => parsedValue?.year ?? new Date().getFullYear(),\r\n );\r\n const yearPanelStart = useMemo(() => resolveDecadeStart(panelYear), [panelYear]);\r\n const decadePanelStart = useMemo(() => {\r\n return Math.floor(yearPanelStart / 100) * 100;\r\n }, [yearPanelStart]);\r\n const yearItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index);\r\n }, [yearPanelStart]);\r\n const decadeItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);\r\n }, [decadePanelStart]);\r\n const displayValue =\r\n parsedValue == null ? \"\" : `${parsedValue.year}-${parsedValue.quarter}`;\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"quarter\");\r\n setPanelYear(parsedValue?.year ?? new Date().getFullYear());\r\n }, [open, parsedValue]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={264}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 264 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-year-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"quarter\") {\r\n return prev - 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev - 10;\r\n }\r\n return prev - 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (mode === \"quarter\") {\r\n setMode(\"year\");\r\n return;\r\n }\r\n if (mode === \"year\") {\r\n setMode(\"decade\");\r\n }\r\n }}\r\n >\r\n {mode === \"quarter\"\r\n ? `${panelYear}年`\r\n : mode === \"year\"\r\n ? `${yearPanelStart}年-${yearPanelStart + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear((prev) => {\r\n if (mode === \"quarter\") {\r\n return prev + 1;\r\n }\r\n if (mode === \"year\") {\r\n return prev + 10;\r\n }\r\n return prev + 100;\r\n });\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n <div\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-grid`,\r\n mode === \"quarter\" && `${REACT_COMPONENT_PREFIX}-quarter-grid`,\r\n )}\r\n >\r\n {mode === \"quarter\"\r\n ? QUARTERS.map((quarter) => {\r\n const selected =\r\n parsedValue?.year === panelYear && parsedValue.quarter === quarter;\r\n return (\r\n <button\r\n key={quarter}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n `${REACT_COMPONENT_PREFIX}-quarter-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(`${panelYear}-${quarter}`);\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {quarter}\r\n </button>\r\n );\r\n })\r\n : mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= yearPanelStart && yearItem <= yearPanelStart + 9;\r\n const selected = yearItem === panelYear;\r\n\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(yearItem);\r\n setMode(\"quarter\");\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n yearPanelStart >= decadeStart && yearPanelStart <= decadeStart + 9;\r\n\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelYear(decadeStart);\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseQuarterValue(value?: string) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const matched = value.match(/^(\\d{4})-(Q[1-4])$/);\r\n if (!matched) {\r\n return null;\r\n }\r\n\r\n return {\r\n year: Number(matched[1]),\r\n quarter: matched[2] as (typeof QUARTERS)[number],\r\n };\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-resizable-panels {\\n display: flex;\\n width: 100%;\\n height: 100%;\\n min-width: 0;\\n min-height: 0;\\n overflow: auto;\\n background: var(--canvas-react-color-bg, #ffffff);\\n}\\n.canvas-react-resizable-panels-horizontal {\\n flex-direction: row;\\n}\\n.canvas-react-resizable-panels-vertical {\\n flex-direction: column;\\n}\\n.canvas-react-resizable-panels-resizing {\\n cursor: inherit;\\n}\\n.canvas-react-resizable-panels-item {\\n display: contents;\\n}\\n.canvas-react-resizable-panel {\\n min-width: 0;\\n min-height: 0;\\n overflow: auto;\\n}\\n.canvas-react-resizable-panels-animated:not(.canvas-react-resizable-panels-resizing) .canvas-react-resizable-panel {\\n transition:\\n flex-basis 0.22s cubic-bezier(0.2, 0, 0, 1),\\n width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n opacity 0.14s ease;\\n}\\n.canvas-react-resizable-panel-collapsed {\\n visibility: hidden;\\n overflow: hidden;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-resizable-panels-animated:not(.canvas-react-resizable-panels-resizing) .canvas-react-resizable-panel-collapsed {\\n transition:\\n flex-basis 0.22s cubic-bezier(0.2, 0, 0, 1),\\n width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n min-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n max-height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n opacity 0.14s ease,\\n visibility 0s linear 0.22s;\\n}\\n.canvas-react-resizable-panels-divider {\\n position: relative;\\n z-index: 1;\\n flex: 0 0 9px;\\n touch-action: none;\\n outline: none;\\n}\\n.canvas-react-resizable-panels-divider-horizontal {\\n align-self: stretch;\\n width: 9px;\\n min-height: 24px;\\n cursor: col-resize;\\n}\\n.canvas-react-resizable-panels-divider-vertical {\\n width: auto;\\n min-width: 24px;\\n height: 9px;\\n cursor: row-resize;\\n}\\n.canvas-react-resizable-panels-animated .canvas-react-resizable-panels-divider {\\n transition:\\n flex-basis 0.22s cubic-bezier(0.2, 0, 0, 1),\\n width 0.22s cubic-bezier(0.2, 0, 0, 1),\\n height 0.22s cubic-bezier(0.2, 0, 0, 1),\\n opacity 0.14s ease;\\n}\\n.canvas-react-resizable-panels-divider-collapsed {\\n flex-basis: 0;\\n overflow: hidden;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-collapsed {\\n width: 0;\\n min-width: 0;\\n}\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-collapsed {\\n height: 0;\\n min-height: 0;\\n}\\n.canvas-react-resizable-panels-divider-line {\\n position: absolute;\\n background: var(--canvas-react-color-border, #d9d9d9);\\n transition:\\n width 0.16s ease,\\n height 0.16s ease,\\n background-color 0.16s ease,\\n transform 0.16s ease;\\n}\\n.canvas-react-resizable-panels-divider-horizontal .canvas-react-resizable-panels-divider-line {\\n inset: 0 auto 0 4px;\\n width: 1px;\\n}\\n.canvas-react-resizable-panels-divider-vertical .canvas-react-resizable-panels-divider-line {\\n inset: 4px 0 auto;\\n height: 1px;\\n}\\n.canvas-react-resizable-panels-divider-horizontal:hover .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-horizontal:focus-visible .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-active .canvas-react-resizable-panels-divider-line {\\n width: 3px;\\n background: var(--canvas-react-color-primary, #1677ff);\\n transform: translateX(-1px);\\n}\\n.canvas-react-resizable-panels-divider-vertical:hover .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-vertical:focus-visible .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-active .canvas-react-resizable-panels-divider-line {\\n height: 3px;\\n background: var(--canvas-react-color-primary, #1677ff);\\n transform: translateY(-1px);\\n}\\n.canvas-react-resizable-panels-divider:focus-visible {\\n box-shadow: inset 0 0 0 2px rgba(22, 119, 255, 0.12);\\n}\\n.canvas-react-resizable-panels-divider-disabled {\\n cursor: default;\\n}\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-disabled .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-horizontal.canvas-react-resizable-panels-divider-disabled:hover .canvas-react-resizable-panels-divider-line {\\n width: 1px;\\n background: var(--canvas-react-color-border, #d9d9d9);\\n transform: none;\\n}\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-disabled .canvas-react-resizable-panels-divider-line,\\n.canvas-react-resizable-panels-divider-vertical.canvas-react-resizable-panels-divider-disabled:hover .canvas-react-resizable-panels-divider-line {\\n height: 1px;\\n background: var(--canvas-react-color-border, #d9d9d9);\\n transform: none;\\n}\\n@media (prefers-reduced-motion: reduce) {\\n .canvas-react-resizable-panels-animated .canvas-react-resizable-panel,\\n .canvas-react-resizable-panels-animated .canvas-react-resizable-panels-divider,\\n .canvas-react-resizable-panels-divider-line {\\n transition-duration: 0.01ms;\\n transition-delay: 0s;\\n }\\n}\\n\")","import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nconst DEFAULT_MIN_SIZE = 80;\nconst DEFAULT_KEYBOARD_STEP = 10;\n\n/** 面板排列方向。 */\nexport type ReactResizablePanelsDirection = \"horizontal\" | \"vertical\";\n\n/** 可调整面板配置。 */\nexport interface ReactResizablePanel {\n /** 面板唯一标识。 */\n id: string;\n /** 面板内容。 */\n content: ReactNode;\n /** 是否显示当前面板。@default true */\n visible?: boolean;\n /** 是否折叠当前面板;折叠时保留内容挂载。@default false */\n collapsed?: boolean;\n /** 初始尺寸,单位为像素。 */\n size?: number;\n /** 最小尺寸,单位为像素。@default 80 */\n minSize?: number;\n /** 最大尺寸,单位为像素。 */\n maxSize?: number;\n /** 是否允许拖拽当前面板之后的分隔条。@default true */\n resizable?: boolean;\n /** 面板类名。 */\n className?: string;\n /** 面板样式。 */\n style?: CSSProperties;\n}\n\n/** 面板尺寸映射。 */\nexport type ReactResizablePanelSizes = Partial<Record<string, number>>;\n\n/** 面板调整信息。 */\nexport interface ReactResizablePanelsResizeInfo {\n /** 分隔条之前的面板标识。 */\n beforePanelId: string;\n /** 分隔条之后的面板标识。 */\n afterPanelId: string;\n /** 面板排列方向。 */\n direction: ReactResizablePanelsDirection;\n}\n\nexport interface ReactResizablePanelsProps {\n /** 面板配置。 */\n panels: ReactResizablePanel[];\n /** 面板排列方向。@default \"horizontal\" */\n direction?: ReactResizablePanelsDirection;\n /** 是否为面板展开、折叠及尺寸变化启用过渡动画。@default false */\n animated?: boolean;\n /** 当前面板尺寸,传入后进入受控模式。 */\n sizes?: ReactResizablePanelSizes;\n /** 默认面板尺寸。 */\n defaultSizes?: ReactResizablePanelSizes;\n /** 尺寸变化回调。 */\n onSizesChange?: (\n sizes: ReactResizablePanelSizes,\n info: ReactResizablePanelsResizeInfo,\n ) => void;\n /** 开始调整尺寸回调。 */\n onResizeStart?: (info: ReactResizablePanelsResizeInfo) => void;\n /** 完成调整尺寸回调。 */\n onResizeEnd?: (\n sizes: ReactResizablePanelSizes,\n info: ReactResizablePanelsResizeInfo,\n ) => void;\n /** 键盘方向键单次调整的像素值。@default 10 */\n keyboardStep?: number;\n /** 根节点类名。 */\n className?: string;\n /** 根节点样式。 */\n style?: CSSProperties;\n}\n\ninterface ResizeSession extends ReactResizablePanelsResizeInfo {\n pointerId: number;\n startPointerPosition: number;\n startBeforeSize: number;\n startAfterSize: number;\n latestSizes: ReactResizablePanelSizes;\n previousBodyCursor: string;\n previousBodyUserSelect: string;\n}\n\n/**\n * 支持多栏、多行以及嵌套布局的可调整面板组件。\n */\nexport function ReactResizablePanels(props: ReactResizablePanelsProps) {\n const {\n animated = false,\n className,\n defaultSizes,\n direction = \"horizontal\",\n keyboardStep = DEFAULT_KEYBOARD_STEP,\n onResizeEnd,\n onResizeStart,\n onSizesChange,\n panels,\n sizes,\n style,\n } = props;\n const [innerSizes, setInnerSizes] = useState<ReactResizablePanelSizes>(\n () => ({\n ...defaultSizes,\n }),\n );\n const [resizingDividerId, setResizingDividerId] = useState<string | null>(\n null,\n );\n const panelRefs = useRef<Record<string, HTMLDivElement | null>>({});\n const resizeSessionRef = useRef<ResizeSession | null>(null);\n const controlled = sizes !== undefined;\n const mergedSizes = controlled ? sizes : innerSizes;\n const visiblePanels = panels.filter((panel) => panel.visible !== false);\n\n useEffect(\n () => () => {\n const session = resizeSessionRef.current;\n if (!session) {\n return;\n }\n document.body.style.cursor = session.previousBodyCursor;\n document.body.style.userSelect = session.previousBodyUserSelect;\n resizeSessionRef.current = null;\n },\n [],\n );\n\n const applySizes = (\n nextSizes: ReactResizablePanelSizes,\n info: ReactResizablePanelsResizeInfo,\n ) => {\n if (!controlled) {\n setInnerSizes(nextSizes);\n }\n if (resizeSessionRef.current) {\n resizeSessionRef.current.latestSizes = nextSizes;\n }\n onSizesChange?.(nextSizes, info);\n };\n\n const resizePair = (params: {\n delta: number;\n beforePanel: ReactResizablePanel;\n afterPanel: ReactResizablePanel;\n startBeforeSize: number;\n startAfterSize: number;\n }) => {\n const { afterPanel, beforePanel, delta, startAfterSize, startBeforeSize } =\n params;\n const nextPair = resolveResizablePanelSizes({\n afterMaxSize: afterPanel.maxSize,\n afterMinSize: afterPanel.minSize,\n beforeMaxSize: beforePanel.maxSize,\n beforeMinSize: beforePanel.minSize,\n delta,\n startAfterSize,\n startBeforeSize,\n });\n const info = createResizeInfo(beforePanel.id, afterPanel.id, direction);\n const nextSizes = {\n ...mergedSizes,\n [beforePanel.id]: nextPair.beforeSize,\n [afterPanel.id]: nextPair.afterSize,\n };\n applySizes(nextSizes, info);\n return nextSizes;\n };\n\n const startResize = (\n event: ReactPointerEvent<HTMLDivElement>,\n beforePanel: ReactResizablePanel,\n afterPanel: ReactResizablePanel,\n ) => {\n if (event.button !== 0) {\n return;\n }\n const beforeElement = panelRefs.current[beforePanel.id];\n const afterElement = panelRefs.current[afterPanel.id];\n if (!beforeElement || !afterElement) {\n return;\n }\n\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n const startBeforeSize = resolveElementSize(beforeElement, direction);\n const startAfterSize = resolveElementSize(afterElement, direction);\n const info = createResizeInfo(beforePanel.id, afterPanel.id, direction);\n resizeSessionRef.current = {\n ...info,\n latestSizes: {\n ...mergedSizes,\n [beforePanel.id]: startBeforeSize,\n [afterPanel.id]: startAfterSize,\n },\n pointerId: event.pointerId,\n previousBodyCursor: document.body.style.cursor,\n previousBodyUserSelect: document.body.style.userSelect,\n startAfterSize,\n startBeforeSize,\n startPointerPosition: resolvePointerPosition(event, direction),\n };\n document.body.style.cursor = resolveResizeCursor(direction);\n document.body.style.userSelect = \"none\";\n setResizingDividerId(beforePanel.id);\n onResizeStart?.(info);\n };\n\n const moveResize = (\n event: ReactPointerEvent<HTMLDivElement>,\n beforePanel: ReactResizablePanel,\n afterPanel: ReactResizablePanel,\n ) => {\n const session = resizeSessionRef.current;\n if (!session || session.pointerId !== event.pointerId) {\n return;\n }\n resizePair({\n afterPanel,\n beforePanel,\n delta:\n resolvePointerPosition(event, direction) - session.startPointerPosition,\n startAfterSize: session.startAfterSize,\n startBeforeSize: session.startBeforeSize,\n });\n };\n\n const finishResize = (event: ReactPointerEvent<HTMLDivElement>) => {\n const session = resizeSessionRef.current;\n if (!session || session.pointerId !== event.pointerId) {\n return;\n }\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n document.body.style.cursor = session.previousBodyCursor;\n document.body.style.userSelect = session.previousBodyUserSelect;\n resizeSessionRef.current = null;\n setResizingDividerId(null);\n onResizeEnd?.(session.latestSizes, {\n afterPanelId: session.afterPanelId,\n beforePanelId: session.beforePanelId,\n direction: session.direction,\n });\n };\n\n const handleDividerKeyDown = (\n event: ReactKeyboardEvent<HTMLDivElement>,\n beforePanel: ReactResizablePanel,\n afterPanel: ReactResizablePanel,\n ) => {\n const deltaDirection = resolveKeyboardDeltaDirection(event.key, direction);\n if (deltaDirection === 0) {\n return;\n }\n const beforeElement = panelRefs.current[beforePanel.id];\n const afterElement = panelRefs.current[afterPanel.id];\n if (!beforeElement || !afterElement) {\n return;\n }\n\n event.preventDefault();\n const step = normalizePositiveNumber(keyboardStep, DEFAULT_KEYBOARD_STEP);\n const nextSizes = resizePair({\n afterPanel,\n beforePanel,\n delta: deltaDirection * step,\n startAfterSize: resolveElementSize(afterElement, direction),\n startBeforeSize: resolveElementSize(beforeElement, direction),\n });\n onResizeEnd?.(\n nextSizes,\n createResizeInfo(beforePanel.id, afterPanel.id, direction),\n );\n };\n\n return (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-resizable-panels`,\n `${REACT_COMPONENT_PREFIX}-resizable-panels-${direction}`,\n animated && `${REACT_COMPONENT_PREFIX}-resizable-panels-animated`,\n resizingDividerId !== null &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-resizing`,\n className,\n )}\n style={style}\n >\n {visiblePanels.map((panel, index) => {\n const nextPanel = visiblePanels[index + 1];\n const configuredSize = mergedSizes[panel.id] ?? panel.size;\n const collapsed = panel.collapsed === true;\n const minSize = collapsed\n ? 0\n : normalizePositiveNumber(panel.minSize, DEFAULT_MIN_SIZE);\n const maxSize = collapsed\n ? 0\n : normalizeMaxSize(panel.maxSize, minSize);\n const panelStyle = collapsed\n ? resolveCollapsedPanelStyle(direction)\n : resolvePanelStyle({\n configuredSize,\n direction,\n isLast: index === visiblePanels.length - 1,\n maxSize,\n minSize,\n });\n const dividerCollapsed = nextPanel\n ? collapsed || nextPanel.collapsed === true\n : false;\n const dividerDisabled = panel.resizable === false || dividerCollapsed;\n\n return (\n <div\n className={`${REACT_COMPONENT_PREFIX}-resizable-panels-item`}\n key={panel.id}\n >\n <div\n ref={(element) => {\n panelRefs.current[panel.id] = element;\n }}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-resizable-panel`,\n collapsed &&\n `${REACT_COMPONENT_PREFIX}-resizable-panel-collapsed`,\n panel.className,\n )}\n style={{\n ...panelStyle,\n ...panel.style,\n ...(collapsed ? panelStyle : undefined),\n }}\n data-panel-id={panel.id}\n aria-hidden={collapsed || undefined}\n >\n {panel.content}\n </div>\n {nextPanel ? (\n <div\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider`,\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-${direction}`,\n dividerDisabled &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-disabled`,\n dividerCollapsed &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-collapsed`,\n resizingDividerId === panel.id &&\n `${REACT_COMPONENT_PREFIX}-resizable-panels-divider-active`,\n )}\n role=\"separator\"\n aria-label={`调整 ${panel.id} 与 ${nextPanel.id} 的${\n direction === \"horizontal\" ? \"宽度\" : \"高度\"\n }`}\n aria-disabled={dividerDisabled}\n aria-orientation={\n direction === \"horizontal\" ? \"vertical\" : \"horizontal\"\n }\n aria-valuemin={minSize}\n aria-valuemax={Number.isFinite(maxSize) ? maxSize : undefined}\n aria-valuenow={\n configuredSize == null\n ? undefined\n : Math.round(configuredSize)\n }\n tabIndex={dividerDisabled ? -1 : 0}\n onKeyDown={(event) => {\n if (!dividerDisabled) {\n handleDividerKeyDown(event, panel, nextPanel);\n }\n }}\n onPointerCancel={finishResize}\n onPointerDown={(event) => {\n if (!dividerDisabled) {\n startResize(event, panel, nextPanel);\n }\n }}\n onPointerMove={(event) => {\n if (!dividerDisabled) {\n moveResize(event, panel, nextPanel);\n }\n }}\n onPointerUp={finishResize}\n >\n <span\n className={`${REACT_COMPONENT_PREFIX}-resizable-panels-divider-line`}\n aria-hidden=\"true\"\n />\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\n/** 根据拖拽距离与相邻面板约束计算新尺寸。 */\nexport function resolveResizablePanelSizes(params: {\n delta: number;\n startBeforeSize: number;\n startAfterSize: number;\n beforeMinSize?: number;\n beforeMaxSize?: number;\n afterMinSize?: number;\n afterMaxSize?: number;\n}) {\n const {\n afterMaxSize,\n afterMinSize,\n beforeMaxSize,\n beforeMinSize,\n delta,\n startAfterSize,\n startBeforeSize,\n } = params;\n const safeBeforeMin = normalizePositiveNumber(\n beforeMinSize,\n DEFAULT_MIN_SIZE,\n );\n const safeAfterMin = normalizePositiveNumber(afterMinSize, DEFAULT_MIN_SIZE);\n const safeBeforeMax = normalizeMaxSize(beforeMaxSize, safeBeforeMin);\n const safeAfterMax = normalizeMaxSize(afterMaxSize, safeAfterMin);\n const minDelta = Math.max(\n safeBeforeMin - startBeforeSize,\n startAfterSize - safeAfterMax,\n );\n const maxDelta = Math.min(\n safeBeforeMax - startBeforeSize,\n startAfterSize - safeAfterMin,\n );\n const safeDelta = clamp(\n Number.isFinite(delta) ? delta : 0,\n minDelta,\n maxDelta,\n );\n\n return {\n afterSize: Math.round((startAfterSize - safeDelta) * 100) / 100,\n beforeSize: Math.round((startBeforeSize + safeDelta) * 100) / 100,\n };\n}\n\nfunction createResizeInfo(\n beforePanelId: string,\n afterPanelId: string,\n direction: ReactResizablePanelsDirection,\n): ReactResizablePanelsResizeInfo {\n return { afterPanelId, beforePanelId, direction };\n}\n\nfunction resolveElementSize(\n element: HTMLElement,\n direction: ReactResizablePanelsDirection,\n) {\n const rect = element.getBoundingClientRect();\n return direction === \"horizontal\" ? rect.width : rect.height;\n}\n\nfunction resolvePointerPosition(\n event: ReactPointerEvent<HTMLDivElement>,\n direction: ReactResizablePanelsDirection,\n) {\n return direction === \"horizontal\" ? event.clientX : event.clientY;\n}\n\nfunction resolveResizeCursor(direction: ReactResizablePanelsDirection) {\n return direction === \"horizontal\" ? \"col-resize\" : \"row-resize\";\n}\n\nfunction resolveKeyboardDeltaDirection(\n key: string,\n direction: ReactResizablePanelsDirection,\n) {\n if (direction === \"horizontal\") {\n return key === \"ArrowLeft\" ? -1 : key === \"ArrowRight\" ? 1 : 0;\n }\n return key === \"ArrowUp\" ? -1 : key === \"ArrowDown\" ? 1 : 0;\n}\n\nfunction resolveCollapsedPanelStyle(\n direction: ReactResizablePanelsDirection,\n): CSSProperties {\n return direction === \"horizontal\"\n ? { flex: \"0 0 0px\", maxWidth: 0, minWidth: 0, width: 0 }\n : { flex: \"0 0 0px\", height: 0, maxHeight: 0, minHeight: 0 };\n}\n\nfunction resolvePanelStyle(params: {\n configuredSize?: number;\n direction: ReactResizablePanelsDirection;\n isLast: boolean;\n maxSize: number;\n minSize: number;\n}): CSSProperties {\n const { configuredSize, direction, isLast, maxSize, minSize } = params;\n const size = normalizeOptionalSize(configuredSize, minSize, maxSize);\n const flex =\n size == null ? \"1 1 0\" : isLast ? `1 1 ${size}px` : `0 0 ${size}px`;\n return direction === \"horizontal\"\n ? {\n flex,\n maxWidth: Number.isFinite(maxSize) ? maxSize : undefined,\n minWidth: minSize,\n width: size,\n }\n : {\n flex,\n height: size,\n maxHeight: Number.isFinite(maxSize) ? maxSize : undefined,\n minHeight: minSize,\n };\n}\n\nfunction normalizeOptionalSize(\n value: number | undefined,\n minSize: number,\n maxSize: number,\n) {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return undefined;\n }\n return clamp(value, minSize, maxSize);\n}\n\nfunction normalizePositiveNumber(value: number | undefined, fallback: number) {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : fallback;\n}\n\nfunction normalizeMaxSize(value: number | undefined, minSize: number) {\n return typeof value === \"number\" && Number.isFinite(value)\n ? Math.max(value, minSize)\n : Number.POSITIVE_INFINITY;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n if (min > max) {\n return min;\n }\n return Math.min(Math.max(value, min), max);\n}\n","/** 级联选择组件内部使用的节点结构。 */\nexport interface CascaderSelectionOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n children?: CascaderSelectionOption[];\n}\n\n/** 级联选择保留数字和字符串类型,不使用分隔符拼接路径。 */\nexport type CascaderPath = (string | number)[];\n/** 多选回填策略:优先完整父级,或仅回填末级。 */\nexport type CascaderCheckedStrategy = \"SHOW_PARENT\" | \"SHOW_CHILD\";\n\ninterface Entry {\n path: CascaderPath;\n children: Entry[];\n leaves: string[];\n disabled: boolean;\n}\n\n/** 建立多选树索引,禁用节点隔断父子联动。 */\nexport function createCascaderSelection(options: CascaderSelectionOption[]) {\n const entries = new Map<string, Entry>();\n const visit = (\n items: CascaderSelectionOption[],\n parents: CascaderSelectionOption[],\n disabled = false,\n ): Entry[] =>\n items.map((item) => {\n const nodes = [...parents, item];\n const path = nodes.map((node) => node.value);\n const key = JSON.stringify(path);\n const entry: Entry = {\n path,\n children: [],\n leaves: [],\n disabled: disabled || !!item.disabled,\n };\n entries.set(key, entry);\n entry.children = visit(item.children ?? [], nodes, entry.disabled);\n entry.leaves = entry.disabled\n ? []\n : entry.children.length\n ? entry.children.flatMap((child) => child.leaves)\n : [key];\n return entry;\n });\n const roots = visit(options, []);\n\n /** 将父级回填路径展开为可联动末级,并保留未知或禁用的已选路径。 */\n const expand = (value: CascaderPath[]) => {\n const checked = new Set<string>();\n const preserved = new Map<string, CascaderPath>();\n for (const path of value) {\n const key = JSON.stringify(path);\n const entry = entries.get(key);\n if (!entry || entry.disabled || !entry.leaves.length)\n preserved.set(key, path);\n else entry.leaves.forEach((leaf) => checked.add(leaf));\n }\n return { checked, preserved };\n };\n const state = (entry: Entry | undefined, checked: Set<string>) => {\n const count = entry?.leaves.filter((leaf) => checked.has(leaf)).length ?? 0;\n return {\n checked: count > 0 && count === entry?.leaves.length,\n indeterminate: count > 0 && count < (entry?.leaves.length ?? 0),\n };\n };\n const collect = (\n checked: Set<string>,\n preserved: Map<string, CascaderPath>,\n strategy: CascaderCheckedStrategy,\n ) => {\n const paths: CascaderPath[] = [];\n const walk = (entry: Entry) => {\n if (entry.disabled) return;\n if (\n state(entry, checked).checked &&\n (strategy === \"SHOW_PARENT\" || !entry.children.length)\n )\n paths.push(entry.path);\n else entry.children.forEach(walk);\n };\n roots.forEach(walk);\n return [...paths, ...preserved.values()];\n };\n return {\n /** 归一化回填值,去重并应用父级/末级策略。 */\n normalize(value: CascaderPath[], strategy: CascaderCheckedStrategy) {\n const { checked, preserved } = expand(value);\n return collect(checked, preserved, strategy);\n },\n /** 计算某一路径的全选和半选状态。 */\n getState(value: CascaderPath[], path: CascaderPath) {\n const { checked, preserved } = expand(value);\n if (preserved.has(JSON.stringify(path)))\n return { checked: true, indeterminate: false };\n return state(entries.get(JSON.stringify(path)), checked);\n },\n /** 切换某个节点以及全部可用后代,不修改入参。 */\n toggle(\n value: CascaderPath[],\n path: CascaderPath,\n strategy: CascaderCheckedStrategy,\n ) {\n const entry = entries.get(JSON.stringify(path));\n if (!entry || entry.disabled || !entry.leaves.length) return value;\n const { checked, preserved } = expand(value);\n const remove = state(entry, checked).checked;\n entry.leaves.forEach((leaf) =>\n remove ? checked.delete(leaf) : checked.add(leaf),\n );\n return collect(checked, preserved, strategy);\n },\n };\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-cascader {\\n width: 100%;\\n min-width: 0;\\n}\\n.canvas-react-cascader > .canvas-react-input-affix-wrapper {\\n width: 100%;\\n}\\n.canvas-react-cascader-menus {\\n display: flex;\\n max-width: calc(100vw - 24px);\\n overflow: auto;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n}\\n.canvas-react-cascader-menu {\\n flex: 0 0 auto;\\n min-width: 120px;\\n max-width: 320px;\\n max-height: min(256px, calc(100vh - 48px));\\n overflow: auto;\\n padding: 4px;\\n}\\n.canvas-react-cascader-menu + .canvas-react-cascader-menu {\\n border-left: 1px solid var(--canvas-react-color-border);\\n}\\n.canvas-react-cascader-option {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 20px;\\n padding: 5px 10px;\\n line-height: 22px;\\n border-radius: var(--canvas-react-radius-sm);\\n cursor: pointer;\\n white-space: nowrap;\\n}\\n.canvas-react-cascader-check {\\n display: inline-flex;\\n flex: 0 0 auto;\\n margin-right: -12px;\\n}\\n.canvas-react-cascader-check > * {\\n pointer-events: none;\\n}\\n.canvas-react-cascader-option > span:not(.canvas-react-cascader-check):not(.canvas-react-cascader-chevron) {\\n flex: 1;\\n}\\n.canvas-react-cascader-option[aria-selected=true] {\\n color: var(--canvas-react-color-primary);\\n background: var(--canvas-react-color-bg-active);\\n}\\n.canvas-react-cascader-option[data-active=true] {\\n background: var(--canvas-react-color-bg-hover, #f5f5f5);\\n}\\n.canvas-react-cascader-option[aria-disabled=true] {\\n opacity: 0.4;\\n cursor: not-allowed;\\n}\\n.canvas-react-cascader-empty {\\n padding: 8px 10px;\\n color: var(--canvas-react-color-text-muted);\\n}\\n.canvas-react-cascader-chevron {\\n width: 7px;\\n height: 7px;\\n flex: 0 0 auto;\\n margin-left: 8px;\\n border-top: 1.5px solid #9ca3af;\\n border-right: 1.5px solid #9ca3af;\\n transform: rotate(45deg);\\n transform-origin: center;\\n transition: transform 0.18s ease, border-color 0.18s ease;\\n}\\n.canvas-react-cascader-option:not([aria-disabled=true]):hover .canvas-react-cascader-chevron,\\n.canvas-react-cascader-option[data-expanded=true] .canvas-react-cascader-chevron {\\n border-color: #6b7280;\\n transform: rotate(135deg);\\n}\\n\")","import { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\nimport { ReactPopup } from \"../popup/index\";\nimport { ReactCheckbox } from \"../checkbox/index\";\nimport {\n createCascaderSelection,\n type CascaderPath,\n type CascaderCheckedStrategy,\n} from \"./cascader-selection\";\nexport type {\n CascaderPath,\n CascaderCheckedStrategy,\n} from \"./cascader-selection\";\nimport \"../select/style.css\";\nimport \"./style.css\";\n\n/** 级联选择树节点;值保留原始字符串或数字类型。 */\nexport interface ReactCascaderOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n children?: ReactCascaderOption[];\n}\n\n/** 选择来源及是否已完成路径选择。 */\nexport interface ReactCascaderChangeInfo {\n trigger: \"mouse\" | \"keyboard\" | \"clear\";\n complete: boolean;\n}\n\n/** 单选或多选级联选择配置。 */\nexport interface ReactCascaderProps extends Omit<\n ReactInputProps,\n \"value\" | \"defaultValue\" | \"onChange\" | \"onPressEnter\" | \"displayRender\"\n> {\n value?: CascaderPath | CascaderPath[];\n /** 多选时使用二维路径数组,勾选不会关闭弹层。 */\n multiple?: boolean;\n /** 多选回填策略,默认 SHOW_PARENT。 */\n showCheckedStrategy?: CascaderCheckedStrategy;\n options?: ReactCascaderOption[];\n showSearch?: boolean;\n changeOnSelect?: boolean;\n expandTrigger?: \"click\" | \"hover\";\n displayRender?: (\n labels: string[],\n selectedOptions: ReactCascaderOption[],\n ) => string;\n onChange?: (\n value: CascaderPath | CascaderPath[],\n selectedOptions: ReactCascaderOption[] | ReactCascaderOption[][],\n info: ReactCascaderChangeInfo,\n ) => void;\n}\n\n/** 沿当前值路径查找选项,不将数字值转换成字符串。 */\nfunction resolvePath(\n options: ReactCascaderOption[],\n value: (string | number)[],\n) {\n const path: ReactCascaderOption[] = [];\n for (const part of value) {\n const item = options.find((option) => option.value === part);\n if (!item) break;\n path.push(item);\n options = item.children ?? [];\n }\n return path;\n}\n\nconst EMPTY_OPTIONS: ReactCascaderOption[] = [];\nconst EMPTY_VALUE: (string | number)[] = [];\n\n/** 多列展开的级联选择器,复用现有输入框、浮层及主题。 */\nexport function ReactCascader(props: ReactCascaderProps) {\n const {\n value = EMPTY_VALUE,\n options = EMPTY_OPTIONS,\n showSearch = false,\n multiple = false,\n showCheckedStrategy = \"SHOW_PARENT\",\n changeOnSelect = false,\n expandTrigger = \"click\",\n displayRender,\n onChange,\n allowClear = true,\n disabled,\n readOnly,\n onFocus,\n onBlur,\n onClick,\n onKeyDown,\n ...inputProps\n } = props;\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const popupRef = useRef<HTMLDivElement>(null);\n const popupId = useId();\n const selection = useMemo(() => createCascaderSelection(options), [options]);\n const singleValue = (multiple ? EMPTY_VALUE : value) as CascaderPath;\n const multipleValue = (\n multiple ? value.filter(Array.isArray) : []\n ) as CascaderPath[];\n const selected = useMemo(\n () => resolvePath(options, singleValue),\n [options, singleValue],\n );\n const [path, setPath] = useState(selected);\n const [open, setOpen] = useState(false);\n const [keyword, setKeyword] = useState(\"\");\n const [typing, setTyping] = useState(false);\n const [focus, setFocus] = useState({ column: 0, index: -1 });\n const interactive = !disabled && !readOnly;\n useEffect(() => {\n setPath(selected);\n }, [selected]);\n const displayPath = (valuePath: CascaderPath) => {\n const nodes = resolvePath(options, valuePath);\n const labels = valuePath.map(\n (part, index) => nodes[index]?.label ?? String(part),\n );\n return displayRender?.(labels, nodes) ?? labels.join(\" / \");\n };\n const text = multiple\n ? selection\n .normalize(multipleValue, showCheckedStrategy)\n .map(displayPath)\n .join(\";\")\n : displayPath(singleValue);\n const columns: ReactCascaderOption[][] = [options];\n for (const item of path) {\n if (!item.children?.length) break;\n columns.push(item.children);\n }\n const searching = showSearch && keyword.trim().length > 0;\n const results = useMemo(() => {\n if (!keyword.trim()) return [];\n const matches: ReactCascaderOption[][] = [];\n const visit = (\n items: ReactCascaderOption[],\n parents: ReactCascaderOption[],\n ) => {\n for (const item of items) {\n if (item.disabled) continue;\n const next = [...parents, item];\n if (\n (!item.children?.length || changeOnSelect || multiple) &&\n next\n .map((part) => part.label)\n .join(\" / \")\n .toLocaleLowerCase()\n .includes(keyword.trim().toLocaleLowerCase())\n )\n matches.push(next);\n if (item.children?.length) visit(item.children, next);\n }\n };\n visit(options, []);\n return matches;\n }, [options, keyword, changeOnSelect, multiple]);\n\n useEffect(() => {\n popupRef.current\n ?.querySelector<HTMLElement>(\"[data-active='true']\")\n ?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [focus, open]);\n\n /** 多选只更新草稿,单选选择末级或搜索结果时完成选择。 */\n const toggle = (\n next: ReactCascaderOption[],\n trigger: \"mouse\" | \"keyboard\",\n ) => {\n const updated = selection.toggle(\n multipleValue,\n next.map((item) => item.value),\n showCheckedStrategy,\n );\n onChange?.(\n updated,\n updated.map((parts) => resolvePath(options, parts)),\n { trigger, complete: false },\n );\n };\n const choose = (\n next: ReactCascaderOption[],\n trigger: \"mouse\" | \"keyboard\",\n fromSearch = false,\n ) => {\n const item = next[next.length - 1];\n if (!item || next.some((option) => option.disabled)) return;\n setPath(next);\n if (multiple) {\n // 分支文案只展开;复选框或键盘才切换整个分支。\n if (!item.children?.length || fromSearch) toggle(next, trigger);\n return;\n }\n const complete = !item.children?.length || fromSearch;\n if (complete || changeOnSelect)\n onChange?.(\n next.map((option) => option.value),\n next,\n { trigger, complete },\n );\n if (complete) {\n setOpen(false);\n setKeyword(\"\");\n setTyping(false);\n }\n };\n const show = () => {\n if (!interactive) return;\n setOpen(true);\n if (!multiple) setPath(selected);\n };\n return (\n <div\n ref={anchorRef}\n className={`canvas-react-cascader${open && interactive ? \" canvas-react-cascader-open\" : \"\"}`}\n >\n <ReactInput\n ref={inputRef}\n {...inputProps}\n disabled={disabled}\n readOnly={readOnly || !showSearch}\n allowClear={false}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? popupId : undefined}\n aria-activedescendant={\n open && focus.index >= 0\n ? `${popupId}-${searching ? 0 : focus.column}-${focus.index}`\n : undefined\n }\n value={open && showSearch && typing ? keyword : text}\n onFocus={(event) => {\n show();\n onFocus?.(event);\n }}\n onClick={(event) => {\n show();\n onClick?.(event);\n }}\n onBlur={(event) => {\n setOpen(false);\n setKeyword(\"\");\n setTyping(false);\n onBlur?.(event);\n }}\n onChange={(event) => {\n setTyping(true);\n setKeyword(event.target.value);\n setOpen(true);\n setFocus({ column: 0, index: -1 });\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !interactive) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n setKeyword(\"\");\n setTyping(false);\n return;\n }\n if (\n !(multiple && event.key === \" \" && (!showSearch || !typing)) &&\n ![\n \"ArrowDown\",\n \"ArrowUp\",\n \"ArrowRight\",\n \"ArrowLeft\",\n \"Enter\",\n ].includes(event.key)\n )\n return;\n event.preventDefault();\n setOpen(true);\n const column = searching\n ? 0\n : Math.min(focus.column, columns.length - 1);\n const items = searching\n ? results.map((result) => result[result.length - 1])\n : columns[column];\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\n let index = focus.index;\n if (index < 0) index = direction === 1 ? -1 : 0;\n for (let count = 0; count < items.length; count++) {\n index = (index + direction + items.length) % items.length;\n if (!items[index].disabled) {\n setFocus({ column, index });\n break;\n }\n }\n } else if (event.key === \"ArrowLeft\" && !searching) {\n const previous = Math.max(0, column - 1);\n setFocus({\n column: previous,\n index: columns[previous].indexOf(path[previous]),\n });\n } else {\n const item = items[focus.index];\n if (!item || item.disabled) return;\n const next = searching\n ? results[focus.index]\n : [...path.slice(0, column), item];\n if (multiple && (event.key === \"Enter\" || event.key === \" \"))\n toggle(next, \"keyboard\");\n else if (event.key === \"Enter\") choose(next, \"keyboard\", searching);\n else if (event.key !== \"ArrowRight\") return;\n if (!searching && item.children?.length) {\n setPath(next);\n setFocus({\n column: column + 1,\n index: item.children.findIndex((child) => !child.disabled),\n });\n }\n }\n }}\n suffix={\n <span\n className={`canvas-react-select-actions${allowClear && interactive && value.length > 0 ? \" canvas-react-select-actions-clearable\" : \"\"}`}\n onPointerDown={(event) => {\n if (!interactive) return;\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n if (!interactive) return;\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n if (!interactive) return;\n event.stopPropagation();\n inputRef.current?.focus({ preventScroll: true });\n show();\n }}\n >\n {allowClear && interactive && value.length > 0 ? (\n <button\n type=\"button\"\n className=\"canvas-react-select-clear\"\n tabIndex={-1}\n aria-label=\"清空级联选择\"\n onPointerDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n inputRef.current?.focus({ preventScroll: true });\n setKeyword(\"\");\n setTyping(false);\n setPath([]);\n setFocus({ column: 0, index: -1 });\n setOpen(true);\n onChange?.([], [], { trigger: \"clear\", complete: false });\n }}\n >\n <span\n className=\"canvas-react-select-clear-icon\"\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n <span\n className={`canvas-react-select-arrow${open && interactive ? \" canvas-react-select-arrow-open\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </span>\n }\n />\n <ReactPopup\n constrainHeight\n open={open && interactive}\n anchorRef={anchorRef}\n onOpenChange={setOpen}\n surfaceClassName=\"canvas-react-cascader-popup\"\n >\n <div\n ref={popupRef}\n id={popupId}\n className=\"canvas-react-cascader-menus\"\n >\n {(searching\n ? [results.map((result) => result[result.length - 1])]\n : columns\n ).map((items, column) => (\n <div\n key={column}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={searching ? \"搜索结果\" : `第 ${column + 1} 级选项`}\n className=\"canvas-react-cascader-menu\"\n >\n {items.length === 0 ? (\n <div className=\"canvas-react-cascader-empty\">暂无数据</div>\n ) : (\n items.map((item, index) => {\n const next = searching\n ? results[index]\n : [...path.slice(0, column), item];\n const active =\n focus.column === column && focus.index === index;\n const checkedState = multiple\n ? selection.getState(\n multipleValue,\n next.map((node) => node.value),\n )\n : { checked: false, indeterminate: false };\n return (\n <div\n key={index}\n id={`${popupId}-${column}-${index}`}\n role=\"option\"\n aria-selected={\n multiple ? checkedState.checked : path[column] === item\n }\n aria-disabled={!!item.disabled}\n data-active={active}\n className=\"canvas-react-cascader-option\"\n data-expanded={\n !!item.children?.length && path[column] === item\n }\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => {\n if (item.disabled) return;\n setFocus({ column, index });\n if (\n expandTrigger === \"hover\" &&\n !searching &&\n item.children?.length\n )\n setPath(next);\n }}\n onClick={() => {\n setFocus({ column, index });\n choose(next, \"mouse\", searching);\n }}\n >\n {multiple ? (\n <span\n className=\"canvas-react-cascader-check\"\n role=\"checkbox\"\n aria-checked={\n checkedState.indeterminate\n ? \"mixed\"\n : checkedState.checked\n }\n aria-label={`选择 ${next.map((node) => node.label).join(\" / \")}`}\n aria-disabled={!!item.disabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (!item.disabled) toggle(next, \"mouse\");\n }}\n >\n <ReactCheckbox\n tabIndex={-1}\n aria-hidden=\"true\"\n readOnly\n checked={checkedState.checked}\n indeterminate={checkedState.indeterminate}\n disabled={item.disabled}\n />\n </span>\n ) : null}\n <span>\n {searching\n ? next.map((part) => part.label).join(\" / \")\n : item.label}\n </span>\n {!searching && item.children?.length ? (\n <span\n className=\"canvas-react-cascader-chevron\"\n aria-hidden=\"true\"\n />\n ) : null}\n </div>\n );\n })\n )}\n </div>\n ))}\n </div>\n </ReactPopup>\n </div>\n );\n}\n","/** 树选择节点;value 在整棵树中唯一,数字和字符串严格区分。 */\nexport interface TreeSelectNode {\n title: string;\n value: string | number;\n key?: string | number;\n disabled?: boolean;\n selectable?: boolean;\n children?: TreeSelectNode[];\n}\n\n/** 树选择的扁平索引项,包含展开和搜索所需的祖先链。 */\nexport interface TreeSelectEntry {\n node: TreeSelectNode;\n key: string | number;\n parents: TreeSelectEntry[];\n depth: number;\n}\n\n/** 创建组件内部的树索引,用于搜索、展开和回显。 */\nexport function createTreeSelectIndex(treeData: TreeSelectNode[]) {\n const entries: TreeSelectEntry[] = [];\n const byValue = new Map<string | number, TreeSelectEntry>();\n const visit = (nodes: TreeSelectNode[], parents: TreeSelectEntry[]) => {\n for (const node of nodes) {\n const entry = {\n node,\n key: node.key ?? node.value,\n parents,\n depth: parents.length,\n };\n entries.push(entry);\n byValue.set(node.value, entry);\n if (node.children?.length) visit(node.children, [...parents, entry]);\n }\n };\n visit(treeData, []);\n return { entries, byValue };\n}\n\n/** 归一化单选/多选值;清空单选为 null,多选为空数组。 */\nexport function normalizeTreeSelectValue(\n value: unknown,\n multiple: boolean,\n): (string | number)[] {\n const values = multiple ? (Array.isArray(value) ? value : []) : [value];\n return [\n ...new Set(\n values.filter(\n (part): part is string | number =>\n typeof part === \"string\" || typeof part === \"number\",\n ),\n ),\n ];\n}\n","import styleInject from '#style-inject';styleInject(\"@import \\\"../../styles/variables.css\\\";\\n.canvas-react-tree-select {\\n width: 100%;\\n min-width: 0;\\n}\\n.canvas-react-tree-select-tree {\\n max-height: min(280px, calc(100vh - 48px));\\n overflow: auto;\\n padding: 4px;\\n color: var(--canvas-react-color-text);\\n font-size: var(--canvas-react-font-size);\\n}\\n.canvas-react-tree-select-node {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n min-height: 30px;\\n padding: 2px 10px 2px 6px;\\n box-sizing: border-box;\\n line-height: 22px;\\n border-radius: var(--canvas-react-radius-sm);\\n cursor: pointer;\\n}\\n.canvas-react-tree-select-node[data-active=true] {\\n background: var(--canvas-react-color-bg-hover);\\n}\\n.canvas-react-tree-select-node[aria-selected=true] {\\n background: var(--canvas-react-color-bg-active);\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-tree-select-node[aria-disabled=true] .canvas-react-tree-select-title {\\n opacity: 0.4;\\n cursor: not-allowed;\\n}\\n.canvas-react-tree-select-switcher {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n flex: 0 0 18px;\\n width: 18px;\\n height: 24px;\\n border: 0;\\n padding: 0;\\n background: transparent;\\n cursor: pointer;\\n}\\n.canvas-react-tree-select-chevron {\\n width: 7px;\\n height: 7px;\\n border-top: 1.5px solid #9ca3af;\\n border-right: 1.5px solid #9ca3af;\\n transform: rotate(45deg);\\n transition: transform 0.18s ease, border-color 0.18s ease;\\n pointer-events: none;\\n}\\n.canvas-react-tree-select-chevron-open {\\n transform: rotate(135deg);\\n border-color: #6b7280;\\n}\\n.canvas-react-tree-select-title {\\n flex: 1;\\n white-space: nowrap;\\n}\\n.canvas-react-tree-select-check {\\n color: var(--canvas-react-color-primary);\\n}\\n.canvas-react-tree-select-empty {\\n padding: 8px 10px;\\n color: var(--canvas-react-color-text-muted);\\n}\\n.canvas-react-tree-select:hover .canvas-react-select-clear,\\n.canvas-react-tree-select-open .canvas-react-select-clear,\\n.canvas-react-tree-select:focus-within .canvas-react-select-clear {\\n opacity: 1;\\n pointer-events: auto;\\n}\\n.canvas-react-tree-select:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-tree-select-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\\n.canvas-react-tree-select:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow {\\n opacity: 0;\\n}\\n\")","import { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport {\n createTreeSelectIndex,\n normalizeTreeSelectValue,\n type TreeSelectNode,\n type TreeSelectEntry,\n} from \"./tree-select-utils\";\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\nimport { ReactPopup } from \"../popup/index\";\nimport \"../select/style.css\";\nimport \"./style.css\";\n\nexport type { TreeSelectNode as ReactTreeSelectNode } from \"./tree-select-utils\";\n/** 单选返回节点值,多选返回节点值数组;不是 Cascader 的路径数组。 */\nexport type ReactTreeSelectValue = string | number | (string | number)[] | null;\n/** 树选择变更来源,只有完成单选才自动关闭编辑。 */\nexport interface ReactTreeSelectChangeInfo {\n trigger: \"mouse\" | \"keyboard\" | \"clear\";\n complete: boolean;\n}\n/** AntD 风格树选择的基础单选与独立多选配置。 */\nexport interface ReactTreeSelectProps extends Omit<\n ReactInputProps,\n \"value\" | \"defaultValue\" | \"onChange\" | \"onPressEnter\"\n> {\n value?: ReactTreeSelectValue;\n treeData?: TreeSelectNode[];\n multiple?: boolean;\n showSearch?: boolean;\n treeDefaultExpandAll?: boolean;\n treeDefaultExpandedKeys?: (string | number)[];\n onChange?: (\n value: ReactTreeSelectValue,\n selectedNodes: TreeSelectNode[],\n info: ReactTreeSelectChangeInfo,\n ) => void;\n}\n\nconst EMPTY_TREE: TreeSelectNode[] = [];\n\n/** 树形下拉选择,复用现有输入框、清空图标与定位弹层。 */\nexport function ReactTreeSelect(props: ReactTreeSelectProps) {\n const {\n value = null,\n treeData = EMPTY_TREE,\n multiple = false,\n showSearch = multiple,\n treeDefaultExpandAll = false,\n treeDefaultExpandedKeys,\n allowClear = true,\n onChange,\n disabled,\n readOnly,\n onFocus,\n onBlur,\n onClick,\n onKeyDown,\n ...inputProps\n } = props;\n const index = useMemo(() => createTreeSelectIndex(treeData), [treeData]);\n const selected = useMemo(\n () => normalizeTreeSelectValue(value, multiple),\n [value, multiple],\n );\n const selectedSet = useMemo(() => new Set(selected), [selected]);\n const [expanded, setExpanded] = useState(\n () =>\n new Set<string | number>([\n ...(treeDefaultExpandAll\n ? index.entries\n .filter((entry) => entry.node.children?.length)\n .map((entry) => entry.key)\n : (treeDefaultExpandedKeys ?? [])),\n ...selected.flatMap(\n (part) =>\n index.byValue.get(part)?.parents.map((parent) => parent.key) ?? [],\n ),\n ]),\n );\n const [open, setOpen] = useState(false);\n const [keyword, setKeyword] = useState<string | null>(null);\n const [active, setActive] = useState<string | number | null>(\n selected[0] ?? null,\n );\n const anchorRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const treeRef = useRef<HTMLDivElement>(null);\n const treeId = useId();\n const interactive = !disabled && !readOnly;\n const query = (keyword ?? \"\").trim().toLocaleLowerCase();\n const text = selected\n .map((part) => index.byValue.get(part)?.node.title ?? String(part))\n .join(\";\");\n const visible = useMemo(() => {\n if (!query)\n return index.entries.filter((entry) =>\n entry.parents.every((parent) => expanded.has(parent.key)),\n );\n const matches = new Set<TreeSelectEntry>();\n for (const entry of index.entries) {\n if (!entry.node.title.toLocaleLowerCase().includes(query)) continue;\n matches.add(entry);\n entry.parents.forEach((parent) => matches.add(parent));\n }\n return index.entries.filter((entry) => matches.has(entry));\n }, [index, query, expanded]);\n useEffect(() => {\n setExpanded((previous) => {\n const next = new Set(previous);\n selected.forEach((part) =>\n index.byValue\n .get(part)\n ?.parents.forEach((parent) => next.add(parent.key)),\n );\n return next;\n });\n }, [index, selected]);\n useEffect(() => {\n treeRef.current\n ?.querySelector<HTMLElement>('[data-active=\"true\"]')\n ?.scrollIntoView?.({ block: \"nearest\" });\n }, [active, open]);\n\n const expand = (entry: TreeSelectEntry, next?: boolean) => {\n if (!entry.node.children?.length || query) return;\n setExpanded((previous) => {\n const keys = new Set(previous);\n if (next ?? !keys.has(entry.key)) keys.add(entry.key);\n else keys.delete(entry.key);\n return keys;\n });\n };\n const choose = (entry: TreeSelectEntry, trigger: \"mouse\" | \"keyboard\") => {\n if (entry.node.disabled) return;\n if (entry.node.selectable === false) {\n expand(entry);\n return;\n }\n const next = multiple\n ? selectedSet.has(entry.node.value)\n ? selected.filter((part) => part !== entry.node.value)\n : [...selected, entry.node.value]\n : [entry.node.value];\n onChange?.(\n multiple ? next : entry.node.value,\n next.flatMap((part) => index.byValue.get(part)?.node ?? []),\n { trigger, complete: !multiple },\n );\n if (!multiple) {\n setOpen(false);\n setKeyword(null);\n }\n };\n const show = () => {\n if (interactive) setOpen(true);\n };\n const activeIndex = visible.findIndex((entry) => entry.node.value === active);\n return (\n <div\n ref={anchorRef}\n className={`canvas-react-tree-select${open && interactive ? \" canvas-react-tree-select-open\" : \"\"}`}\n >\n <ReactInput\n {...inputProps}\n ref={inputRef}\n disabled={disabled}\n readOnly={readOnly || !showSearch}\n allowClear={false}\n role=\"combobox\"\n aria-haspopup=\"tree\"\n aria-expanded={open && interactive}\n aria-controls={open ? treeId : undefined}\n aria-activedescendant={\n open && activeIndex >= 0 ? `${treeId}-${activeIndex}` : undefined\n }\n value={open && keyword !== null ? keyword : text}\n onFocus={(event) => {\n show();\n onFocus?.(event);\n }}\n onClick={(event) => {\n show();\n onClick?.(event);\n }}\n onBlur={(event) => {\n setOpen(false);\n setKeyword(null);\n onBlur?.(event);\n }}\n onChange={(event) => {\n setKeyword(event.target.value);\n setActive(null);\n show();\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !interactive) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n setKeyword(null);\n return;\n }\n const space = event.key === \" \" && (!showSearch || keyword === null);\n if (\n !space &&\n ![\n \"ArrowDown\",\n \"ArrowUp\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Enter\",\n \"Home\",\n \"End\",\n ].includes(event.key)\n )\n return;\n event.preventDefault();\n show();\n if (!visible.length) return;\n const entry = visible[activeIndex];\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n const next =\n activeIndex < 0\n ? event.key === \"ArrowDown\"\n ? 0\n : visible.length - 1\n : (activeIndex +\n (event.key === \"ArrowDown\" ? 1 : -1) +\n visible.length) %\n visible.length;\n setActive(visible[next].node.value);\n } else if (event.key === \"Home\" || event.key === \"End\")\n setActive(\n visible[event.key === \"Home\" ? 0 : visible.length - 1].node.value,\n );\n else if (entry) {\n if (event.key === \"ArrowRight\") {\n if (\n entry.node.children?.length &&\n !expanded.has(entry.key) &&\n !query\n )\n expand(entry, true);\n else if (visible[activeIndex + 1]?.depth > entry.depth)\n setActive(visible[activeIndex + 1].node.value);\n } else if (event.key === \"ArrowLeft\") {\n if (expanded.has(entry.key) && !query) expand(entry, false);\n else\n setActive(\n entry.parents[entry.parents.length - 1]?.node.value ??\n entry.node.value,\n );\n } else choose(entry, \"keyboard\");\n }\n }}\n suffix={\n <span\n className={`canvas-react-select-actions${allowClear && interactive && selected.length ? \" canvas-react-select-actions-clearable\" : \"\"}`}\n onPointerDown={(event) => {\n if (interactive) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onMouseDown={(event) => {\n if (interactive) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onClick={(event) => {\n event.stopPropagation();\n if (interactive) {\n inputRef.current?.focus({ preventScroll: true });\n show();\n }\n }}\n >\n {allowClear && interactive && selected.length > 0 ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"清空树选择\"\n className=\"canvas-react-select-clear\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n inputRef.current?.focus({ preventScroll: true });\n setKeyword(null);\n setActive(null);\n setOpen(true);\n onChange?.(multiple ? [] : null, [], {\n trigger: \"clear\",\n complete: false,\n });\n }}\n >\n <span\n className=\"canvas-react-select-clear-icon\"\n aria-hidden=\"true\"\n />\n </button>\n ) : null}\n <span\n className={`canvas-react-select-arrow${open ? \" canvas-react-select-arrow-open\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </span>\n }\n />\n <ReactPopup\n open={open && interactive}\n anchorRef={anchorRef}\n onOpenChange={setOpen}\n matchAnchorWidth\n constrainHeight\n surfaceClassName=\"canvas-react-tree-select-popup\"\n >\n <div\n ref={treeRef}\n id={treeId}\n role=\"tree\"\n aria-label=\"树选择选项\"\n aria-multiselectable={multiple || undefined}\n className=\"canvas-react-tree-select-tree\"\n >\n {visible.length === 0 ? (\n <div className=\"canvas-react-tree-select-empty\">暂无数据</div>\n ) : (\n visible.map((entry, position) => {\n const isExpanded = !!query || expanded.has(entry.key);\n const hasChildren = !!entry.node.children?.length;\n return (\n <div\n key={JSON.stringify(entry.node.value)}\n id={`${treeId}-${position}`}\n role=\"treeitem\"\n aria-level={entry.depth + 1}\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={selectedSet.has(entry.node.value)}\n aria-disabled={!!entry.node.disabled}\n data-active={entry.node.value === active}\n className=\"canvas-react-tree-select-node\"\n style={{ paddingLeft: 6 + entry.depth * 18 }}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActive(entry.node.value)}\n onClick={() => {\n setActive(entry.node.value);\n choose(entry, \"mouse\");\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={`${isExpanded ? \"收起\" : \"展开\"} ${entry.node.title}`}\n className=\"canvas-react-tree-select-switcher\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n expand(entry);\n }}\n >\n <span\n className={`canvas-react-tree-select-chevron${isExpanded ? \" canvas-react-tree-select-chevron-open\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </button>\n ) : (\n <span className=\"canvas-react-tree-select-switcher\" />\n )}\n <span className=\"canvas-react-tree-select-title\">\n {entry.node.title}\n </span>\n {multiple && selectedSet.has(entry.node.value) ? (\n <span\n className=\"canvas-react-tree-select-check\"\n aria-hidden=\"true\"\n >\n ✓\n </span>\n ) : null}\n </div>\n );\n })\n )}\n </div>\n </ReactPopup>\n </div>\n );\n}\n","import { forwardRef, useEffect, useState } from \"react\";\nimport {\n ReactSelect,\n type ReactSelectChangeInfo,\n type ReactSelectFilterOption,\n type ReactSelectOption,\n type ReactSelectProps,\n} from \"../select/index\";\n\nexport interface ReactAutoCompleteProps extends Omit<\n ReactSelectProps,\n \"allowCustomValue\" | \"onChange\" | \"onInputValueChange\" | \"onPressEnter\"\n> {\n /** 当前值。 */\n value?: string | number;\n /** 选项列表。 */\n options: ReactSelectOption[];\n /** 值变化回调。 */\n onChange?: (value: string | number, info: ReactSelectChangeInfo) => void;\n /** 输入变化回调。 */\n onInputValueChange?: (value: string) => void;\n /** 可选的回车扩展回调;返回刷新后的候选项时才重新映射输入值。 */\n onPressEnter?: (\n input: string,\n ) => void | ReactSelectOption[] | Promise<void | ReactSelectOption[]>;\n}\n\n/**\n * 支持自由输入的下拉输入框,可选扩展回车异步刷新候选项。\n */\nexport const ReactAutoComplete = forwardRef<\n HTMLInputElement,\n ReactAutoCompleteProps\n>(function ReactAutoComplete(props, ref) {\n const {\n onChange,\n onInputValueChange,\n onPressEnter,\n options: initialOptions,\n value,\n ...restProps\n } = props;\n const [options, setOptions] = useState(initialOptions);\n\n useEffect(() => {\n setOptions(initialOptions);\n }, [initialOptions]);\n\n return (\n <ReactSelect\n {...restProps}\n ref={ref}\n allowCustomValue\n showSearch\n value={value}\n options={options}\n onChange={(nextValue, info) => {\n onChange?.(\n options.find((option) => String(option.value) === String(nextValue))\n ?.value ?? nextValue,\n info,\n );\n }}\n onInputValueChange={(input) => {\n onInputValueChange?.(input);\n onChange?.(input, { trigger: \"input\" });\n }}\n onPressEnter={async (input) => {\n const nextOptions = await onPressEnter?.(input);\n if (nextOptions) {\n setOptions(nextOptions);\n }\n onChange?.(\n nextOptions ? resolveAutoCompleteValue(input, nextOptions) : input,\n { trigger: \"keyboard\" },\n );\n }}\n />\n );\n});\n\n/**\n * 按文本或值映射 AutoComplete 输入,未命中时保留自由输入。\n */\nexport function resolveAutoCompleteValue(\n input: string,\n options: ReactSelectOption[],\n) {\n const normalizedInput = input.toLowerCase();\n return (\n options.find(\n (option) =>\n option.label.toLowerCase() === normalizedInput ||\n String(option.value).toLowerCase() === normalizedInput,\n )?.value ?? input\n );\n}\n\nexport type { ReactSelectFilterOption, ReactSelectOption };\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n formatTimeValue,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n TimeSelectionPanel,\r\n} from \"./shared\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactTimePickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n popupClassName?: string;\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\n/**\r\n * 基础时间选择器,支持时分秒面板选择。\r\n */\r\nexport const ReactTimePicker = forwardRef<HTMLInputElement, ReactTimePickerProps>(\r\n function ReactTimePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"HH:mm:ss\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [draftValue, setDraftValue] = useState(value ?? \"\");\r\n const parsedValue = useMemo(() => parseTimeValue(value), [value]);\r\n const displayValue = parsedValue ? formatTimeValue(parsedValue) : (value ?? \"\");\r\n const showClear =\r\n allowClear && !disabled && typeof value === \"string\" && value.trim().length > 0;\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n setDraftValue(value ?? \"\");\r\n }, [value]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-time-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-time-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setDraftValue(value ?? \"\");\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-time-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-time-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftValue(value ?? \"\");\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftValue(value ?? \"\");\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-time-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={230}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 230 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-time-popup-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>时</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>分</div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>秒</div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-content`}>\r\n <TimeSelectionPanel\r\n value={draftValue || DEFAULT_TIME_VALUE}\r\n hideHeader\r\n onChange={setDraftValue}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftValue(getCurrentTimeValue());\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(draftValue || DEFAULT_TIME_VALUE);\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction handleInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n}) {\r\n const { event, onBlur, popupRef, setOpen } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport type { ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport {\r\n DEFAULT_TIME_VALUE,\r\n getCurrentTimeValue,\r\n parseTimeValue,\r\n TimeSelectionPanel,\r\n} from \"../time/shared\";\r\nimport \"../time/style.css\";\r\n\r\nexport interface ReactTimeRangePickerProps extends Omit<\r\n ReactInputProps,\r\n \"value\" | \"onChange\" | \"onPressEnter\"\r\n> {\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n /**\r\n * 当前时间范围值,格式为 `[开始时间, 结束时间]`。\r\n */\r\n value?: [string, string];\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: [string, string]) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 范围分隔符。\r\n */\r\n rangeSeparator?: string;\r\n}\r\n\r\n/**\r\n * 基础时间范围选择器。\r\n */\r\nexport const ReactTimeRangePicker = forwardRef<\r\n HTMLInputElement,\r\n ReactTimeRangePickerProps\r\n>(function ReactTimeRangePicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"HH:mm:ss ~ HH:mm:ss\",\r\n popupClassName,\r\n rangeSeparator = \" ~ \",\r\n style,\r\n value,\r\n showArrow = true,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const startInputRef = useRef<HTMLInputElement | null>(null);\r\n const endInputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const [open, setOpen] = useState(false);\r\n const [activePart, setActivePart] = useState<\"start\" | \"end\">(\"start\");\r\n const skipFocusOpenRef = useRef(false);\r\n const [draftRange, setDraftRange] = useState(() =>\r\n parseTimeRangeValue(value, rangeSeparator),\r\n );\r\n\r\n useImperativeHandle(ref, () => startInputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n startInputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n }, [rangeSeparator, value]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time`,\r\n `${REACT_COMPONENT_PREFIX}-time-range-control`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-time-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={() => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n (activePart === \"start\"\r\n ? startInputRef\r\n : endInputRef\r\n ).current?.focus();\r\n }}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-range-values`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-range-value`,\r\n activePart === \"start\" &&\r\n `${REACT_COMPONENT_PREFIX}-time-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"start\");\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n startInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n {...restProps}\r\n ref={startInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.start}\r\n placeholder={placeholder.split(rangeSeparator)[0] || \"HH:mm:ss\"}\r\n className={`${REACT_COMPONENT_PREFIX}-time-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"start\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleRangeInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-range-separator`}>\r\n {rangeSeparator.trim()}\r\n </span>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-range-value`,\r\n activePart === \"end\" &&\r\n `${REACT_COMPONENT_PREFIX}-time-range-value-active`,\r\n )}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setActivePart(\"end\");\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n <input\r\n ref={endInputRef}\r\n disabled={disabled}\r\n readOnly\r\n value={draftRange.end}\r\n placeholder={\r\n placeholder.split(rangeSeparator)[1]?.trim() || \"HH:mm:ss\"\r\n }\r\n className={`${REACT_COMPONENT_PREFIX}-time-range-value-text`}\r\n onFocus={(event) => {\r\n setActivePart(\"end\");\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n handleRangeInputBlur({\r\n event,\r\n popupRef,\r\n setOpen,\r\n onBlur,\r\n triggerRef,\r\n });\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setDraftRange(parseTimeRangeValue(value, rangeSeparator));\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n </span>\r\n </div>\r\n {showArrow ? (\r\n <span className={`${REACT_COMPONENT_PREFIX}-time-actions`}>\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-time-arrow-open`,\r\n )}\r\n />\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={260}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-time-dropdown`,\r\n `${REACT_COMPONENT_PREFIX}-time-range-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 260 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-time-range-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-header`}>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 时\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 分\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-column-label`}>\r\n 秒\r\n </div>\r\n </div>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-content`}>\r\n <TimeSelectionPanel\r\n value={activePart === \"start\" ? draftRange.start : draftRange.end}\r\n hideHeader\r\n onChange={(nextValue) => {\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: nextValue,\r\n }));\r\n }}\r\n />\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-time-popup-footer`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-now`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setDraftRange((prev) => ({\r\n ...prev,\r\n [activePart]: getCurrentTimeValue(),\r\n }));\r\n }}\r\n >\r\n 此刻\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-time-footer-confirm`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n if (activePart === \"start\") {\r\n setActivePart(\"end\");\r\n return;\r\n }\r\n\r\n if (compareTimeValue(draftRange.end, draftRange.start) < 0) {\r\n setActivePart(\"start\");\r\n return;\r\n }\r\n\r\n onChange?.([draftRange.start, draftRange.end]);\r\n setOpen(false);\r\n endInputRef.current?.focus();\r\n }}\r\n >\r\n 确定\r\n </button>\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n});\r\n\r\nfunction parseTimeRangeValue(\r\n value: [string, string] | undefined,\r\n _rangeSeparator: string,\r\n) {\r\n const [rawStart = \"\", rawEnd = \"\"] = value ?? [\"\", \"\"];\r\n const start = parseTimeValue(rawStart.trim())\r\n ? rawStart.trim()\r\n : DEFAULT_TIME_VALUE;\r\n const end = parseTimeValue(rawEnd.trim())\r\n ? rawEnd.trim()\r\n : DEFAULT_TIME_VALUE;\r\n\r\n return { end, start };\r\n}\r\nfunction handleRangeInputBlur(params: {\r\n event: FocusEvent<HTMLInputElement>;\r\n popupRef: React.RefObject<HTMLDivElement | null>;\r\n setOpen: (open: boolean) => void;\r\n onBlur?: ReactInputProps[\"onBlur\"];\r\n triggerRef: React.RefObject<HTMLDivElement | null>;\r\n}) {\r\n const { event, onBlur, popupRef, setOpen, triggerRef } = params;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n relatedTarget &&\r\n (popupRef.current?.contains(relatedTarget) ||\r\n triggerRef.current?.contains(relatedTarget))\r\n ) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n onBlur?.(event);\r\n}\r\n\r\nfunction compareTimeValue(left: string, right: string) {\r\n const leftValue = parseTimeValue(left);\r\n const rightValue = parseTimeValue(right);\r\n if (!leftValue || !rightValue) {\r\n return 0;\r\n }\r\n\r\n const leftSeconds =\r\n Number(leftValue.hour) * 3600 +\r\n Number(leftValue.minute) * 60 +\r\n Number(leftValue.second);\r\n const rightSeconds =\r\n Number(rightValue.hour) * 3600 +\r\n Number(rightValue.minute) * 60 +\r\n Number(rightValue.second);\r\n\r\n return leftSeconds - rightSeconds;\r\n}\r\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n} from \"react\";\r\nimport { joinClassNames } from \"../../shared/class-names\";\r\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\r\nimport { ReactInput, type ReactInputProps } from \"../input/index\";\r\nimport { ReactPopup } from \"../popup/index\";\r\nimport \"./style.css\";\r\n\r\nexport interface ReactYearPickerProps\r\n extends Omit<ReactInputProps, \"value\" | \"onChange\" | \"onPressEnter\"> {\r\n /**\r\n * 当前年份值。\r\n */\r\n value?: string | number;\r\n /**\r\n * 值变化回调。\r\n */\r\n onChange?: (value: string) => void;\r\n /**\r\n * 弹层类名。\r\n */\r\n popupClassName?: string;\r\n /**\r\n * 是否允许清空。\r\n */\r\n allowClear?: boolean;\r\n /**\r\n * 是否显示右侧下拉箭头。\r\n * @default true\r\n */\r\n showArrow?: boolean;\r\n}\r\n\r\n/**\r\n * 基础年份选择器。\r\n */\r\nexport const ReactYearPicker = forwardRef<HTMLInputElement, ReactYearPickerProps>(\r\n function ReactYearPicker(props, ref) {\r\n const {\r\n autoFocus,\r\n className,\r\n disabled,\r\n onBlur,\r\n onChange,\r\n onFocus,\r\n onKeyDown,\r\n placeholder = \"请选择年份\",\r\n popupClassName,\r\n allowClear = true,\r\n showArrow = true,\r\n style,\r\n value,\r\n ...restProps\r\n } = props;\r\n const triggerRef = useRef<HTMLDivElement | null>(null);\r\n const inputRef = useRef<HTMLInputElement | null>(null);\r\n const popupRef = useRef<HTMLDivElement | null>(null);\r\n const skipFocusOpenRef = useRef(false);\r\n const [open, setOpen] = useState(false);\r\n const [mode, setMode] = useState<\"year\" | \"decade\">(\"year\");\r\n const selectedYear = useMemo(() => parseYearValue(value), [value]);\r\n const [panelStartYear, setPanelStartYear] = useState(() =>\r\n resolveDecadeStart(selectedYear ?? new Date().getFullYear()),\r\n );\r\n const displayValue =\r\n selectedYear == null ? \"\" : String(selectedYear);\r\n const showClear = allowClear && !disabled && displayValue.length > 0;\r\n const yearItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => panelStartYear - 1 + index);\r\n }, [panelStartYear]);\r\n const decadePanelStart = useMemo(() => {\r\n return Math.floor(panelStartYear / 100) * 100;\r\n }, [panelStartYear]);\r\n const decadeItems = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);\r\n }, [decadePanelStart]);\r\n\r\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\r\n\r\n useEffect(() => {\r\n if (autoFocus) {\r\n inputRef.current?.focus();\r\n }\r\n }, [autoFocus]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n return;\r\n }\r\n setMode(\"year\");\r\n setPanelStartYear(resolveDecadeStart(selectedYear ?? new Date().getFullYear()));\r\n }, [open, selectedYear]);\r\n\r\n return (\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-wrap`}>\r\n <div\r\n ref={triggerRef}\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-open`,\r\n disabled && `${REACT_COMPONENT_PREFIX}-year-disabled`,\r\n className,\r\n )}\r\n style={style as CSSProperties}\r\n onClick={(event) => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (\r\n (event.target as HTMLElement | null)?.closest(\r\n `.${REACT_COMPONENT_PREFIX}-year-clear`,\r\n )\r\n ) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n }}\r\n >\r\n <ReactInput\r\n {...restProps}\r\n ref={inputRef}\r\n allowClear={false}\r\n disabled={disabled}\r\n readOnly\r\n value={displayValue}\r\n className={`${REACT_COMPONENT_PREFIX}-year-input`}\r\n wrapperClassName={`${REACT_COMPONENT_PREFIX}-year-input-wrap`}\r\n placeholder={placeholder}\r\n onFocus={(event) => {\r\n if (skipFocusOpenRef.current) {\r\n skipFocusOpenRef.current = false;\r\n onFocus?.(event);\r\n return;\r\n }\r\n if (!open) {\r\n setOpen(true);\r\n }\r\n onFocus?.(event);\r\n }}\r\n onBlur={(event) => {\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (relatedTarget && popupRef.current?.contains(relatedTarget)) {\r\n return;\r\n }\r\n setOpen(false);\r\n onBlur?.(event);\r\n }}\r\n onKeyDown={(event) => {\r\n onKeyDown?.(event);\r\n if (event.defaultPrevented || disabled) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setOpen(true);\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n setOpen(false);\r\n }\r\n }}\r\n />\r\n {(showClear || showArrow) ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-actions`,\r\n showClear && `${REACT_COMPONENT_PREFIX}-year-actions-clearable`,\r\n )}\r\n >\r\n {showClear ? (\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-clear`}\r\n aria-label=\"清空\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }}\r\n onClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n skipFocusOpenRef.current = true;\r\n setOpen(false);\r\n onChange?.(\"\");\r\n inputRef.current?.blur();\r\n }}\r\n >\r\n <span className={`${REACT_COMPONENT_PREFIX}-year-clear-icon`} />\r\n </button>\r\n ) : null}\r\n {showArrow ? (\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-arrow`,\r\n open && `${REACT_COMPONENT_PREFIX}-year-arrow-open`,\r\n )}\r\n />\r\n ) : null}\r\n </span>\r\n ) : null}\r\n </div>\r\n <ReactPopup\r\n open={open}\r\n anchorRef={triggerRef}\r\n minWidth={264}\r\n surfaceClassName={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-dropdown`,\r\n popupClassName,\r\n )}\r\n surfaceStyle={{ width: 264 }}\r\n onOpenChange={setOpen}\r\n >\r\n <div\r\n ref={popupRef}\r\n className={`${REACT_COMPONENT_PREFIX}-year-panel`}\r\n >\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-header`}>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"上一组年份\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelStartYear((prev) => prev - (mode === \"year\" ? 10 : 100));\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-left`,\r\n )}\r\n />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-title`}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setMode(\"decade\");\r\n }}\r\n >\r\n {mode === \"year\"\r\n ? `${panelStartYear}年-${panelStartYear + 9}年`\r\n : `${decadePanelStart}年-${decadePanelStart + 99}年`}\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`${REACT_COMPONENT_PREFIX}-year-nav`}\r\n aria-label=\"下一组年份\"\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelStartYear((prev) => prev + (mode === \"year\" ? 10 : 100));\r\n }}\r\n >\r\n <span\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow`,\r\n `${REACT_COMPONENT_PREFIX}-year-nav-arrow-right`,\r\n )}\r\n />\r\n </button>\r\n </div>\r\n <div className={`${REACT_COMPONENT_PREFIX}-year-grid`}>\r\n {mode === \"year\"\r\n ? yearItems.map((yearItem) => {\r\n const inCurrentDecade =\r\n yearItem >= panelStartYear && yearItem <= panelStartYear + 9;\r\n const selected = yearItem === selectedYear;\r\n\r\n return (\r\n <button\r\n key={yearItem}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentDecade &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n onChange?.(String(yearItem));\r\n setOpen(false);\r\n inputRef.current?.focus();\r\n }}\r\n >\r\n {yearItem}\r\n </button>\r\n );\r\n })\r\n : decadeItems.map((decadeStart) => {\r\n const inCurrentCentury =\r\n decadeStart >= decadePanelStart &&\r\n decadeStart <= decadePanelStart + 90;\r\n const selected =\r\n panelStartYear >= decadeStart && panelStartYear <= decadeStart + 9;\r\n\r\n return (\r\n <button\r\n key={decadeStart}\r\n type=\"button\"\r\n className={joinClassNames(\r\n `${REACT_COMPONENT_PREFIX}-year-cell`,\r\n selected && `${REACT_COMPONENT_PREFIX}-year-cell-selected`,\r\n !inCurrentCentury &&\r\n `${REACT_COMPONENT_PREFIX}-year-cell-muted`,\r\n )}\r\n onMouseDown={(event) => {\r\n event.preventDefault();\r\n }}\r\n onClick={() => {\r\n setPanelStartYear(decadeStart);\r\n setMode(\"year\");\r\n }}\r\n >\r\n {decadeStart}-{decadeStart + 9}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </ReactPopup>\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nfunction parseYearValue(value?: string | number) {\r\n if (typeof value === \"number\" && Number.isFinite(value)) {\r\n return Math.trunc(value);\r\n }\r\n if (typeof value === \"string\" && value.trim().length > 0) {\r\n const nextValue = Number(value);\r\n return Number.isFinite(nextValue) ? Math.trunc(nextValue) : null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction resolveDecadeStart(year: number) {\r\n return Math.floor(year / 10) * 10;\r\n}\r\n","import styleInject from '#style-inject';styleInject(\".canvas-react-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 6px;\\n min-height: 32px;\\n padding: 4px 14px;\\n border: 1px solid var(--cc-border-color, #d9d9d9);\\n border-radius: 6px;\\n color: var(--cc-text-color, #1f2937);\\n background: var(--cc-surface-color, #fff);\\n cursor: pointer;\\n}\\n.canvas-react-button:hover:not(:disabled) {\\n color: #1677ff;\\n border-color: #1677ff;\\n}\\n.canvas-react-button:disabled {\\n cursor: not-allowed;\\n opacity: 0.5;\\n}\\n.canvas-react-button-primary {\\n color: #fff;\\n border-color: #1677ff;\\n background: #1677ff;\\n}\\n.canvas-react-button-danger {\\n color: #dc2626;\\n border-color: #fca5a5;\\n}\\n.canvas-react-button-small {\\n min-height: 24px;\\n padding: 2px 8px;\\n}\\n.canvas-react-button-large {\\n min-height: 40px;\\n padding: 6px 18px;\\n}\\n.canvas-react-button-icon {\\n display: inline-flex;\\n}\\n.canvas-react-row {\\n display: flex;\\n flex-flow: row wrap;\\n}\\n.canvas-react-col {\\n min-width: 0;\\n padding-inline: 8px;\\n}\\n.canvas-react-radio-group {\\n display: flex;\\n gap: 16px;\\n}\\n.canvas-react-radio {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n cursor: pointer;\\n}\\n.canvas-react-radio input {\\n position: absolute;\\n opacity: 0;\\n pointer-events: none;\\n}\\n.canvas-react-radio-mark {\\n width: 14px;\\n height: 14px;\\n border: 1px solid #94a3b8;\\n border-radius: 50%;\\n box-sizing: border-box;\\n}\\n.canvas-react-radio input:checked + .canvas-react-radio-mark {\\n border: 4px solid #1677ff;\\n}\\n.canvas-react-form-item {\\n display: flex;\\n flex-direction: column;\\n gap: 6px;\\n margin-bottom: 16px;\\n}\\n.canvas-react-form-label {\\n color: #334155;\\n font-size: 14px;\\n}\\n.canvas-react-form-error {\\n color: #dc2626;\\n font-size: 12px;\\n}\\n.canvas-react-textarea {\\n width: 100%;\\n min-height: 72px;\\n padding: 8px 10px;\\n border: 1px solid #d9d9d9;\\n border-radius: 6px;\\n box-sizing: border-box;\\n font: inherit;\\n resize: vertical;\\n}\\n.canvas-react-message-host {\\n position: fixed;\\n z-index: 3000;\\n top: 24px;\\n left: 50%;\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n transform: translateX(-50%);\\n pointer-events: none;\\n}\\n.canvas-react-message {\\n padding: 9px 14px;\\n border: 1px solid #e2e8f0;\\n border-radius: 8px;\\n color: #334155;\\n background: #fff;\\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.14);\\n}\\n.canvas-react-message-error {\\n color: #b91c1c;\\n border-color: #fecaca;\\n}\\n\")","import {\n cloneElement,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { joinClassNames } from \"../../shared/class-names\";\nimport { REACT_COMPONENT_PREFIX } from \"../../shared/prefix\";\nimport \"./style.css\";\n\nexport interface ReactButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\"\n> {\n /** 按钮视觉类型。 */\n type?: \"default\" | \"primary\" | \"text\";\n /** 原生 button type。 */\n htmlType?: ButtonHTMLAttributes<HTMLButtonElement>[\"type\"];\n /** 按钮图标。 */\n icon?: ReactNode;\n /** 危险操作样式。 */\n danger?: boolean;\n /** 紧凑尺寸。 */\n size?: \"small\" | \"middle\" | \"large\";\n}\n\n/** 通用按钮。 */\nexport function ReactButton({\n children,\n className,\n danger,\n htmlType = \"button\",\n icon,\n size = \"middle\",\n type = \"default\",\n ...props\n}: ReactButtonProps) {\n return (\n <button\n {...props}\n type={htmlType}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-button`,\n `${REACT_COMPONENT_PREFIX}-button-${type}`,\n `${REACT_COMPONENT_PREFIX}-button-${size}`,\n danger && `${REACT_COMPONENT_PREFIX}-button-danger`,\n className,\n )}\n >\n {icon ? (\n <span className={`${REACT_COMPONENT_PREFIX}-button-icon`}>{icon}</span>\n ) : null}\n {children}\n </button>\n );\n}\n\nexport interface ReactFlexProps extends HTMLAttributes<HTMLDivElement> {\n vertical?: boolean;\n justify?: CSSProperties[\"justifyContent\"];\n align?: CSSProperties[\"alignItems\"];\n gap?: CSSProperties[\"gap\"];\n}\n\n/** Flex 布局容器。 */\nexport function ReactFlex({\n vertical,\n justify,\n align,\n gap,\n style,\n ...props\n}: ReactFlexProps) {\n return (\n <div\n {...props}\n style={{\n display: \"flex\",\n flexDirection: vertical ? \"column\" : \"row\",\n justifyContent: justify,\n alignItems: align,\n gap,\n ...style,\n }}\n />\n );\n}\n\nexport interface ReactRowProps extends HTMLAttributes<HTMLDivElement> {\n gutter?: number;\n}\n\n/** 二十四栅格行。 */\nexport function ReactRow({ gutter = 0, style, ...props }: ReactRowProps) {\n return (\n <div\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-row`,\n props.className,\n )}\n style={{ marginInline: -gutter / 2, ...style }}\n />\n );\n}\n\nexport interface ReactColProps extends HTMLAttributes<HTMLDivElement> {\n span?: number;\n}\n\n/** 二十四栅格列。 */\nexport function ReactCol({ span = 24, style, ...props }: ReactColProps) {\n return (\n <div\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-col`,\n props.className,\n )}\n style={{\n flex: `0 0 ${(span / 24) * 100}%`,\n maxWidth: `${(span / 24) * 100}%`,\n ...style,\n }}\n />\n );\n}\n\nexport interface ReactTooltipProps {\n title?: ReactNode;\n children: ReactElement;\n placement?: string;\n destroyTooltipOnHide?: boolean;\n}\n\n/** 轻量提示;文本标题使用浏览器原生 tooltip,保证无额外弹层依赖。 */\nexport function ReactTooltip({ title, children }: ReactTooltipProps) {\n return cloneElement(children, {\n title: typeof title === \"string\" ? title : undefined,\n \"aria-label\": typeof title === \"string\" ? title : undefined,\n } as HTMLAttributes<HTMLElement>);\n}\n\ninterface ReactRadioGroupContextValue {\n value?: string | number;\n onChange?: (event: { target: { value: string | number } }) => void;\n}\n\nconst RadioGroupContext = createContext<ReactRadioGroupContextValue>({});\n\nexport interface ReactRadioProps extends Omit<\n HTMLAttributes<HTMLLabelElement>,\n \"onChange\"\n> {\n value: string | number;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (event: { target: { value: string | number } }) => void;\n}\n\nfunction ReactRadioOption({\n value,\n checked,\n disabled,\n onChange,\n children,\n className,\n ...props\n}: ReactRadioProps) {\n const group = useContext(RadioGroupContext);\n const selected = checked ?? String(group.value ?? \"\") === String(value);\n return (\n <label\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-radio`,\n disabled && `${REACT_COMPONENT_PREFIX}-radio-disabled`,\n className,\n )}\n >\n <input\n type=\"radio\"\n checked={selected}\n disabled={disabled}\n onChange={() => {\n const event = { target: { value } };\n onChange?.(event);\n group.onChange?.(event);\n }}\n />\n <span className={`${REACT_COMPONENT_PREFIX}-radio-mark`} />\n <span>{children}</span>\n </label>\n );\n}\n\nexport interface ReactRadioGroupProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onChange\"\n> {\n value?: string | number;\n onChange?: (event: { target: { value: string | number } }) => void;\n}\n\nfunction ReactRadioGroup({\n value,\n onChange,\n className,\n ...props\n}: ReactRadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ value, onChange }}>\n <div\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-radio-group`,\n className,\n )}\n />\n </RadioGroupContext.Provider>\n );\n}\n\n/** 单选框及其分组组件。 */\nexport const ReactRadio = Object.assign(ReactRadioOption, {\n Group: ReactRadioGroup,\n});\n\nexport interface ReactTextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\n/** 多行文本输入框。 */\nexport function ReactTextArea({ className, ...props }: ReactTextAreaProps) {\n return (\n <textarea\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-textarea`,\n className,\n )}\n />\n );\n}\n\nexport type ReactFormValues = Record<string, unknown>;\n\nexport interface ReactFormRuleContext {\n getFieldValue: (name: string) => any;\n}\n\nexport interface ReactFormRuleConfig {\n required?: boolean;\n message?: string;\n type?: \"number\" | \"integer\" | \"string\";\n min?: number;\n max?: number;\n validator?: (rule: ReactFormRuleConfig, value: any) => void | Promise<void>;\n}\n\nexport type ReactFormRule =\n | ReactFormRuleConfig\n | ((context: ReactFormRuleContext) => ReactFormRuleConfig);\n\nexport interface ReactFormInstance<T extends object = any> {\n getFieldValue: (name: string) => any;\n setFieldsValue: (values: Partial<T>) => void;\n resetFields: () => void;\n validateFields: () => Promise<T>;\n /** @internal */\n __store: FormStore;\n}\n\ninterface FormStore {\n values: ReactFormValues;\n initialValues: ReactFormValues;\n errors: Record<string, string>;\n rules: Map<string, ReactFormRule[]>;\n listeners: Set<() => void>;\n revision: number;\n notify: () => void;\n}\n\nfunction createFormInstance<T extends object>(): ReactFormInstance<T> {\n const store: FormStore = {\n values: {},\n initialValues: {},\n errors: {},\n rules: new Map(),\n listeners: new Set(),\n revision: 0,\n notify() {\n store.revision += 1;\n store.listeners.forEach((listener) => listener());\n },\n };\n return {\n __store: store,\n getFieldValue: (name) => store.values[name],\n setFieldsValue(values) {\n store.values = { ...store.values, ...values };\n Object.keys(values).forEach((name) => {\n delete store.errors[name];\n });\n store.notify();\n },\n resetFields() {\n store.values = { ...store.initialValues };\n store.errors = {};\n store.notify();\n },\n async validateFields() {\n const errors: Record<string, string> = {};\n for (const [name, rules] of store.rules) {\n const value = store.values[name];\n for (const rawRule of rules) {\n const rule =\n typeof rawRule === \"function\"\n ? rawRule({ getFieldValue: (field) => store.values[field] })\n : rawRule;\n if (\n rule.required &&\n (value === undefined || value === null || value === \"\")\n ) {\n errors[name] = rule.message ?? \"此项为必填项\";\n break;\n }\n if (\n (rule.type === \"number\" || rule.type === \"integer\") &&\n typeof value === \"number\" &&\n rule.min !== undefined &&\n value < rule.min\n ) {\n errors[name] = rule.message ?? `不能小于 ${rule.min}`;\n break;\n }\n if (\n (rule.type === \"number\" || rule.type === \"integer\") &&\n typeof value === \"number\" &&\n rule.max !== undefined &&\n value > rule.max\n ) {\n errors[name] = rule.message ?? `不能大于 ${rule.max}`;\n break;\n }\n if (\n rule.type === \"integer\" &&\n typeof value === \"number\" &&\n !Number.isInteger(value)\n ) {\n errors[name] = rule.message ?? \"请输入整数\";\n break;\n }\n if (rule.validator) {\n try {\n await rule.validator(rule, value);\n } catch (error) {\n errors[name] =\n error instanceof Error ? error.message : \"校验失败\";\n break;\n }\n }\n }\n }\n store.errors = errors;\n store.notify();\n if (Object.keys(errors).length > 0) {\n return Promise.reject({\n errorFields: errors,\n values: { ...store.values },\n });\n }\n return { ...store.values } as T;\n },\n };\n}\n\n/** 创建表单实例。 */\nexport function useReactForm<T extends object = any>() {\n const formRef = useRef<ReactFormInstance<T>>();\n if (!formRef.current) formRef.current = createFormInstance<T>();\n return [formRef.current] as const;\n}\n\n/** 订阅表单字段值。 */\nexport function useReactFormWatch(name: string, form: ReactFormInstance) {\n return useSyncExternalStore(\n (listener) => {\n form.__store.listeners.add(listener);\n return () => form.__store.listeners.delete(listener);\n },\n () => form.__store.revision,\n () => 0,\n ) >= 0\n ? form.getFieldValue(name)\n : undefined;\n}\n\nconst FormContext = createContext<ReactFormInstance | null>(null);\n\nexport interface ReactFormProps extends Omit<\n HTMLAttributes<HTMLFormElement>,\n \"onSubmit\"\n> {\n form: ReactFormInstance;\n initialValues?: ReactFormValues;\n layout?: \"vertical\" | \"horizontal\";\n}\n\nfunction ReactFormRoot({\n form,\n initialValues,\n layout = \"vertical\",\n className,\n children,\n ...props\n}: ReactFormProps) {\n const initialKey = useMemo(\n () => JSON.stringify(initialValues ?? {}),\n [initialValues],\n );\n useEffect(() => {\n form.__store.initialValues = { ...initialValues };\n form.__store.values = { ...initialValues, ...form.__store.values };\n form.__store.notify();\n }, [form, initialKey]);\n return (\n <FormContext.Provider value={form}>\n <form\n {...props}\n className={joinClassNames(\n `${REACT_COMPONENT_PREFIX}-form`,\n `${REACT_COMPONENT_PREFIX}-form-${layout}`,\n className,\n )}\n onSubmit={(event) => event.preventDefault()}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n}\n\nexport interface ReactFormItemProps {\n label?: ReactNode;\n name: string;\n children: ReactElement;\n rules?: ReactFormRule[];\n dependencies?: string[];\n initialValue?: unknown;\n}\n\nfunction ReactFormItem({\n label,\n name,\n children,\n rules = [],\n initialValue,\n}: ReactFormItemProps) {\n const form = useContext(FormContext);\n if (!form) throw new Error(\"ReactForm.Item 必须在 ReactForm 内使用\");\n useSyncExternalStore(\n (listener) => {\n form.__store.listeners.add(listener);\n return () => form.__store.listeners.delete(listener);\n },\n () => form.__store.revision,\n () => 0,\n );\n useEffect(() => {\n form.__store.rules.set(name, rules);\n if (form.getFieldValue(name) === undefined && initialValue !== undefined) {\n form.setFieldsValue({ [name]: initialValue });\n }\n return () => {\n form.__store.rules.delete(name);\n };\n }, [form, initialValue, name, rules]);\n const childProps = children.props as Record<string, unknown>;\n const value = form.getFieldValue(name);\n return (\n <label className={`${REACT_COMPONENT_PREFIX}-form-item`}>\n {label ? (\n <span className={`${REACT_COMPONENT_PREFIX}-form-label`}>{label}</span>\n ) : null}\n {cloneElement(children, {\n value: value ?? \"\",\n onChange: (...args: unknown[]) => {\n const first = args[0] as { target?: { value?: unknown } } | unknown;\n const nextValue =\n typeof first === \"object\" && first !== null && \"target\" in first\n ? (first as { target?: { value?: unknown } }).target?.value\n : first;\n form.setFieldsValue({ [name]: nextValue });\n const childOnChange = childProps.onChange;\n if (typeof childOnChange === \"function\") childOnChange(...args);\n },\n } as Record<string, unknown>)}\n {form.__store.errors[name] ? (\n <span className={`${REACT_COMPONENT_PREFIX}-form-error`}>\n {form.__store.errors[name]}\n </span>\n ) : null}\n </label>\n );\n}\n\n/** 带字段绑定和异步校验的轻量表单。 */\nexport const ReactForm = Object.assign(ReactFormRoot, {\n Item: ReactFormItem,\n useForm: useReactForm,\n useWatch: useReactFormWatch,\n});\n\nexport type ReactMessageType = \"info\" | \"success\" | \"warning\" | \"error\";\n\nfunction showMessage(type: ReactMessageType, content: ReactNode) {\n if (typeof document === \"undefined\") return;\n const hostId = `${REACT_COMPONENT_PREFIX}-message-host`;\n let host = document.getElementById(hostId);\n if (!host) {\n host = document.createElement(\"div\");\n host.id = hostId;\n host.className = hostId;\n document.body.appendChild(host);\n }\n const item = document.createElement(\"div\");\n item.className = `${REACT_COMPONENT_PREFIX}-message ${REACT_COMPONENT_PREFIX}-message-${type}`;\n item.textContent =\n typeof content === \"string\" ? content : String(content ?? \"\");\n host.appendChild(item);\n window.setTimeout(() => item.remove(), 3000);\n}\n\n/** 全局消息提示服务。 */\nexport const reactMessage = {\n info: (content: ReactNode) => showMessage(\"info\", content),\n success: (content: ReactNode) => showMessage(\"success\", content),\n warning: (content: ReactNode) => showMessage(\"warning\", content),\n error: (content: ReactNode) => showMessage(\"error\", content),\n};\n"]}
|