@canvas-components/react-components 0.3.7 → 0.3.8
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 +329 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -1
- package/dist/index.d.ts +26 -1
- package/dist/index.js +330 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -927,6 +927,31 @@ interface ReactSelectProps extends Omit<ReactInputProps, "value" | "onChange" |
|
|
|
927
927
|
*/
|
|
928
928
|
declare const ReactSelect: react.ForwardRefExoticComponent<ReactSelectProps & react.RefAttributes<HTMLInputElement>>;
|
|
929
929
|
|
|
930
|
+
/** 级联选择树节点;值保留原始字符串或数字类型。 */
|
|
931
|
+
interface ReactCascaderOption {
|
|
932
|
+
label: string;
|
|
933
|
+
value: string | number;
|
|
934
|
+
disabled?: boolean;
|
|
935
|
+
children?: ReactCascaderOption[];
|
|
936
|
+
}
|
|
937
|
+
/** 选择来源及是否已完成路径选择。 */
|
|
938
|
+
interface ReactCascaderChangeInfo {
|
|
939
|
+
trigger: "mouse" | "keyboard" | "clear";
|
|
940
|
+
complete: boolean;
|
|
941
|
+
}
|
|
942
|
+
/** 单路径级联选择配置。 */
|
|
943
|
+
interface ReactCascaderProps extends Omit<ReactInputProps, "value" | "defaultValue" | "onChange" | "onPressEnter" | "displayRender"> {
|
|
944
|
+
value?: (string | number)[];
|
|
945
|
+
options?: ReactCascaderOption[];
|
|
946
|
+
showSearch?: boolean;
|
|
947
|
+
changeOnSelect?: boolean;
|
|
948
|
+
expandTrigger?: "click" | "hover";
|
|
949
|
+
displayRender?: (labels: string[], selectedOptions: ReactCascaderOption[]) => string;
|
|
950
|
+
onChange?: (value: (string | number)[], selectedOptions: ReactCascaderOption[], info: ReactCascaderChangeInfo) => void;
|
|
951
|
+
}
|
|
952
|
+
/** 多列展开的级联选择器,复用现有输入框、浮层及主题。 */
|
|
953
|
+
declare function ReactCascader(props: ReactCascaderProps): react.JSX.Element;
|
|
954
|
+
|
|
930
955
|
interface ReactAutoCompleteProps extends Omit<ReactSelectProps, "allowCustomValue" | "onChange" | "onInputValueChange" | "onPressEnter"> {
|
|
931
956
|
/** 当前值。 */
|
|
932
957
|
value?: string | number;
|
|
@@ -1291,4 +1316,4 @@ declare function useReactContentScale(): ReactContentScaleValue;
|
|
|
1291
1316
|
*/
|
|
1292
1317
|
declare const REACT_COMPONENT_PREFIX = "canvas-react";
|
|
1293
1318
|
|
|
1294
|
-
export { REACT_COMPONENT_PREFIX, ReactAutoComplete, type ReactAutoCompleteProps, ReactButton, type ReactButtonProps, ReactCheckbox, type ReactCheckboxProps, type ReactCheckboxRef, ReactCol, type ReactColProps, ReactColorPicker, type ReactColorPickerProps, ReactContentScaleProvider, type ReactContentScaleValue, ReactDatePicker, type ReactDatePickerProps, ReactDateRangePicker, type ReactDateRangePickerProps, ReactDateTimePicker, type ReactDateTimePickerProps, ReactDateTimeRangePicker, type ReactDateTimeRangePickerProps, type ReactFilterConditionOperator, ReactFilterPanel, type ReactFilterPanelCondition, type ReactFilterPanelOption, type ReactFilterPanelRequest, type ReactFilterPanelTexts, type ReactFilterPanelValue, ReactFlex, type ReactFlexProps, ReactForm, type ReactFormInstance, type ReactFormItemProps, type ReactFormProps, type ReactFormRule, type ReactFormRuleConfig, type ReactFormValues, ReactImagePreview, type ReactImagePreviewProps, ReactInput, ReactInputNumber, type ReactInputNumberProps, type ReactInputProps, ReactInputRange, type ReactInputRangeProps, type ReactInputRangeValue, type ReactMessageType, ReactModal, type ReactModalButtonProps, type ReactModalCancelEvent, type ReactModalProps, ReactMonthPicker, type ReactMonthPickerProps, ReactNumberInput, type ReactNumberInputProps, ReactPagination, type ReactPaginationProps, type ReactPaginationStyles, ReactPopconfirm, type ReactPopconfirmButtonProps, type ReactPopconfirmPlacement, type ReactPopconfirmProps, ReactPopup, type ReactPopupProps, ReactQuarterPicker, type ReactQuarterPickerProps, ReactRadio, type ReactRadioGroupProps, type ReactRadioProps, type ReactResizablePanel, type ReactResizablePanelSizes, ReactResizablePanels, type ReactResizablePanelsDirection, type ReactResizablePanelsProps, type ReactResizablePanelsResizeInfo, ReactRow, type ReactRowProps, ReactSelect, type ReactSelectChangeInfo, type ReactSelectFilterOption, type ReactSelectOption, type ReactSelectProps, ReactTextArea, type ReactTextAreaProps, ReactTimePicker, type ReactTimePickerProps, ReactTimeRangePicker, type ReactTimeRangePickerProps, ReactTooltip, type ReactTooltipProps, ReactTransition, type ReactTransitionDuration, type ReactTransitionOptions, type ReactTransitionPhase, type ReactTransitionProps, type ReactTransitionState, ReactVirtualList, type ReactVirtualListProps, type ReactVirtualListRef, ReactYearPicker, type ReactYearPickerProps, reactMessage, resolveResizablePanelSizes, useReactContentScale, useReactForm, useReactFormWatch, useReactTransition };
|
|
1319
|
+
export { REACT_COMPONENT_PREFIX, ReactAutoComplete, type ReactAutoCompleteProps, ReactButton, type ReactButtonProps, ReactCascader, type ReactCascaderChangeInfo, type ReactCascaderOption, type ReactCascaderProps, ReactCheckbox, type ReactCheckboxProps, type ReactCheckboxRef, ReactCol, type ReactColProps, ReactColorPicker, type ReactColorPickerProps, ReactContentScaleProvider, type ReactContentScaleValue, ReactDatePicker, type ReactDatePickerProps, ReactDateRangePicker, type ReactDateRangePickerProps, ReactDateTimePicker, type ReactDateTimePickerProps, ReactDateTimeRangePicker, type ReactDateTimeRangePickerProps, type ReactFilterConditionOperator, ReactFilterPanel, type ReactFilterPanelCondition, type ReactFilterPanelOption, type ReactFilterPanelRequest, type ReactFilterPanelTexts, type ReactFilterPanelValue, ReactFlex, type ReactFlexProps, ReactForm, type ReactFormInstance, type ReactFormItemProps, type ReactFormProps, type ReactFormRule, type ReactFormRuleConfig, type ReactFormValues, ReactImagePreview, type ReactImagePreviewProps, ReactInput, ReactInputNumber, type ReactInputNumberProps, type ReactInputProps, ReactInputRange, type ReactInputRangeProps, type ReactInputRangeValue, type ReactMessageType, ReactModal, type ReactModalButtonProps, type ReactModalCancelEvent, type ReactModalProps, ReactMonthPicker, type ReactMonthPickerProps, ReactNumberInput, type ReactNumberInputProps, ReactPagination, type ReactPaginationProps, type ReactPaginationStyles, ReactPopconfirm, type ReactPopconfirmButtonProps, type ReactPopconfirmPlacement, type ReactPopconfirmProps, ReactPopup, type ReactPopupProps, ReactQuarterPicker, type ReactQuarterPickerProps, ReactRadio, type ReactRadioGroupProps, type ReactRadioProps, type ReactResizablePanel, type ReactResizablePanelSizes, ReactResizablePanels, type ReactResizablePanelsDirection, type ReactResizablePanelsProps, type ReactResizablePanelsResizeInfo, ReactRow, type ReactRowProps, ReactSelect, type ReactSelectChangeInfo, type ReactSelectFilterOption, type ReactSelectOption, type ReactSelectProps, ReactTextArea, type ReactTextAreaProps, ReactTimePicker, type ReactTimePickerProps, ReactTimeRangePicker, type ReactTimeRangePickerProps, ReactTooltip, type ReactTooltipProps, ReactTransition, type ReactTransitionDuration, type ReactTransitionOptions, type ReactTransitionPhase, type ReactTransitionProps, type ReactTransitionState, ReactVirtualList, type ReactVirtualListProps, type ReactVirtualListRef, ReactYearPicker, type ReactYearPickerProps, reactMessage, resolveResizablePanelSizes, useReactContentScale, useReactForm, useReactFormWatch, useReactTransition };
|
package/dist/index.d.ts
CHANGED
|
@@ -927,6 +927,31 @@ interface ReactSelectProps extends Omit<ReactInputProps, "value" | "onChange" |
|
|
|
927
927
|
*/
|
|
928
928
|
declare const ReactSelect: react.ForwardRefExoticComponent<ReactSelectProps & react.RefAttributes<HTMLInputElement>>;
|
|
929
929
|
|
|
930
|
+
/** 级联选择树节点;值保留原始字符串或数字类型。 */
|
|
931
|
+
interface ReactCascaderOption {
|
|
932
|
+
label: string;
|
|
933
|
+
value: string | number;
|
|
934
|
+
disabled?: boolean;
|
|
935
|
+
children?: ReactCascaderOption[];
|
|
936
|
+
}
|
|
937
|
+
/** 选择来源及是否已完成路径选择。 */
|
|
938
|
+
interface ReactCascaderChangeInfo {
|
|
939
|
+
trigger: "mouse" | "keyboard" | "clear";
|
|
940
|
+
complete: boolean;
|
|
941
|
+
}
|
|
942
|
+
/** 单路径级联选择配置。 */
|
|
943
|
+
interface ReactCascaderProps extends Omit<ReactInputProps, "value" | "defaultValue" | "onChange" | "onPressEnter" | "displayRender"> {
|
|
944
|
+
value?: (string | number)[];
|
|
945
|
+
options?: ReactCascaderOption[];
|
|
946
|
+
showSearch?: boolean;
|
|
947
|
+
changeOnSelect?: boolean;
|
|
948
|
+
expandTrigger?: "click" | "hover";
|
|
949
|
+
displayRender?: (labels: string[], selectedOptions: ReactCascaderOption[]) => string;
|
|
950
|
+
onChange?: (value: (string | number)[], selectedOptions: ReactCascaderOption[], info: ReactCascaderChangeInfo) => void;
|
|
951
|
+
}
|
|
952
|
+
/** 多列展开的级联选择器,复用现有输入框、浮层及主题。 */
|
|
953
|
+
declare function ReactCascader(props: ReactCascaderProps): react.JSX.Element;
|
|
954
|
+
|
|
930
955
|
interface ReactAutoCompleteProps extends Omit<ReactSelectProps, "allowCustomValue" | "onChange" | "onInputValueChange" | "onPressEnter"> {
|
|
931
956
|
/** 当前值。 */
|
|
932
957
|
value?: string | number;
|
|
@@ -1291,4 +1316,4 @@ declare function useReactContentScale(): ReactContentScaleValue;
|
|
|
1291
1316
|
*/
|
|
1292
1317
|
declare const REACT_COMPONENT_PREFIX = "canvas-react";
|
|
1293
1318
|
|
|
1294
|
-
export { REACT_COMPONENT_PREFIX, ReactAutoComplete, type ReactAutoCompleteProps, ReactButton, type ReactButtonProps, ReactCheckbox, type ReactCheckboxProps, type ReactCheckboxRef, ReactCol, type ReactColProps, ReactColorPicker, type ReactColorPickerProps, ReactContentScaleProvider, type ReactContentScaleValue, ReactDatePicker, type ReactDatePickerProps, ReactDateRangePicker, type ReactDateRangePickerProps, ReactDateTimePicker, type ReactDateTimePickerProps, ReactDateTimeRangePicker, type ReactDateTimeRangePickerProps, type ReactFilterConditionOperator, ReactFilterPanel, type ReactFilterPanelCondition, type ReactFilterPanelOption, type ReactFilterPanelRequest, type ReactFilterPanelTexts, type ReactFilterPanelValue, ReactFlex, type ReactFlexProps, ReactForm, type ReactFormInstance, type ReactFormItemProps, type ReactFormProps, type ReactFormRule, type ReactFormRuleConfig, type ReactFormValues, ReactImagePreview, type ReactImagePreviewProps, ReactInput, ReactInputNumber, type ReactInputNumberProps, type ReactInputProps, ReactInputRange, type ReactInputRangeProps, type ReactInputRangeValue, type ReactMessageType, ReactModal, type ReactModalButtonProps, type ReactModalCancelEvent, type ReactModalProps, ReactMonthPicker, type ReactMonthPickerProps, ReactNumberInput, type ReactNumberInputProps, ReactPagination, type ReactPaginationProps, type ReactPaginationStyles, ReactPopconfirm, type ReactPopconfirmButtonProps, type ReactPopconfirmPlacement, type ReactPopconfirmProps, ReactPopup, type ReactPopupProps, ReactQuarterPicker, type ReactQuarterPickerProps, ReactRadio, type ReactRadioGroupProps, type ReactRadioProps, type ReactResizablePanel, type ReactResizablePanelSizes, ReactResizablePanels, type ReactResizablePanelsDirection, type ReactResizablePanelsProps, type ReactResizablePanelsResizeInfo, ReactRow, type ReactRowProps, ReactSelect, type ReactSelectChangeInfo, type ReactSelectFilterOption, type ReactSelectOption, type ReactSelectProps, ReactTextArea, type ReactTextAreaProps, ReactTimePicker, type ReactTimePickerProps, ReactTimeRangePicker, type ReactTimeRangePickerProps, ReactTooltip, type ReactTooltipProps, ReactTransition, type ReactTransitionDuration, type ReactTransitionOptions, type ReactTransitionPhase, type ReactTransitionProps, type ReactTransitionState, ReactVirtualList, type ReactVirtualListProps, type ReactVirtualListRef, ReactYearPicker, type ReactYearPickerProps, reactMessage, resolveResizablePanelSizes, useReactContentScale, useReactForm, useReactFormWatch, useReactTransition };
|
|
1319
|
+
export { REACT_COMPONENT_PREFIX, ReactAutoComplete, type ReactAutoCompleteProps, ReactButton, type ReactButtonProps, ReactCascader, type ReactCascaderChangeInfo, type ReactCascaderOption, type ReactCascaderProps, ReactCheckbox, type ReactCheckboxProps, type ReactCheckboxRef, ReactCol, type ReactColProps, ReactColorPicker, type ReactColorPickerProps, ReactContentScaleProvider, type ReactContentScaleValue, ReactDatePicker, type ReactDatePickerProps, ReactDateRangePicker, type ReactDateRangePickerProps, ReactDateTimePicker, type ReactDateTimePickerProps, ReactDateTimeRangePicker, type ReactDateTimeRangePickerProps, type ReactFilterConditionOperator, ReactFilterPanel, type ReactFilterPanelCondition, type ReactFilterPanelOption, type ReactFilterPanelRequest, type ReactFilterPanelTexts, type ReactFilterPanelValue, ReactFlex, type ReactFlexProps, ReactForm, type ReactFormInstance, type ReactFormItemProps, type ReactFormProps, type ReactFormRule, type ReactFormRuleConfig, type ReactFormValues, ReactImagePreview, type ReactImagePreviewProps, ReactInput, ReactInputNumber, type ReactInputNumberProps, type ReactInputProps, ReactInputRange, type ReactInputRangeProps, type ReactInputRangeValue, type ReactMessageType, ReactModal, type ReactModalButtonProps, type ReactModalCancelEvent, type ReactModalProps, ReactMonthPicker, type ReactMonthPickerProps, ReactNumberInput, type ReactNumberInputProps, ReactPagination, type ReactPaginationProps, type ReactPaginationStyles, ReactPopconfirm, type ReactPopconfirmButtonProps, type ReactPopconfirmPlacement, type ReactPopconfirmProps, ReactPopup, type ReactPopupProps, ReactQuarterPicker, type ReactQuarterPickerProps, ReactRadio, type ReactRadioGroupProps, type ReactRadioProps, type ReactResizablePanel, type ReactResizablePanelSizes, ReactResizablePanels, type ReactResizablePanelsDirection, type ReactResizablePanelsProps, type ReactResizablePanelsResizeInfo, ReactRow, type ReactRowProps, ReactSelect, type ReactSelectChangeInfo, type ReactSelectFilterOption, type ReactSelectOption, type ReactSelectProps, ReactTextArea, type ReactTextAreaProps, ReactTimePicker, type ReactTimePickerProps, ReactTimeRangePicker, type ReactTimeRangePickerProps, ReactTooltip, type ReactTooltipProps, ReactTransition, type ReactTransitionDuration, type ReactTransitionOptions, type ReactTransitionPhase, type ReactTransitionProps, type ReactTransitionState, ReactVirtualList, type ReactVirtualListProps, type ReactVirtualListRef, ReactYearPicker, type ReactYearPickerProps, reactMessage, resolveResizablePanelSizes, useReactContentScale, useReactForm, useReactFormWatch, useReactTransition };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { forwardRef, useRef, useEffect, useImperativeHandle, createContext, useState, useMemo, useLayoutEffect, useContext, useSyncExternalStore, cloneElement, Fragment as Fragment$1 } from 'react';
|
|
2
|
+
import { forwardRef, useRef, useEffect, useImperativeHandle, createContext, useState, useMemo, useLayoutEffect, useContext, useSyncExternalStore, cloneElement, Fragment as Fragment$1, useId } from 'react';
|
|
3
3
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
5
|
|
|
@@ -713,7 +713,7 @@ var ReactVirtualList = forwardRef(function ReactVirtualListInner(props, ref) {
|
|
|
713
713
|
});
|
|
714
714
|
|
|
715
715
|
// src/components/select/style.css
|
|
716
|
-
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 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 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 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');
|
|
716
|
+
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');
|
|
717
717
|
var ReactSelect = forwardRef(
|
|
718
718
|
function ReactSelect2(props, ref) {
|
|
719
719
|
const {
|
|
@@ -7238,6 +7238,333 @@ function clamp3(value, min, max) {
|
|
|
7238
7238
|
}
|
|
7239
7239
|
return Math.min(Math.max(value, min), max);
|
|
7240
7240
|
}
|
|
7241
|
+
|
|
7242
|
+
// src/components/cascader/style.css
|
|
7243
|
+
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');
|
|
7244
|
+
function resolvePath(options, value) {
|
|
7245
|
+
const path = [];
|
|
7246
|
+
for (const part of value) {
|
|
7247
|
+
const item = options.find((option) => option.value === part);
|
|
7248
|
+
if (!item) break;
|
|
7249
|
+
path.push(item);
|
|
7250
|
+
options = item.children ?? [];
|
|
7251
|
+
}
|
|
7252
|
+
return path;
|
|
7253
|
+
}
|
|
7254
|
+
var EMPTY_OPTIONS = [];
|
|
7255
|
+
var EMPTY_VALUE = [];
|
|
7256
|
+
function ReactCascader(props) {
|
|
7257
|
+
const {
|
|
7258
|
+
value = EMPTY_VALUE,
|
|
7259
|
+
options = EMPTY_OPTIONS,
|
|
7260
|
+
showSearch = false,
|
|
7261
|
+
changeOnSelect = false,
|
|
7262
|
+
expandTrigger = "click",
|
|
7263
|
+
displayRender,
|
|
7264
|
+
onChange,
|
|
7265
|
+
allowClear = true,
|
|
7266
|
+
disabled,
|
|
7267
|
+
readOnly,
|
|
7268
|
+
onFocus,
|
|
7269
|
+
onBlur,
|
|
7270
|
+
onClick,
|
|
7271
|
+
onKeyDown,
|
|
7272
|
+
...inputProps
|
|
7273
|
+
} = props;
|
|
7274
|
+
const anchorRef = useRef(null);
|
|
7275
|
+
const inputRef = useRef(null);
|
|
7276
|
+
const popupRef = useRef(null);
|
|
7277
|
+
const popupId = useId();
|
|
7278
|
+
const selected = useMemo(() => resolvePath(options, value), [options, value]);
|
|
7279
|
+
const [path, setPath] = useState(selected);
|
|
7280
|
+
const [open, setOpen] = useState(false);
|
|
7281
|
+
const [keyword, setKeyword] = useState("");
|
|
7282
|
+
const [typing, setTyping] = useState(false);
|
|
7283
|
+
const [focus, setFocus] = useState({ column: 0, index: -1 });
|
|
7284
|
+
const interactive = !disabled && !readOnly;
|
|
7285
|
+
useEffect(() => {
|
|
7286
|
+
setPath(selected);
|
|
7287
|
+
}, [selected]);
|
|
7288
|
+
const labels = value.map(
|
|
7289
|
+
(part, index) => selected[index]?.label ?? String(part)
|
|
7290
|
+
);
|
|
7291
|
+
const text = displayRender?.(labels, selected) ?? labels.join(" / ");
|
|
7292
|
+
const columns = [options];
|
|
7293
|
+
for (const item of path) {
|
|
7294
|
+
if (!item.children?.length) break;
|
|
7295
|
+
columns.push(item.children);
|
|
7296
|
+
}
|
|
7297
|
+
const searching = showSearch && keyword.trim().length > 0;
|
|
7298
|
+
const results = useMemo(() => {
|
|
7299
|
+
if (!keyword.trim()) return [];
|
|
7300
|
+
const matches = [];
|
|
7301
|
+
const visit = (items, parents) => {
|
|
7302
|
+
for (const item of items) {
|
|
7303
|
+
if (item.disabled) continue;
|
|
7304
|
+
const next = [...parents, item];
|
|
7305
|
+
if ((!item.children?.length || changeOnSelect) && next.map((part) => part.label).join(" / ").toLocaleLowerCase().includes(keyword.trim().toLocaleLowerCase()))
|
|
7306
|
+
matches.push(next);
|
|
7307
|
+
if (item.children?.length) visit(item.children, next);
|
|
7308
|
+
}
|
|
7309
|
+
};
|
|
7310
|
+
visit(options, []);
|
|
7311
|
+
return matches;
|
|
7312
|
+
}, [options, keyword, changeOnSelect]);
|
|
7313
|
+
useEffect(() => {
|
|
7314
|
+
popupRef.current?.querySelector("[data-active='true']")?.scrollIntoView?.({ block: "nearest", inline: "nearest" });
|
|
7315
|
+
}, [focus, open]);
|
|
7316
|
+
const choose = (next, trigger, fromSearch = false) => {
|
|
7317
|
+
const item = next[next.length - 1];
|
|
7318
|
+
if (!item || next.some((option) => option.disabled)) return;
|
|
7319
|
+
setPath(next);
|
|
7320
|
+
const complete = !item.children?.length || fromSearch;
|
|
7321
|
+
if (complete || changeOnSelect)
|
|
7322
|
+
onChange?.(
|
|
7323
|
+
next.map((option) => option.value),
|
|
7324
|
+
next,
|
|
7325
|
+
{ trigger, complete }
|
|
7326
|
+
);
|
|
7327
|
+
if (complete) {
|
|
7328
|
+
setOpen(false);
|
|
7329
|
+
setKeyword("");
|
|
7330
|
+
setTyping(false);
|
|
7331
|
+
}
|
|
7332
|
+
};
|
|
7333
|
+
const show = () => {
|
|
7334
|
+
if (!interactive) return;
|
|
7335
|
+
setOpen(true);
|
|
7336
|
+
setPath(selected);
|
|
7337
|
+
};
|
|
7338
|
+
return /* @__PURE__ */ jsxs(
|
|
7339
|
+
"div",
|
|
7340
|
+
{
|
|
7341
|
+
ref: anchorRef,
|
|
7342
|
+
className: `canvas-react-cascader${open && interactive ? " canvas-react-cascader-open" : ""}`,
|
|
7343
|
+
children: [
|
|
7344
|
+
/* @__PURE__ */ jsx(
|
|
7345
|
+
ReactInput,
|
|
7346
|
+
{
|
|
7347
|
+
ref: inputRef,
|
|
7348
|
+
...inputProps,
|
|
7349
|
+
disabled,
|
|
7350
|
+
readOnly: readOnly || !showSearch,
|
|
7351
|
+
allowClear: false,
|
|
7352
|
+
role: "combobox",
|
|
7353
|
+
"aria-haspopup": "listbox",
|
|
7354
|
+
"aria-expanded": open,
|
|
7355
|
+
"aria-controls": open ? popupId : void 0,
|
|
7356
|
+
"aria-activedescendant": open && focus.index >= 0 ? `${popupId}-${searching ? 0 : focus.column}-${focus.index}` : void 0,
|
|
7357
|
+
value: open && showSearch && typing ? keyword : text,
|
|
7358
|
+
onFocus: (event) => {
|
|
7359
|
+
show();
|
|
7360
|
+
onFocus?.(event);
|
|
7361
|
+
},
|
|
7362
|
+
onClick: (event) => {
|
|
7363
|
+
show();
|
|
7364
|
+
onClick?.(event);
|
|
7365
|
+
},
|
|
7366
|
+
onBlur: (event) => {
|
|
7367
|
+
setOpen(false);
|
|
7368
|
+
setKeyword("");
|
|
7369
|
+
setTyping(false);
|
|
7370
|
+
onBlur?.(event);
|
|
7371
|
+
},
|
|
7372
|
+
onChange: (event) => {
|
|
7373
|
+
setTyping(true);
|
|
7374
|
+
setKeyword(event.target.value);
|
|
7375
|
+
setOpen(true);
|
|
7376
|
+
setFocus({ column: 0, index: -1 });
|
|
7377
|
+
},
|
|
7378
|
+
onKeyDown: (event) => {
|
|
7379
|
+
onKeyDown?.(event);
|
|
7380
|
+
if (event.defaultPrevented || !interactive) return;
|
|
7381
|
+
if (event.key === "Escape") {
|
|
7382
|
+
event.preventDefault();
|
|
7383
|
+
setOpen(false);
|
|
7384
|
+
setKeyword("");
|
|
7385
|
+
setTyping(false);
|
|
7386
|
+
return;
|
|
7387
|
+
}
|
|
7388
|
+
if (![
|
|
7389
|
+
"ArrowDown",
|
|
7390
|
+
"ArrowUp",
|
|
7391
|
+
"ArrowRight",
|
|
7392
|
+
"ArrowLeft",
|
|
7393
|
+
"Enter"
|
|
7394
|
+
].includes(event.key))
|
|
7395
|
+
return;
|
|
7396
|
+
event.preventDefault();
|
|
7397
|
+
setOpen(true);
|
|
7398
|
+
const column = searching ? 0 : Math.min(focus.column, columns.length - 1);
|
|
7399
|
+
const items = searching ? results.map((result) => result[result.length - 1]) : columns[column];
|
|
7400
|
+
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
7401
|
+
const direction = event.key === "ArrowDown" ? 1 : -1;
|
|
7402
|
+
let index = focus.index;
|
|
7403
|
+
if (index < 0) index = direction === 1 ? -1 : 0;
|
|
7404
|
+
for (let count = 0; count < items.length; count++) {
|
|
7405
|
+
index = (index + direction + items.length) % items.length;
|
|
7406
|
+
if (!items[index].disabled) {
|
|
7407
|
+
setFocus({ column, index });
|
|
7408
|
+
break;
|
|
7409
|
+
}
|
|
7410
|
+
}
|
|
7411
|
+
} else if (event.key === "ArrowLeft" && !searching) {
|
|
7412
|
+
const previous = Math.max(0, column - 1);
|
|
7413
|
+
setFocus({
|
|
7414
|
+
column: previous,
|
|
7415
|
+
index: columns[previous].indexOf(path[previous])
|
|
7416
|
+
});
|
|
7417
|
+
} else {
|
|
7418
|
+
const item = items[focus.index];
|
|
7419
|
+
if (!item || item.disabled) return;
|
|
7420
|
+
const next = searching ? results[focus.index] : [...path.slice(0, column), item];
|
|
7421
|
+
if (event.key === "Enter") choose(next, "keyboard", searching);
|
|
7422
|
+
else if (event.key !== "ArrowRight") return;
|
|
7423
|
+
if (!searching && item.children?.length) {
|
|
7424
|
+
setPath(next);
|
|
7425
|
+
setFocus({
|
|
7426
|
+
column: column + 1,
|
|
7427
|
+
index: item.children.findIndex((child) => !child.disabled)
|
|
7428
|
+
});
|
|
7429
|
+
}
|
|
7430
|
+
}
|
|
7431
|
+
},
|
|
7432
|
+
suffix: /* @__PURE__ */ jsxs(
|
|
7433
|
+
"span",
|
|
7434
|
+
{
|
|
7435
|
+
className: `canvas-react-select-actions${allowClear && interactive && value.length > 0 ? " canvas-react-select-actions-clearable" : ""}`,
|
|
7436
|
+
onPointerDown: (event) => {
|
|
7437
|
+
if (!interactive) return;
|
|
7438
|
+
event.preventDefault();
|
|
7439
|
+
event.stopPropagation();
|
|
7440
|
+
},
|
|
7441
|
+
onMouseDown: (event) => {
|
|
7442
|
+
if (!interactive) return;
|
|
7443
|
+
event.preventDefault();
|
|
7444
|
+
event.stopPropagation();
|
|
7445
|
+
},
|
|
7446
|
+
onClick: (event) => {
|
|
7447
|
+
if (!interactive) return;
|
|
7448
|
+
event.stopPropagation();
|
|
7449
|
+
inputRef.current?.focus({ preventScroll: true });
|
|
7450
|
+
show();
|
|
7451
|
+
},
|
|
7452
|
+
children: [
|
|
7453
|
+
allowClear && interactive && value.length > 0 ? /* @__PURE__ */ jsx(
|
|
7454
|
+
"button",
|
|
7455
|
+
{
|
|
7456
|
+
type: "button",
|
|
7457
|
+
className: "canvas-react-select-clear",
|
|
7458
|
+
tabIndex: -1,
|
|
7459
|
+
"aria-label": "\u6E05\u7A7A\u7EA7\u8054\u9009\u62E9",
|
|
7460
|
+
onPointerDown: (event) => {
|
|
7461
|
+
event.preventDefault();
|
|
7462
|
+
event.stopPropagation();
|
|
7463
|
+
},
|
|
7464
|
+
onMouseDown: (event) => {
|
|
7465
|
+
event.preventDefault();
|
|
7466
|
+
event.stopPropagation();
|
|
7467
|
+
},
|
|
7468
|
+
onClick: (event) => {
|
|
7469
|
+
event.preventDefault();
|
|
7470
|
+
event.stopPropagation();
|
|
7471
|
+
inputRef.current?.focus({ preventScroll: true });
|
|
7472
|
+
setKeyword("");
|
|
7473
|
+
setTyping(false);
|
|
7474
|
+
setPath([]);
|
|
7475
|
+
setFocus({ column: 0, index: -1 });
|
|
7476
|
+
setOpen(true);
|
|
7477
|
+
onChange?.([], [], { trigger: "clear", complete: false });
|
|
7478
|
+
},
|
|
7479
|
+
children: /* @__PURE__ */ jsx(
|
|
7480
|
+
"span",
|
|
7481
|
+
{
|
|
7482
|
+
className: "canvas-react-select-clear-icon",
|
|
7483
|
+
"aria-hidden": "true"
|
|
7484
|
+
}
|
|
7485
|
+
)
|
|
7486
|
+
}
|
|
7487
|
+
) : null,
|
|
7488
|
+
/* @__PURE__ */ jsx(
|
|
7489
|
+
"span",
|
|
7490
|
+
{
|
|
7491
|
+
className: `canvas-react-select-arrow${open && interactive ? " canvas-react-select-arrow-open" : ""}`,
|
|
7492
|
+
"aria-hidden": "true"
|
|
7493
|
+
}
|
|
7494
|
+
)
|
|
7495
|
+
]
|
|
7496
|
+
}
|
|
7497
|
+
)
|
|
7498
|
+
}
|
|
7499
|
+
),
|
|
7500
|
+
/* @__PURE__ */ jsx(
|
|
7501
|
+
ReactPopup,
|
|
7502
|
+
{
|
|
7503
|
+
constrainHeight: true,
|
|
7504
|
+
open: open && interactive,
|
|
7505
|
+
anchorRef,
|
|
7506
|
+
onOpenChange: setOpen,
|
|
7507
|
+
surfaceClassName: "canvas-react-cascader-popup",
|
|
7508
|
+
children: /* @__PURE__ */ jsx(
|
|
7509
|
+
"div",
|
|
7510
|
+
{
|
|
7511
|
+
ref: popupRef,
|
|
7512
|
+
id: popupId,
|
|
7513
|
+
className: "canvas-react-cascader-menus",
|
|
7514
|
+
children: (searching ? [results.map((result) => result[result.length - 1])] : columns).map((items, column) => /* @__PURE__ */ jsx(
|
|
7515
|
+
"div",
|
|
7516
|
+
{
|
|
7517
|
+
role: "listbox",
|
|
7518
|
+
"aria-label": searching ? "\u641C\u7D22\u7ED3\u679C" : `\u7B2C ${column + 1} \u7EA7\u9009\u9879`,
|
|
7519
|
+
className: "canvas-react-cascader-menu",
|
|
7520
|
+
children: items.length === 0 ? /* @__PURE__ */ jsx("div", { className: "canvas-react-cascader-empty", children: "\u6682\u65E0\u6570\u636E" }) : items.map((item, index) => {
|
|
7521
|
+
const next = searching ? results[index] : [...path.slice(0, column), item];
|
|
7522
|
+
const active = focus.column === column && focus.index === index;
|
|
7523
|
+
return /* @__PURE__ */ jsxs(
|
|
7524
|
+
"div",
|
|
7525
|
+
{
|
|
7526
|
+
id: `${popupId}-${column}-${index}`,
|
|
7527
|
+
role: "option",
|
|
7528
|
+
"aria-selected": path[column] === item,
|
|
7529
|
+
"aria-disabled": !!item.disabled,
|
|
7530
|
+
"data-active": active,
|
|
7531
|
+
className: "canvas-react-cascader-option",
|
|
7532
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
7533
|
+
onMouseEnter: () => {
|
|
7534
|
+
if (item.disabled) return;
|
|
7535
|
+
setFocus({ column, index });
|
|
7536
|
+
if (expandTrigger === "hover" && !searching && item.children?.length)
|
|
7537
|
+
setPath(next);
|
|
7538
|
+
},
|
|
7539
|
+
onClick: () => {
|
|
7540
|
+
setFocus({ column, index });
|
|
7541
|
+
choose(next, "mouse", searching);
|
|
7542
|
+
},
|
|
7543
|
+
children: [
|
|
7544
|
+
/* @__PURE__ */ jsx("span", { children: searching ? next.map((part) => part.label).join(" / ") : item.label }),
|
|
7545
|
+
!searching && item.children?.length ? /* @__PURE__ */ jsx(
|
|
7546
|
+
"span",
|
|
7547
|
+
{
|
|
7548
|
+
className: "canvas-react-cascader-chevron",
|
|
7549
|
+
"aria-hidden": "true"
|
|
7550
|
+
}
|
|
7551
|
+
) : null
|
|
7552
|
+
]
|
|
7553
|
+
},
|
|
7554
|
+
index
|
|
7555
|
+
);
|
|
7556
|
+
})
|
|
7557
|
+
},
|
|
7558
|
+
column
|
|
7559
|
+
))
|
|
7560
|
+
}
|
|
7561
|
+
)
|
|
7562
|
+
}
|
|
7563
|
+
)
|
|
7564
|
+
]
|
|
7565
|
+
}
|
|
7566
|
+
);
|
|
7567
|
+
}
|
|
7241
7568
|
var ReactAutoComplete = forwardRef(function ReactAutoComplete2(props, ref) {
|
|
7242
7569
|
const {
|
|
7243
7570
|
onChange,
|
|
@@ -8525,6 +8852,6 @@ var reactMessage = {
|
|
|
8525
8852
|
error: (content) => showMessage("error", content)
|
|
8526
8853
|
};
|
|
8527
8854
|
|
|
8528
|
-
export { REACT_COMPONENT_PREFIX, ReactAutoComplete, ReactButton, ReactCheckbox, ReactCol, ReactColorPicker, ReactContentScaleProvider, ReactDatePicker, ReactDateRangePicker, ReactDateTimePicker, ReactDateTimeRangePicker, ReactFilterPanel, ReactFlex, ReactForm, ReactImagePreview, ReactInput, ReactInputNumber, ReactInputRange, ReactModal, ReactMonthPicker, ReactNumberInput, ReactPagination, ReactPopconfirm, ReactPopup, ReactQuarterPicker, ReactRadio, ReactResizablePanels, ReactRow, ReactSelect, ReactTextArea, ReactTimePicker, ReactTimeRangePicker, ReactTooltip, ReactTransition, ReactVirtualList, ReactYearPicker, reactMessage, resolveResizablePanelSizes, useReactContentScale, useReactForm, useReactFormWatch, useReactTransition };
|
|
8855
|
+
export { REACT_COMPONENT_PREFIX, ReactAutoComplete, ReactButton, ReactCascader, ReactCheckbox, ReactCol, ReactColorPicker, ReactContentScaleProvider, ReactDatePicker, ReactDateRangePicker, ReactDateTimePicker, ReactDateTimeRangePicker, ReactFilterPanel, ReactFlex, ReactForm, ReactImagePreview, ReactInput, ReactInputNumber, ReactInputRange, ReactModal, ReactMonthPicker, ReactNumberInput, ReactPagination, ReactPopconfirm, ReactPopup, ReactQuarterPicker, ReactRadio, ReactResizablePanels, ReactRow, ReactSelect, ReactTextArea, ReactTimePicker, ReactTimeRangePicker, ReactTooltip, ReactTransition, ReactVirtualList, ReactYearPicker, reactMessage, resolveResizablePanelSizes, useReactContentScale, useReactForm, useReactFormWatch, useReactTransition };
|
|
8529
8856
|
//# sourceMappingURL=index.js.map
|
|
8530
8857
|
//# sourceMappingURL=index.js.map
|