@oceanbase/design 1.0.0-alpha.17 → 1.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/design.min.js +1 -1
- package/es/_util/genComponentStyleHook.js +6 -2
- package/es/config-provider/index.d.ts +2 -0
- package/es/config-provider/index.js +68 -38
- package/es/filter/FilterContext.d.ts +1 -1
- package/es/filter/components/FilterButton.js +30 -7
- package/es/filter/components/FilterCascader/components/FlatCascaderContent/index.d.ts +4 -3
- package/es/filter/components/FilterCascader/components/FlatCascaderContent/index.js +20 -6
- package/es/filter/components/FilterCascader/components/NormalCascaderContent.js +2 -7
- package/es/filter/components/FilterInput.d.ts +2 -0
- package/es/filter/components/FilterInput.js +18 -4
- package/es/filter/components/FilterSlot.d.ts +28 -0
- package/es/filter/components/FilterSlot.js +189 -0
- package/es/filter/components/FilterWrap.js +9 -0
- package/es/filter/components/ResponsiveFilterGroup.js +38 -2
- package/es/filter/index.d.ts +2 -0
- package/es/filter/index.js +3 -1
- package/es/filter/style/index.js +1 -1
- package/es/filter/type.d.ts +2 -0
- package/es/table/index.d.ts +2 -2
- package/es/table/style/index.js +34 -16
- package/es/theme/default.d.ts +12 -0
- package/es/theme/default.js +27 -5
- package/lib/_util/genComponentStyleHook.js +6 -2
- package/lib/config-provider/index.d.ts +2 -0
- package/lib/config-provider/index.js +38 -2
- package/lib/filter/FilterContext.d.ts +1 -1
- package/lib/filter/components/FilterButton.js +22 -4
- package/lib/filter/components/FilterCascader/components/FlatCascaderContent/index.d.ts +4 -3
- package/lib/filter/components/FilterCascader/components/FlatCascaderContent/index.js +12 -5
- package/lib/filter/components/FilterCascader/components/NormalCascaderContent.js +2 -7
- package/lib/filter/components/FilterInput.d.ts +2 -0
- package/lib/filter/components/FilterInput.js +18 -3
- package/lib/filter/components/FilterSlot.d.ts +28 -0
- package/lib/filter/components/FilterSlot.js +174 -0
- package/lib/filter/components/FilterWrap.js +8 -0
- package/lib/filter/components/ResponsiveFilterGroup.js +32 -2
- package/lib/filter/index.d.ts +2 -0
- package/lib/filter/index.js +3 -1
- package/lib/filter/style/index.js +1 -1
- package/lib/filter/type.d.ts +2 -0
- package/lib/table/index.d.ts +2 -2
- package/lib/table/style/index.js +28 -19
- package/lib/theme/default.d.ts +12 -0
- package/lib/theme/default.js +29 -6
- package/package.json +2 -2
|
@@ -35,8 +35,12 @@ export var genSelectCommonStyle = function genSelectCommonStyle(token) {
|
|
|
35
35
|
export function genStyleHooks(componentName, styleFn, getDefaultToken, options) {
|
|
36
36
|
var normalizedComponentName = Array.isArray(componentName) ? componentName[0] : componentName;
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
/**
|
|
39
|
+
* 使用 [Component, subName] 注册,第一维与 antd 一致以便合并 `theme.components[Component]`(如 Table.cellFontSize);
|
|
40
|
+
* 第二维与 antd 默认样式区分,避免覆盖/顶替同组件的主样式钩子。
|
|
41
|
+
*/
|
|
42
|
+
var OCEANBASE_SUB_STYLE = 'oceanbase';
|
|
43
|
+
var obComponentName = Array.isArray(componentName) ? [normalizedComponentName, "".concat(OCEANBASE_SUB_STYLE, "-").concat(componentName[1])] : [normalizedComponentName, OCEANBASE_SUB_STYLE];
|
|
40
44
|
return antGenStyleHooks(obComponentName, function (token) {
|
|
41
45
|
var styles = [];
|
|
42
46
|
|
|
@@ -63,5 +63,7 @@ export type ConfigProviderType = React.FC<ConfigProviderProps> & {
|
|
|
63
63
|
config: typeof AntConfigProvider.config;
|
|
64
64
|
useConfig: typeof AntConfigProvider.useConfig;
|
|
65
65
|
};
|
|
66
|
+
/** Cn 字号补丁(正文 + Table 单元格),供单测与 ConfigProvider 共用。 */
|
|
67
|
+
export declare function getLocaleFontSizeThemePatch(mergedLocale: Locale, mergedTheme: ThemeConfig, resolvedFontSize: number | undefined): ThemeConfig;
|
|
66
68
|
declare const ConfigProvider: ConfigProviderType;
|
|
67
69
|
export default ConfigProvider;
|
|
@@ -24,7 +24,7 @@ import { merge } from 'lodash';
|
|
|
24
24
|
import App from "../app";
|
|
25
25
|
import StaticFunction from "../static-function";
|
|
26
26
|
import themeConfig from "../theme";
|
|
27
|
-
import defaultTheme, { fontFamilyEn, fontWeightWeakEn, fontWeightEn, fontWeightStrongEn } from "../theme/default";
|
|
27
|
+
import defaultTheme, { fontFamilyEn, fontSizeCn, fontHeightCn, lineHeightCn, fontSizeEn, fontWeightWeakEn, fontWeightEn, fontWeightStrongEn, isCnLikeLocale, tableCellFontSizeEn } from "../theme/default";
|
|
28
28
|
import darkTheme from "../theme/dark";
|
|
29
29
|
import compactTheme from "../theme/compact";
|
|
30
30
|
import DefaultRenderEmpty from "./DefaultRenderEmpty";
|
|
@@ -42,26 +42,55 @@ var ExtendedConfigContext = /*#__PURE__*/React.createContext({
|
|
|
42
42
|
hideOnSinglePage: false,
|
|
43
43
|
injectStaticFunction: true
|
|
44
44
|
});
|
|
45
|
+
/** `en` / `en-gb` → `tokenValueEn`(与 `fontFamilyEn` 等一致)。 */
|
|
45
46
|
var getLocaleTokenValue = function getLocaleTokenValue(mergedThemeToken, locale, tokenKey, tokenValue, tokenValueEn) {
|
|
46
47
|
return tokenValue !== mergedThemeToken[tokenKey] ? _defineProperty({}, tokenKey, tokenValue) : ['en', 'en-gb'].includes(locale.locale) ? _defineProperty({}, tokenKey, tokenValueEn) : {};
|
|
47
48
|
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
49
|
+
|
|
50
|
+
/** Cn(zh/ja/ko)且仍为拉丁基线 `tokenValueEn` 时 → `tokenValueCn`,结构上与 {@link getLocaleTokenValue} 对称。 */
|
|
51
|
+
var getLocaleTokenValueCn = function getLocaleTokenValueCn(mergedThemeToken, locale, tokenKey, tokenValue, tokenValueEn, tokenValueCn) {
|
|
52
|
+
return tokenValue !== mergedThemeToken[tokenKey] ? _defineProperty({}, tokenKey, tokenValue) : isCnLikeLocale(locale.locale) && (tokenValue === undefined || tokenValue === tokenValueEn) ? _defineProperty({}, tokenKey, tokenValueCn) : {};
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/** Cn 字号补丁(正文 + Table 单元格),供单测与 ConfigProvider 共用。 */
|
|
56
|
+
export function getLocaleFontSizeThemePatch(mergedLocale, mergedTheme, resolvedFontSize) {
|
|
57
|
+
var _mergedTheme$token, _mergedTheme$componen;
|
|
58
|
+
var tokenPatch = getLocaleTokenValueCn((_mergedTheme$token = mergedTheme.token) !== null && _mergedTheme$token !== void 0 ? _mergedTheme$token : {}, mergedLocale, 'fontSize', resolvedFontSize, fontSizeEn, fontSizeCn);
|
|
59
|
+
var patch = {};
|
|
60
|
+
if ('fontSize' in tokenPatch && tokenPatch.fontSize !== undefined) {
|
|
61
|
+
patch.token = {
|
|
62
|
+
fontSize: tokenPatch.fontSize,
|
|
63
|
+
lineHeight: lineHeightCn,
|
|
64
|
+
fontHeight: fontHeightCn
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
var cellFs = (_mergedTheme$componen = mergedTheme.components) === null || _mergedTheme$componen === void 0 || (_mergedTheme$componen = _mergedTheme$componen.Table) === null || _mergedTheme$componen === void 0 ? void 0 : _mergedTheme$componen.cellFontSize;
|
|
68
|
+
if ((cellFs === undefined || cellFs === tableCellFontSizeEn) && isCnLikeLocale(mergedLocale.locale)) {
|
|
69
|
+
patch.components = {
|
|
70
|
+
Table: {
|
|
71
|
+
cellFontSize: fontSizeCn
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return patch;
|
|
76
|
+
}
|
|
77
|
+
var ConfigProvider = function ConfigProvider(_ref5) {
|
|
78
|
+
var _mergedTheme$token2, _mergedTheme$token$fo, _mergedTheme$token3, _mergedTheme$token4, _mergedTheme$token5, _mergedTheme$token6, _parentContext$pagina;
|
|
79
|
+
var children = _ref5.children,
|
|
80
|
+
theme = _ref5.theme,
|
|
81
|
+
locale = _ref5.locale,
|
|
82
|
+
wave = _ref5.wave,
|
|
83
|
+
navigate = _ref5.navigate,
|
|
84
|
+
hideOnSinglePage = _ref5.hideOnSinglePage,
|
|
85
|
+
card = _ref5.card,
|
|
86
|
+
collapse = _ref5.collapse,
|
|
87
|
+
form = _ref5.form,
|
|
88
|
+
spin = _ref5.spin,
|
|
89
|
+
table = _ref5.table,
|
|
90
|
+
tabs = _ref5.tabs,
|
|
91
|
+
styleProviderProps = _ref5.styleProviderProps,
|
|
92
|
+
appProps = _ref5.appProps,
|
|
93
|
+
restProps = _objectWithoutProperties(_ref5, _excluded);
|
|
65
94
|
// inherit from parent ConfigProvider
|
|
66
95
|
var parentContext = React.useContext(AntConfigProvider.ConfigContext);
|
|
67
96
|
var parentExtendedContext = React.useContext(ExtendedConfigContext);
|
|
@@ -71,28 +100,29 @@ var ConfigProvider = function ConfigProvider(_ref3) {
|
|
|
71
100
|
isCompact = _merge.isCompact;
|
|
72
101
|
var aliyunThemeConfig = isAliyun ? aliyunTheme : undefined;
|
|
73
102
|
var darkThemeConfig = isDark && !isAliyun ? isCompact ? darkTheme : _objectSpread(_objectSpread({}, darkTheme), {}, {
|
|
74
|
-
token: _objectSpread(_objectSpread({}, darkTheme.token), Object.fromEntries(Object.entries(defaultTheme.token).filter(function (
|
|
103
|
+
token: _objectSpread(_objectSpread({}, darkTheme.token), Object.fromEntries(Object.entries(defaultTheme.token).filter(function (_ref6) {
|
|
75
104
|
var _key$toLowerCase;
|
|
76
|
-
var
|
|
77
|
-
key =
|
|
105
|
+
var _ref7 = _slicedToArray(_ref6, 1),
|
|
106
|
+
key = _ref7[0];
|
|
78
107
|
return !(key !== null && key !== void 0 && (_key$toLowerCase = key.toLowerCase()) !== null && _key$toLowerCase !== void 0 && _key$toLowerCase.startsWith('color'));
|
|
79
108
|
})))
|
|
80
109
|
}) : undefined;
|
|
81
110
|
var compactThemeConfig = isCompact && !isAliyun ? isDark ? compactTheme : _objectSpread(_objectSpread({}, compactTheme), {}, {
|
|
82
|
-
token: _objectSpread(_objectSpread({}, compactTheme.token), Object.fromEntries(Object.entries(defaultTheme.token).filter(function (
|
|
111
|
+
token: _objectSpread(_objectSpread({}, compactTheme.token), Object.fromEntries(Object.entries(defaultTheme.token).filter(function (_ref8) {
|
|
83
112
|
var _key$toLowerCase2;
|
|
84
|
-
var
|
|
85
|
-
key =
|
|
113
|
+
var _ref9 = _slicedToArray(_ref8, 1),
|
|
114
|
+
key = _ref9[0];
|
|
86
115
|
return (key === null || key === void 0 || (_key$toLowerCase2 = key.toLowerCase()) === null || _key$toLowerCase2 === void 0 ? void 0 : _key$toLowerCase2.startsWith('color')) && !['colorBgBase', 'colorTextBase'].includes(key);
|
|
87
116
|
})))
|
|
88
117
|
}) : undefined;
|
|
89
118
|
var mergedTheme = merge({}, isAliyun ? {} : isDark || isCompact ? themeConfig.defaultSeed : defaultTheme, parentContext.theme, aliyunThemeConfig, darkThemeConfig, compactThemeConfig, theme);
|
|
90
119
|
var _themeConfig$useToken = themeConfig.useToken(),
|
|
91
120
|
token = _themeConfig$useToken.token;
|
|
92
|
-
var fontFamily = ((_mergedTheme$
|
|
93
|
-
var
|
|
94
|
-
var
|
|
95
|
-
var
|
|
121
|
+
var fontFamily = ((_mergedTheme$token2 = mergedTheme.token) === null || _mergedTheme$token2 === void 0 ? void 0 : _mergedTheme$token2.fontFamily) || token.fontFamily;
|
|
122
|
+
var fontSize = (_mergedTheme$token$fo = (_mergedTheme$token3 = mergedTheme.token) === null || _mergedTheme$token3 === void 0 ? void 0 : _mergedTheme$token3.fontSize) !== null && _mergedTheme$token$fo !== void 0 ? _mergedTheme$token$fo : token.fontSize;
|
|
123
|
+
var fontWeightWeak = ((_mergedTheme$token4 = mergedTheme.token) === null || _mergedTheme$token4 === void 0 ? void 0 : _mergedTheme$token4.fontWeightWeak) || token.fontWeightWeak;
|
|
124
|
+
var fontWeight = ((_mergedTheme$token5 = mergedTheme.token) === null || _mergedTheme$token5 === void 0 ? void 0 : _mergedTheme$token5.fontWeight) || token.fontWeight;
|
|
125
|
+
var fontWeightStrong = ((_mergedTheme$token6 = mergedTheme.token) === null || _mergedTheme$token6 === void 0 ? void 0 : _mergedTheme$token6.fontWeightStrong) || token.fontWeightStrong;
|
|
96
126
|
|
|
97
127
|
// inherit from parent StyleProvider
|
|
98
128
|
var parentStyleContext = React.useContext(StyleContext);
|
|
@@ -105,8 +135,8 @@ var ConfigProvider = function ConfigProvider(_ref3) {
|
|
|
105
135
|
}, parentContext.wave, wave),
|
|
106
136
|
card: merge({}, parentContext.card, card),
|
|
107
137
|
collapse: merge({}, {
|
|
108
|
-
expandIcon: function expandIcon(
|
|
109
|
-
var isActive =
|
|
138
|
+
expandIcon: function expandIcon(_ref10) {
|
|
139
|
+
var isActive = _ref10.isActive;
|
|
110
140
|
return /*#__PURE__*/_jsx(CaretRightOutlined, {
|
|
111
141
|
rotate: isActive ? 90 : 0
|
|
112
142
|
});
|
|
@@ -118,12 +148,12 @@ var ConfigProvider = function ConfigProvider(_ref3) {
|
|
|
118
148
|
spin: merge({}, parentContext.spin, spin),
|
|
119
149
|
table: merge({}, {
|
|
120
150
|
expandable: {
|
|
121
|
-
expandIcon: function expandIcon(
|
|
122
|
-
var _mergedTheme$
|
|
123
|
-
var expandable =
|
|
124
|
-
expanded =
|
|
125
|
-
onExpand =
|
|
126
|
-
record =
|
|
151
|
+
expandIcon: function expandIcon(_ref11) {
|
|
152
|
+
var _mergedTheme$token7, _mergedTheme$token8;
|
|
153
|
+
var expandable = _ref11.expandable,
|
|
154
|
+
expanded = _ref11.expanded,
|
|
155
|
+
onExpand = _ref11.onExpand,
|
|
156
|
+
record = _ref11.record;
|
|
127
157
|
return expandable && /*#__PURE__*/_jsx(CaretRightOutlined, {
|
|
128
158
|
onClick: function onClick(e) {
|
|
129
159
|
return onExpand(record, e);
|
|
@@ -132,14 +162,14 @@ var ConfigProvider = function ConfigProvider(_ref3) {
|
|
|
132
162
|
// marginRight: mergedTheme.token?.marginXS || 8,
|
|
133
163
|
transition: "transform 0.2s",
|
|
134
164
|
transform: expanded ? 'rotate(90deg)' : undefined,
|
|
135
|
-
color: ((_mergedTheme$
|
|
165
|
+
color: ((_mergedTheme$token7 = mergedTheme.token) === null || _mergedTheme$token7 === void 0 ? void 0 : _mergedTheme$token7.colorIcon) || ((_mergedTheme$token8 = mergedTheme.token) === null || _mergedTheme$token8 === void 0 ? void 0 : _mergedTheme$token8.colorTextSecondary)
|
|
136
166
|
}
|
|
137
167
|
});
|
|
138
168
|
}
|
|
139
169
|
}
|
|
140
170
|
}, parentContext.table, table),
|
|
141
171
|
tabs: merge({}, parentContext.tabs, tabs),
|
|
142
|
-
theme: merge({}, mergedTheme, {
|
|
172
|
+
theme: merge({}, mergedTheme, getLocaleFontSizeThemePatch(mergedLocale, mergedTheme, fontSize), {
|
|
143
173
|
token: _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, getLocaleTokenValue(mergedTheme.token || {}, mergedLocale, 'fontFamily', fontFamily, fontFamilyEn)), getLocaleTokenValue(mergedTheme.token || {}, mergedLocale, 'fontWeightWeak', fontWeightWeak, fontWeightWeakEn)), getLocaleTokenValue(mergedTheme.token || {}, mergedLocale, 'fontWeight', fontWeight, fontWeightEn)), getLocaleTokenValue(mergedTheme.token || {}, mergedLocale, 'fontWeightStrong', fontWeightStrong, fontWeightStrongEn))
|
|
144
174
|
}),
|
|
145
175
|
renderEmpty: parentContext.renderEmpty || function (componentName) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FC, ReactNode } from 'react';
|
|
2
|
-
export type FilterComponentName = 'select' | 'checkbox' | 'cascader' | 'switch' | 'range' | 'input';
|
|
2
|
+
export type FilterComponentName = 'select' | 'checkbox' | 'cascader' | 'switch' | 'range' | 'input' | 'slot';
|
|
3
3
|
export type FilterValue = string | string[] | string[][] | boolean | [any, any] | null | undefined;
|
|
4
4
|
export interface FilterValueItem {
|
|
5
5
|
id: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
|
-
var _excluded = ["children", "icon", "label", "bordered", "onClear", "content", "footer", "trigger", "placement", "disabled", "loading", "selected", "extra", "autoCloseOnSelect", "onSelect", "showLabelDivider", "showSuffixIcon", "_isInWrapComponent", "_isFlat", "style"],
|
|
3
|
+
var _excluded = ["children", "icon", "label", "bordered", "onClear", "content", "footer", "trigger", "placement", "disabled", "loading", "selected", "extra", "autoCloseOnSelect", "onSelect", "showLabelDivider", "showSuffixIcon", "_isInWrapComponent", "_isFlat", "style", "allowClear"],
|
|
4
4
|
_excluded2 = ["onOpenChange"];
|
|
5
5
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
6
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -15,7 +15,7 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
|
|
|
15
15
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
16
16
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
17
17
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
18
|
-
import React, { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
18
|
+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
19
19
|
import { Flex, Popover } from 'antd';
|
|
20
20
|
import Spin from "../../spin";
|
|
21
21
|
import theme from "../../theme";
|
|
@@ -58,6 +58,8 @@ var FilterButton = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
58
58
|
_ref$_isFlat = _ref._isFlat,
|
|
59
59
|
_isFlat = _ref$_isFlat === void 0 ? false : _ref$_isFlat,
|
|
60
60
|
style = _ref.style,
|
|
61
|
+
_ref$allowClear = _ref.allowClear,
|
|
62
|
+
allowClear = _ref$allowClear === void 0 ? true : _ref$allowClear,
|
|
61
63
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
62
64
|
var _theme$useToken = theme.useToken(),
|
|
63
65
|
token = _theme$useToken.token;
|
|
@@ -67,6 +69,10 @@ var FilterButton = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
67
69
|
_useState2 = _slicedToArray(_useState, 2),
|
|
68
70
|
open = _useState2[0],
|
|
69
71
|
setOpen = _useState2[1];
|
|
72
|
+
var _useState3 = useState(),
|
|
73
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
74
|
+
popoverWidth = _useState4[0],
|
|
75
|
+
setPopoverWidth = _useState4[1];
|
|
70
76
|
var _useFilterStyle = useFilterStyle(),
|
|
71
77
|
wrapSSR = _useFilterStyle.wrapSSR,
|
|
72
78
|
prefixCls = _useFilterStyle.prefixCls;
|
|
@@ -97,11 +103,26 @@ var FilterButton = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
97
103
|
var handleOpenChange = function handleOpenChange(newOpen) {
|
|
98
104
|
if (!disabled) {
|
|
99
105
|
setOpen(newOpen);
|
|
100
|
-
// 调用外部传入的 onOpenChange 回调,让父组件能够实时监听状态变化
|
|
101
106
|
externalOnOpenChange === null || externalOnOpenChange === void 0 || externalOnOpenChange(newOpen);
|
|
102
107
|
}
|
|
103
108
|
};
|
|
104
109
|
|
|
110
|
+
// 折叠模式下实时监听按钮宽度变化,同步到 Popover 面板宽度
|
|
111
|
+
useEffect(function () {
|
|
112
|
+
if (!open || !isCollapsed || _isInWrapComponent || !innerRef.current) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
var el = innerRef.current;
|
|
116
|
+
setPopoverWidth(el.offsetWidth);
|
|
117
|
+
var observer = new ResizeObserver(function () {
|
|
118
|
+
setPopoverWidth(el.offsetWidth);
|
|
119
|
+
});
|
|
120
|
+
observer.observe(el);
|
|
121
|
+
return function () {
|
|
122
|
+
return observer.disconnect();
|
|
123
|
+
};
|
|
124
|
+
}, [open, isCollapsed, _isInWrapComponent]);
|
|
125
|
+
|
|
105
126
|
// 使用 useMemo 缓存 content,避免每次都重新创建
|
|
106
127
|
var popoverContent = useMemo(function () {
|
|
107
128
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -135,11 +156,13 @@ var FilterButton = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
135
156
|
onOpenChange: handleOpenChange,
|
|
136
157
|
forceRender: _isInWrapComponent,
|
|
137
158
|
styles: {
|
|
138
|
-
body: {
|
|
159
|
+
body: _objectSpread({
|
|
139
160
|
padding: 0,
|
|
140
161
|
maxWidth: 300,
|
|
141
162
|
minWidth: 120
|
|
142
|
-
}
|
|
163
|
+
}, isCollapsed && !_isInWrapComponent && popoverWidth ? {
|
|
164
|
+
width: popoverWidth
|
|
165
|
+
} : {})
|
|
143
166
|
}
|
|
144
167
|
}, popoverProps), {}, {
|
|
145
168
|
children: /*#__PURE__*/_jsx("div", {
|
|
@@ -175,11 +198,11 @@ var FilterButton = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
175
198
|
}) : showSuffixIcon ? /*#__PURE__*/_jsxs("div", {
|
|
176
199
|
className: getFilterCls(prefixCls, 'icon-wrapper'),
|
|
177
200
|
children: [/*#__PURE__*/_jsx(DownOutlined, {
|
|
178
|
-
className: selected ? getFilterCls(prefixCls, 'arrow-icon') : '',
|
|
201
|
+
className: selected && allowClear ? getFilterCls(prefixCls, 'arrow-icon') : '',
|
|
179
202
|
style: disabled ? {
|
|
180
203
|
color: 'var(--ob-color-icon-disabled)'
|
|
181
204
|
} : undefined
|
|
182
|
-
}), selected && /*#__PURE__*/_jsx("div", {
|
|
205
|
+
}), selected && allowClear && /*#__PURE__*/_jsx("div", {
|
|
183
206
|
className: getFilterCls(prefixCls, 'clear-icon'),
|
|
184
207
|
onClick: function onClick(e) {
|
|
185
208
|
if (!disabled) {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { CascaderPanelProps } from 'antd';
|
|
2
3
|
import type { CascaderOption } from '../../types';
|
|
3
4
|
import type { FilterButtonRef } from '../../../FilterButton';
|
|
4
|
-
interface FlatCascaderContentProps {
|
|
5
|
+
interface FlatCascaderContentProps extends CascaderPanelProps {
|
|
5
6
|
options: CascaderOption[];
|
|
6
|
-
currentValue: string[][];
|
|
7
|
+
currentValue: (string | number)[][];
|
|
7
8
|
multiple: boolean;
|
|
8
9
|
filterButtonRef: React.RefObject<FilterButtonRef>;
|
|
9
|
-
onValueChange: (value: string[][]) => void;
|
|
10
|
+
onValueChange: (value: (string | number)[][]) => void;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* Flat 模式的级联内容容器组件
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
|
+
var _excluded = ["options", "currentValue", "filterButtonRef", "multiple", "onValueChange"];
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
7
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
8
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
9
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
10
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
2
11
|
import React, { useMemo } from 'react';
|
|
3
12
|
import { Cascader } from 'antd';
|
|
4
13
|
|
|
@@ -18,7 +27,8 @@ export var FlatCascaderContent = function FlatCascaderContent(_ref) {
|
|
|
18
27
|
filterButtonRef = _ref.filterButtonRef,
|
|
19
28
|
_ref$multiple = _ref.multiple,
|
|
20
29
|
multiple = _ref$multiple === void 0 ? false : _ref$multiple,
|
|
21
|
-
onValueChange = _ref.onValueChange
|
|
30
|
+
onValueChange = _ref.onValueChange,
|
|
31
|
+
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
22
32
|
// 将组件内部的值格式转换为 Cascader.Panel 需要的格式
|
|
23
33
|
// 组件内部:[[parent, child], ...] 或 [[parent, child]]
|
|
24
34
|
// Cascader.Panel:
|
|
@@ -37,7 +47,7 @@ export var FlatCascaderContent = function FlatCascaderContent(_ref) {
|
|
|
37
47
|
}, [currentValue, multiple]);
|
|
38
48
|
|
|
39
49
|
// 处理 Cascader.Panel 的值变化
|
|
40
|
-
var handleCascaderChange = function handleCascaderChange(value
|
|
50
|
+
var handleCascaderChange = function handleCascaderChange(value) {
|
|
41
51
|
if (multiple) {
|
|
42
52
|
// 多选:value 是 string[][],如 [['frontend', 'react'], ['backend', 'java']]
|
|
43
53
|
onValueChange(value);
|
|
@@ -50,15 +60,19 @@ export var FlatCascaderContent = function FlatCascaderContent(_ref) {
|
|
|
50
60
|
};
|
|
51
61
|
|
|
52
62
|
// 使用条件渲染来处理 multiple 属性的类型问题
|
|
53
|
-
return multiple ?
|
|
63
|
+
return multiple ?
|
|
64
|
+
/*#__PURE__*/
|
|
65
|
+
// @ts-ignore-next-line
|
|
66
|
+
_jsx(Cascader.Panel, _objectSpread({
|
|
54
67
|
options: options,
|
|
55
68
|
value: cascaderValue,
|
|
56
69
|
onChange: handleCascaderChange,
|
|
57
|
-
multiple: multiple
|
|
58
|
-
|
|
70
|
+
multiple: multiple,
|
|
71
|
+
showCheckedStrategy: Cascader.SHOW_CHILD
|
|
72
|
+
}, restProps)) : /*#__PURE__*/_jsx(Cascader.Panel, _objectSpread({
|
|
59
73
|
options: options,
|
|
60
74
|
value: cascaderValue,
|
|
61
75
|
onChange: handleCascaderChange,
|
|
62
76
|
multiple: false
|
|
63
|
-
});
|
|
77
|
+
}, restProps));
|
|
64
78
|
};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
4
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
5
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
2
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
7
3
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
4
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
@@ -16,7 +12,6 @@ import theme from "../../../../theme";
|
|
|
16
12
|
import Input from "../../../../input";
|
|
17
13
|
import Empty from "../../../../empty";
|
|
18
14
|
import { CheckOutlined, CloseOutlined, RightOutlined, SearchOutlined } from '@oceanbase/icons';
|
|
19
|
-
import classNames from 'classnames';
|
|
20
15
|
import { getFilterCls } from "../../../style";
|
|
21
16
|
import { MAX_HEIGHT, PADDING_VERTICAL, PADDING_HORIZONTAL, GAP_SIZE_SMALL } from "../constants";
|
|
22
17
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -133,7 +128,7 @@ export var NormalCascaderContent = function NormalCascaderContent(_ref) {
|
|
|
133
128
|
},
|
|
134
129
|
children: /*#__PURE__*/_jsx(Flex, {
|
|
135
130
|
gap: GAP_SIZE_SMALL * 2,
|
|
136
|
-
className:
|
|
131
|
+
className: getFilterCls(prefixCls, 'select-option'),
|
|
137
132
|
justify: "space-between",
|
|
138
133
|
align: "center",
|
|
139
134
|
onClick: handleNodeClick,
|
|
@@ -229,7 +224,7 @@ export var NormalCascaderContent = function NormalCascaderContent(_ref) {
|
|
|
229
224
|
},
|
|
230
225
|
children: /*#__PURE__*/_jsxs(Flex, {
|
|
231
226
|
gap: GAP_SIZE_SMALL * 2,
|
|
232
|
-
className:
|
|
227
|
+
className: getFilterCls(prefixCls, 'select-option'),
|
|
233
228
|
justify: "space-between",
|
|
234
229
|
align: "center",
|
|
235
230
|
style: {
|
|
@@ -11,6 +11,8 @@ export interface FilterInputProps extends BaseFilterProps {
|
|
|
11
11
|
inputProps?: InputProps;
|
|
12
12
|
/** Switch 组件的额外属性 */
|
|
13
13
|
switchProps?: SwitchProps;
|
|
14
|
+
/** 是否显示开关,默认为 false */
|
|
15
|
+
showSwitch?: boolean;
|
|
14
16
|
}
|
|
15
17
|
declare const FilterInput: FC<FilterInputProps>;
|
|
16
18
|
export default FilterInput;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
|
-
var _excluded = ["value", "onChange", "icon", "label", "bordered", "inputProps", "switchProps"];
|
|
3
|
+
var _excluded = ["value", "onChange", "icon", "label", "bordered", "inputProps", "switchProps", "showSwitch"];
|
|
4
4
|
function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure " + obj); }
|
|
5
5
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
6
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -36,6 +36,7 @@ var FilterInput = function FilterInput(_ref) {
|
|
|
36
36
|
bordered = _ref$bordered === void 0 ? true : _ref$bordered,
|
|
37
37
|
inputProps = _ref.inputProps,
|
|
38
38
|
switchProps = _ref.switchProps,
|
|
39
|
+
showSwitch = _ref.showSwitch,
|
|
39
40
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
40
41
|
var _theme$useToken = theme.useToken(),
|
|
41
42
|
token = _theme$useToken.token;
|
|
@@ -93,14 +94,16 @@ var FilterInput = function FilterInput(_ref) {
|
|
|
93
94
|
align: "center",
|
|
94
95
|
children: [/*#__PURE__*/_jsx("span", {
|
|
95
96
|
children: label
|
|
96
|
-
}), /*#__PURE__*/_jsx(Switch, _objectSpread({
|
|
97
|
+
}), showSwitch && /*#__PURE__*/_jsx(Switch, _objectSpread({
|
|
97
98
|
checked: switchValue,
|
|
98
99
|
onChange: function onChange(val) {
|
|
99
100
|
return setSwitchValue(val);
|
|
100
101
|
},
|
|
101
102
|
size: "small"
|
|
102
103
|
}, switchProps))]
|
|
103
|
-
}),
|
|
104
|
+
}), showSwitch ?
|
|
105
|
+
// 有开关:根据 switchValue 决定是否显示 Input
|
|
106
|
+
switchValue && /*#__PURE__*/_jsx("div", {
|
|
104
107
|
style: {
|
|
105
108
|
marginTop: 8
|
|
106
109
|
},
|
|
@@ -108,7 +111,18 @@ var FilterInput = function FilterInput(_ref) {
|
|
|
108
111
|
value: currentValue,
|
|
109
112
|
onChange: handleChange
|
|
110
113
|
}, inputProps))
|
|
111
|
-
}) :
|
|
114
|
+
}) :
|
|
115
|
+
/*#__PURE__*/
|
|
116
|
+
// 无开关:直接显示 Input
|
|
117
|
+
_jsx("div", {
|
|
118
|
+
style: {
|
|
119
|
+
marginTop: 8
|
|
120
|
+
},
|
|
121
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
|
122
|
+
value: currentValue,
|
|
123
|
+
onChange: handleChange
|
|
124
|
+
}, inputProps))
|
|
125
|
+
})]
|
|
112
126
|
});
|
|
113
127
|
|
|
114
128
|
// 如果处于折叠模式,只渲染内容部分
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { FC, ReactNode } from 'react';
|
|
2
|
+
import type { BaseFilterProps, InternalFilterProps } from '../type';
|
|
3
|
+
export interface FilterSlotProps extends BaseFilterProps, InternalFilterProps {
|
|
4
|
+
/**
|
|
5
|
+
* 直接渲染的自定义内容,不包裹 FilterButton + Popover。
|
|
6
|
+
* Filter.Slot 仅作为响应式收集的包裹容器,
|
|
7
|
+
* 会通过 cloneElement 自动注入 value/onChange。
|
|
8
|
+
*/
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* Popover 弹框中的自定义筛选内容。
|
|
12
|
+
* 设置后使用 FilterButton + Popover 模式,
|
|
13
|
+
* 会通过 cloneElement 自动注入 value/onChange。
|
|
14
|
+
*/
|
|
15
|
+
dropdownRender?: ReactNode;
|
|
16
|
+
/** 当前筛选值(受控) */
|
|
17
|
+
value?: any;
|
|
18
|
+
/** 默认筛选值(非受控) */
|
|
19
|
+
defaultValue?: any;
|
|
20
|
+
/** 值变化回调 */
|
|
21
|
+
onChange?: (value: any) => void;
|
|
22
|
+
/** 将 value 格式化为展示文本,用于 FilterButton 标签和折叠态 Tooltip */
|
|
23
|
+
formatValue?: (value: any) => string;
|
|
24
|
+
/** 未选值时的占位文本 */
|
|
25
|
+
placeholder?: string;
|
|
26
|
+
}
|
|
27
|
+
declare const FilterSlot: FC<FilterSlotProps>;
|
|
28
|
+
export default FilterSlot;
|