@zykj2024/much-library 1.0.9 → 1.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. package/README.md +23 -23
  2. package/dist/McLazyLoader/demo/basic.d.ts +2 -0
  3. package/dist/McLazyLoader/demo/basic.js +33 -0
  4. package/dist/McLazyLoader/demo/form.d.ts +2 -0
  5. package/dist/McLazyLoader/demo/form.js +38 -0
  6. package/dist/McLazyLoader/demo/has-root.d.ts +2 -0
  7. package/dist/McLazyLoader/demo/has-root.js +44 -0
  8. package/dist/McLazyLoader/index.d.ts +28 -0
  9. package/dist/McLazyLoader/index.js +75 -0
  10. package/dist/McProSelect/demo/async.d.ts +2 -0
  11. package/dist/McProSelect/demo/async.js +66 -0
  12. package/dist/McProSelect/demo/base.d.ts +2 -0
  13. package/dist/McProSelect/demo/base.js +29 -0
  14. package/dist/McProSelect/demo/exclusion-async-rename.d.ts +3 -0
  15. package/dist/McProSelect/demo/exclusion-async-rename.js +103 -0
  16. package/dist/McProSelect/demo/exclusion-rename.d.ts +3 -0
  17. package/dist/McProSelect/demo/exclusion-rename.js +74 -0
  18. package/dist/McProSelect/demo/exclusion.d.ts +3 -0
  19. package/dist/McProSelect/demo/exclusion.js +70 -0
  20. package/dist/McProSelect/demo/require.d.ts +2 -0
  21. package/dist/McProSelect/demo/require.js +82 -0
  22. package/dist/McProSelect/index.d.ts +35 -0
  23. package/dist/McProSelect/index.js +152 -0
  24. package/dist/McSelect/demo/exclusion.d.ts +3 -0
  25. package/dist/McSelect/demo/exclusion.js +64 -0
  26. package/dist/McSelect/index.d.ts +2 -2
  27. package/dist/McSelect/index.js +8 -6
  28. package/dist/McTag/demo/demo1.d.ts +2 -0
  29. package/dist/McTag/demo/demo1.js +18 -0
  30. package/dist/McTag/demo/demo2.d.ts +2 -0
  31. package/dist/McTag/demo/demo2.js +20 -0
  32. package/dist/McTag/demo/demo3.d.ts +2 -0
  33. package/dist/McTag/demo/demo3.js +19 -0
  34. package/dist/McTag/demo/demo4.d.ts +2 -0
  35. package/dist/McTag/demo/demo4.js +22 -0
  36. package/dist/McTag/index.d.ts +22 -0
  37. package/dist/McTag/index.js +59 -0
  38. package/dist/McThemeConfig/customToken.json +2 -1
  39. package/dist/McThemeConfig/demo/radio.js +39 -0
  40. package/dist/McThemeConfig/globalStyle.js +2 -4
  41. package/dist/Utils/index.d.ts +5 -4
  42. package/dist/Utils/index.js +6 -26
  43. package/dist/index.d.ts +5 -2
  44. package/dist/index.js +5 -2
  45. package/package.json +3 -1
@@ -0,0 +1,82 @@
1
+ /**
2
+ * title: 内置为空校验
3
+ * description: 为空校验。required为true时,会自动校验是否为空。可通过设置required为string类型,自定义提示信息。
4
+ */
5
+ import { Flex, Form } from 'antd';
6
+ import { McProSelect } from "../..";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ import { jsxs as _jsxs } from "react/jsx-runtime";
9
+ var requireDemo = function requireDemo() {
10
+ return /*#__PURE__*/_jsx(Form, {
11
+ children: /*#__PURE__*/_jsxs(Flex, {
12
+ gap: "middle",
13
+ justify: "space-between",
14
+ children: [/*#__PURE__*/_jsx(McProSelect, {
15
+ name: "select1",
16
+ label: "select1",
17
+ fieldProps: {
18
+ defaultValue: 'lucy',
19
+ options: [{
20
+ value: 'jack',
21
+ label: 'Jack'
22
+ }, {
23
+ value: 'lucy',
24
+ label: 'Lucy'
25
+ }, {
26
+ value: 'Yiminghe',
27
+ label: 'yiminghe'
28
+ }, {
29
+ value: 'disabled',
30
+ label: 'Disabled',
31
+ disabled: true
32
+ }]
33
+ },
34
+ required: "\u8BF7\u9009\u62E9select1"
35
+ }), /*#__PURE__*/_jsx(McProSelect, {
36
+ name: "select2",
37
+ label: "select2",
38
+ fieldProps: {
39
+ defaultValue: 'lucy',
40
+ options: [{
41
+ value: 'jack',
42
+ label: 'Jack'
43
+ }, {
44
+ value: 'lucy',
45
+ label: 'Lucy'
46
+ }, {
47
+ value: 'Yiminghe',
48
+ label: 'yiminghe'
49
+ }, {
50
+ value: 'disabled',
51
+ label: 'Disabled',
52
+ disabled: true
53
+ }]
54
+ },
55
+ required: true
56
+ }), /*#__PURE__*/_jsx(McProSelect, {
57
+ name: "select3",
58
+ label: "select3",
59
+ multiple: true,
60
+ fieldProps: {
61
+ defaultValue: 'lucy',
62
+ options: [{
63
+ value: 'jack',
64
+ label: 'Jack'
65
+ }, {
66
+ value: 'lucy',
67
+ label: 'Lucy'
68
+ }, {
69
+ value: 'Yiminghe',
70
+ label: 'yiminghe'
71
+ }, {
72
+ value: 'disabled',
73
+ label: 'Disabled',
74
+ disabled: true
75
+ }]
76
+ },
77
+ required: true
78
+ })]
79
+ })
80
+ });
81
+ };
82
+ export default requireDemo;
@@ -0,0 +1,35 @@
1
+ import { FormItemProps } from 'antd/es/form/FormItem';
2
+ import { McSelectProps, Option } from '../McSelect';
3
+ type McProselectOptions<T> = (T & Partial<Pick<Option, 'title' | 'disabled'>> & {
4
+ extra?: T;
5
+ })[] | undefined;
6
+ type McProSelectProps<T = {
7
+ label: string;
8
+ value: string;
9
+ }> = Omit<FormItemProps, 'required'> & {
10
+ multiple?: boolean;
11
+ /** 默认为keyword */
12
+ searchKey?: string;
13
+ /** 为string时表示未填写时的提示文案 */
14
+ required?: boolean | string;
15
+ disabled?: boolean;
16
+ excludeIds?: (string | number)[];
17
+ fieldNames?: {
18
+ label?: keyof T;
19
+ value?: keyof T;
20
+ };
21
+ fieldProps?: Omit<McSelectProps, 'multiple' | 'fetchOption' | 'toFilterOptions' | 'options'> & {
22
+ options: McProselectOptions<T>;
23
+ };
24
+ request?: (params: {
25
+ current: number;
26
+ pageSize: number;
27
+ [key: string]: number | string;
28
+ }) => Promise<{
29
+ records: T[];
30
+ total: number;
31
+ [key: string]: any;
32
+ }>;
33
+ };
34
+ declare const McProSelect: <T extends Record<string, any>>({ label, name, fieldNames, required, request, multiple, disabled, searchKey, excludeIds, fieldProps, ...restProps }: McProSelectProps<T>) => import("react/jsx-runtime").JSX.Element;
35
+ export default McProSelect;
@@ -0,0 +1,152 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
4
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
5
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
6
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
7
+ var _excluded = ["label", "name", "fieldNames", "required", "request", "multiple", "disabled", "searchKey", "excludeIds", "fieldProps"],
8
+ _excluded2 = ["options"],
9
+ _excluded3 = ["getValueFromEvent", "getValueProps", "rules"],
10
+ _excluded4 = ["current", "keyword"];
11
+ import { Form } from 'antd';
12
+ import { useMemo } from 'react';
13
+ import McSelect from "../McSelect";
14
+ import { isEmpty, isNil } from "../Utils";
15
+ import { jsx as _jsx } from "react/jsx-runtime";
16
+ var McProSelect = function McProSelect(_ref) {
17
+ var label = _ref.label,
18
+ name = _ref.name,
19
+ fieldNames = _ref.fieldNames,
20
+ required = _ref.required,
21
+ request = _ref.request,
22
+ multiple = _ref.multiple,
23
+ disabled = _ref.disabled,
24
+ _ref$searchKey = _ref.searchKey,
25
+ searchKey = _ref$searchKey === void 0 ? 'keyword' : _ref$searchKey,
26
+ excludeIds = _ref.excludeIds,
27
+ fieldProps = _ref.fieldProps,
28
+ restProps = _objectWithoutProperties(_ref, _excluded);
29
+ var labelKey = (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.label) || 'label';
30
+ var valueKey = (fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value) || 'value';
31
+ var _ref2 = fieldProps !== null && fieldProps !== void 0 ? fieldProps : {},
32
+ optionsFromFieldProps = _ref2.options,
33
+ restFieldProps = _objectWithoutProperties(_ref2, _excluded2);
34
+ var customGetValueFromEvent = restProps.getValueFromEvent,
35
+ customGetValueProps = restProps.getValueProps,
36
+ rules = restProps.rules,
37
+ restFormItemProps = _objectWithoutProperties(restProps, _excluded3);
38
+
39
+ // 生成用fieldNames映射后的options
40
+ var createReflectedOptions = function createReflectedOptions(options) {
41
+ if (!options) return undefined;
42
+ return options.map(function (item) {
43
+ var _item$title;
44
+ return {
45
+ label: item[labelKey !== null && labelKey !== void 0 ? labelKey : 'label'],
46
+ value: item[valueKey !== null && valueKey !== void 0 ? valueKey : 'value'],
47
+ title: (_item$title = item.title) !== null && _item$title !== void 0 ? _item$title : '',
48
+ disabled: !!item.disabled,
49
+ extra: item
50
+ };
51
+ });
52
+ };
53
+
54
+ // 静态option
55
+ var staticOption = useMemo(function () {
56
+ // 非异步请求时,根据fieldNames转换为label&value格式
57
+ if (optionsFromFieldProps && optionsFromFieldProps.length > 0) {
58
+ return createReflectedOptions(optionsFromFieldProps);
59
+ }
60
+ return undefined;
61
+ }, [optionsFromFieldProps]);
62
+ var getValueProps = function getValueProps(value) {
63
+ var _label$value;
64
+ if (customGetValueProps) {
65
+ return customGetValueProps(value);
66
+ }
67
+ if (isNil(value)) return {
68
+ value: value
69
+ };
70
+ return {
71
+ value: multiple ? (value === null || value === void 0 ? void 0 : value.map(function (x) {
72
+ return {
73
+ label: x[labelKey],
74
+ value: x[valueKey]
75
+ };
76
+ })) || [] : (_label$value = {
77
+ label: value === null || value === void 0 ? void 0 : value[labelKey],
78
+ value: value === null || value === void 0 ? void 0 : value[valueKey]
79
+ }) !== null && _label$value !== void 0 ? _label$value : undefined
80
+ };
81
+ };
82
+ var getValueFromEvent = function getValueFromEvent(_selectedValues, options) {
83
+ var _options$map, _options$extra;
84
+ if (customGetValueFromEvent) return customGetValueFromEvent(_selectedValues, options);
85
+ if (!_selectedValues) return undefined;
86
+ // 如果其他业务要的value是number[], 不是option,需要修改这里。用到的时候再修改吧
87
+ if (multiple) return (_options$map = options === null || options === void 0 ? void 0 : options.map(function (item) {
88
+ var _item$extra;
89
+ return (_item$extra = item.extra) !== null && _item$extra !== void 0 ? _item$extra : item;
90
+ })) !== null && _options$map !== void 0 ? _options$map : [];
91
+ return (_options$extra = options === null || options === void 0 ? void 0 : options.extra) !== null && _options$extra !== void 0 ? _options$extra : options;
92
+ };
93
+ var requiredMsg = typeof required === 'string' ? required : '请选择';
94
+ return /*#__PURE__*/_jsx(Form.Item, _objectSpread(_objectSpread({
95
+ label: label,
96
+ name: name,
97
+ getValueProps: getValueProps,
98
+ getValueFromEvent: getValueFromEvent,
99
+ rules: required ? [{
100
+ required: true,
101
+ message: requiredMsg,
102
+ validator: function validator(_, value) {
103
+ if (isNil(value) || isEmpty(value)) return Promise.reject(new Error(requiredMsg));
104
+ return Promise.resolve();
105
+ }
106
+ }].concat(_toConsumableArray(restProps.rules || [])) : rules
107
+ }, restFormItemProps), {}, {
108
+ children: /*#__PURE__*/_jsx(McSelect, _objectSpread(_objectSpread({
109
+ multiple: multiple,
110
+ showSearch: true,
111
+ maxTagCount: undefined,
112
+ toFilterOptions: function toFilterOptions(options) {
113
+ if (!excludeIds || excludeIds.filter(Boolean).length === 0) return options;
114
+ return options.filter(function (option) {
115
+ return !excludeIds.includes(option.value);
116
+ });
117
+ },
118
+ fetchOptions: request ? ( /*#__PURE__*/function () {
119
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(params) {
120
+ var _createReflectedOptio, _result$total;
121
+ var current, keyword, rest, result;
122
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
123
+ while (1) switch (_context.prev = _context.next) {
124
+ case 0:
125
+ current = params.current, keyword = params.keyword, rest = _objectWithoutProperties(params, _excluded4);
126
+ _context.next = 3;
127
+ return request(_objectSpread(_objectSpread({}, rest), {}, _defineProperty({
128
+ current: current !== null && current !== void 0 ? current : 1
129
+ }, searchKey, keyword)));
130
+ case 3:
131
+ result = _context.sent;
132
+ return _context.abrupt("return", {
133
+ data: (_createReflectedOptio = createReflectedOptions(result === null || result === void 0 ? void 0 : result.records)) !== null && _createReflectedOptio !== void 0 ? _createReflectedOptio : [],
134
+ total: (_result$total = result === null || result === void 0 ? void 0 : result.total) !== null && _result$total !== void 0 ? _result$total : 0
135
+ });
136
+ case 5:
137
+ case "end":
138
+ return _context.stop();
139
+ }
140
+ }, _callee);
141
+ }));
142
+ return function (_x) {
143
+ return _ref3.apply(this, arguments);
144
+ };
145
+ }()) : undefined,
146
+ options: staticOption
147
+ }, restFieldProps), {}, {
148
+ disabled: disabled
149
+ }))
150
+ }));
151
+ };
152
+ export default McProSelect;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const App: React.FC;
3
+ export default App;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * title: 两个互斥的select
3
+ * description: select1中选择的选项会在select2中被排除,反之亦然。此方法同样支持远程select。
4
+ */
5
+ import { Form } from 'antd';
6
+ import { McSelect } from "../..";
7
+ import React from 'react';
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { jsxs as _jsxs } from "react/jsx-runtime";
10
+ var options = [{
11
+ value: 'gold'
12
+ }, {
13
+ value: 'lime'
14
+ }, {
15
+ value: 'green'
16
+ }, {
17
+ value: 'cyan'
18
+ }];
19
+ var App = function App() {
20
+ return /*#__PURE__*/_jsxs(Form, {
21
+ name: "exclusion1",
22
+ children: [/*#__PURE__*/_jsx(Form.Item, {
23
+ noStyle: true,
24
+ dependencies: ['select2'],
25
+ children: function children(_ref) {
26
+ var getFieldValue = _ref.getFieldValue;
27
+ return /*#__PURE__*/_jsx(Form.Item, {
28
+ name: "select1",
29
+ children: /*#__PURE__*/_jsx(McSelect, {
30
+ options: options,
31
+ label: "select1",
32
+ toFilterOptions: function toFilterOptions(options) {
33
+ return options.filter(function (option) {
34
+ return option.value !== getFieldValue('select2');
35
+ });
36
+ }
37
+ })
38
+ });
39
+ }
40
+ }), /*#__PURE__*/_jsx(Form.Item, {
41
+ noStyle: true,
42
+ dependencies: ['select1'],
43
+ children: function children(_ref2) {
44
+ var getFieldValue = _ref2.getFieldValue;
45
+ return /*#__PURE__*/_jsx(Form.Item, {
46
+ label: "select2",
47
+ name: "select2",
48
+ children: /*#__PURE__*/_jsx(McSelect, {
49
+ style: {
50
+ width: '100%'
51
+ },
52
+ options: options,
53
+ toFilterOptions: function toFilterOptions(options) {
54
+ return options.filter(function (option) {
55
+ return option.value !== getFieldValue('select1');
56
+ });
57
+ }
58
+ })
59
+ });
60
+ }
61
+ })]
62
+ });
63
+ };
64
+ export default App;
@@ -1,7 +1,7 @@
1
1
  import { SelectProps } from 'antd';
2
2
  import { CSSProperties, FC, ReactNode } from 'react';
3
3
  import './index.less';
4
- interface Option {
4
+ export interface Option {
5
5
  value: string | number;
6
6
  label?: React.ReactNode;
7
7
  title?: string;
@@ -25,6 +25,7 @@ export type FetchOptions = (params: {
25
25
  export type McSelectProps = Omit<SelectProps, 'mode' | 'fieldNames'> & {
26
26
  style?: CSSProperties;
27
27
  className?: string;
28
+ toFilterOptions?: (options: Option[]) => Option[];
28
29
  name?: string;
29
30
  label?: ReactNode;
30
31
  multiple?: boolean;
@@ -34,7 +35,6 @@ export type McSelectProps = Omit<SelectProps, 'mode' | 'fieldNames'> & {
34
35
  pageSize?: number;
35
36
  extra?: any;
36
37
  options?: Option[];
37
- [key: string]: any;
38
38
  };
39
39
  declare const McSelect: FC<McSelectProps>;
40
40
  export default McSelect;
@@ -3,9 +3,9 @@ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
3
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
4
4
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
5
5
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
6
- var _excluded = ["style", "className", "label", "multiple", "changeOnHidden", "inexistent", "fetchOptions", "pageSize", "extra", "value", "onChange", "labelInValue", "options", "disabled", "maxTagCount", "onSearch", "onPopupScroll", "onBlur", "onDropdownVisibleChange"];
6
+ var _excluded = ["style", "className", "label", "multiple", "changeOnHidden", "inexistent", "fetchOptions", "pageSize", "extra", "value", "onChange", "labelInValue", "options", "disabled", "maxTagCount", "onSearch", "onPopupScroll", "onBlur", "onDropdownVisibleChange", "toFilterOptions"];
7
7
  import { Empty, Popover, Select, Spin } from 'antd';
8
- import { Utils } from "./..";
8
+ import { debounce } from "../Utils";
9
9
  import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';
10
10
  import "./index.css";
11
11
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -32,6 +32,7 @@ var McSelect = /*#__PURE__*/forwardRef(function (props, ref) {
32
32
  onPopupScroll = props.onPopupScroll,
33
33
  onBlur = props.onBlur,
34
34
  onDropdownVisibleChange = props.onDropdownVisibleChange,
35
+ toFilterOptions = props.toFilterOptions,
35
36
  rest = _objectWithoutProperties(props, _excluded);
36
37
  var _ref = typeof inexistent === 'boolean' ? {} : inexistent,
37
38
  _ref$inexistentText = _ref.inexistentText,
@@ -87,6 +88,7 @@ var McSelect = /*#__PURE__*/forwardRef(function (props, ref) {
87
88
  var _oldValue = useRef();
88
89
  var _changeOption = useRef();
89
90
  var _inexistent = useRef(false);
91
+ var filteredOptions = toFilterOptions ? toFilterOptions(selectOptions) : selectOptions; // 只要有render就需要重新生成options
90
92
 
91
93
  // 监听值和备选项的变化(赋值备选项,执行不存在值的判断逻辑)
92
94
  useEffect(function () {
@@ -209,7 +211,7 @@ var McSelect = /*#__PURE__*/forwardRef(function (props, ref) {
209
211
 
210
212
  // 搜索防抖函数
211
213
  var debounceSearcher = useMemo(function () {
212
- return Utils.debounce(loadOptions, 350);
214
+ return debounce(loadOptions, 350);
213
215
  }, [loadOptions]);
214
216
 
215
217
  // 文本框值变化时回调
@@ -231,7 +233,7 @@ var McSelect = /*#__PURE__*/forwardRef(function (props, ref) {
231
233
  _extra.current = extra;
232
234
  }, [extra, loadOptions]);
233
235
 
234
- // 滚动触底防抖函数
236
+ // 滚动触底防抖函数。注意需要pageSize要够大,否则不会触发滚动条滚动,也就不会翻页。建议用默认的20
235
237
  var debounceScrollor = useMemo(function () {
236
238
  var scroll = function scroll(e) {
237
239
  var start = e.target.scrollTop + e.target.offsetHeight;
@@ -241,7 +243,7 @@ var McSelect = /*#__PURE__*/forwardRef(function (props, ref) {
241
243
  loadOptions(searchValue, _current.current + 1);
242
244
  }
243
245
  };
244
- return Utils.debounce(scroll, 350);
246
+ return debounce(scroll, 350);
245
247
  }, [loadOptions, searchValue]);
246
248
 
247
249
  // 下拉列表滚动时的回调
@@ -297,7 +299,7 @@ var McSelect = /*#__PURE__*/forwardRef(function (props, ref) {
297
299
  value: selectValue,
298
300
  onChange: change,
299
301
  labelInValue: labelInValue,
300
- options: selectOptions,
302
+ options: filteredOptions,
301
303
  disabled: disabled,
302
304
  placeholder: "\u8BF7\u9009\u62E9",
303
305
  showSearch: true,
@@ -0,0 +1,2 @@
1
+ declare const _default: () => import("react/jsx-runtime").JSX.Element;
2
+ export default _default;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * title: 设置本身宽度以支持ellipsis
3
+ * description: 在McTag上设置宽度,以支持ellipsis。同时支持复制
4
+ */
5
+ import McTag from "../index";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export default (function () {
8
+ var uri = '/recommend/page/123/page/123/page/123';
9
+ return /*#__PURE__*/_jsx(McTag, {
10
+ style: {
11
+ maxWidth: 150
12
+ },
13
+ ellipsis: true,
14
+ color: "blue",
15
+ copyable: true,
16
+ children: uri
17
+ });
18
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: () => import("react/jsx-runtime").JSX.Element;
2
+ export default _default;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * title: 设置父组件宽度以支持ellipsis
3
+ * description: 在McTag上设置宽度,以支持ellipsis。同时支持复制
4
+ */
5
+ import McTag from "../index";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export default (function () {
8
+ var uri = '/recommend/page/123/page/123/page/123';
9
+ return /*#__PURE__*/_jsx("div", {
10
+ style: {
11
+ width: 200
12
+ },
13
+ children: /*#__PURE__*/_jsx(McTag, {
14
+ color: "blue",
15
+ copyable: true,
16
+ ellipsis: true,
17
+ children: uri
18
+ })
19
+ });
20
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: () => import("react/jsx-runtime").JSX.Element;
2
+ export default _default;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * title: 支持复制
3
+ * description: 普通McTag模式也支持复制
4
+ */
5
+ import { ExclamationCircleOutlined } from 'much-icons';
6
+ import McTag from "../index";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ export default (function () {
9
+ return /*#__PURE__*/_jsx(McTag, {
10
+ style: {
11
+ maxWidth: 150
12
+ },
13
+ ellipsis: true,
14
+ color: "warning",
15
+ icon: /*#__PURE__*/_jsx(ExclamationCircleOutlined, {}),
16
+ copyable: true,
17
+ children: "click me to copy"
18
+ });
19
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: () => import("react/jsx-runtime").JSX.Element;
2
+ export default _default;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * title: 自定义ellipsis属性
3
+ */
4
+ import McTag from "../index";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export default (function () {
7
+ var uri = '/recommend/page/123/page/123/page/123';
8
+ return /*#__PURE__*/_jsx("div", {
9
+ style: {
10
+ width: 200
11
+ },
12
+ children: /*#__PURE__*/_jsx(McTag, {
13
+ color: "blue",
14
+ copyable: true,
15
+ ellipsis: {
16
+ tooltip: true,
17
+ suffix: '等'
18
+ },
19
+ children: uri
20
+ })
21
+ });
22
+ });
@@ -0,0 +1,22 @@
1
+ /// <reference types="react" />
2
+ import { TagProps } from 'antd';
3
+ import { EllipsisConfig } from 'antd/es/typography/Base';
4
+ interface McTagProps {
5
+ /**
6
+ * @description 为true时,使用默认行为,展示tooltip;为对象时,传递给Typography.Text的ellipsis属性
7
+ * @default undefined
8
+ */
9
+ ellipsis?: true | EllipsisConfig;
10
+ /**
11
+ * @description 是否可复制
12
+ * @default 默认为false
13
+ */
14
+ copyable?: boolean;
15
+ /**
16
+ * @description 省略模式时,设置文字样式。(一般用不上)
17
+ * @default undefined
18
+ */
19
+ ellipsisTextStyle?: React.CSSProperties;
20
+ }
21
+ declare const McTag: (props: TagProps & McTagProps) => import("react/jsx-runtime").JSX.Element;
22
+ export default McTag;
@@ -0,0 +1,59 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ var _excluded = ["ellipsis", "children", "copyable", "onClick", "ellipsisTextStyle"],
4
+ _excluded2 = ["style"];
5
+ import { message, Tag, Typography } from 'antd';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ var McTag = function McTag(props) {
8
+ var ellipsis = props.ellipsis,
9
+ children = props.children,
10
+ copyable = props.copyable,
11
+ _onClick = props.onClick,
12
+ ellipsisTextStyle = props.ellipsisTextStyle,
13
+ tagProps = _objectWithoutProperties(props, _excluded);
14
+ var useEllipsis = typeof children === 'string' && !!ellipsis;
15
+ var style = tagProps.style,
16
+ restTagProps = _objectWithoutProperties(tagProps, _excluded2);
17
+ var renderChildren = function renderChildren() {
18
+ if (useEllipsis) {
19
+ return /*#__PURE__*/_jsx(Typography.Text, {
20
+ style: _objectSpread({
21
+ color: 'inherit',
22
+ fontSize: 'inherit'
23
+ }, ellipsisTextStyle),
24
+ ellipsis: ellipsis === true ? {
25
+ tooltip: children
26
+ } : ellipsis,
27
+ children: children
28
+ });
29
+ }
30
+ return children;
31
+ };
32
+ return /*#__PURE__*/_jsx(Tag, _objectSpread(_objectSpread({
33
+ onClick: function onClick(e) {
34
+ if (copyable) {
35
+ var copyText = typeof copyable === 'string' ? copyable : children;
36
+ if (!(typeof copyText === 'string')) {
37
+ if (process.env.NODE_ENV === 'development') throw Error('copyable prop only support string children or string copyable');
38
+ return;
39
+ }
40
+ if (navigator.clipboard) {
41
+ navigator.clipboard.writeText(copyText).then(function () {
42
+ return message.success('复制成功!');
43
+ }, function () {
44
+ return message.error('复制失败!');
45
+ });
46
+ } else {
47
+ message.error('当前域名无权限使用剪切板');
48
+ }
49
+ }
50
+ if (_onClick) _onClick(e);
51
+ },
52
+ style: _objectSpread({
53
+ maxWidth: useEllipsis ? '100%' : 'none'
54
+ }, style)
55
+ }, restTagProps), {}, {
56
+ children: renderChildren()
57
+ }));
58
+ };
59
+ export default McTag;
@@ -32,7 +32,8 @@
32
32
  },
33
33
  "Radio": {
34
34
  "buttonLineBg": "rgb(216, 216, 216)",
35
- "buttonLineHeight": 16
35
+ "buttonLineHeight": 16,
36
+ "buttonCheckedBorderColorDisabled": "rgb(216, 216, 216)"
36
37
  }
37
38
  }
38
39
  }