@tiny-codes/react-easy 1.6.4 → 1.6.5

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/CHANGELOG.md CHANGED
@@ -2,17 +2,29 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## 1.6.5
6
+
7
+ 2026-2-4
8
+
9
+ ### Features
10
+
11
+ - **useValidatorBuilder**
12
+ - ✨ Improve `useValidatorBuilder` for better format of special characters in validation messages.
13
+ - **OverflowTags**
14
+ - ✨ Enhance `tagProps` and `ellipsisTagProps` to provide more context in the function parameters.
15
+ - ✨ Support any data types
16
+
5
17
  ## 1.6.4
6
18
 
7
19
  2026-1-15
8
20
 
9
21
  ### Features
10
22
 
11
- - Improve `easy-full-height-table` class
23
+ - 🛠️ improve `easy-full-height-table` class styles
12
24
 
13
25
  ## 1.6.3
14
26
 
15
- 2026-1-2
27
+ 2026-1-7
16
28
 
17
29
  ### Features
18
30
 
@@ -24,6 +36,15 @@
24
36
 
25
37
  - 🐞 Fix Tooltip not accepting custom `ellipsis.tooltip` props issue.
26
38
 
39
+ ## 1.6.2
40
+
41
+ 2026-1-2
42
+
43
+ ### Features
44
+
45
+ - **withEllipsisTypography**
46
+ - 🛠️ accept custom `ellipsis.tooltip` props.
47
+
27
48
  ## 1.6.1
28
49
 
29
50
  2026-1-1
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { TagProps } from 'antd';
3
3
  import type { OverflowProps } from 'rc-overflow';
4
- export interface OverflowTagsProps<T extends Record<string, unknown> = Record<string, unknown>> extends Omit<OverflowProps<T>, 'renderItem'> {
4
+ export interface OverflowTagsProps<T> extends Omit<OverflowProps<T>, 'renderItem'> {
5
5
  /**
6
6
  * **CN**: 标签集合的数据
7
7
  *
@@ -27,25 +27,23 @@ export interface OverflowTagsProps<T extends Record<string, unknown> = Record<st
27
27
  */
28
28
  renderTag?: OverflowProps<T>['renderItem'];
29
29
  /**
30
- * **EN**: Custom properties for the default tag rendering function, returning `TagProps`
30
+ * **EN**: Custom properties for the tag component
31
31
  *
32
- * **CN**: 对于默认的标签渲染函数,自定义标签的属性,返回`TagProps`
32
+ * **CN**: 自定义标签的组件属性
33
33
  */
34
- getTagProps?: (tag: T, tags: T[]) => TagProps;
35
- /**
36
- * **EN**: Custom properties for the tag component, if `renderTag` is also specified, the latter
37
- * will override the former
38
- *
39
- * **CN**: 自定义标签的组件属性,如果同时指定了`renderTag`,则后者会覆盖前者
40
- */
41
- tagProps?: TagProps;
34
+ tagProps?: TagProps | ((tag: T, options: {
35
+ tags: T[];
36
+ }) => TagProps);
42
37
  /**
43
38
  * **EN**: When the number of tags exceeds the maximum display count, an ellipsis tag will be
44
39
  * shown. This property is used to set the style of the ellipsis tag.
45
40
  *
46
41
  * **CN**: 当标签数量超过最大显示数量时,会显示省略号的标签,此属性用于设置省略号标签的样式
47
42
  */
48
- ellipsisTagProps?: TagProps;
43
+ ellipsisTagProps?: TagProps | ((tag: T, options: {
44
+ omittedItems: T[];
45
+ allTags: T[];
46
+ }) => TagProps);
49
47
  /**
50
48
  * **EN**: Whether to use random colors, default is `false`. Note that the tag object can also
51
49
  * contain a `color` property to specify the color, and the latter takes precedence.
@@ -70,5 +68,5 @@ export interface OverflowTagsProps<T extends Record<string, unknown> = Record<st
70
68
  * ellipsisTagProps={{ color: 'grey' }}
71
69
  * />;
72
70
  */
73
- declare const OverflowTags: <T extends Record<string, any>>(props: OverflowTagsProps<T>) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
71
+ declare const OverflowTags: <T>(props: OverflowTagsProps<T>) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
74
72
  export default OverflowTags;
@@ -1,10 +1,10 @@
1
- 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); }
2
- var _excluded = ["tags", "randomColors", "getTagName", "getTagKey", "getTagProps", "tagProps", "ellipsisTagProps", "className", "prefixCls"];
1
+ var _excluded = ["tags", "randomColors", "getTagName", "getTagKey", "tagProps", "ellipsisTagProps", "className", "prefixCls"];
3
2
  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; }
4
3
  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; }
5
4
  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; }
6
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
6
  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); }
7
+ 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); }
8
8
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
9
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
10
  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); }
@@ -45,7 +45,6 @@ var OverflowTags = function OverflowTags(props) {
45
45
  randomColors = props.randomColors,
46
46
  getTagNameInProps = props.getTagName,
47
47
  getTagKey = props.getTagKey,
48
- getTagPropsInProps = props.getTagProps,
49
48
  tagProps = props.tagProps,
50
49
  ellipsisTagProps = props.ellipsisTagProps,
51
50
  className = props.className,
@@ -68,17 +67,25 @@ var OverflowTags = function OverflowTags(props) {
68
67
  return token["".concat(color, "-3")];
69
68
  });
70
69
  }, [token]);
70
+ var getValue = useCallback(function (tag, field) {
71
+ if (tag != null && _typeof(tag) === 'object') {
72
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
+ var record = tag;
74
+ return record[field];
75
+ }
76
+ return undefined;
77
+ }, []);
71
78
  var getTagName = useCallback(function (tag) {
72
- var _tag$label;
73
- return getTagNameInProps ? getTagNameInProps(tag) : (_tag$label = tag.label) !== null && _tag$label !== void 0 ? _tag$label : tag.name;
74
- }, [getTagNameInProps]);
79
+ var _ref, _getValue;
80
+ return getTagNameInProps ? getTagNameInProps(tag) : (_ref = (_getValue = getValue(tag, 'label')) !== null && _getValue !== void 0 ? _getValue : getValue(tag, 'name')) !== null && _ref !== void 0 ? _ref : tag === null || tag === void 0 ? void 0 : tag.toString();
81
+ }, [getTagNameInProps, getValue]);
75
82
  var renderTag = function renderTag(item) {
76
- var _item$color;
77
- var customProps = getTagPropsInProps === null || getTagPropsInProps === void 0 ? void 0 : getTagPropsInProps(item, tags);
78
- return /*#__PURE__*/_jsx(Tag, _objectSpread(_objectSpread(_objectSpread({}, tagProps), {}, {
79
- icon: item.icon,
80
- color: randomColors ? colors[random(0, colors.length - 1)] : (_item$color = item.color) !== null && _item$color !== void 0 ? _item$color : 'default'
81
- }, customProps), {}, {
83
+ return /*#__PURE__*/_jsx(Tag, _objectSpread(_objectSpread({
84
+ icon: getValue(item, 'icon'),
85
+ color: randomColors ? colors[random(0, colors.length - 1)] : getValue(item, 'color') || 'default'
86
+ }, typeof tagProps === 'function' ? tagProps(item, {
87
+ tags: tags
88
+ }) : tagProps), {}, {
82
89
  children: getTagName(item)
83
90
  }));
84
91
  };
@@ -91,15 +98,18 @@ var OverflowTags = function OverflowTags(props) {
91
98
  return /*#__PURE__*/_jsx(Dropdown, {
92
99
  menu: {
93
100
  items: omittedItems.map(function (tag) {
94
- var _ref, _tag$value;
101
+ var _ref2, _getValue2;
95
102
  return {
96
103
  type: 'item',
97
- key: getTagKey ? getTagKey(tag) : (_ref = (_tag$value = tag.value) !== null && _tag$value !== void 0 ? _tag$value : tag.id) !== null && _ref !== void 0 ? _ref : getTagName(tag),
104
+ key: getTagKey ? getTagKey(tag) : (_ref2 = (_getValue2 = getValue(tag, 'value')) !== null && _getValue2 !== void 0 ? _getValue2 : getValue(tag, 'id')) !== null && _ref2 !== void 0 ? _ref2 : getTagName(tag),
98
105
  label: getTagName(tag)
99
106
  };
100
107
  })
101
108
  },
102
- children: /*#__PURE__*/_jsxs(Tag, _objectSpread(_objectSpread({}, ellipsisTagProps), {}, {
109
+ children: /*#__PURE__*/_jsxs(Tag, _objectSpread(_objectSpread({}, typeof ellipsisTagProps === 'function' ? ellipsisTagProps(omittedItems[0], {
110
+ omittedItems: omittedItems,
111
+ allTags: tags
112
+ }) : ellipsisTagProps), {}, {
103
113
  children: ["+ ", omittedItems.length, "..."]
104
114
  }))
105
115
  });
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useContext","useMemo","ConfigProvider","Dropdown","Tag","theme","PresetColors","classNames","Overflow","random","useStyle","jsx","_jsx","jsxs","_jsxs","OverflowTags","props","_props$tags","tags","randomColors","getTagNameInProps","getTagName","getTagKey","getTagPropsInProps","getTagProps","tagProps","ellipsisTagProps","className","prefixClsInProps","prefixCls","restProps","_objectWithoutProperties","_excluded","_theme$useToken","useToken","token","_useContext","ConfigContext","getPrefixCls","_useStyle","_useStyle2","_slicedToArray","wrapCSSVar","hashId","cssVarCls","colors","filter","c","includes","map","color","concat","tag","_tag$label","label","name","renderTag","item","_item$color","customProps","_objectSpread","icon","length","children","data","maxCount","renderItem","renderRest","omittedItems","menu","items","_ref","_tag$value","type","key","value","id"],"sources":["../../../src/components/OverflowTags/index.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { useCallback, useContext, useMemo } from 'react';\nimport type { TagProps } from 'antd';\nimport { ConfigProvider, Dropdown, Tag, theme } from 'antd';\nimport { PresetColors } from 'antd/es/theme/internal';\nimport classNames from 'classnames';\nimport type { OverflowProps } from 'rc-overflow';\nimport Overflow from 'rc-overflow';\nimport { random } from '../../utils/math';\nimport useStyle from './style';\n\nexport interface OverflowTagsProps<T extends Record<string, unknown> = Record<string, unknown>>\n extends Omit<OverflowProps<T>, 'renderItem'> {\n /**\n * **CN**: 标签集合的数据\n *\n * **EN**: Data collection of tags\n */\n tags: T[] | undefined;\n /**\n * **EN**: Function to get the tag name, default is `tag.label` or `tag.name`\n *\n * **CN**: 获取标签名称的函数,默认取`tag.label`或`tag.name`\n */\n getTagName?: (tag: T) => ReactNode;\n /**\n * **EN**: Function to get the unique identifier of the tag, default is `tag.value` or `tag.id`\n *\n * **CN**: 获取标签唯一标识的函数,默认取`tag.value`或`tag.id`\n */\n getTagKey?: (tag: T) => React.Key;\n\n /**\n * **EN**: Custom tag rendering function\n *\n * **CN**: 标签渲染函数\n */\n renderTag?: OverflowProps<T>['renderItem'];\n /**\n * **EN**: Custom properties for the default tag rendering function, returning `TagProps`\n *\n * **CN**: 对于默认的标签渲染函数,自定义标签的属性,返回`TagProps`\n */\n getTagProps?: (tag: T, tags: T[]) => TagProps;\n /**\n * **EN**: Custom properties for the tag component, if `renderTag` is also specified, the latter\n * will override the former\n *\n * **CN**: 自定义标签的组件属性,如果同时指定了`renderTag`,则后者会覆盖前者\n */\n tagProps?: TagProps;\n /**\n * **EN**: When the number of tags exceeds the maximum display count, an ellipsis tag will be\n * shown. This property is used to set the style of the ellipsis tag.\n *\n * **CN**: 当标签数量超过最大显示数量时,会显示省略号的标签,此属性用于设置省略号标签的样式\n */\n ellipsisTagProps?: TagProps;\n /**\n * **EN**: Whether to use random colors, default is `false`. Note that the tag object can also\n * contain a `color` property to specify the color, and the latter takes precedence.\n *\n * **CN**: 是否使用随机颜色,默认`false`。注意,tag对象还可以包含`color`属性来指定颜色,而且后者优先级更高。\n */\n randomColors?: boolean;\n}\n\n/**\n * - **EN:** Overflow tags component, used to display a collection of tags that can overflow and be\n * truncated. It supports displaying tags in a dropdown when the number of tags exceeds the\n * maximum display count. It also supports custom tag rendering and properties.\n * - **CN:** 溢出标签组件,用于显示一组可以溢出和截断的标签集合。当标签数量超过最大显示数量时,支持在下拉菜单中显示标签。还支持自定义标签渲染和属性。\n *\n * @example\n * <OverflowTags\n * tags={[\n * { value: 1, label: 'Tag1', icon: <Icon1 /> },\n * { value: 2, label: 'Tag2', icon: <Icon2 /> },\n * ]}\n * tagProps={{ color: 'blue' }}\n * ellipsisTagProps={{ color: 'grey' }}\n * />;\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst OverflowTags = <T extends Record<string, any>>(props: OverflowTagsProps<T>) => {\n const {\n tags = [],\n randomColors,\n getTagName: getTagNameInProps,\n getTagKey,\n getTagProps: getTagPropsInProps,\n tagProps,\n ellipsisTagProps,\n className,\n prefixCls: prefixClsInProps,\n ...restProps\n } = props;\n const { token } = theme.useToken();\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const prefixCls = getPrefixCls('easy-overflow-tags', prefixClsInProps);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n\n const colors = useMemo(\n () => PresetColors.filter((c) => !['lime', 'yellow', 'magenta'].includes(c)).map((color) => token[`${color}-3`]),\n [token]\n );\n const getTagName = useCallback(\n (tag: T) => {\n return getTagNameInProps ? getTagNameInProps(tag) : (tag.label ?? tag.name);\n },\n [getTagNameInProps]\n );\n const renderTag = (item: T) => {\n const customProps = getTagPropsInProps?.(item, tags);\n return (\n <Tag\n {...tagProps}\n icon={item.icon}\n color={randomColors ? colors[random(0, colors.length - 1)] : (item.color ?? 'default')}\n {...customProps}\n >\n {getTagName(item)}\n </Tag>\n );\n };\n\n return wrapCSSVar(\n <Overflow<T>\n className={classNames(hashId, cssVarCls, prefixCls, className)}\n data={tags}\n maxCount=\"responsive\"\n renderItem={renderTag}\n renderRest={(omittedItems) => (\n <Dropdown\n menu={{\n items: omittedItems.map((tag) => ({\n type: 'item',\n key: getTagKey ? getTagKey(tag) : (tag.value ?? tag.id ?? getTagName(tag)),\n label: getTagName(tag),\n })),\n }}\n >\n <Tag {...ellipsisTagProps}>+ {omittedItems.length}...</Tag>\n </Dropdown>\n )}\n {...restProps}\n />\n );\n};\n\nexport default OverflowTags;\n"],"mappings":"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"}
1
+ {"version":3,"names":["useCallback","useContext","useMemo","ConfigProvider","Dropdown","Tag","theme","PresetColors","classNames","Overflow","random","useStyle","jsx","_jsx","jsxs","_jsxs","OverflowTags","props","_props$tags","tags","randomColors","getTagNameInProps","getTagName","getTagKey","tagProps","ellipsisTagProps","className","prefixClsInProps","prefixCls","restProps","_objectWithoutProperties","_excluded","_theme$useToken","useToken","token","_useContext","ConfigContext","getPrefixCls","_useStyle","_useStyle2","_slicedToArray","wrapCSSVar","hashId","cssVarCls","colors","filter","c","includes","map","color","concat","getValue","tag","field","_typeof","record","undefined","_ref","_getValue","toString","renderTag","item","_objectSpread","icon","length","children","data","maxCount","renderItem","renderRest","omittedItems","menu","items","_ref2","_getValue2","type","key","label","allTags"],"sources":["../../../src/components/OverflowTags/index.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { useCallback, useContext, useMemo } from 'react';\nimport type { TagProps } from 'antd';\nimport { ConfigProvider, Dropdown, Tag, theme } from 'antd';\nimport { PresetColors } from 'antd/es/theme/internal';\nimport classNames from 'classnames';\nimport type { OverflowProps } from 'rc-overflow';\nimport Overflow from 'rc-overflow';\nimport { random } from '../../utils/math';\nimport useStyle from './style';\n\nexport interface OverflowTagsProps<T> extends Omit<OverflowProps<T>, 'renderItem'> {\n /**\n * **CN**: 标签集合的数据\n *\n * **EN**: Data collection of tags\n */\n tags: T[] | undefined;\n /**\n * **EN**: Function to get the tag name, default is `tag.label` or `tag.name`\n *\n * **CN**: 获取标签名称的函数,默认取`tag.label`或`tag.name`\n */\n getTagName?: (tag: T) => ReactNode;\n /**\n * **EN**: Function to get the unique identifier of the tag, default is `tag.value` or `tag.id`\n *\n * **CN**: 获取标签唯一标识的函数,默认取`tag.value`或`tag.id`\n */\n getTagKey?: (tag: T) => React.Key;\n\n /**\n * **EN**: Custom tag rendering function\n *\n * **CN**: 标签渲染函数\n */\n renderTag?: OverflowProps<T>['renderItem'];\n /**\n * **EN**: Custom properties for the tag component\n *\n * **CN**: 自定义标签的组件属性\n */\n tagProps?: TagProps | ((tag: T, options: { tags: T[] }) => TagProps);\n /**\n * **EN**: When the number of tags exceeds the maximum display count, an ellipsis tag will be\n * shown. This property is used to set the style of the ellipsis tag.\n *\n * **CN**: 当标签数量超过最大显示数量时,会显示省略号的标签,此属性用于设置省略号标签的样式\n */\n ellipsisTagProps?: TagProps | ((tag: T, options: { omittedItems: T[]; allTags: T[] }) => TagProps);\n /**\n * **EN**: Whether to use random colors, default is `false`. Note that the tag object can also\n * contain a `color` property to specify the color, and the latter takes precedence.\n *\n * **CN**: 是否使用随机颜色,默认`false`。注意,tag对象还可以包含`color`属性来指定颜色,而且后者优先级更高。\n */\n randomColors?: boolean;\n}\n\n/**\n * - **EN:** Overflow tags component, used to display a collection of tags that can overflow and be\n * truncated. It supports displaying tags in a dropdown when the number of tags exceeds the\n * maximum display count. It also supports custom tag rendering and properties.\n * - **CN:** 溢出标签组件,用于显示一组可以溢出和截断的标签集合。当标签数量超过最大显示数量时,支持在下拉菜单中显示标签。还支持自定义标签渲染和属性。\n *\n * @example\n * <OverflowTags\n * tags={[\n * { value: 1, label: 'Tag1', icon: <Icon1 /> },\n * { value: 2, label: 'Tag2', icon: <Icon2 /> },\n * ]}\n * tagProps={{ color: 'blue' }}\n * ellipsisTagProps={{ color: 'grey' }}\n * />;\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst OverflowTags = <T,>(props: OverflowTagsProps<T>) => {\n const {\n tags = [],\n randomColors,\n getTagName: getTagNameInProps,\n getTagKey,\n tagProps,\n ellipsisTagProps,\n className,\n prefixCls: prefixClsInProps,\n ...restProps\n } = props;\n const { token } = theme.useToken();\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const prefixCls = getPrefixCls('easy-overflow-tags', prefixClsInProps);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n\n const colors = useMemo(\n () => PresetColors.filter((c) => !['lime', 'yellow', 'magenta'].includes(c)).map((color) => token[`${color}-3`]),\n [token]\n );\n const getValue = useCallback((tag: T | undefined, field: string) => {\n if (tag != null && typeof tag === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const record = tag as Record<string, any>;\n return record[field];\n }\n return undefined;\n }, []);\n const getTagName = useCallback(\n (tag: T) => {\n return getTagNameInProps\n ? getTagNameInProps(tag)\n : (getValue(tag, 'label') ?? getValue(tag, 'name') ?? tag?.toString());\n },\n [getTagNameInProps, getValue]\n );\n const renderTag = (item: T) => {\n return (\n <Tag\n icon={getValue(item, 'icon')}\n color={randomColors ? colors[random(0, colors.length - 1)] : getValue(item, 'color') || 'default'}\n {...(typeof tagProps === 'function' ? tagProps(item, { tags }) : tagProps)}\n >\n {getTagName(item)}\n </Tag>\n );\n };\n\n return wrapCSSVar(\n <Overflow<T>\n className={classNames(hashId, cssVarCls, prefixCls, className)}\n data={tags}\n maxCount=\"responsive\"\n renderItem={renderTag}\n renderRest={(omittedItems) => (\n <Dropdown\n menu={{\n items: omittedItems.map((tag) => ({\n type: 'item',\n key: getTagKey ? getTagKey(tag) : (getValue(tag, 'value') ?? getValue(tag, 'id') ?? getTagName(tag)),\n label: getTagName(tag),\n })),\n }}\n >\n <Tag\n {...(typeof ellipsisTagProps === 'function'\n ? ellipsisTagProps(omittedItems[0], { omittedItems, allTags: tags })\n : ellipsisTagProps)}\n >\n + {omittedItems.length}...\n </Tag>\n </Dropdown>\n )}\n {...restProps}\n />\n );\n};\n\nexport default OverflowTags;\n"],"mappings":"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"}
@@ -155,7 +155,9 @@ function buildRuleMeta(options) {
155
155
  return !excludeSpecials.includes(v);
156
156
  });
157
157
  symbols.push(escape(specials.join('')));
158
- messages.push(specials.join(t(nameSeparator)));
158
+ messages.push(t('validation.rule.buildRule.token.specialChars', {
159
+ value: specials.join(t('validation.rule.buildRule.token.delimiter'))
160
+ }));
159
161
  }
160
162
  return {
161
163
  symbols: symbols,
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","escape","useT","nameSeparator","useValidatorBuilder","t","props","buildRule","_objectSpread","options","allowed","startsWith","flags","Object","values","some","v","Error","symbols","messages","push","meta","buildRuleMeta","concat","join","prefix","_allowed$min","_allowed$max","min","max","cMin","cMax","length","unshift","message","slice","pattern","RegExp","content","allowedOptions","startsWithOptions","chineseCharacter","chinesePunctuation","letter","lowerLetter","upperLetter","number","excludeSpecials","hyphen","underscore","special","specials","filter","includes"],"sources":["../../src/hooks/useValidatorBuilder.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport escape from 'escape-string-regexp';\nimport useT from './useT';\n\nconst nameSeparator = 'validation.rule.buildRule.token.separator';\n\n/**\n * - **EN:** Get a validation rule builder to build validation rules\n * - **CN:** 获取一个校验规则生成器,用来构建校验规则\n */\nconst useValidatorBuilder = () => {\n const t = useT();\n return useMemo(() => (props: BuilderOptions) => buildRule({ ...props, t }), [t]);\n};\n\n/**\n * - **EN:** Build regular expression rules dynamically, compatible with ant-design rules\n * - **CN:** 动态构建正则表达式规则,与 ant-design 的规则兼容\n */\nfunction buildRule(\n options: BuilderOptions & {\n /**\n * - **EN:** Internationalization function\n * - **CN:** 国际化函数\n */\n t: ReturnType<typeof useT>;\n }\n): ValidatorRule {\n const { allowed, startsWith, flags, t } = options;\n if (!Object.values(allowed).some((v) => v === true)) {\n throw new Error(t('validation.rule.buildRule.includeMandatory'));\n }\n\n const symbols: string[] = [];\n const messages: string[] = [];\n symbols.push(`^`);\n\n // Process startsWith rules\n if (startsWith) {\n const meta = buildRuleMeta({\n flags: startsWith,\n t,\n });\n symbols.push(`[${meta.symbols.join('')}]`);\n messages.push(\n t('validation.rule.buildRule.startsWithFormat', {\n prefix: meta.messages.join(t(nameSeparator)),\n })\n );\n }\n\n // Process allowed rules\n {\n const meta = buildRuleMeta({ flags: allowed, t });\n\n const min = allowed.min ?? 0;\n const max = allowed.max ?? 0; // 0 means unlimited\n\n // If there is startWith in the regular expression, the limited data amount needs to be reduced by 1\n const cMin = min && startsWith ? min - 1 : min;\n const cMax = max && startsWith ? max - 1 : max;\n\n symbols.push(`[${meta.symbols.join('')}]{${cMin},${cMax || ''}}`);\n if (meta.messages.length === 0) {\n messages.unshift(``);\n } else if (meta.messages.length === 1) {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n } else {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n }\n if (min && max) {\n messages.push(\n t('validation.rule.buildRule.rangeLength', {\n min,\n max,\n })\n );\n } else {\n if (min > 1) {\n messages.push(t('validation.rule.buildRule.minLength', { min }));\n }\n if (max) {\n messages.push(t('validation.rule.buildRule.maxLength', { max }));\n }\n }\n }\n symbols.push(`$`);\n\n let message = messages.join('');\n if (message.startsWith(t(nameSeparator))) {\n message = message.slice(1);\n }\n return {\n pattern: new RegExp(symbols.join(''), flags),\n message: t('validation.rule.buildRule.messageFormat', { content: message }),\n allowedOptions: allowed,\n startsWithOptions: startsWith,\n flags,\n };\n}\n\nfunction buildRuleMeta(options: { flags: RuleRegExpFlags; t: ReturnType<typeof useT> }): RuleMeta {\n const { flags, t } = options;\n const symbols: string[] = [];\n const messages: string[] = [];\n if (flags.chineseCharacter) {\n // Chinese characters\n symbols.push(`\\u4e00-\\u9fa5`);\n messages.push(t('validation.rule.buildRule.token.chinese'));\n }\n if (flags.chinesePunctuation) {\n // Chinese punctuation\n symbols.push(`\\u3000-\\u301e`);\n symbols.push(`\\u3021-\\u303f`);\n symbols.push(`\\uff00-\\uffef`);\n messages.push(t('validation.rule.buildRule.token.chinesePunctuation'));\n }\n if (flags.letter) {\n symbols.push(`a-zA-Z`);\n messages.push(t('validation.rule.buildRule.token.letter'));\n } else if (flags.lowerLetter) {\n symbols.push(`a-z`);\n messages.push(t('validation.rule.buildRule.token.lowerLetter'));\n } else if (flags.upperLetter) {\n symbols.push(`A-Z`);\n messages.push(t('validation.rule.buildRule.token.upperLetter'));\n }\n if (flags.number) {\n symbols.push(`0-9`);\n messages.push(t('validation.rule.buildRule.token.number'));\n }\n const excludeSpecials: string[] = [];\n if (flags.hyphen) {\n symbols.push(`\\\\-`);\n messages.push(`-`);\n excludeSpecials.push('-');\n }\n if (flags.underscore) {\n symbols.push(`_`);\n messages.push(`_`);\n excludeSpecials.push('_');\n }\n if (flags.special) {\n const specials = flags.special.filter((v) => !excludeSpecials.includes(v));\n symbols.push(escape(specials.join('')));\n messages.push(specials.join(t(nameSeparator)));\n }\n return {\n symbols,\n messages,\n };\n}\n\nexport interface BuilderOptions {\n /**\n * - **EN:** The rule of allowed characters\n * - **CN:** 允许字符的规则\n */\n allowed: RuleRegExpFlags;\n /**\n * - **EN:** The rule of the starting character\n * - **CN:** 开头字符的规则\n */\n startsWith?: Omit<RuleRegExpFlags, 'min' | 'max'>;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\nexport interface RuleRegExpFlags {\n /**\n * - **EN:** Include lowercase and uppercase Latin characters. If set to true, `lowerLetter` and\n * `upperLetter` option are not effective\n * - **CN:**: 包含大小写拉丁字符。如果设置为true,则`lowerLetter`和`upperLetter`属性不生效\n */\n\n letter?: boolean;\n /**\n * - **EN:** Include lowercase English letters\n * - **CN:**: 包含小写英文字符\n */\n lowerLetter?: boolean;\n /**\n * - **EN:** Include uppercase English letters\n * - **CN:**: 包含大写英文字符\n */\n upperLetter?: boolean;\n /**\n * - **EN:** Include Chinese characters\n * - **CN:** 包含中文字符\n */\n chineseCharacter?: boolean;\n /**\n * - **EN:** Include Chinese (full-width) punctuation\n * - **CN:** 包含中文(全角)标点符号\n */\n chinesePunctuation?: boolean;\n /**\n * - **EN:** Include numbers\n * - **CN:** 包含数字\n */\n number?: boolean;\n /**\n * - **EN:** Include hyphens (-)\n * - **CN:** 包含连字符(-)\n */\n hyphen?: boolean;\n /**\n * - **EN:** Include underscores (_)\n * - **CN:** 包含下划线(_)\n */\n underscore?: boolean;\n /**\n * - **EN:** Include specified special characters\n * - **CN:** 包含指定的特殊字符\n */\n special?: string[];\n /**\n * - **EN:** Minimum number of characters\n * - **CN:** 最小字符数量\n *\n * @default 1\n */\n min?: number;\n /**\n * - **EN:** Maximum number of characters\n * - **CN:** 最大字符数量\n */\n max?: number;\n}\n\nexport type StartsWithRegExpFlags = RuleRegExpFlags;\n\nexport interface ValidatorRule extends Validator {\n /**\n * - **EN:** The options of allowed characters\n * - **CN:** 允许字符的规则设置\n */\n allowedOptions: RuleRegExpFlags;\n /**\n * - **EN:** The options of the starting character\n * - **CN:** 开头字符的规则设置\n */\n startsWithOptions?: StartsWithRegExpFlags;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\ninterface RuleMeta {\n symbols: string[];\n messages: string[];\n}\n\nexport interface Validator {\n /**\n * - **EN:** Regular expression for verification\n * - **CN:** 校验正则表达式\n */\n pattern: RegExp;\n /**\n * - **EN:** Prompt message when verification fails\n * - **CN:** 校验失败时的提示信息\n */\n message: string;\n}\n\nexport default useValidatorBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"names":["useMemo","escape","useT","nameSeparator","useValidatorBuilder","t","props","buildRule","_objectSpread","options","allowed","startsWith","flags","Object","values","some","v","Error","symbols","messages","push","meta","buildRuleMeta","concat","join","prefix","_allowed$min","_allowed$max","min","max","cMin","cMax","length","unshift","message","slice","pattern","RegExp","content","allowedOptions","startsWithOptions","chineseCharacter","chinesePunctuation","letter","lowerLetter","upperLetter","number","excludeSpecials","hyphen","underscore","special","specials","filter","includes","value"],"sources":["../../src/hooks/useValidatorBuilder.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport escape from 'escape-string-regexp';\nimport useT from './useT';\n\nconst nameSeparator = 'validation.rule.buildRule.token.separator';\n\n/**\n * - **EN:** Get a validation rule builder to build validation rules\n * - **CN:** 获取一个校验规则生成器,用来构建校验规则\n */\nconst useValidatorBuilder = () => {\n const t = useT();\n return useMemo(() => (props: BuilderOptions) => buildRule({ ...props, t }), [t]);\n};\n\n/**\n * - **EN:** Build regular expression rules dynamically, compatible with ant-design rules\n * - **CN:** 动态构建正则表达式规则,与 ant-design 的规则兼容\n */\nfunction buildRule(\n options: BuilderOptions & {\n /**\n * - **EN:** Internationalization function\n * - **CN:** 国际化函数\n */\n t: ReturnType<typeof useT>;\n }\n): ValidatorRule {\n const { allowed, startsWith, flags, t } = options;\n if (!Object.values(allowed).some((v) => v === true)) {\n throw new Error(t('validation.rule.buildRule.includeMandatory'));\n }\n\n const symbols: string[] = [];\n const messages: string[] = [];\n symbols.push(`^`);\n\n // Process startsWith rules\n if (startsWith) {\n const meta = buildRuleMeta({\n flags: startsWith,\n t,\n });\n symbols.push(`[${meta.symbols.join('')}]`);\n messages.push(\n t('validation.rule.buildRule.startsWithFormat', {\n prefix: meta.messages.join(t(nameSeparator)),\n })\n );\n }\n\n // Process allowed rules\n {\n const meta = buildRuleMeta({ flags: allowed, t });\n\n const min = allowed.min ?? 0;\n const max = allowed.max ?? 0; // 0 means unlimited\n\n // If there is startWith in the regular expression, the limited data amount needs to be reduced by 1\n const cMin = min && startsWith ? min - 1 : min;\n const cMax = max && startsWith ? max - 1 : max;\n\n symbols.push(`[${meta.symbols.join('')}]{${cMin},${cMax || ''}}`);\n if (meta.messages.length === 0) {\n messages.unshift(``);\n } else if (meta.messages.length === 1) {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n } else {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n }\n if (min && max) {\n messages.push(\n t('validation.rule.buildRule.rangeLength', {\n min,\n max,\n })\n );\n } else {\n if (min > 1) {\n messages.push(t('validation.rule.buildRule.minLength', { min }));\n }\n if (max) {\n messages.push(t('validation.rule.buildRule.maxLength', { max }));\n }\n }\n }\n symbols.push(`$`);\n\n let message = messages.join('');\n if (message.startsWith(t(nameSeparator))) {\n message = message.slice(1);\n }\n return {\n pattern: new RegExp(symbols.join(''), flags),\n message: t('validation.rule.buildRule.messageFormat', { content: message }),\n allowedOptions: allowed,\n startsWithOptions: startsWith,\n flags,\n };\n}\n\nfunction buildRuleMeta(options: { flags: RuleRegExpFlags; t: ReturnType<typeof useT> }): RuleMeta {\n const { flags, t } = options;\n const symbols: string[] = [];\n const messages: string[] = [];\n if (flags.chineseCharacter) {\n // Chinese characters\n symbols.push(`\\u4e00-\\u9fa5`);\n messages.push(t('validation.rule.buildRule.token.chinese'));\n }\n if (flags.chinesePunctuation) {\n // Chinese punctuation\n symbols.push(`\\u3000-\\u301e`);\n symbols.push(`\\u3021-\\u303f`);\n symbols.push(`\\uff00-\\uffef`);\n messages.push(t('validation.rule.buildRule.token.chinesePunctuation'));\n }\n if (flags.letter) {\n symbols.push(`a-zA-Z`);\n messages.push(t('validation.rule.buildRule.token.letter'));\n } else if (flags.lowerLetter) {\n symbols.push(`a-z`);\n messages.push(t('validation.rule.buildRule.token.lowerLetter'));\n } else if (flags.upperLetter) {\n symbols.push(`A-Z`);\n messages.push(t('validation.rule.buildRule.token.upperLetter'));\n }\n if (flags.number) {\n symbols.push(`0-9`);\n messages.push(t('validation.rule.buildRule.token.number'));\n }\n const excludeSpecials: string[] = [];\n if (flags.hyphen) {\n symbols.push(`\\\\-`);\n messages.push(`-`);\n excludeSpecials.push('-');\n }\n if (flags.underscore) {\n symbols.push(`_`);\n messages.push(`_`);\n excludeSpecials.push('_');\n }\n if (flags.special) {\n const specials = flags.special.filter((v) => !excludeSpecials.includes(v));\n symbols.push(escape(specials.join('')));\n messages.push(\n t('validation.rule.buildRule.token.specialChars', {\n value: specials.join(t('validation.rule.buildRule.token.delimiter')),\n })\n );\n }\n return {\n symbols,\n messages,\n };\n}\n\nexport interface BuilderOptions {\n /**\n * - **EN:** The rule of allowed characters\n * - **CN:** 允许字符的规则\n */\n allowed: RuleRegExpFlags;\n /**\n * - **EN:** The rule of the starting character\n * - **CN:** 开头字符的规则\n */\n startsWith?: Omit<RuleRegExpFlags, 'min' | 'max'>;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\nexport interface RuleRegExpFlags {\n /**\n * - **EN:** Include lowercase and uppercase Latin characters. If set to true, `lowerLetter` and\n * `upperLetter` option are not effective\n * - **CN:**: 包含大小写拉丁字符。如果设置为true,则`lowerLetter`和`upperLetter`属性不生效\n */\n\n letter?: boolean;\n /**\n * - **EN:** Include lowercase English letters\n * - **CN:**: 包含小写英文字符\n */\n lowerLetter?: boolean;\n /**\n * - **EN:** Include uppercase English letters\n * - **CN:**: 包含大写英文字符\n */\n upperLetter?: boolean;\n /**\n * - **EN:** Include Chinese characters\n * - **CN:** 包含中文字符\n */\n chineseCharacter?: boolean;\n /**\n * - **EN:** Include Chinese (full-width) punctuation\n * - **CN:** 包含中文(全角)标点符号\n */\n chinesePunctuation?: boolean;\n /**\n * - **EN:** Include numbers\n * - **CN:** 包含数字\n */\n number?: boolean;\n /**\n * - **EN:** Include hyphens (-)\n * - **CN:** 包含连字符(-)\n */\n hyphen?: boolean;\n /**\n * - **EN:** Include underscores (_)\n * - **CN:** 包含下划线(_)\n */\n underscore?: boolean;\n /**\n * - **EN:** Include specified special characters\n * - **CN:** 包含指定的特殊字符\n */\n special?: string[];\n /**\n * - **EN:** Minimum number of characters\n * - **CN:** 最小字符数量\n *\n * @default 1\n */\n min?: number;\n /**\n * - **EN:** Maximum number of characters\n * - **CN:** 最大字符数量\n */\n max?: number;\n}\n\nexport type StartsWithRegExpFlags = RuleRegExpFlags;\n\nexport interface ValidatorRule extends Validator {\n /**\n * - **EN:** The options of allowed characters\n * - **CN:** 允许字符的规则设置\n */\n allowedOptions: RuleRegExpFlags;\n /**\n * - **EN:** The options of the starting character\n * - **CN:** 开头字符的规则设置\n */\n startsWithOptions?: StartsWithRegExpFlags;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\ninterface RuleMeta {\n symbols: string[];\n messages: string[];\n}\n\nexport interface Validator {\n /**\n * - **EN:** Regular expression for verification\n * - **CN:** 校验正则表达式\n */\n pattern: RegExp;\n /**\n * - **EN:** Prompt message when verification fails\n * - **CN:** 校验失败时的提示信息\n */\n message: string;\n}\n\nexport default useValidatorBuilder;\n"],"mappings":"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"}
@@ -25,12 +25,14 @@ export declare const resources: {
25
25
  readonly 'validation.rule.buildRule.maxLength': ", up to {{max}} characters";
26
26
  readonly 'validation.rule.buildRule.rangeLength': ", {{min}}~{{max}} characters";
27
27
  readonly 'validation.rule.buildRule.token.separator': ", ";
28
+ readonly 'validation.rule.buildRule.token.delimiter': "";
28
29
  readonly 'validation.rule.buildRule.token.chinese': "Chinese characters";
29
30
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "Chinese punctuation";
30
31
  readonly 'validation.rule.buildRule.token.letter': "letter";
31
32
  readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
32
33
  readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
33
34
  readonly 'validation.rule.buildRule.token.number': "number";
35
+ readonly 'validation.rule.buildRule.token.specialChars': "special characters ({{-value}})";
34
36
  readonly 'hooks.useUserMedia.microphone': "Microphone";
35
37
  readonly 'hooks.useUserMedia.camera': "Camera";
36
38
  readonly 'hooks.featureName.microphone': "Speech";
@@ -75,12 +77,14 @@ export declare const resources: {
75
77
  readonly 'validation.rule.buildRule.maxLength': ", up to {{max}} characters";
76
78
  readonly 'validation.rule.buildRule.rangeLength': ", {{min}}~{{max}} characters";
77
79
  readonly 'validation.rule.buildRule.token.separator': ", ";
80
+ readonly 'validation.rule.buildRule.token.delimiter': "";
78
81
  readonly 'validation.rule.buildRule.token.chinese': "Chinese characters";
79
82
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "Chinese punctuation";
80
83
  readonly 'validation.rule.buildRule.token.letter': "letter";
81
84
  readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
82
85
  readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
83
86
  readonly 'validation.rule.buildRule.token.number': "number";
87
+ readonly 'validation.rule.buildRule.token.specialChars': "special characters ({{-value}})";
84
88
  readonly 'hooks.useUserMedia.microphone': "Microphone";
85
89
  readonly 'hooks.useUserMedia.camera': "Camera";
86
90
  readonly 'hooks.featureName.microphone': "Speech";
@@ -125,12 +129,14 @@ export declare const resources: {
125
129
  readonly 'validation.rule.buildRule.maxLength': ",{{max}}字符以内";
126
130
  readonly 'validation.rule.buildRule.rangeLength': ",{{min}}~{{max}}个字符";
127
131
  readonly 'validation.rule.buildRule.token.separator': "、";
132
+ readonly 'validation.rule.buildRule.token.delimiter': "";
128
133
  readonly 'validation.rule.buildRule.token.chinese': "汉字";
129
134
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "中文标点";
130
135
  readonly 'validation.rule.buildRule.token.letter': "字母";
131
136
  readonly 'validation.rule.buildRule.token.lowerLetter': "小写字母";
132
137
  readonly 'validation.rule.buildRule.token.upperLetter': "大写字母";
133
138
  readonly 'validation.rule.buildRule.token.number': "数字";
139
+ readonly 'validation.rule.buildRule.token.specialChars': "特殊字符{{-value}}";
134
140
  readonly 'hooks.useUserMedia.microphone': "麦克风";
135
141
  readonly 'hooks.useUserMedia.camera': "摄像头";
136
142
  readonly 'hooks.featureName.microphone': "语音";
@@ -20,12 +20,14 @@ declare const enUS: {
20
20
  readonly 'validation.rule.buildRule.maxLength': ", up to {{max}} characters";
21
21
  readonly 'validation.rule.buildRule.rangeLength': ", {{min}}~{{max}} characters";
22
22
  readonly 'validation.rule.buildRule.token.separator': ", ";
23
+ readonly 'validation.rule.buildRule.token.delimiter': "";
23
24
  readonly 'validation.rule.buildRule.token.chinese': "Chinese characters";
24
25
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "Chinese punctuation";
25
26
  readonly 'validation.rule.buildRule.token.letter': "letter";
26
27
  readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
27
28
  readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
28
29
  readonly 'validation.rule.buildRule.token.number': "number";
30
+ readonly 'validation.rule.buildRule.token.specialChars': "special characters ({{-value}})";
29
31
  readonly 'hooks.useUserMedia.microphone': "Microphone";
30
32
  readonly 'hooks.useUserMedia.camera': "Camera";
31
33
  readonly 'hooks.featureName.microphone': "Speech";
@@ -20,12 +20,14 @@ var enUS = {
20
20
  'validation.rule.buildRule.maxLength': ", up to {{max}} characters",
21
21
  'validation.rule.buildRule.rangeLength': ", {{min}}~{{max}} characters",
22
22
  'validation.rule.buildRule.token.separator': ', ',
23
+ 'validation.rule.buildRule.token.delimiter': '',
23
24
  'validation.rule.buildRule.token.chinese': 'Chinese characters',
24
25
  'validation.rule.buildRule.token.chinesePunctuation': 'Chinese punctuation',
25
26
  'validation.rule.buildRule.token.letter': 'letter',
26
27
  'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',
27
28
  'validation.rule.buildRule.token.upperLetter': 'uppercase letter',
28
29
  'validation.rule.buildRule.token.number': 'number',
30
+ 'validation.rule.buildRule.token.specialChars': 'special characters ({{-value}})',
29
31
  'hooks.useUserMedia.microphone': 'Microphone',
30
32
  'hooks.useUserMedia.camera': 'Camera',
31
33
  'hooks.featureName.microphone': 'Speech',
@@ -1 +1 @@
1
- {"version":3,"names":["enUS"],"sources":["../../../src/locales/langs/en-US.ts"],"sourcesContent":["const enUS = {\n 'components.EditableText.requiredMsg': 'Please enter text content',\n 'components.EditableText.placeholder': 'Please input text content, press Enter or click the OK button',\n 'components.EditableText.edit': 'Edit',\n 'components.EditableText.save': 'Save',\n 'components.EditableText.cancel': 'Cancel',\n 'components.ColumnSetting.title': 'Column Setting',\n 'components.ColumnSetting.selectAll': 'Select All',\n 'components.ColumnSetting.reset': 'Reset',\n\n 'validation.rule.number.message': 'Please enter a number',\n 'validation.rule.floatNumber.message': 'Please enter a number',\n 'validation.rule.email.message': 'Please enter the correct email address',\n 'validation.rule.ip.message': 'Please enter the correct ip address',\n 'validation.rule.chineseMobile.message': 'Please enter the correct mobile number',\n 'validation.rule.password.message': '8-16 digit password, at least two of numbers, letters, and symbols',\n 'validation.rule.buildRule.includeMandatory': 'At least one field in the include option is true',\n 'validation.rule.buildRule.messageFormat': 'Allow {{content}}',\n 'validation.rule.buildRule.startsWithFormat': `, start with {{prefix}}`,\n 'validation.rule.buildRule.minLength': `, at least {{min}} characters`,\n 'validation.rule.buildRule.maxLength': `, up to {{max}} characters`,\n 'validation.rule.buildRule.rangeLength': `, {{min}}~{{max}} characters`,\n 'validation.rule.buildRule.token.separator': ', ',\n 'validation.rule.buildRule.token.chinese': 'Chinese characters',\n 'validation.rule.buildRule.token.chinesePunctuation': 'Chinese punctuation',\n 'validation.rule.buildRule.token.letter': 'letter',\n 'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',\n 'validation.rule.buildRule.token.upperLetter': 'uppercase letter',\n 'validation.rule.buildRule.token.number': 'number',\n 'hooks.useUserMedia.microphone': 'Microphone',\n 'hooks.useUserMedia.camera': 'Camera',\n 'hooks.featureName.microphone': 'Speech',\n 'hooks.featureName.camera': 'Video',\n 'hooks.useUserMedia.disabledWarning': 'User media is disabled',\n 'hooks.useUserMedia.isRecordingNow': 'User media is currently recording and cannot be operated on',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}} Permission',\n 'hooks.useUserMedia.requestTip1':\n 'The browser is requesting {{deviceType}} permission. Please click the \"Allow when visiting this site\" button in the popup on the left.',\n 'hooks.useUserMedia.requestTip2':\n 'Please DO NOT click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.',\n 'hooks.useUserMedia.deniedPermission':\n 'You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n 'Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.',\n 'hooks.useUserMedia.notSupport': 'Current browser does not support audio recording',\n 'hooks.useUserMedia.soundDetectTitle': 'Sound Issue Detected',\n 'hooks.useUserMedia.soundDetectDescription':\n 'No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.',\n 'hooks.useUserMedia.chooseMicrophoneDevice': 'Please reselect the audio device',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': 'Remember default device?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip':\n 'Please follow these steps to save the default audio device for automatic selection next time.',\n 'hooks.useStompSocket.connectError': 'Connection failed, please try again later',\n 'hooks.useStompSocket.serverDisconnected': 'Server disconnected',\n} as const;\nexport default enUS;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,2BAA2B;EAClE,qCAAqC,EAAE,+DAA+D;EACtG,8BAA8B,EAAE,MAAM;EACtC,8BAA8B,EAAE,MAAM;EACtC,gCAAgC,EAAE,QAAQ;EAC1C,gCAAgC,EAAE,gBAAgB;EAClD,oCAAoC,EAAE,YAAY;EAClD,gCAAgC,EAAE,OAAO;EAEzC,gCAAgC,EAAE,uBAAuB;EACzD,qCAAqC,EAAE,uBAAuB;EAC9D,+BAA+B,EAAE,wCAAwC;EACzE,4BAA4B,EAAE,qCAAqC;EACnE,uCAAuC,EAAE,wCAAwC;EACjF,kCAAkC,EAAE,oEAAoE;EACxG,4CAA4C,EAAE,kDAAkD;EAChG,yCAAyC,EAAE,mBAAmB;EAC9D,4CAA4C,2BAA2B;EACvE,qCAAqC,iCAAiC;EACtE,qCAAqC,8BAA8B;EACnE,uCAAuC,gCAAgC;EACvE,2CAA2C,EAAE,IAAI;EACjD,yCAAyC,EAAE,oBAAoB;EAC/D,oDAAoD,EAAE,qBAAqB;EAC3E,wCAAwC,EAAE,QAAQ;EAClD,6CAA6C,EAAE,kBAAkB;EACjE,6CAA6C,EAAE,kBAAkB;EACjE,wCAAwC,EAAE,QAAQ;EAClD,+BAA+B,EAAE,YAAY;EAC7C,2BAA2B,EAAE,QAAQ;EACrC,8BAA8B,EAAE,QAAQ;EACxC,0BAA0B,EAAE,OAAO;EACnC,oCAAoC,EAAE,wBAAwB;EAC9D,mCAAmC,EAAE,6DAA6D;EAClG,qCAAqC,EAAE,2BAA2B;EAClE,gCAAgC,EAC9B,wIAAwI;EAC1I,gCAAgC,EAC9B,mHAAmH;EACrH,qCAAqC,EACnC,uHAAuH;EACzH,0CAA0C,EACxC,0HAA0H;EAC5H,+BAA+B,EAAE,kDAAkD;EACnF,qCAAqC,EAAE,sBAAsB;EAC7D,2CAA2C,EACzC,qIAAqI;EACvI,2CAA2C,EAAE,kCAAkC;EAC/E,+CAA+C,EAAE,0BAA0B;EAC3E,kDAAkD,EAChD,+FAA+F;EACjG,mCAAmC,EAAE,2CAA2C;EAChF,yCAAyC,EAAE;AAC7C,CAAU;AACV,eAAeA,IAAI"}
1
+ {"version":3,"names":["enUS"],"sources":["../../../src/locales/langs/en-US.ts"],"sourcesContent":["const enUS = {\n 'components.EditableText.requiredMsg': 'Please enter text content',\n 'components.EditableText.placeholder': 'Please input text content, press Enter or click the OK button',\n 'components.EditableText.edit': 'Edit',\n 'components.EditableText.save': 'Save',\n 'components.EditableText.cancel': 'Cancel',\n 'components.ColumnSetting.title': 'Column Setting',\n 'components.ColumnSetting.selectAll': 'Select All',\n 'components.ColumnSetting.reset': 'Reset',\n\n 'validation.rule.number.message': 'Please enter a number',\n 'validation.rule.floatNumber.message': 'Please enter a number',\n 'validation.rule.email.message': 'Please enter the correct email address',\n 'validation.rule.ip.message': 'Please enter the correct ip address',\n 'validation.rule.chineseMobile.message': 'Please enter the correct mobile number',\n 'validation.rule.password.message': '8-16 digit password, at least two of numbers, letters, and symbols',\n 'validation.rule.buildRule.includeMandatory': 'At least one field in the include option is true',\n 'validation.rule.buildRule.messageFormat': 'Allow {{content}}',\n 'validation.rule.buildRule.startsWithFormat': `, start with {{prefix}}`,\n 'validation.rule.buildRule.minLength': `, at least {{min}} characters`,\n 'validation.rule.buildRule.maxLength': `, up to {{max}} characters`,\n 'validation.rule.buildRule.rangeLength': `, {{min}}~{{max}} characters`,\n 'validation.rule.buildRule.token.separator': ', ',\n 'validation.rule.buildRule.token.delimiter': '',\n 'validation.rule.buildRule.token.chinese': 'Chinese characters',\n 'validation.rule.buildRule.token.chinesePunctuation': 'Chinese punctuation',\n 'validation.rule.buildRule.token.letter': 'letter',\n 'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',\n 'validation.rule.buildRule.token.upperLetter': 'uppercase letter',\n 'validation.rule.buildRule.token.number': 'number',\n 'validation.rule.buildRule.token.specialChars': 'special characters ({{-value}})',\n 'hooks.useUserMedia.microphone': 'Microphone',\n 'hooks.useUserMedia.camera': 'Camera',\n 'hooks.featureName.microphone': 'Speech',\n 'hooks.featureName.camera': 'Video',\n 'hooks.useUserMedia.disabledWarning': 'User media is disabled',\n 'hooks.useUserMedia.isRecordingNow': 'User media is currently recording and cannot be operated on',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}} Permission',\n 'hooks.useUserMedia.requestTip1':\n 'The browser is requesting {{deviceType}} permission. Please click the \"Allow when visiting this site\" button in the popup on the left.',\n 'hooks.useUserMedia.requestTip2':\n 'Please DO NOT click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.',\n 'hooks.useUserMedia.deniedPermission':\n 'You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n 'Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.',\n 'hooks.useUserMedia.notSupport': 'Current browser does not support audio recording',\n 'hooks.useUserMedia.soundDetectTitle': 'Sound Issue Detected',\n 'hooks.useUserMedia.soundDetectDescription':\n 'No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.',\n 'hooks.useUserMedia.chooseMicrophoneDevice': 'Please reselect the audio device',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': 'Remember default device?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip':\n 'Please follow these steps to save the default audio device for automatic selection next time.',\n 'hooks.useStompSocket.connectError': 'Connection failed, please try again later',\n 'hooks.useStompSocket.serverDisconnected': 'Server disconnected',\n} as const;\nexport default enUS;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,2BAA2B;EAClE,qCAAqC,EAAE,+DAA+D;EACtG,8BAA8B,EAAE,MAAM;EACtC,8BAA8B,EAAE,MAAM;EACtC,gCAAgC,EAAE,QAAQ;EAC1C,gCAAgC,EAAE,gBAAgB;EAClD,oCAAoC,EAAE,YAAY;EAClD,gCAAgC,EAAE,OAAO;EAEzC,gCAAgC,EAAE,uBAAuB;EACzD,qCAAqC,EAAE,uBAAuB;EAC9D,+BAA+B,EAAE,wCAAwC;EACzE,4BAA4B,EAAE,qCAAqC;EACnE,uCAAuC,EAAE,wCAAwC;EACjF,kCAAkC,EAAE,oEAAoE;EACxG,4CAA4C,EAAE,kDAAkD;EAChG,yCAAyC,EAAE,mBAAmB;EAC9D,4CAA4C,2BAA2B;EACvE,qCAAqC,iCAAiC;EACtE,qCAAqC,8BAA8B;EACnE,uCAAuC,gCAAgC;EACvE,2CAA2C,EAAE,IAAI;EACjD,2CAA2C,EAAE,EAAE;EAC/C,yCAAyC,EAAE,oBAAoB;EAC/D,oDAAoD,EAAE,qBAAqB;EAC3E,wCAAwC,EAAE,QAAQ;EAClD,6CAA6C,EAAE,kBAAkB;EACjE,6CAA6C,EAAE,kBAAkB;EACjE,wCAAwC,EAAE,QAAQ;EAClD,8CAA8C,EAAE,iCAAiC;EACjF,+BAA+B,EAAE,YAAY;EAC7C,2BAA2B,EAAE,QAAQ;EACrC,8BAA8B,EAAE,QAAQ;EACxC,0BAA0B,EAAE,OAAO;EACnC,oCAAoC,EAAE,wBAAwB;EAC9D,mCAAmC,EAAE,6DAA6D;EAClG,qCAAqC,EAAE,2BAA2B;EAClE,gCAAgC,EAC9B,wIAAwI;EAC1I,gCAAgC,EAC9B,mHAAmH;EACrH,qCAAqC,EACnC,uHAAuH;EACzH,0CAA0C,EACxC,0HAA0H;EAC5H,+BAA+B,EAAE,kDAAkD;EACnF,qCAAqC,EAAE,sBAAsB;EAC7D,2CAA2C,EACzC,qIAAqI;EACvI,2CAA2C,EAAE,kCAAkC;EAC/E,+CAA+C,EAAE,0BAA0B;EAC3E,kDAAkD,EAChD,+FAA+F;EACjG,mCAAmC,EAAE,2CAA2C;EAChF,yCAAyC,EAAE;AAC7C,CAAU;AACV,eAAeA,IAAI"}
@@ -20,12 +20,14 @@ declare const zhCN: {
20
20
  readonly 'validation.rule.buildRule.maxLength': ",{{max}}字符以内";
21
21
  readonly 'validation.rule.buildRule.rangeLength': ",{{min}}~{{max}}个字符";
22
22
  readonly 'validation.rule.buildRule.token.separator': "、";
23
+ readonly 'validation.rule.buildRule.token.delimiter': "";
23
24
  readonly 'validation.rule.buildRule.token.chinese': "汉字";
24
25
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "中文标点";
25
26
  readonly 'validation.rule.buildRule.token.letter': "字母";
26
27
  readonly 'validation.rule.buildRule.token.lowerLetter': "小写字母";
27
28
  readonly 'validation.rule.buildRule.token.upperLetter': "大写字母";
28
29
  readonly 'validation.rule.buildRule.token.number': "数字";
30
+ readonly 'validation.rule.buildRule.token.specialChars': "特殊字符{{-value}}";
29
31
  readonly 'hooks.useUserMedia.microphone': "麦克风";
30
32
  readonly 'hooks.useUserMedia.camera': "摄像头";
31
33
  readonly 'hooks.featureName.microphone': "语音";
@@ -20,12 +20,14 @@ var zhCN = {
20
20
  'validation.rule.buildRule.maxLength': "\uFF0C{{max}}\u5B57\u7B26\u4EE5\u5185",
21
21
  'validation.rule.buildRule.rangeLength': "\uFF0C{{min}}~{{max}}\u4E2A\u5B57\u7B26",
22
22
  'validation.rule.buildRule.token.separator': '、',
23
+ 'validation.rule.buildRule.token.delimiter': '',
23
24
  'validation.rule.buildRule.token.chinese': '汉字',
24
25
  'validation.rule.buildRule.token.chinesePunctuation': '中文标点',
25
26
  'validation.rule.buildRule.token.letter': '字母',
26
27
  'validation.rule.buildRule.token.lowerLetter': '小写字母',
27
28
  'validation.rule.buildRule.token.upperLetter': '大写字母',
28
29
  'validation.rule.buildRule.token.number': '数字',
30
+ 'validation.rule.buildRule.token.specialChars': '特殊字符{{-value}}',
29
31
  'hooks.useUserMedia.microphone': '麦克风',
30
32
  'hooks.useUserMedia.camera': '摄像头',
31
33
  'hooks.featureName.microphone': '语音',
@@ -1 +1 @@
1
- {"version":3,"names":["zhCN"],"sources":["../../../src/locales/langs/zh-CN.ts"],"sourcesContent":["const zhCN = {\n 'components.EditableText.requiredMsg': '请输入文本内容',\n 'components.EditableText.placeholder': '输入文本内容,按回车或点击确定按钮',\n 'components.EditableText.edit': '编辑',\n 'components.EditableText.save': '保存',\n 'components.EditableText.cancel': '取消',\n 'components.ColumnSetting.title': '列设置',\n 'components.ColumnSetting.selectAll': '全选',\n 'components.ColumnSetting.reset': '重置',\n\n 'validation.rule.number.message': '请输入数字',\n 'validation.rule.floatNumber.message': '请输入数字',\n 'validation.rule.email.message': '请输入正确的邮箱地址',\n 'validation.rule.ip.message': '请输入正确的ip地址',\n 'validation.rule.chineseMobile.message': '请输入正确的手机号',\n 'validation.rule.password.message': '8-16位密码,数字、字母、符号至少包含两种',\n 'validation.rule.buildRule.includeMandatory': 'include选项中至少有一个字段为true',\n 'validation.rule.buildRule.messageFormat': '支持{{content}}',\n 'validation.rule.buildRule.startsWithFormat': `,以{{prefix}}开头`,\n 'validation.rule.buildRule.minLength': `,至少{{min}}字符`,\n 'validation.rule.buildRule.maxLength': `,{{max}}字符以内`,\n 'validation.rule.buildRule.rangeLength': `,{{min}}~{{max}}个字符`,\n 'validation.rule.buildRule.token.separator': '、',\n 'validation.rule.buildRule.token.chinese': '汉字',\n 'validation.rule.buildRule.token.chinesePunctuation': '中文标点',\n 'validation.rule.buildRule.token.letter': '字母',\n 'validation.rule.buildRule.token.lowerLetter': '小写字母',\n 'validation.rule.buildRule.token.upperLetter': '大写字母',\n 'validation.rule.buildRule.token.number': '数字',\n 'hooks.useUserMedia.microphone': '麦克风',\n 'hooks.useUserMedia.camera': '摄像头',\n 'hooks.featureName.microphone': '语音',\n 'hooks.featureName.camera': '视频',\n 'hooks.useUserMedia.disabledWarning': '用户媒体已禁用',\n 'hooks.useUserMedia.isRecordingNow': '用户媒体正在录制,不可操作',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}}权限',\n 'hooks.useUserMedia.requestTip1': '浏览器正在申请{{deviceType}}权限,请点击左侧弹窗的“访问该网站时允许”按钮。',\n 'hooks.useUserMedia.requestTip2': '请勿点击“一律不允许”按钮,否则将无法使用{{featureName}}相关功能。',\n 'hooks.useUserMedia.deniedPermission': '您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n '请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。',\n 'hooks.useUserMedia.notSupport': '当前浏览器不支持录制语音',\n 'hooks.useUserMedia.soundDetectTitle': '声音检测到问题',\n 'hooks.useUserMedia.soundDetectDescription':\n '似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。',\n 'hooks.useUserMedia.chooseMicrophoneDevice': '请重新选择音频设备',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': '记住默认设备?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': '请按照以下步骤保存默认音频设备,以便下次使用时自动选择。',\n 'hooks.useStompSocket.connectError': '连接失败,请稍后重试',\n 'hooks.useStompSocket.serverDisconnected': '服务端已断开连接',\n} as const;\nexport default zhCN;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,SAAS;EAChD,qCAAqC,EAAE,mBAAmB;EAC1D,8BAA8B,EAAE,IAAI;EACpC,8BAA8B,EAAE,IAAI;EACpC,gCAAgC,EAAE,IAAI;EACtC,gCAAgC,EAAE,KAAK;EACvC,oCAAoC,EAAE,IAAI;EAC1C,gCAAgC,EAAE,IAAI;EAEtC,gCAAgC,EAAE,OAAO;EACzC,qCAAqC,EAAE,OAAO;EAC9C,+BAA+B,EAAE,YAAY;EAC7C,4BAA4B,EAAE,YAAY;EAC1C,uCAAuC,EAAE,WAAW;EACpD,kCAAkC,EAAE,wBAAwB;EAC5D,4CAA4C,EAAE,wBAAwB;EACtE,yCAAyC,EAAE,eAAe;EAC1D,4CAA4C,sCAAkB;EAC9D,qCAAqC,yCAAgB;EACrD,qCAAqC,yCAAgB;EACrD,uCAAuC,2CAAuB;EAC9D,2CAA2C,EAAE,GAAG;EAChD,yCAAyC,EAAE,IAAI;EAC/C,oDAAoD,EAAE,MAAM;EAC5D,wCAAwC,EAAE,IAAI;EAC9C,6CAA6C,EAAE,MAAM;EACrD,6CAA6C,EAAE,MAAM;EACrD,wCAAwC,EAAE,IAAI;EAC9C,+BAA+B,EAAE,KAAK;EACtC,2BAA2B,EAAE,KAAK;EAClC,8BAA8B,EAAE,IAAI;EACpC,0BAA0B,EAAE,IAAI;EAChC,oCAAoC,EAAE,SAAS;EAC/C,mCAAmC,EAAE,eAAe;EACpD,qCAAqC,EAAE,kBAAkB;EACzD,gCAAgC,EAAE,+CAA+C;EACjF,gCAAgC,EAAE,2CAA2C;EAC7E,qCAAqC,EAAE,kDAAkD;EACzF,0CAA0C,EACxC,6CAA6C;EAC/C,+BAA+B,EAAE,cAAc;EAC/C,qCAAqC,EAAE,SAAS;EAChD,2CAA2C,EACzC,2CAA2C;EAC7C,2CAA2C,EAAE,WAAW;EACxD,+CAA+C,EAAE,SAAS;EAC1D,kDAAkD,EAAE,8BAA8B;EAClF,mCAAmC,EAAE,YAAY;EACjD,yCAAyC,EAAE;AAC7C,CAAU;AACV,eAAeA,IAAI"}
1
+ {"version":3,"names":["zhCN"],"sources":["../../../src/locales/langs/zh-CN.ts"],"sourcesContent":["const zhCN = {\n 'components.EditableText.requiredMsg': '请输入文本内容',\n 'components.EditableText.placeholder': '输入文本内容,按回车或点击确定按钮',\n 'components.EditableText.edit': '编辑',\n 'components.EditableText.save': '保存',\n 'components.EditableText.cancel': '取消',\n 'components.ColumnSetting.title': '列设置',\n 'components.ColumnSetting.selectAll': '全选',\n 'components.ColumnSetting.reset': '重置',\n\n 'validation.rule.number.message': '请输入数字',\n 'validation.rule.floatNumber.message': '请输入数字',\n 'validation.rule.email.message': '请输入正确的邮箱地址',\n 'validation.rule.ip.message': '请输入正确的ip地址',\n 'validation.rule.chineseMobile.message': '请输入正确的手机号',\n 'validation.rule.password.message': '8-16位密码,数字、字母、符号至少包含两种',\n 'validation.rule.buildRule.includeMandatory': 'include选项中至少有一个字段为true',\n 'validation.rule.buildRule.messageFormat': '支持{{content}}',\n 'validation.rule.buildRule.startsWithFormat': `,以{{prefix}}开头`,\n 'validation.rule.buildRule.minLength': `,至少{{min}}字符`,\n 'validation.rule.buildRule.maxLength': `,{{max}}字符以内`,\n 'validation.rule.buildRule.rangeLength': `,{{min}}~{{max}}个字符`,\n 'validation.rule.buildRule.token.separator': '、',\n 'validation.rule.buildRule.token.delimiter': '',\n 'validation.rule.buildRule.token.chinese': '汉字',\n 'validation.rule.buildRule.token.chinesePunctuation': '中文标点',\n 'validation.rule.buildRule.token.letter': '字母',\n 'validation.rule.buildRule.token.lowerLetter': '小写字母',\n 'validation.rule.buildRule.token.upperLetter': '大写字母',\n 'validation.rule.buildRule.token.number': '数字',\n 'validation.rule.buildRule.token.specialChars': '特殊字符{{-value}}',\n 'hooks.useUserMedia.microphone': '麦克风',\n 'hooks.useUserMedia.camera': '摄像头',\n 'hooks.featureName.microphone': '语音',\n 'hooks.featureName.camera': '视频',\n 'hooks.useUserMedia.disabledWarning': '用户媒体已禁用',\n 'hooks.useUserMedia.isRecordingNow': '用户媒体正在录制,不可操作',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}}权限',\n 'hooks.useUserMedia.requestTip1': '浏览器正在申请{{deviceType}}权限,请点击左侧弹窗的“访问该网站时允许”按钮。',\n 'hooks.useUserMedia.requestTip2': '请勿点击“一律不允许”按钮,否则将无法使用{{featureName}}相关功能。',\n 'hooks.useUserMedia.deniedPermission': '您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n '请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。',\n 'hooks.useUserMedia.notSupport': '当前浏览器不支持录制语音',\n 'hooks.useUserMedia.soundDetectTitle': '声音检测到问题',\n 'hooks.useUserMedia.soundDetectDescription':\n '似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。',\n 'hooks.useUserMedia.chooseMicrophoneDevice': '请重新选择音频设备',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': '记住默认设备?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': '请按照以下步骤保存默认音频设备,以便下次使用时自动选择。',\n 'hooks.useStompSocket.connectError': '连接失败,请稍后重试',\n 'hooks.useStompSocket.serverDisconnected': '服务端已断开连接',\n} as const;\nexport default zhCN;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,SAAS;EAChD,qCAAqC,EAAE,mBAAmB;EAC1D,8BAA8B,EAAE,IAAI;EACpC,8BAA8B,EAAE,IAAI;EACpC,gCAAgC,EAAE,IAAI;EACtC,gCAAgC,EAAE,KAAK;EACvC,oCAAoC,EAAE,IAAI;EAC1C,gCAAgC,EAAE,IAAI;EAEtC,gCAAgC,EAAE,OAAO;EACzC,qCAAqC,EAAE,OAAO;EAC9C,+BAA+B,EAAE,YAAY;EAC7C,4BAA4B,EAAE,YAAY;EAC1C,uCAAuC,EAAE,WAAW;EACpD,kCAAkC,EAAE,wBAAwB;EAC5D,4CAA4C,EAAE,wBAAwB;EACtE,yCAAyC,EAAE,eAAe;EAC1D,4CAA4C,sCAAkB;EAC9D,qCAAqC,yCAAgB;EACrD,qCAAqC,yCAAgB;EACrD,uCAAuC,2CAAuB;EAC9D,2CAA2C,EAAE,GAAG;EAChD,2CAA2C,EAAE,EAAE;EAC/C,yCAAyC,EAAE,IAAI;EAC/C,oDAAoD,EAAE,MAAM;EAC5D,wCAAwC,EAAE,IAAI;EAC9C,6CAA6C,EAAE,MAAM;EACrD,6CAA6C,EAAE,MAAM;EACrD,wCAAwC,EAAE,IAAI;EAC9C,8CAA8C,EAAE,gBAAgB;EAChE,+BAA+B,EAAE,KAAK;EACtC,2BAA2B,EAAE,KAAK;EAClC,8BAA8B,EAAE,IAAI;EACpC,0BAA0B,EAAE,IAAI;EAChC,oCAAoC,EAAE,SAAS;EAC/C,mCAAmC,EAAE,eAAe;EACpD,qCAAqC,EAAE,kBAAkB;EACzD,gCAAgC,EAAE,+CAA+C;EACjF,gCAAgC,EAAE,2CAA2C;EAC7E,qCAAqC,EAAE,kDAAkD;EACzF,0CAA0C,EACxC,6CAA6C;EAC/C,+BAA+B,EAAE,cAAc;EAC/C,qCAAqC,EAAE,SAAS;EAChD,2CAA2C,EACzC,2CAA2C;EAC7C,2CAA2C,EAAE,WAAW;EACxD,+CAA+C,EAAE,SAAS;EAC1D,kDAAkD,EAAE,8BAA8B;EAClF,mCAAmC,EAAE,YAAY;EACjD,yCAAyC,EAAE;AAC7C,CAAU;AACV,eAAeA,IAAI"}
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { TagProps } from 'antd';
3
3
  import type { OverflowProps } from 'rc-overflow';
4
- export interface OverflowTagsProps<T extends Record<string, unknown> = Record<string, unknown>> extends Omit<OverflowProps<T>, 'renderItem'> {
4
+ export interface OverflowTagsProps<T> extends Omit<OverflowProps<T>, 'renderItem'> {
5
5
  /**
6
6
  * **CN**: 标签集合的数据
7
7
  *
@@ -27,25 +27,23 @@ export interface OverflowTagsProps<T extends Record<string, unknown> = Record<st
27
27
  */
28
28
  renderTag?: OverflowProps<T>['renderItem'];
29
29
  /**
30
- * **EN**: Custom properties for the default tag rendering function, returning `TagProps`
30
+ * **EN**: Custom properties for the tag component
31
31
  *
32
- * **CN**: 对于默认的标签渲染函数,自定义标签的属性,返回`TagProps`
32
+ * **CN**: 自定义标签的组件属性
33
33
  */
34
- getTagProps?: (tag: T, tags: T[]) => TagProps;
35
- /**
36
- * **EN**: Custom properties for the tag component, if `renderTag` is also specified, the latter
37
- * will override the former
38
- *
39
- * **CN**: 自定义标签的组件属性,如果同时指定了`renderTag`,则后者会覆盖前者
40
- */
41
- tagProps?: TagProps;
34
+ tagProps?: TagProps | ((tag: T, options: {
35
+ tags: T[];
36
+ }) => TagProps);
42
37
  /**
43
38
  * **EN**: When the number of tags exceeds the maximum display count, an ellipsis tag will be
44
39
  * shown. This property is used to set the style of the ellipsis tag.
45
40
  *
46
41
  * **CN**: 当标签数量超过最大显示数量时,会显示省略号的标签,此属性用于设置省略号标签的样式
47
42
  */
48
- ellipsisTagProps?: TagProps;
43
+ ellipsisTagProps?: TagProps | ((tag: T, options: {
44
+ omittedItems: T[];
45
+ allTags: T[];
46
+ }) => TagProps);
49
47
  /**
50
48
  * **EN**: Whether to use random colors, default is `false`. Note that the tag object can also
51
49
  * contain a `color` property to specify the color, and the latter takes precedence.
@@ -70,5 +68,5 @@ export interface OverflowTagsProps<T extends Record<string, unknown> = Record<st
70
68
  * ellipsisTagProps={{ color: 'grey' }}
71
69
  * />;
72
70
  */
73
- declare const OverflowTags: <T extends Record<string, any>>(props: OverflowTagsProps<T>) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
71
+ declare const OverflowTags: <T>(props: OverflowTagsProps<T>) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
74
72
  export default OverflowTags;
@@ -45,7 +45,6 @@ var OverflowTags = (props) => {
45
45
  randomColors,
46
46
  getTagName: getTagNameInProps,
47
47
  getTagKey,
48
- getTagProps: getTagPropsInProps,
49
48
  tagProps,
50
49
  ellipsisTagProps,
51
50
  className,
@@ -60,21 +59,26 @@ var OverflowTags = (props) => {
60
59
  () => import_internal.PresetColors.filter((c) => !["lime", "yellow", "magenta"].includes(c)).map((color) => token[`${color}-3`]),
61
60
  [token]
62
61
  );
62
+ const getValue = (0, import_react.useCallback)((tag, field) => {
63
+ if (tag != null && typeof tag === "object") {
64
+ const record = tag;
65
+ return record[field];
66
+ }
67
+ return void 0;
68
+ }, []);
63
69
  const getTagName = (0, import_react.useCallback)(
64
70
  (tag) => {
65
- return getTagNameInProps ? getTagNameInProps(tag) : tag.label ?? tag.name;
71
+ return getTagNameInProps ? getTagNameInProps(tag) : getValue(tag, "label") ?? getValue(tag, "name") ?? (tag == null ? void 0 : tag.toString());
66
72
  },
67
- [getTagNameInProps]
73
+ [getTagNameInProps, getValue]
68
74
  );
69
75
  const renderTag = (item) => {
70
- const customProps = getTagPropsInProps == null ? void 0 : getTagPropsInProps(item, tags);
71
76
  return /* @__PURE__ */ React.createElement(
72
77
  import_antd.Tag,
73
78
  {
74
- ...tagProps,
75
- icon: item.icon,
76
- color: randomColors ? colors[(0, import_math.random)(0, colors.length - 1)] : item.color ?? "default",
77
- ...customProps
79
+ icon: getValue(item, "icon"),
80
+ color: randomColors ? colors[(0, import_math.random)(0, colors.length - 1)] : getValue(item, "color") || "default",
81
+ ...typeof tagProps === "function" ? tagProps(item, { tags }) : tagProps
78
82
  },
79
83
  getTagName(item)
80
84
  );
@@ -93,12 +97,20 @@ var OverflowTags = (props) => {
93
97
  menu: {
94
98
  items: omittedItems.map((tag) => ({
95
99
  type: "item",
96
- key: getTagKey ? getTagKey(tag) : tag.value ?? tag.id ?? getTagName(tag),
100
+ key: getTagKey ? getTagKey(tag) : getValue(tag, "value") ?? getValue(tag, "id") ?? getTagName(tag),
97
101
  label: getTagName(tag)
98
102
  }))
99
103
  }
100
104
  },
101
- /* @__PURE__ */ React.createElement(import_antd.Tag, { ...ellipsisTagProps }, "+ ", omittedItems.length, "...")
105
+ /* @__PURE__ */ React.createElement(
106
+ import_antd.Tag,
107
+ {
108
+ ...typeof ellipsisTagProps === "function" ? ellipsisTagProps(omittedItems[0], { omittedItems, allTags: tags }) : ellipsisTagProps
109
+ },
110
+ "+ ",
111
+ omittedItems.length,
112
+ "..."
113
+ )
102
114
  ),
103
115
  ...restProps
104
116
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/OverflowTags/index.tsx"],
4
- "sourcesContent": ["import type { ReactNode } from 'react';\nimport { useCallback, useContext, useMemo } from 'react';\nimport type { TagProps } from 'antd';\nimport { ConfigProvider, Dropdown, Tag, theme } from 'antd';\nimport { PresetColors } from 'antd/es/theme/internal';\nimport classNames from 'classnames';\nimport type { OverflowProps } from 'rc-overflow';\nimport Overflow from 'rc-overflow';\nimport { random } from '../../utils/math';\nimport useStyle from './style';\n\nexport interface OverflowTagsProps<T extends Record<string, unknown> = Record<string, unknown>>\n extends Omit<OverflowProps<T>, 'renderItem'> {\n /**\n * **CN**: 标签集合的数据\n *\n * **EN**: Data collection of tags\n */\n tags: T[] | undefined;\n /**\n * **EN**: Function to get the tag name, default is `tag.label` or `tag.name`\n *\n * **CN**: 获取标签名称的函数,默认取`tag.label`或`tag.name`\n */\n getTagName?: (tag: T) => ReactNode;\n /**\n * **EN**: Function to get the unique identifier of the tag, default is `tag.value` or `tag.id`\n *\n * **CN**: 获取标签唯一标识的函数,默认取`tag.value`或`tag.id`\n */\n getTagKey?: (tag: T) => React.Key;\n\n /**\n * **EN**: Custom tag rendering function\n *\n * **CN**: 标签渲染函数\n */\n renderTag?: OverflowProps<T>['renderItem'];\n /**\n * **EN**: Custom properties for the default tag rendering function, returning `TagProps`\n *\n * **CN**: 对于默认的标签渲染函数,自定义标签的属性,返回`TagProps`\n */\n getTagProps?: (tag: T, tags: T[]) => TagProps;\n /**\n * **EN**: Custom properties for the tag component, if `renderTag` is also specified, the latter\n * will override the former\n *\n * **CN**: 自定义标签的组件属性,如果同时指定了`renderTag`,则后者会覆盖前者\n */\n tagProps?: TagProps;\n /**\n * **EN**: When the number of tags exceeds the maximum display count, an ellipsis tag will be\n * shown. This property is used to set the style of the ellipsis tag.\n *\n * **CN**: 当标签数量超过最大显示数量时,会显示省略号的标签,此属性用于设置省略号标签的样式\n */\n ellipsisTagProps?: TagProps;\n /**\n * **EN**: Whether to use random colors, default is `false`. Note that the tag object can also\n * contain a `color` property to specify the color, and the latter takes precedence.\n *\n * **CN**: 是否使用随机颜色,默认`false`。注意,tag对象还可以包含`color`属性来指定颜色,而且后者优先级更高。\n */\n randomColors?: boolean;\n}\n\n/**\n * - **EN:** Overflow tags component, used to display a collection of tags that can overflow and be\n * truncated. It supports displaying tags in a dropdown when the number of tags exceeds the\n * maximum display count. It also supports custom tag rendering and properties.\n * - **CN:** 溢出标签组件,用于显示一组可以溢出和截断的标签集合。当标签数量超过最大显示数量时,支持在下拉菜单中显示标签。还支持自定义标签渲染和属性。\n *\n * @example\n * <OverflowTags\n * tags={[\n * { value: 1, label: 'Tag1', icon: <Icon1 /> },\n * { value: 2, label: 'Tag2', icon: <Icon2 /> },\n * ]}\n * tagProps={{ color: 'blue' }}\n * ellipsisTagProps={{ color: 'grey' }}\n * />;\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst OverflowTags = <T extends Record<string, any>>(props: OverflowTagsProps<T>) => {\n const {\n tags = [],\n randomColors,\n getTagName: getTagNameInProps,\n getTagKey,\n getTagProps: getTagPropsInProps,\n tagProps,\n ellipsisTagProps,\n className,\n prefixCls: prefixClsInProps,\n ...restProps\n } = props;\n const { token } = theme.useToken();\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const prefixCls = getPrefixCls('easy-overflow-tags', prefixClsInProps);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n\n const colors = useMemo(\n () => PresetColors.filter((c) => !['lime', 'yellow', 'magenta'].includes(c)).map((color) => token[`${color}-3`]),\n [token]\n );\n const getTagName = useCallback(\n (tag: T) => {\n return getTagNameInProps ? getTagNameInProps(tag) : (tag.label ?? tag.name);\n },\n [getTagNameInProps]\n );\n const renderTag = (item: T) => {\n const customProps = getTagPropsInProps?.(item, tags);\n return (\n <Tag\n {...tagProps}\n icon={item.icon}\n color={randomColors ? colors[random(0, colors.length - 1)] : (item.color ?? 'default')}\n {...customProps}\n >\n {getTagName(item)}\n </Tag>\n );\n };\n\n return wrapCSSVar(\n <Overflow<T>\n className={classNames(hashId, cssVarCls, prefixCls, className)}\n data={tags}\n maxCount=\"responsive\"\n renderItem={renderTag}\n renderRest={(omittedItems) => (\n <Dropdown\n menu={{\n items: omittedItems.map((tag) => ({\n type: 'item',\n key: getTagKey ? getTagKey(tag) : (tag.value ?? tag.id ?? getTagName(tag)),\n label: getTagName(tag),\n })),\n }}\n >\n <Tag {...ellipsisTagProps}>+ {omittedItems.length}...</Tag>\n </Dropdown>\n )}\n {...restProps}\n />\n );\n};\n\nexport default OverflowTags;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiD;AAEjD,kBAAqD;AACrD,sBAA6B;AAC7B,wBAAuB;AAEvB,yBAAqB;AACrB,kBAAuB;AACvB,mBAAqB;AA2ErB,IAAM,eAAe,CAAgC,UAAgC;AACnF,QAAM;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,EAAE,MAAM,IAAI,kBAAM,SAAS;AACjC,QAAM,EAAE,aAAa,QAAI,yBAAW,2BAAe,aAAa;AAChE,QAAM,YAAY,aAAa,sBAAsB,gBAAgB;AACrE,QAAM,CAAC,YAAY,QAAQ,SAAS,QAAI,aAAAA,SAAS,SAAS;AAE1D,QAAM,aAAS;AAAA,IACb,MAAM,6BAAa,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,UAAU,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,MAAM,GAAG,SAAS,CAAC;AAAA,IAC/G,CAAC,KAAK;AAAA,EACR;AACA,QAAM,iBAAa;AAAA,IACjB,CAAC,QAAW;AACV,aAAO,oBAAoB,kBAAkB,GAAG,IAAK,IAAI,SAAS,IAAI;AAAA,IACxE;AAAA,IACA,CAAC,iBAAiB;AAAA,EACpB;AACA,QAAM,YAAY,CAAC,SAAY;AAC7B,UAAM,cAAc,yDAAqB,MAAM;AAC/C,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,MAAM,KAAK;AAAA,QACX,OAAO,eAAe,WAAO,oBAAO,GAAG,OAAO,SAAS,CAAC,CAAC,IAAK,KAAK,SAAS;AAAA,QAC3E,GAAG;AAAA;AAAA,MAEH,WAAW,IAAI;AAAA,IAClB;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL;AAAA,MAAC,mBAAAC;AAAA,MAAA;AAAA,QACC,eAAW,kBAAAC,SAAW,QAAQ,WAAW,WAAW,SAAS;AAAA,QAC7D,MAAM;AAAA,QACN,UAAS;AAAA,QACT,YAAY;AAAA,QACZ,YAAY,CAAC,iBACX;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,cACJ,OAAO,aAAa,IAAI,CAAC,SAAS;AAAA,gBAChC,MAAM;AAAA,gBACN,KAAK,YAAY,UAAU,GAAG,IAAK,IAAI,SAAS,IAAI,MAAM,WAAW,GAAG;AAAA,gBACxE,OAAO,WAAW,GAAG;AAAA,cACvB,EAAE;AAAA,YACJ;AAAA;AAAA,UAEA,oCAAC,mBAAK,GAAG,oBAAkB,MAAG,aAAa,QAAO,KAAG;AAAA,QACvD;AAAA,QAED,GAAG;AAAA;AAAA,IACN;AAAA,EACF;AACF;AAEA,IAAO,uBAAQ;",
4
+ "sourcesContent": ["import type { ReactNode } from 'react';\nimport { useCallback, useContext, useMemo } from 'react';\nimport type { TagProps } from 'antd';\nimport { ConfigProvider, Dropdown, Tag, theme } from 'antd';\nimport { PresetColors } from 'antd/es/theme/internal';\nimport classNames from 'classnames';\nimport type { OverflowProps } from 'rc-overflow';\nimport Overflow from 'rc-overflow';\nimport { random } from '../../utils/math';\nimport useStyle from './style';\n\nexport interface OverflowTagsProps<T> extends Omit<OverflowProps<T>, 'renderItem'> {\n /**\n * **CN**: 标签集合的数据\n *\n * **EN**: Data collection of tags\n */\n tags: T[] | undefined;\n /**\n * **EN**: Function to get the tag name, default is `tag.label` or `tag.name`\n *\n * **CN**: 获取标签名称的函数,默认取`tag.label`或`tag.name`\n */\n getTagName?: (tag: T) => ReactNode;\n /**\n * **EN**: Function to get the unique identifier of the tag, default is `tag.value` or `tag.id`\n *\n * **CN**: 获取标签唯一标识的函数,默认取`tag.value`或`tag.id`\n */\n getTagKey?: (tag: T) => React.Key;\n\n /**\n * **EN**: Custom tag rendering function\n *\n * **CN**: 标签渲染函数\n */\n renderTag?: OverflowProps<T>['renderItem'];\n /**\n * **EN**: Custom properties for the tag component\n *\n * **CN**: 自定义标签的组件属性\n */\n tagProps?: TagProps | ((tag: T, options: { tags: T[] }) => TagProps);\n /**\n * **EN**: When the number of tags exceeds the maximum display count, an ellipsis tag will be\n * shown. This property is used to set the style of the ellipsis tag.\n *\n * **CN**: 当标签数量超过最大显示数量时,会显示省略号的标签,此属性用于设置省略号标签的样式\n */\n ellipsisTagProps?: TagProps | ((tag: T, options: { omittedItems: T[]; allTags: T[] }) => TagProps);\n /**\n * **EN**: Whether to use random colors, default is `false`. Note that the tag object can also\n * contain a `color` property to specify the color, and the latter takes precedence.\n *\n * **CN**: 是否使用随机颜色,默认`false`。注意,tag对象还可以包含`color`属性来指定颜色,而且后者优先级更高。\n */\n randomColors?: boolean;\n}\n\n/**\n * - **EN:** Overflow tags component, used to display a collection of tags that can overflow and be\n * truncated. It supports displaying tags in a dropdown when the number of tags exceeds the\n * maximum display count. It also supports custom tag rendering and properties.\n * - **CN:** 溢出标签组件,用于显示一组可以溢出和截断的标签集合。当标签数量超过最大显示数量时,支持在下拉菜单中显示标签。还支持自定义标签渲染和属性。\n *\n * @example\n * <OverflowTags\n * tags={[\n * { value: 1, label: 'Tag1', icon: <Icon1 /> },\n * { value: 2, label: 'Tag2', icon: <Icon2 /> },\n * ]}\n * tagProps={{ color: 'blue' }}\n * ellipsisTagProps={{ color: 'grey' }}\n * />;\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst OverflowTags = <T,>(props: OverflowTagsProps<T>) => {\n const {\n tags = [],\n randomColors,\n getTagName: getTagNameInProps,\n getTagKey,\n tagProps,\n ellipsisTagProps,\n className,\n prefixCls: prefixClsInProps,\n ...restProps\n } = props;\n const { token } = theme.useToken();\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const prefixCls = getPrefixCls('easy-overflow-tags', prefixClsInProps);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n\n const colors = useMemo(\n () => PresetColors.filter((c) => !['lime', 'yellow', 'magenta'].includes(c)).map((color) => token[`${color}-3`]),\n [token]\n );\n const getValue = useCallback((tag: T | undefined, field: string) => {\n if (tag != null && typeof tag === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const record = tag as Record<string, any>;\n return record[field];\n }\n return undefined;\n }, []);\n const getTagName = useCallback(\n (tag: T) => {\n return getTagNameInProps\n ? getTagNameInProps(tag)\n : (getValue(tag, 'label') ?? getValue(tag, 'name') ?? tag?.toString());\n },\n [getTagNameInProps, getValue]\n );\n const renderTag = (item: T) => {\n return (\n <Tag\n icon={getValue(item, 'icon')}\n color={randomColors ? colors[random(0, colors.length - 1)] : getValue(item, 'color') || 'default'}\n {...(typeof tagProps === 'function' ? tagProps(item, { tags }) : tagProps)}\n >\n {getTagName(item)}\n </Tag>\n );\n };\n\n return wrapCSSVar(\n <Overflow<T>\n className={classNames(hashId, cssVarCls, prefixCls, className)}\n data={tags}\n maxCount=\"responsive\"\n renderItem={renderTag}\n renderRest={(omittedItems) => (\n <Dropdown\n menu={{\n items: omittedItems.map((tag) => ({\n type: 'item',\n key: getTagKey ? getTagKey(tag) : (getValue(tag, 'value') ?? getValue(tag, 'id') ?? getTagName(tag)),\n label: getTagName(tag),\n })),\n }}\n >\n <Tag\n {...(typeof ellipsisTagProps === 'function'\n ? ellipsisTagProps(omittedItems[0], { omittedItems, allTags: tags })\n : ellipsisTagProps)}\n >\n + {omittedItems.length}...\n </Tag>\n </Dropdown>\n )}\n {...restProps}\n />\n );\n};\n\nexport default OverflowTags;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiD;AAEjD,kBAAqD;AACrD,sBAA6B;AAC7B,wBAAuB;AAEvB,yBAAqB;AACrB,kBAAuB;AACvB,mBAAqB;AAmErB,IAAM,eAAe,CAAK,UAAgC;AACxD,QAAM;AAAA,IACJ,OAAO,CAAC;AAAA,IACR;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,EAAE,MAAM,IAAI,kBAAM,SAAS;AACjC,QAAM,EAAE,aAAa,QAAI,yBAAW,2BAAe,aAAa;AAChE,QAAM,YAAY,aAAa,sBAAsB,gBAAgB;AACrE,QAAM,CAAC,YAAY,QAAQ,SAAS,QAAI,aAAAA,SAAS,SAAS;AAE1D,QAAM,aAAS;AAAA,IACb,MAAM,6BAAa,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,UAAU,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,MAAM,GAAG,SAAS,CAAC;AAAA,IAC/G,CAAC,KAAK;AAAA,EACR;AACA,QAAM,eAAW,0BAAY,CAAC,KAAoB,UAAkB;AAClE,QAAI,OAAO,QAAQ,OAAO,QAAQ,UAAU;AAE1C,YAAM,SAAS;AACf,aAAO,OAAO,KAAK;AAAA,IACrB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACL,QAAM,iBAAa;AAAA,IACjB,CAAC,QAAW;AACV,aAAO,oBACH,kBAAkB,GAAG,IACpB,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,MAAM,MAAK,2BAAK;AAAA,IAC/D;AAAA,IACA,CAAC,mBAAmB,QAAQ;AAAA,EAC9B;AACA,QAAM,YAAY,CAAC,SAAY;AAC7B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,SAAS,MAAM,MAAM;AAAA,QAC3B,OAAO,eAAe,WAAO,oBAAO,GAAG,OAAO,SAAS,CAAC,CAAC,IAAI,SAAS,MAAM,OAAO,KAAK;AAAA,QACvF,GAAI,OAAO,aAAa,aAAa,SAAS,MAAM,EAAE,KAAK,CAAC,IAAI;AAAA;AAAA,MAEhE,WAAW,IAAI;AAAA,IAClB;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL;AAAA,MAAC,mBAAAC;AAAA,MAAA;AAAA,QACC,eAAW,kBAAAC,SAAW,QAAQ,WAAW,WAAW,SAAS;AAAA,QAC7D,MAAM;AAAA,QACN,UAAS;AAAA,QACT,YAAY;AAAA,QACZ,YAAY,CAAC,iBACX;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,cACJ,OAAO,aAAa,IAAI,CAAC,SAAS;AAAA,gBAChC,MAAM;AAAA,gBACN,KAAK,YAAY,UAAU,GAAG,IAAK,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,IAAI,KAAK,WAAW,GAAG;AAAA,gBAClG,OAAO,WAAW,GAAG;AAAA,cACvB,EAAE;AAAA,YACJ;AAAA;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACE,GAAI,OAAO,qBAAqB,aAC7B,iBAAiB,aAAa,CAAC,GAAG,EAAE,cAAc,SAAS,KAAK,CAAC,IACjE;AAAA;AAAA,YACL;AAAA,YACI,aAAa;AAAA,YAAO;AAAA,UACzB;AAAA,QACF;AAAA,QAED,GAAG;AAAA;AAAA,IACN;AAAA,EACF;AACF;AAEA,IAAO,uBAAQ;",
6
6
  "names": ["useStyle", "Overflow", "classNames"]
7
7
  }
@@ -145,7 +145,11 @@ function buildRuleMeta(options) {
145
145
  if (flags.special) {
146
146
  const specials = flags.special.filter((v) => !excludeSpecials.includes(v));
147
147
  symbols.push((0, import_escape_string_regexp.default)(specials.join("")));
148
- messages.push(specials.join(t(nameSeparator)));
148
+ messages.push(
149
+ t("validation.rule.buildRule.token.specialChars", {
150
+ value: specials.join(t("validation.rule.buildRule.token.delimiter"))
151
+ })
152
+ );
149
153
  }
150
154
  return {
151
155
  symbols,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/useValidatorBuilder.ts"],
4
- "sourcesContent": ["import { useMemo } from 'react';\nimport escape from 'escape-string-regexp';\nimport useT from './useT';\n\nconst nameSeparator = 'validation.rule.buildRule.token.separator';\n\n/**\n * - **EN:** Get a validation rule builder to build validation rules\n * - **CN:** 获取一个校验规则生成器,用来构建校验规则\n */\nconst useValidatorBuilder = () => {\n const t = useT();\n return useMemo(() => (props: BuilderOptions) => buildRule({ ...props, t }), [t]);\n};\n\n/**\n * - **EN:** Build regular expression rules dynamically, compatible with ant-design rules\n * - **CN:** 动态构建正则表达式规则,与 ant-design 的规则兼容\n */\nfunction buildRule(\n options: BuilderOptions & {\n /**\n * - **EN:** Internationalization function\n * - **CN:** 国际化函数\n */\n t: ReturnType<typeof useT>;\n }\n): ValidatorRule {\n const { allowed, startsWith, flags, t } = options;\n if (!Object.values(allowed).some((v) => v === true)) {\n throw new Error(t('validation.rule.buildRule.includeMandatory'));\n }\n\n const symbols: string[] = [];\n const messages: string[] = [];\n symbols.push(`^`);\n\n // Process startsWith rules\n if (startsWith) {\n const meta = buildRuleMeta({\n flags: startsWith,\n t,\n });\n symbols.push(`[${meta.symbols.join('')}]`);\n messages.push(\n t('validation.rule.buildRule.startsWithFormat', {\n prefix: meta.messages.join(t(nameSeparator)),\n })\n );\n }\n\n // Process allowed rules\n {\n const meta = buildRuleMeta({ flags: allowed, t });\n\n const min = allowed.min ?? 0;\n const max = allowed.max ?? 0; // 0 means unlimited\n\n // If there is startWith in the regular expression, the limited data amount needs to be reduced by 1\n const cMin = min && startsWith ? min - 1 : min;\n const cMax = max && startsWith ? max - 1 : max;\n\n symbols.push(`[${meta.symbols.join('')}]{${cMin},${cMax || ''}}`);\n if (meta.messages.length === 0) {\n messages.unshift(``);\n } else if (meta.messages.length === 1) {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n } else {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n }\n if (min && max) {\n messages.push(\n t('validation.rule.buildRule.rangeLength', {\n min,\n max,\n })\n );\n } else {\n if (min > 1) {\n messages.push(t('validation.rule.buildRule.minLength', { min }));\n }\n if (max) {\n messages.push(t('validation.rule.buildRule.maxLength', { max }));\n }\n }\n }\n symbols.push(`$`);\n\n let message = messages.join('');\n if (message.startsWith(t(nameSeparator))) {\n message = message.slice(1);\n }\n return {\n pattern: new RegExp(symbols.join(''), flags),\n message: t('validation.rule.buildRule.messageFormat', { content: message }),\n allowedOptions: allowed,\n startsWithOptions: startsWith,\n flags,\n };\n}\n\nfunction buildRuleMeta(options: { flags: RuleRegExpFlags; t: ReturnType<typeof useT> }): RuleMeta {\n const { flags, t } = options;\n const symbols: string[] = [];\n const messages: string[] = [];\n if (flags.chineseCharacter) {\n // Chinese characters\n symbols.push(`\\u4e00-\\u9fa5`);\n messages.push(t('validation.rule.buildRule.token.chinese'));\n }\n if (flags.chinesePunctuation) {\n // Chinese punctuation\n symbols.push(`\\u3000-\\u301e`);\n symbols.push(`\\u3021-\\u303f`);\n symbols.push(`\\uff00-\\uffef`);\n messages.push(t('validation.rule.buildRule.token.chinesePunctuation'));\n }\n if (flags.letter) {\n symbols.push(`a-zA-Z`);\n messages.push(t('validation.rule.buildRule.token.letter'));\n } else if (flags.lowerLetter) {\n symbols.push(`a-z`);\n messages.push(t('validation.rule.buildRule.token.lowerLetter'));\n } else if (flags.upperLetter) {\n symbols.push(`A-Z`);\n messages.push(t('validation.rule.buildRule.token.upperLetter'));\n }\n if (flags.number) {\n symbols.push(`0-9`);\n messages.push(t('validation.rule.buildRule.token.number'));\n }\n const excludeSpecials: string[] = [];\n if (flags.hyphen) {\n symbols.push(`\\\\-`);\n messages.push(`-`);\n excludeSpecials.push('-');\n }\n if (flags.underscore) {\n symbols.push(`_`);\n messages.push(`_`);\n excludeSpecials.push('_');\n }\n if (flags.special) {\n const specials = flags.special.filter((v) => !excludeSpecials.includes(v));\n symbols.push(escape(specials.join('')));\n messages.push(specials.join(t(nameSeparator)));\n }\n return {\n symbols,\n messages,\n };\n}\n\nexport interface BuilderOptions {\n /**\n * - **EN:** The rule of allowed characters\n * - **CN:** 允许字符的规则\n */\n allowed: RuleRegExpFlags;\n /**\n * - **EN:** The rule of the starting character\n * - **CN:** 开头字符的规则\n */\n startsWith?: Omit<RuleRegExpFlags, 'min' | 'max'>;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\nexport interface RuleRegExpFlags {\n /**\n * - **EN:** Include lowercase and uppercase Latin characters. If set to true, `lowerLetter` and\n * `upperLetter` option are not effective\n * - **CN:**: 包含大小写拉丁字符。如果设置为true,则`lowerLetter`和`upperLetter`属性不生效\n */\n\n letter?: boolean;\n /**\n * - **EN:** Include lowercase English letters\n * - **CN:**: 包含小写英文字符\n */\n lowerLetter?: boolean;\n /**\n * - **EN:** Include uppercase English letters\n * - **CN:**: 包含大写英文字符\n */\n upperLetter?: boolean;\n /**\n * - **EN:** Include Chinese characters\n * - **CN:** 包含中文字符\n */\n chineseCharacter?: boolean;\n /**\n * - **EN:** Include Chinese (full-width) punctuation\n * - **CN:** 包含中文(全角)标点符号\n */\n chinesePunctuation?: boolean;\n /**\n * - **EN:** Include numbers\n * - **CN:** 包含数字\n */\n number?: boolean;\n /**\n * - **EN:** Include hyphens (-)\n * - **CN:** 包含连字符(-)\n */\n hyphen?: boolean;\n /**\n * - **EN:** Include underscores (_)\n * - **CN:** 包含下划线(_)\n */\n underscore?: boolean;\n /**\n * - **EN:** Include specified special characters\n * - **CN:** 包含指定的特殊字符\n */\n special?: string[];\n /**\n * - **EN:** Minimum number of characters\n * - **CN:** 最小字符数量\n *\n * @default 1\n */\n min?: number;\n /**\n * - **EN:** Maximum number of characters\n * - **CN:** 最大字符数量\n */\n max?: number;\n}\n\nexport type StartsWithRegExpFlags = RuleRegExpFlags;\n\nexport interface ValidatorRule extends Validator {\n /**\n * - **EN:** The options of allowed characters\n * - **CN:** 允许字符的规则设置\n */\n allowedOptions: RuleRegExpFlags;\n /**\n * - **EN:** The options of the starting character\n * - **CN:** 开头字符的规则设置\n */\n startsWithOptions?: StartsWithRegExpFlags;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\ninterface RuleMeta {\n symbols: string[];\n messages: string[];\n}\n\nexport interface Validator {\n /**\n * - **EN:** Regular expression for verification\n * - **CN:** 校验正则表达式\n */\n pattern: RegExp;\n /**\n * - **EN:** Prompt message when verification fails\n * - **CN:** 校验失败时的提示信息\n */\n message: string;\n}\n\nexport default useValidatorBuilder;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useMemo } from 'react';\nimport escape from 'escape-string-regexp';\nimport useT from './useT';\n\nconst nameSeparator = 'validation.rule.buildRule.token.separator';\n\n/**\n * - **EN:** Get a validation rule builder to build validation rules\n * - **CN:** 获取一个校验规则生成器,用来构建校验规则\n */\nconst useValidatorBuilder = () => {\n const t = useT();\n return useMemo(() => (props: BuilderOptions) => buildRule({ ...props, t }), [t]);\n};\n\n/**\n * - **EN:** Build regular expression rules dynamically, compatible with ant-design rules\n * - **CN:** 动态构建正则表达式规则,与 ant-design 的规则兼容\n */\nfunction buildRule(\n options: BuilderOptions & {\n /**\n * - **EN:** Internationalization function\n * - **CN:** 国际化函数\n */\n t: ReturnType<typeof useT>;\n }\n): ValidatorRule {\n const { allowed, startsWith, flags, t } = options;\n if (!Object.values(allowed).some((v) => v === true)) {\n throw new Error(t('validation.rule.buildRule.includeMandatory'));\n }\n\n const symbols: string[] = [];\n const messages: string[] = [];\n symbols.push(`^`);\n\n // Process startsWith rules\n if (startsWith) {\n const meta = buildRuleMeta({\n flags: startsWith,\n t,\n });\n symbols.push(`[${meta.symbols.join('')}]`);\n messages.push(\n t('validation.rule.buildRule.startsWithFormat', {\n prefix: meta.messages.join(t(nameSeparator)),\n })\n );\n }\n\n // Process allowed rules\n {\n const meta = buildRuleMeta({ flags: allowed, t });\n\n const min = allowed.min ?? 0;\n const max = allowed.max ?? 0; // 0 means unlimited\n\n // If there is startWith in the regular expression, the limited data amount needs to be reduced by 1\n const cMin = min && startsWith ? min - 1 : min;\n const cMax = max && startsWith ? max - 1 : max;\n\n symbols.push(`[${meta.symbols.join('')}]{${cMin},${cMax || ''}}`);\n if (meta.messages.length === 0) {\n messages.unshift(``);\n } else if (meta.messages.length === 1) {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n } else {\n messages.unshift(`${meta.messages.join(t(nameSeparator))}`);\n }\n if (min && max) {\n messages.push(\n t('validation.rule.buildRule.rangeLength', {\n min,\n max,\n })\n );\n } else {\n if (min > 1) {\n messages.push(t('validation.rule.buildRule.minLength', { min }));\n }\n if (max) {\n messages.push(t('validation.rule.buildRule.maxLength', { max }));\n }\n }\n }\n symbols.push(`$`);\n\n let message = messages.join('');\n if (message.startsWith(t(nameSeparator))) {\n message = message.slice(1);\n }\n return {\n pattern: new RegExp(symbols.join(''), flags),\n message: t('validation.rule.buildRule.messageFormat', { content: message }),\n allowedOptions: allowed,\n startsWithOptions: startsWith,\n flags,\n };\n}\n\nfunction buildRuleMeta(options: { flags: RuleRegExpFlags; t: ReturnType<typeof useT> }): RuleMeta {\n const { flags, t } = options;\n const symbols: string[] = [];\n const messages: string[] = [];\n if (flags.chineseCharacter) {\n // Chinese characters\n symbols.push(`\\u4e00-\\u9fa5`);\n messages.push(t('validation.rule.buildRule.token.chinese'));\n }\n if (flags.chinesePunctuation) {\n // Chinese punctuation\n symbols.push(`\\u3000-\\u301e`);\n symbols.push(`\\u3021-\\u303f`);\n symbols.push(`\\uff00-\\uffef`);\n messages.push(t('validation.rule.buildRule.token.chinesePunctuation'));\n }\n if (flags.letter) {\n symbols.push(`a-zA-Z`);\n messages.push(t('validation.rule.buildRule.token.letter'));\n } else if (flags.lowerLetter) {\n symbols.push(`a-z`);\n messages.push(t('validation.rule.buildRule.token.lowerLetter'));\n } else if (flags.upperLetter) {\n symbols.push(`A-Z`);\n messages.push(t('validation.rule.buildRule.token.upperLetter'));\n }\n if (flags.number) {\n symbols.push(`0-9`);\n messages.push(t('validation.rule.buildRule.token.number'));\n }\n const excludeSpecials: string[] = [];\n if (flags.hyphen) {\n symbols.push(`\\\\-`);\n messages.push(`-`);\n excludeSpecials.push('-');\n }\n if (flags.underscore) {\n symbols.push(`_`);\n messages.push(`_`);\n excludeSpecials.push('_');\n }\n if (flags.special) {\n const specials = flags.special.filter((v) => !excludeSpecials.includes(v));\n symbols.push(escape(specials.join('')));\n messages.push(\n t('validation.rule.buildRule.token.specialChars', {\n value: specials.join(t('validation.rule.buildRule.token.delimiter')),\n })\n );\n }\n return {\n symbols,\n messages,\n };\n}\n\nexport interface BuilderOptions {\n /**\n * - **EN:** The rule of allowed characters\n * - **CN:** 允许字符的规则\n */\n allowed: RuleRegExpFlags;\n /**\n * - **EN:** The rule of the starting character\n * - **CN:** 开头字符的规则\n */\n startsWith?: Omit<RuleRegExpFlags, 'min' | 'max'>;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\nexport interface RuleRegExpFlags {\n /**\n * - **EN:** Include lowercase and uppercase Latin characters. If set to true, `lowerLetter` and\n * `upperLetter` option are not effective\n * - **CN:**: 包含大小写拉丁字符。如果设置为true,则`lowerLetter`和`upperLetter`属性不生效\n */\n\n letter?: boolean;\n /**\n * - **EN:** Include lowercase English letters\n * - **CN:**: 包含小写英文字符\n */\n lowerLetter?: boolean;\n /**\n * - **EN:** Include uppercase English letters\n * - **CN:**: 包含大写英文字符\n */\n upperLetter?: boolean;\n /**\n * - **EN:** Include Chinese characters\n * - **CN:** 包含中文字符\n */\n chineseCharacter?: boolean;\n /**\n * - **EN:** Include Chinese (full-width) punctuation\n * - **CN:** 包含中文(全角)标点符号\n */\n chinesePunctuation?: boolean;\n /**\n * - **EN:** Include numbers\n * - **CN:** 包含数字\n */\n number?: boolean;\n /**\n * - **EN:** Include hyphens (-)\n * - **CN:** 包含连字符(-)\n */\n hyphen?: boolean;\n /**\n * - **EN:** Include underscores (_)\n * - **CN:** 包含下划线(_)\n */\n underscore?: boolean;\n /**\n * - **EN:** Include specified special characters\n * - **CN:** 包含指定的特殊字符\n */\n special?: string[];\n /**\n * - **EN:** Minimum number of characters\n * - **CN:** 最小字符数量\n *\n * @default 1\n */\n min?: number;\n /**\n * - **EN:** Maximum number of characters\n * - **CN:** 最大字符数量\n */\n max?: number;\n}\n\nexport type StartsWithRegExpFlags = RuleRegExpFlags;\n\nexport interface ValidatorRule extends Validator {\n /**\n * - **EN:** The options of allowed characters\n * - **CN:** 允许字符的规则设置\n */\n allowedOptions: RuleRegExpFlags;\n /**\n * - **EN:** The options of the starting character\n * - **CN:** 开头字符的规则设置\n */\n startsWithOptions?: StartsWithRegExpFlags;\n /**\n * - **EN:** Regular expression flags\n * - **CN:** 正则表达式的标志\n */\n flags?: string;\n}\n\ninterface RuleMeta {\n symbols: string[];\n messages: string[];\n}\n\nexport interface Validator {\n /**\n * - **EN:** Regular expression for verification\n * - **CN:** 校验正则表达式\n */\n pattern: RegExp;\n /**\n * - **EN:** Prompt message when verification fails\n * - **CN:** 校验失败时的提示信息\n */\n message: string;\n}\n\nexport default useValidatorBuilder;\n"],
5
+ "mappings": "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",
6
6
  "names": ["useT", "escape"]
7
7
  }
@@ -25,12 +25,14 @@ export declare const resources: {
25
25
  readonly 'validation.rule.buildRule.maxLength': ", up to {{max}} characters";
26
26
  readonly 'validation.rule.buildRule.rangeLength': ", {{min}}~{{max}} characters";
27
27
  readonly 'validation.rule.buildRule.token.separator': ", ";
28
+ readonly 'validation.rule.buildRule.token.delimiter': "";
28
29
  readonly 'validation.rule.buildRule.token.chinese': "Chinese characters";
29
30
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "Chinese punctuation";
30
31
  readonly 'validation.rule.buildRule.token.letter': "letter";
31
32
  readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
32
33
  readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
33
34
  readonly 'validation.rule.buildRule.token.number': "number";
35
+ readonly 'validation.rule.buildRule.token.specialChars': "special characters ({{-value}})";
34
36
  readonly 'hooks.useUserMedia.microphone': "Microphone";
35
37
  readonly 'hooks.useUserMedia.camera': "Camera";
36
38
  readonly 'hooks.featureName.microphone': "Speech";
@@ -75,12 +77,14 @@ export declare const resources: {
75
77
  readonly 'validation.rule.buildRule.maxLength': ", up to {{max}} characters";
76
78
  readonly 'validation.rule.buildRule.rangeLength': ", {{min}}~{{max}} characters";
77
79
  readonly 'validation.rule.buildRule.token.separator': ", ";
80
+ readonly 'validation.rule.buildRule.token.delimiter': "";
78
81
  readonly 'validation.rule.buildRule.token.chinese': "Chinese characters";
79
82
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "Chinese punctuation";
80
83
  readonly 'validation.rule.buildRule.token.letter': "letter";
81
84
  readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
82
85
  readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
83
86
  readonly 'validation.rule.buildRule.token.number': "number";
87
+ readonly 'validation.rule.buildRule.token.specialChars': "special characters ({{-value}})";
84
88
  readonly 'hooks.useUserMedia.microphone': "Microphone";
85
89
  readonly 'hooks.useUserMedia.camera': "Camera";
86
90
  readonly 'hooks.featureName.microphone': "Speech";
@@ -125,12 +129,14 @@ export declare const resources: {
125
129
  readonly 'validation.rule.buildRule.maxLength': ",{{max}}字符以内";
126
130
  readonly 'validation.rule.buildRule.rangeLength': ",{{min}}~{{max}}个字符";
127
131
  readonly 'validation.rule.buildRule.token.separator': "、";
132
+ readonly 'validation.rule.buildRule.token.delimiter': "";
128
133
  readonly 'validation.rule.buildRule.token.chinese': "汉字";
129
134
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "中文标点";
130
135
  readonly 'validation.rule.buildRule.token.letter': "字母";
131
136
  readonly 'validation.rule.buildRule.token.lowerLetter': "小写字母";
132
137
  readonly 'validation.rule.buildRule.token.upperLetter': "大写字母";
133
138
  readonly 'validation.rule.buildRule.token.number': "数字";
139
+ readonly 'validation.rule.buildRule.token.specialChars': "特殊字符{{-value}}";
134
140
  readonly 'hooks.useUserMedia.microphone': "麦克风";
135
141
  readonly 'hooks.useUserMedia.camera': "摄像头";
136
142
  readonly 'hooks.featureName.microphone': "语音";
@@ -20,12 +20,14 @@ declare const enUS: {
20
20
  readonly 'validation.rule.buildRule.maxLength': ", up to {{max}} characters";
21
21
  readonly 'validation.rule.buildRule.rangeLength': ", {{min}}~{{max}} characters";
22
22
  readonly 'validation.rule.buildRule.token.separator': ", ";
23
+ readonly 'validation.rule.buildRule.token.delimiter': "";
23
24
  readonly 'validation.rule.buildRule.token.chinese': "Chinese characters";
24
25
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "Chinese punctuation";
25
26
  readonly 'validation.rule.buildRule.token.letter': "letter";
26
27
  readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
27
28
  readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
28
29
  readonly 'validation.rule.buildRule.token.number': "number";
30
+ readonly 'validation.rule.buildRule.token.specialChars': "special characters ({{-value}})";
29
31
  readonly 'hooks.useUserMedia.microphone': "Microphone";
30
32
  readonly 'hooks.useUserMedia.camera': "Camera";
31
33
  readonly 'hooks.featureName.microphone': "Speech";
@@ -44,12 +44,14 @@ var enUS = {
44
44
  "validation.rule.buildRule.maxLength": `, up to {{max}} characters`,
45
45
  "validation.rule.buildRule.rangeLength": `, {{min}}~{{max}} characters`,
46
46
  "validation.rule.buildRule.token.separator": ", ",
47
+ "validation.rule.buildRule.token.delimiter": "",
47
48
  "validation.rule.buildRule.token.chinese": "Chinese characters",
48
49
  "validation.rule.buildRule.token.chinesePunctuation": "Chinese punctuation",
49
50
  "validation.rule.buildRule.token.letter": "letter",
50
51
  "validation.rule.buildRule.token.lowerLetter": "lowercase letter",
51
52
  "validation.rule.buildRule.token.upperLetter": "uppercase letter",
52
53
  "validation.rule.buildRule.token.number": "number",
54
+ "validation.rule.buildRule.token.specialChars": "special characters ({{-value}})",
53
55
  "hooks.useUserMedia.microphone": "Microphone",
54
56
  "hooks.useUserMedia.camera": "Camera",
55
57
  "hooks.featureName.microphone": "Speech",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/locales/langs/en-US.ts"],
4
- "sourcesContent": ["const enUS = {\n 'components.EditableText.requiredMsg': 'Please enter text content',\n 'components.EditableText.placeholder': 'Please input text content, press Enter or click the OK button',\n 'components.EditableText.edit': 'Edit',\n 'components.EditableText.save': 'Save',\n 'components.EditableText.cancel': 'Cancel',\n 'components.ColumnSetting.title': 'Column Setting',\n 'components.ColumnSetting.selectAll': 'Select All',\n 'components.ColumnSetting.reset': 'Reset',\n\n 'validation.rule.number.message': 'Please enter a number',\n 'validation.rule.floatNumber.message': 'Please enter a number',\n 'validation.rule.email.message': 'Please enter the correct email address',\n 'validation.rule.ip.message': 'Please enter the correct ip address',\n 'validation.rule.chineseMobile.message': 'Please enter the correct mobile number',\n 'validation.rule.password.message': '8-16 digit password, at least two of numbers, letters, and symbols',\n 'validation.rule.buildRule.includeMandatory': 'At least one field in the include option is true',\n 'validation.rule.buildRule.messageFormat': 'Allow {{content}}',\n 'validation.rule.buildRule.startsWithFormat': `, start with {{prefix}}`,\n 'validation.rule.buildRule.minLength': `, at least {{min}} characters`,\n 'validation.rule.buildRule.maxLength': `, up to {{max}} characters`,\n 'validation.rule.buildRule.rangeLength': `, {{min}}~{{max}} characters`,\n 'validation.rule.buildRule.token.separator': ', ',\n 'validation.rule.buildRule.token.chinese': 'Chinese characters',\n 'validation.rule.buildRule.token.chinesePunctuation': 'Chinese punctuation',\n 'validation.rule.buildRule.token.letter': 'letter',\n 'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',\n 'validation.rule.buildRule.token.upperLetter': 'uppercase letter',\n 'validation.rule.buildRule.token.number': 'number',\n 'hooks.useUserMedia.microphone': 'Microphone',\n 'hooks.useUserMedia.camera': 'Camera',\n 'hooks.featureName.microphone': 'Speech',\n 'hooks.featureName.camera': 'Video',\n 'hooks.useUserMedia.disabledWarning': 'User media is disabled',\n 'hooks.useUserMedia.isRecordingNow': 'User media is currently recording and cannot be operated on',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}} Permission',\n 'hooks.useUserMedia.requestTip1':\n 'The browser is requesting {{deviceType}} permission. Please click the \"Allow when visiting this site\" button in the popup on the left.',\n 'hooks.useUserMedia.requestTip2':\n 'Please DO NOT click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.',\n 'hooks.useUserMedia.deniedPermission':\n 'You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n 'Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.',\n 'hooks.useUserMedia.notSupport': 'Current browser does not support audio recording',\n 'hooks.useUserMedia.soundDetectTitle': 'Sound Issue Detected',\n 'hooks.useUserMedia.soundDetectDescription':\n 'No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.',\n 'hooks.useUserMedia.chooseMicrophoneDevice': 'Please reselect the audio device',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': 'Remember default device?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip':\n 'Please follow these steps to save the default audio device for automatic selection next time.',\n 'hooks.useStompSocket.connectError': 'Connection failed, please try again later',\n 'hooks.useStompSocket.serverDisconnected': 'Server disconnected',\n} as const;\nexport default enUS;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAM,OAAO;AAAA,EACX,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,gCAAgC;AAAA,EAChC,gCAAgC;AAAA,EAChC,kCAAkC;AAAA,EAClC,kCAAkC;AAAA,EAClC,sCAAsC;AAAA,EACtC,kCAAkC;AAAA,EAElC,kCAAkC;AAAA,EAClC,uCAAuC;AAAA,EACvC,iCAAiC;AAAA,EACjC,8BAA8B;AAAA,EAC9B,yCAAyC;AAAA,EACzC,oCAAoC;AAAA,EACpC,8CAA8C;AAAA,EAC9C,2CAA2C;AAAA,EAC3C,8CAA8C;AAAA,EAC9C,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,yCAAyC;AAAA,EACzC,6CAA6C;AAAA,EAC7C,2CAA2C;AAAA,EAC3C,sDAAsD;AAAA,EACtD,0CAA0C;AAAA,EAC1C,+CAA+C;AAAA,EAC/C,+CAA+C;AAAA,EAC/C,0CAA0C;AAAA,EAC1C,iCAAiC;AAAA,EACjC,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,sCAAsC;AAAA,EACtC,qCAAqC;AAAA,EACrC,uCAAuC;AAAA,EACvC,kCACE;AAAA,EACF,kCACE;AAAA,EACF,uCACE;AAAA,EACF,4CACE;AAAA,EACF,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,6CACE;AAAA,EACF,6CAA6C;AAAA,EAC7C,iDAAiD;AAAA,EACjD,oDACE;AAAA,EACF,qCAAqC;AAAA,EACrC,2CAA2C;AAC7C;AACA,IAAO,gBAAQ;",
4
+ "sourcesContent": ["const enUS = {\n 'components.EditableText.requiredMsg': 'Please enter text content',\n 'components.EditableText.placeholder': 'Please input text content, press Enter or click the OK button',\n 'components.EditableText.edit': 'Edit',\n 'components.EditableText.save': 'Save',\n 'components.EditableText.cancel': 'Cancel',\n 'components.ColumnSetting.title': 'Column Setting',\n 'components.ColumnSetting.selectAll': 'Select All',\n 'components.ColumnSetting.reset': 'Reset',\n\n 'validation.rule.number.message': 'Please enter a number',\n 'validation.rule.floatNumber.message': 'Please enter a number',\n 'validation.rule.email.message': 'Please enter the correct email address',\n 'validation.rule.ip.message': 'Please enter the correct ip address',\n 'validation.rule.chineseMobile.message': 'Please enter the correct mobile number',\n 'validation.rule.password.message': '8-16 digit password, at least two of numbers, letters, and symbols',\n 'validation.rule.buildRule.includeMandatory': 'At least one field in the include option is true',\n 'validation.rule.buildRule.messageFormat': 'Allow {{content}}',\n 'validation.rule.buildRule.startsWithFormat': `, start with {{prefix}}`,\n 'validation.rule.buildRule.minLength': `, at least {{min}} characters`,\n 'validation.rule.buildRule.maxLength': `, up to {{max}} characters`,\n 'validation.rule.buildRule.rangeLength': `, {{min}}~{{max}} characters`,\n 'validation.rule.buildRule.token.separator': ', ',\n 'validation.rule.buildRule.token.delimiter': '',\n 'validation.rule.buildRule.token.chinese': 'Chinese characters',\n 'validation.rule.buildRule.token.chinesePunctuation': 'Chinese punctuation',\n 'validation.rule.buildRule.token.letter': 'letter',\n 'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',\n 'validation.rule.buildRule.token.upperLetter': 'uppercase letter',\n 'validation.rule.buildRule.token.number': 'number',\n 'validation.rule.buildRule.token.specialChars': 'special characters ({{-value}})',\n 'hooks.useUserMedia.microphone': 'Microphone',\n 'hooks.useUserMedia.camera': 'Camera',\n 'hooks.featureName.microphone': 'Speech',\n 'hooks.featureName.camera': 'Video',\n 'hooks.useUserMedia.disabledWarning': 'User media is disabled',\n 'hooks.useUserMedia.isRecordingNow': 'User media is currently recording and cannot be operated on',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}} Permission',\n 'hooks.useUserMedia.requestTip1':\n 'The browser is requesting {{deviceType}} permission. Please click the \"Allow when visiting this site\" button in the popup on the left.',\n 'hooks.useUserMedia.requestTip2':\n 'Please DO NOT click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.',\n 'hooks.useUserMedia.deniedPermission':\n 'You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n 'Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.',\n 'hooks.useUserMedia.notSupport': 'Current browser does not support audio recording',\n 'hooks.useUserMedia.soundDetectTitle': 'Sound Issue Detected',\n 'hooks.useUserMedia.soundDetectDescription':\n 'No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.',\n 'hooks.useUserMedia.chooseMicrophoneDevice': 'Please reselect the audio device',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': 'Remember default device?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip':\n 'Please follow these steps to save the default audio device for automatic selection next time.',\n 'hooks.useStompSocket.connectError': 'Connection failed, please try again later',\n 'hooks.useStompSocket.serverDisconnected': 'Server disconnected',\n} as const;\nexport default enUS;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAM,OAAO;AAAA,EACX,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,gCAAgC;AAAA,EAChC,gCAAgC;AAAA,EAChC,kCAAkC;AAAA,EAClC,kCAAkC;AAAA,EAClC,sCAAsC;AAAA,EACtC,kCAAkC;AAAA,EAElC,kCAAkC;AAAA,EAClC,uCAAuC;AAAA,EACvC,iCAAiC;AAAA,EACjC,8BAA8B;AAAA,EAC9B,yCAAyC;AAAA,EACzC,oCAAoC;AAAA,EACpC,8CAA8C;AAAA,EAC9C,2CAA2C;AAAA,EAC3C,8CAA8C;AAAA,EAC9C,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,yCAAyC;AAAA,EACzC,6CAA6C;AAAA,EAC7C,6CAA6C;AAAA,EAC7C,2CAA2C;AAAA,EAC3C,sDAAsD;AAAA,EACtD,0CAA0C;AAAA,EAC1C,+CAA+C;AAAA,EAC/C,+CAA+C;AAAA,EAC/C,0CAA0C;AAAA,EAC1C,gDAAgD;AAAA,EAChD,iCAAiC;AAAA,EACjC,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,sCAAsC;AAAA,EACtC,qCAAqC;AAAA,EACrC,uCAAuC;AAAA,EACvC,kCACE;AAAA,EACF,kCACE;AAAA,EACF,uCACE;AAAA,EACF,4CACE;AAAA,EACF,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,6CACE;AAAA,EACF,6CAA6C;AAAA,EAC7C,iDAAiD;AAAA,EACjD,oDACE;AAAA,EACF,qCAAqC;AAAA,EACrC,2CAA2C;AAC7C;AACA,IAAO,gBAAQ;",
6
6
  "names": []
7
7
  }
@@ -20,12 +20,14 @@ declare const zhCN: {
20
20
  readonly 'validation.rule.buildRule.maxLength': ",{{max}}字符以内";
21
21
  readonly 'validation.rule.buildRule.rangeLength': ",{{min}}~{{max}}个字符";
22
22
  readonly 'validation.rule.buildRule.token.separator': "、";
23
+ readonly 'validation.rule.buildRule.token.delimiter': "";
23
24
  readonly 'validation.rule.buildRule.token.chinese': "汉字";
24
25
  readonly 'validation.rule.buildRule.token.chinesePunctuation': "中文标点";
25
26
  readonly 'validation.rule.buildRule.token.letter': "字母";
26
27
  readonly 'validation.rule.buildRule.token.lowerLetter': "小写字母";
27
28
  readonly 'validation.rule.buildRule.token.upperLetter': "大写字母";
28
29
  readonly 'validation.rule.buildRule.token.number': "数字";
30
+ readonly 'validation.rule.buildRule.token.specialChars': "特殊字符{{-value}}";
29
31
  readonly 'hooks.useUserMedia.microphone': "麦克风";
30
32
  readonly 'hooks.useUserMedia.camera': "摄像头";
31
33
  readonly 'hooks.featureName.microphone': "语音";
@@ -44,12 +44,14 @@ var zhCN = {
44
44
  "validation.rule.buildRule.maxLength": `,{{max}}字符以内`,
45
45
  "validation.rule.buildRule.rangeLength": `,{{min}}~{{max}}个字符`,
46
46
  "validation.rule.buildRule.token.separator": "、",
47
+ "validation.rule.buildRule.token.delimiter": "",
47
48
  "validation.rule.buildRule.token.chinese": "汉字",
48
49
  "validation.rule.buildRule.token.chinesePunctuation": "中文标点",
49
50
  "validation.rule.buildRule.token.letter": "字母",
50
51
  "validation.rule.buildRule.token.lowerLetter": "小写字母",
51
52
  "validation.rule.buildRule.token.upperLetter": "大写字母",
52
53
  "validation.rule.buildRule.token.number": "数字",
54
+ "validation.rule.buildRule.token.specialChars": "特殊字符{{-value}}",
53
55
  "hooks.useUserMedia.microphone": "麦克风",
54
56
  "hooks.useUserMedia.camera": "摄像头",
55
57
  "hooks.featureName.microphone": "语音",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/locales/langs/zh-CN.ts"],
4
- "sourcesContent": ["const zhCN = {\n 'components.EditableText.requiredMsg': '请输入文本内容',\n 'components.EditableText.placeholder': '输入文本内容,按回车或点击确定按钮',\n 'components.EditableText.edit': '编辑',\n 'components.EditableText.save': '保存',\n 'components.EditableText.cancel': '取消',\n 'components.ColumnSetting.title': '列设置',\n 'components.ColumnSetting.selectAll': '全选',\n 'components.ColumnSetting.reset': '重置',\n\n 'validation.rule.number.message': '请输入数字',\n 'validation.rule.floatNumber.message': '请输入数字',\n 'validation.rule.email.message': '请输入正确的邮箱地址',\n 'validation.rule.ip.message': '请输入正确的ip地址',\n 'validation.rule.chineseMobile.message': '请输入正确的手机号',\n 'validation.rule.password.message': '8-16位密码,数字、字母、符号至少包含两种',\n 'validation.rule.buildRule.includeMandatory': 'include选项中至少有一个字段为true',\n 'validation.rule.buildRule.messageFormat': '支持{{content}}',\n 'validation.rule.buildRule.startsWithFormat': `,以{{prefix}}开头`,\n 'validation.rule.buildRule.minLength': `,至少{{min}}字符`,\n 'validation.rule.buildRule.maxLength': `,{{max}}字符以内`,\n 'validation.rule.buildRule.rangeLength': `,{{min}}~{{max}}个字符`,\n 'validation.rule.buildRule.token.separator': '、',\n 'validation.rule.buildRule.token.chinese': '汉字',\n 'validation.rule.buildRule.token.chinesePunctuation': '中文标点',\n 'validation.rule.buildRule.token.letter': '字母',\n 'validation.rule.buildRule.token.lowerLetter': '小写字母',\n 'validation.rule.buildRule.token.upperLetter': '大写字母',\n 'validation.rule.buildRule.token.number': '数字',\n 'hooks.useUserMedia.microphone': '麦克风',\n 'hooks.useUserMedia.camera': '摄像头',\n 'hooks.featureName.microphone': '语音',\n 'hooks.featureName.camera': '视频',\n 'hooks.useUserMedia.disabledWarning': '用户媒体已禁用',\n 'hooks.useUserMedia.isRecordingNow': '用户媒体正在录制,不可操作',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}}权限',\n 'hooks.useUserMedia.requestTip1': '浏览器正在申请{{deviceType}}权限,请点击左侧弹窗的“访问该网站时允许”按钮。',\n 'hooks.useUserMedia.requestTip2': '请勿点击“一律不允许”按钮,否则将无法使用{{featureName}}相关功能。',\n 'hooks.useUserMedia.deniedPermission': '您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n '请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。',\n 'hooks.useUserMedia.notSupport': '当前浏览器不支持录制语音',\n 'hooks.useUserMedia.soundDetectTitle': '声音检测到问题',\n 'hooks.useUserMedia.soundDetectDescription':\n '似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。',\n 'hooks.useUserMedia.chooseMicrophoneDevice': '请重新选择音频设备',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': '记住默认设备?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': '请按照以下步骤保存默认音频设备,以便下次使用时自动选择。',\n 'hooks.useStompSocket.connectError': '连接失败,请稍后重试',\n 'hooks.useStompSocket.serverDisconnected': '服务端已断开连接',\n} as const;\nexport default zhCN;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAM,OAAO;AAAA,EACX,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,gCAAgC;AAAA,EAChC,gCAAgC;AAAA,EAChC,kCAAkC;AAAA,EAClC,kCAAkC;AAAA,EAClC,sCAAsC;AAAA,EACtC,kCAAkC;AAAA,EAElC,kCAAkC;AAAA,EAClC,uCAAuC;AAAA,EACvC,iCAAiC;AAAA,EACjC,8BAA8B;AAAA,EAC9B,yCAAyC;AAAA,EACzC,oCAAoC;AAAA,EACpC,8CAA8C;AAAA,EAC9C,2CAA2C;AAAA,EAC3C,8CAA8C;AAAA,EAC9C,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,yCAAyC;AAAA,EACzC,6CAA6C;AAAA,EAC7C,2CAA2C;AAAA,EAC3C,sDAAsD;AAAA,EACtD,0CAA0C;AAAA,EAC1C,+CAA+C;AAAA,EAC/C,+CAA+C;AAAA,EAC/C,0CAA0C;AAAA,EAC1C,iCAAiC;AAAA,EACjC,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,sCAAsC;AAAA,EACtC,qCAAqC;AAAA,EACrC,uCAAuC;AAAA,EACvC,kCAAkC;AAAA,EAClC,kCAAkC;AAAA,EAClC,uCAAuC;AAAA,EACvC,4CACE;AAAA,EACF,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,6CACE;AAAA,EACF,6CAA6C;AAAA,EAC7C,iDAAiD;AAAA,EACjD,oDAAoD;AAAA,EACpD,qCAAqC;AAAA,EACrC,2CAA2C;AAC7C;AACA,IAAO,gBAAQ;",
4
+ "sourcesContent": ["const zhCN = {\n 'components.EditableText.requiredMsg': '请输入文本内容',\n 'components.EditableText.placeholder': '输入文本内容,按回车或点击确定按钮',\n 'components.EditableText.edit': '编辑',\n 'components.EditableText.save': '保存',\n 'components.EditableText.cancel': '取消',\n 'components.ColumnSetting.title': '列设置',\n 'components.ColumnSetting.selectAll': '全选',\n 'components.ColumnSetting.reset': '重置',\n\n 'validation.rule.number.message': '请输入数字',\n 'validation.rule.floatNumber.message': '请输入数字',\n 'validation.rule.email.message': '请输入正确的邮箱地址',\n 'validation.rule.ip.message': '请输入正确的ip地址',\n 'validation.rule.chineseMobile.message': '请输入正确的手机号',\n 'validation.rule.password.message': '8-16位密码,数字、字母、符号至少包含两种',\n 'validation.rule.buildRule.includeMandatory': 'include选项中至少有一个字段为true',\n 'validation.rule.buildRule.messageFormat': '支持{{content}}',\n 'validation.rule.buildRule.startsWithFormat': `,以{{prefix}}开头`,\n 'validation.rule.buildRule.minLength': `,至少{{min}}字符`,\n 'validation.rule.buildRule.maxLength': `,{{max}}字符以内`,\n 'validation.rule.buildRule.rangeLength': `,{{min}}~{{max}}个字符`,\n 'validation.rule.buildRule.token.separator': '、',\n 'validation.rule.buildRule.token.delimiter': '',\n 'validation.rule.buildRule.token.chinese': '汉字',\n 'validation.rule.buildRule.token.chinesePunctuation': '中文标点',\n 'validation.rule.buildRule.token.letter': '字母',\n 'validation.rule.buildRule.token.lowerLetter': '小写字母',\n 'validation.rule.buildRule.token.upperLetter': '大写字母',\n 'validation.rule.buildRule.token.number': '数字',\n 'validation.rule.buildRule.token.specialChars': '特殊字符{{-value}}',\n 'hooks.useUserMedia.microphone': '麦克风',\n 'hooks.useUserMedia.camera': '摄像头',\n 'hooks.featureName.microphone': '语音',\n 'hooks.featureName.camera': '视频',\n 'hooks.useUserMedia.disabledWarning': '用户媒体已禁用',\n 'hooks.useUserMedia.isRecordingNow': '用户媒体正在录制,不可操作',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}}权限',\n 'hooks.useUserMedia.requestTip1': '浏览器正在申请{{deviceType}}权限,请点击左侧弹窗的“访问该网站时允许”按钮。',\n 'hooks.useUserMedia.requestTip2': '请勿点击“一律不允许”按钮,否则将无法使用{{featureName}}相关功能。',\n 'hooks.useUserMedia.deniedPermission': '您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n '请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。',\n 'hooks.useUserMedia.notSupport': '当前浏览器不支持录制语音',\n 'hooks.useUserMedia.soundDetectTitle': '声音检测到问题',\n 'hooks.useUserMedia.soundDetectDescription':\n '似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。',\n 'hooks.useUserMedia.chooseMicrophoneDevice': '请重新选择音频设备',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': '记住默认设备?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': '请按照以下步骤保存默认音频设备,以便下次使用时自动选择。',\n 'hooks.useStompSocket.connectError': '连接失败,请稍后重试',\n 'hooks.useStompSocket.serverDisconnected': '服务端已断开连接',\n} as const;\nexport default zhCN;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAM,OAAO;AAAA,EACX,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,gCAAgC;AAAA,EAChC,gCAAgC;AAAA,EAChC,kCAAkC;AAAA,EAClC,kCAAkC;AAAA,EAClC,sCAAsC;AAAA,EACtC,kCAAkC;AAAA,EAElC,kCAAkC;AAAA,EAClC,uCAAuC;AAAA,EACvC,iCAAiC;AAAA,EACjC,8BAA8B;AAAA,EAC9B,yCAAyC;AAAA,EACzC,oCAAoC;AAAA,EACpC,8CAA8C;AAAA,EAC9C,2CAA2C;AAAA,EAC3C,8CAA8C;AAAA,EAC9C,uCAAuC;AAAA,EACvC,uCAAuC;AAAA,EACvC,yCAAyC;AAAA,EACzC,6CAA6C;AAAA,EAC7C,6CAA6C;AAAA,EAC7C,2CAA2C;AAAA,EAC3C,sDAAsD;AAAA,EACtD,0CAA0C;AAAA,EAC1C,+CAA+C;AAAA,EAC/C,+CAA+C;AAAA,EAC/C,0CAA0C;AAAA,EAC1C,gDAAgD;AAAA,EAChD,iCAAiC;AAAA,EACjC,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,sCAAsC;AAAA,EACtC,qCAAqC;AAAA,EACrC,uCAAuC;AAAA,EACvC,kCAAkC;AAAA,EAClC,kCAAkC;AAAA,EAClC,uCAAuC;AAAA,EACvC,4CACE;AAAA,EACF,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,6CACE;AAAA,EACF,6CAA6C;AAAA,EAC7C,iDAAiD;AAAA,EACjD,oDAAoD;AAAA,EACpD,qCAAqC;AAAA,EACrC,2CAA2C;AAC7C;AACA,IAAO,gBAAQ;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiny-codes/react-easy",
3
- "version": "1.6.4",
3
+ "version": "1.6.5",
4
4
  "description": "Simplify React and AntDesign development with practical components and hooks",
5
5
  "keywords": [
6
6
  "react",