@tiny-codes/react-easy 1.7.6 → 1.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/es/components/ColumnSetting/index.js +2 -1
  3. package/es/components/ColumnSetting/index.js.map +1 -1
  4. package/es/components/ConfigProvider/context.d.ts +36 -0
  5. package/es/components/ConfigProvider/context.js +1 -0
  6. package/es/components/ConfigProvider/context.js.map +1 -1
  7. package/es/components/ConfigProvider/index.d.ts +5 -3
  8. package/es/components/ConfigProvider/index.js +13 -7
  9. package/es/components/ConfigProvider/index.js.map +1 -1
  10. package/es/components/ConfigProvider/style/index.js +1 -1
  11. package/es/components/ConfigProvider/style/index.js.map +1 -1
  12. package/es/components/ContextMenu/index.js +3 -2
  13. package/es/components/ContextMenu/index.js.map +1 -1
  14. package/es/components/ContextMenu/style/index.js.map +1 -1
  15. package/es/components/DeleteConfirmAction/withDeleteConfirmAction.d.ts +3 -3
  16. package/es/components/EditableText/index.js +3 -2
  17. package/es/components/EditableText/index.js.map +1 -1
  18. package/es/components/EllipsisTypography/withEllipsisTypography.d.ts +16 -0
  19. package/es/components/EllipsisTypography/withEllipsisTypography.js +18 -2
  20. package/es/components/EllipsisTypography/withEllipsisTypography.js.map +1 -1
  21. package/es/components/FloatDrawer/index.js +3 -2
  22. package/es/components/FloatDrawer/index.js.map +1 -1
  23. package/es/components/FloatDrawer/style/index.js +1 -1
  24. package/es/components/FloatDrawer/style/index.js.map +1 -1
  25. package/es/components/Iconfont/createIconfont.d.ts +42 -0
  26. package/es/components/Iconfont/createIconfont.js +57 -0
  27. package/es/components/Iconfont/createIconfont.js.map +1 -0
  28. package/es/components/Iconfont/index.d.ts +1 -0
  29. package/es/components/Iconfont/index.js +2 -0
  30. package/es/components/Iconfont/index.js.map +1 -0
  31. package/es/components/Loading/index.js +3 -2
  32. package/es/components/Loading/index.js.map +1 -1
  33. package/es/components/Loading/style/index.js +1 -1
  34. package/es/components/Loading/style/index.js.map +1 -1
  35. package/es/components/OverflowTags/index.js +3 -2
  36. package/es/components/OverflowTags/index.js.map +1 -1
  37. package/es/components/OverflowTags/style/index.js +1 -1
  38. package/es/components/OverflowTags/style/index.js.map +1 -1
  39. package/es/components/index.d.ts +1 -0
  40. package/es/components/index.js +1 -0
  41. package/es/components/index.js.map +1 -1
  42. package/es/hooks/style/useSplitter.d.ts +3 -0
  43. package/es/hooks/style/useSplitter.js +40 -0
  44. package/es/hooks/style/useSplitter.js.map +1 -0
  45. package/es/hooks/useSplitter.d.ts +52 -9
  46. package/es/hooks/useSplitter.js +69 -39
  47. package/es/hooks/useSplitter.js.map +1 -1
  48. package/lib/components/ColumnSetting/index.js +2 -1
  49. package/lib/components/ColumnSetting/index.js.map +3 -3
  50. package/lib/components/ConfigProvider/context.d.ts +36 -0
  51. package/lib/components/ConfigProvider/context.js +1 -0
  52. package/lib/components/ConfigProvider/context.js.map +2 -2
  53. package/lib/components/ConfigProvider/index.d.ts +5 -3
  54. package/lib/components/ConfigProvider/index.js +10 -2
  55. package/lib/components/ConfigProvider/index.js.map +2 -2
  56. package/lib/components/ConfigProvider/style/index.js +1 -1
  57. package/lib/components/ConfigProvider/style/index.js.map +2 -2
  58. package/lib/components/ContextMenu/index.js +2 -1
  59. package/lib/components/ContextMenu/index.js.map +3 -3
  60. package/lib/components/ContextMenu/style/index.js.map +2 -2
  61. package/lib/components/DeleteConfirmAction/withDeleteConfirmAction.d.ts +3 -3
  62. package/lib/components/EditableText/index.js +3 -2
  63. package/lib/components/EditableText/index.js.map +3 -3
  64. package/lib/components/EllipsisTypography/withEllipsisTypography.d.ts +16 -0
  65. package/lib/components/EllipsisTypography/withEllipsisTypography.js +16 -2
  66. package/lib/components/EllipsisTypography/withEllipsisTypography.js.map +2 -2
  67. package/lib/components/FloatDrawer/index.js +3 -2
  68. package/lib/components/FloatDrawer/index.js.map +3 -3
  69. package/lib/components/FloatDrawer/style/index.js +1 -1
  70. package/lib/components/FloatDrawer/style/index.js.map +2 -2
  71. package/lib/components/Iconfont/createIconfont.d.ts +42 -0
  72. package/lib/components/Iconfont/createIconfont.js +65 -0
  73. package/lib/components/Iconfont/createIconfont.js.map +7 -0
  74. package/lib/components/Iconfont/index.d.ts +1 -0
  75. package/lib/components/Iconfont/index.js +24 -0
  76. package/lib/components/Iconfont/index.js.map +7 -0
  77. package/lib/components/Loading/index.js +3 -2
  78. package/lib/components/Loading/index.js.map +3 -3
  79. package/lib/components/Loading/style/index.js +1 -1
  80. package/lib/components/Loading/style/index.js.map +2 -2
  81. package/lib/components/OverflowTags/index.js +3 -2
  82. package/lib/components/OverflowTags/index.js.map +3 -3
  83. package/lib/components/OverflowTags/style/index.js +1 -1
  84. package/lib/components/OverflowTags/style/index.js.map +2 -2
  85. package/lib/components/index.d.ts +1 -0
  86. package/lib/components/index.js +3 -1
  87. package/lib/components/index.js.map +2 -2
  88. package/lib/hooks/style/useSplitter.d.ts +3 -0
  89. package/lib/hooks/style/useSplitter.js +72 -0
  90. package/lib/hooks/style/useSplitter.js.map +7 -0
  91. package/lib/hooks/useSplitter.d.ts +52 -9
  92. package/lib/hooks/useSplitter.js +56 -26
  93. package/lib/hooks/useSplitter.js.map +3 -3
  94. package/package.json +2 -1
@@ -33,23 +33,34 @@ __export(useSplitter_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(useSplitter_exports);
35
35
  var import_react = require("react");
36
- var import_antd = require("antd");
36
+ var import_classnames = __toESM(require("classnames"));
37
+ var import_components = require("../components");
38
+ var import_useSplitter = __toESM(require("./style/useSplitter"));
37
39
  var import_useRefValue = __toESM(require("./useRefValue"));
38
40
  var useSplitter = (props) => {
39
41
  const {
40
- container,
42
+ container: containerFromProps,
41
43
  defaultRatio,
42
44
  minRatio = 0.15,
43
45
  maxRatio = 1 - minRatio,
44
46
  direction = "vertical",
45
- splitterWidth = 2,
47
+ splitterWidth = 1,
46
48
  className,
47
- style
49
+ classNames,
50
+ styles,
51
+ prefixCls: prefixClsInProps,
52
+ style,
53
+ onChange
48
54
  } = props || {};
49
- const { token } = import_antd.theme.useToken();
55
+ const { getPrefixCls } = (0, import_react.useContext)(import_components.ConfigProvider.ConfigContext);
56
+ const prefixCls = getPrefixCls("splitter", prefixClsInProps);
57
+ const [wrapCSSVar, hashId, cssVarCls] = (0, import_useSplitter.default)(prefixCls);
50
58
  const directionRef = (0, import_useRefValue.default)(direction);
59
+ const [splitterRef, setSplitterRef] = (0, import_react.useState)(null);
60
+ const [container, setContainer] = (0, import_react.useState)(containerFromProps);
51
61
  const [percent, setPercent] = (0, import_react.useState)(defaultRatio);
52
62
  const percentRef = (0, import_useRefValue.default)(percent);
63
+ const onChangeRef = (0, import_useRefValue.default)(onChange);
53
64
  const [width, setWidth] = (0, import_react.useState)(
54
65
  container && defaultRatio ? ((container == null ? void 0 : container.clientWidth) || 0) * defaultRatio : void 0
55
66
  );
@@ -61,6 +72,7 @@ var useSplitter = (props) => {
61
72
  if (!dragging)
62
73
  return;
63
74
  const onMove = (e) => {
75
+ var _a, _b;
64
76
  const el = container;
65
77
  if (!el)
66
78
  return;
@@ -70,11 +82,13 @@ var useSplitter = (props) => {
70
82
  const ratio = Math.max(minRatioRef.current, Math.min(maxRatioRef.current, x / rect.width));
71
83
  setPercent(ratio);
72
84
  setWidth(x);
85
+ (_a = onChangeRef.current) == null ? void 0 : _a.call(onChangeRef, ratio);
73
86
  } else {
74
87
  const y = e.clientY - rect.top;
75
88
  const ratio = Math.max(minRatioRef.current, Math.min(maxRatioRef.current, y / rect.height));
76
89
  setPercent(ratio);
77
90
  setWidth(y);
91
+ (_b = onChangeRef.current) == null ? void 0 : _b.call(onChangeRef, ratio);
78
92
  }
79
93
  e.preventDefault();
80
94
  };
@@ -87,39 +101,55 @@ var useSplitter = (props) => {
87
101
  };
88
102
  }, [container, dragging, direction, minRatioRef, maxRatioRef]);
89
103
  (0, import_react.useEffect)(() => {
104
+ const containerDom = containerFromProps ?? (splitterRef == null ? void 0 : splitterRef.parentElement) ?? void 0;
105
+ setContainer(containerDom);
106
+ }, [containerFromProps, splitterRef]);
107
+ (0, import_react.useEffect)(() => {
108
+ var _a, _b;
90
109
  if (defaultRatio && container && percentRef.current == null) {
91
110
  const rect = container.getBoundingClientRect();
92
111
  setPercent(defaultRatio);
93
112
  if (directionRef.current === "vertical") {
94
113
  setWidth(rect.width * defaultRatio);
114
+ (_a = onChangeRef.current) == null ? void 0 : _a.call(onChangeRef, defaultRatio);
95
115
  } else {
96
116
  setWidth(rect.height * defaultRatio);
117
+ (_b = onChangeRef.current) == null ? void 0 : _b.call(onChangeRef, defaultRatio);
97
118
  }
98
119
  }
99
120
  }, [defaultRatio, container]);
100
121
  const vertical = direction === "vertical";
101
- const dom = /* @__PURE__ */ React.createElement(
102
- "div",
103
- {
104
- className,
105
- style: {
106
- flex: "none",
107
- width: vertical ? splitterWidth : "100%",
108
- height: vertical ? "auto" : splitterWidth,
109
- cursor: vertical ? "col-resize" : "row-resize",
110
- background: dragging ? token.colorPrimaryHover : isOver ? token.colorPrimaryActive : token.colorBorder,
111
- margin: vertical ? "0 4px" : "4px 0",
112
- borderRadius: 4,
113
- userSelect: "none",
114
- ...style
122
+ const dom = wrapCSSVar(
123
+ /* @__PURE__ */ React.createElement(
124
+ "div",
125
+ {
126
+ ref: setSplitterRef,
127
+ className: (0, import_classnames.default)(
128
+ hashId,
129
+ cssVarCls,
130
+ prefixCls,
131
+ className,
132
+ isOver ? (0, import_classnames.default)(`${prefixCls}-hover`, classNames == null ? void 0 : classNames.hover) : void 0,
133
+ dragging ? (0, import_classnames.default)(`${prefixCls}-dragging`, classNames == null ? void 0 : classNames.dragging) : void 0,
134
+ {
135
+ [`${prefixCls}-vertical`]: vertical,
136
+ [`${prefixCls}-horizontal`]: !vertical
137
+ }
138
+ ),
139
+ style: {
140
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
141
+ [`--splitter-width`]: splitterWidth ? `${splitterWidth}px` : void 0,
142
+ ...style
143
+ },
144
+ onMouseDown: () => setDragging(true),
145
+ onMouseEnter: () => setIsOver(true),
146
+ onMouseLeave: () => setIsOver(false),
147
+ role: "separator",
148
+ "aria-orientation": vertical ? "vertical" : "horizontal",
149
+ "aria-label": "Resize"
115
150
  },
116
- onMouseDown: () => setDragging(true),
117
- onMouseEnter: () => setIsOver(true),
118
- onMouseLeave: () => setIsOver(false),
119
- role: "separator",
120
- "aria-orientation": vertical ? "vertical" : "horizontal",
121
- "aria-label": "Resize"
122
- }
151
+ /* @__PURE__ */ React.createElement("div", { className: (0, import_classnames.default)(`${prefixCls}-handle`, classNames == null ? void 0 : classNames.handle), style: styles == null ? void 0 : styles.handle })
152
+ )
123
153
  );
124
154
  return {
125
155
  dom,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/useSplitter.tsx"],
4
- "sourcesContent": ["import { type CSSProperties, useEffect, useState } from 'react';\nimport { theme } from 'antd';\nimport useRefValue from './useRefValue';\n\nexport interface UseSplitterProps {\n /**\n * - **EN:** Split direction. vertical = left/right; horizontal = top/bottom.\n * - **ZH:** 分割方向。vertical 表示左右分割;horizontal 表示上下分割。\n *\n * @default 'vertical'\n */\n direction?: 'vertical' | 'horizontal';\n /**\n * - **EN:** The container element reference.\n * - **ZH:** 容器元素的引用。\n */\n container: HTMLDivElement | null | undefined;\n /**\n * - **EN:** Default ratio of the left/top pane (0~1).\n * - **ZH:** 左侧/顶部面板的默认比例 (0~1)。\n *\n * @default 0.32\n */\n defaultRatio?: number;\n /**\n * - **EN:** Minimum ratio of the left/top pane (0~1).\n * - **ZH:** 左侧/顶部面板的最小比例 (0~1)。\n *\n * @default 0.15\n */\n minRatio?: number;\n /**\n * - **EN:** Maximum ratio of the left/top pane (0~1).\n * - **ZH:** 左侧/顶部面板的最大比例 (0~1)。\n *\n * @default 0.85\n */\n maxRatio?: number;\n /**\n * - **EN:** Width of the splitter in pixels.\n * - **ZH:** 分割条的宽度,单位为像素。\n *\n * @default 2\n */\n splitterWidth?: number;\n /** Additional class name for the splitter element */\n className?: string;\n /** Additional style for the splitter element */\n style?: CSSProperties;\n}\n\nconst useSplitter = (props: UseSplitterProps) => {\n const {\n container,\n defaultRatio,\n minRatio = 0.15,\n maxRatio = 1 - minRatio,\n direction = 'vertical',\n splitterWidth = 2,\n className,\n style,\n } = props || {};\n const { token } = theme.useToken();\n const directionRef = useRefValue(direction);\n const [percent, setPercent] = useState(defaultRatio);\n const percentRef = useRefValue(percent);\n const [width, setWidth] = useState(\n container && defaultRatio ? (container?.clientWidth || 0) * defaultRatio : undefined\n );\n const [dragging, setDragging] = useState(false);\n const minRatioRef = useRefValue(minRatio);\n const maxRatioRef = useRefValue(maxRatio);\n const [isOver, setIsOver] = useState(false);\n\n useEffect(() => {\n if (!dragging) return;\n const onMove = (e: MouseEvent) => {\n const el = container;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n if (direction === 'vertical') {\n const x = e.clientX - rect.left;\n const ratio = Math.max(minRatioRef.current, Math.min(maxRatioRef.current, x / rect.width));\n setPercent(ratio);\n setWidth(x);\n } else {\n const y = e.clientY - rect.top;\n const ratio = Math.max(minRatioRef.current, Math.min(maxRatioRef.current, y / rect.height));\n setPercent(ratio);\n setWidth(y);\n }\n // prevent text selection while dragging\n e.preventDefault();\n };\n const onUp = () => setDragging(false);\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp, { once: true });\n\n return () => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n };\n }, [container, dragging, direction, minRatioRef, maxRatioRef]);\n\n // Initialize percent and width on mount\n useEffect(() => {\n if (defaultRatio && container && percentRef.current == null) {\n const rect = container.getBoundingClientRect();\n setPercent(defaultRatio);\n if (directionRef.current === 'vertical') {\n setWidth(rect.width * defaultRatio);\n } else {\n setWidth(rect.height * defaultRatio);\n }\n }\n }, [defaultRatio, container]);\n\n const vertical = direction === 'vertical';\n const dom = (\n <div\n className={className}\n style={{\n flex: 'none',\n width: vertical ? splitterWidth : '100%',\n height: vertical ? 'auto' : splitterWidth,\n cursor: vertical ? 'col-resize' : 'row-resize',\n background: dragging ? token.colorPrimaryHover : isOver ? token.colorPrimaryActive : token.colorBorder,\n margin: vertical ? '0 4px' : '4px 0',\n borderRadius: 4,\n userSelect: 'none',\n ...style,\n }}\n onMouseDown={() => setDragging(true)}\n onMouseEnter={() => setIsOver(true)}\n onMouseLeave={() => setIsOver(false)}\n role=\"separator\"\n aria-orientation={vertical ? 'vertical' : 'horizontal'}\n aria-label=\"Resize\"\n />\n );\n\n return {\n dom,\n percent,\n width,\n dragging,\n direction,\n };\n};\n\nexport default useSplitter;\n"],
5
- "mappings": "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",
6
- "names": ["useRefValue"]
4
+ "sourcesContent": ["import { type CSSProperties, useContext, useEffect, useState } from 'react';\nimport names from 'classnames';\nimport { ConfigProvider } from '../components';\nimport useStyle from './style/useSplitter';\nimport useRefValue from './useRefValue';\n\nexport interface UseSplitterProps {\n /**\n * - **EN:** Split direction. vertical = left/right; horizontal = top/bottom.\n * - **CN:** 分割方向。vertical 表示左右分割;horizontal 表示上下分割。\n *\n * @default 'vertical'\n */\n direction?: 'vertical' | 'horizontal';\n /**\n * - **EN:** Parent container element. If not specified, the parent container of the `dom` element\n * will be used automatically.\n * - **CN:** 父容器元素,如果不指定,则自动使用 `dom` 元素的父容器\n */\n container?: HTMLDivElement | null | undefined;\n /**\n * - **EN:** Default ratio of the left/top pane (0~1).\n * - **CN:** 左侧/顶部面板的默认比例 (0~1)。\n *\n * @default 0.32\n */\n defaultRatio?: number;\n /**\n * - **EN:** Minimum ratio of the left/top pane (0~1).\n * - **CN:** 左侧/顶部面板的最小比例 (0~1)。\n *\n * @default 0.15\n */\n minRatio?: number;\n /**\n * - **EN:** Maximum ratio of the left/top pane (0~1).\n * - **CN:** 左侧/顶部面板的最大比例 (0~1)。\n *\n * @default 0.85\n */\n maxRatio?: number;\n /**\n * - **EN:** Width of the splitter in pixels.\n * - **CN:** 分割条的宽度,单位为像素。\n *\n * @default 2\n */\n splitterWidth?: number;\n /** Additional class name for the splitter element */\n className?: string;\n /** Additional style for the splitter element */\n style?: CSSProperties;\n /**\n * - **EN:** Custom prefix for the component's CSS class.\n * - **CN:** 组件的自定义 CSS 类前缀。\n */\n prefixCls?: string;\n /**\n * - **EN:** Semantic class names\n * - **CN:** 语义化类名\n */\n classNames?: {\n /**\n * - **EN:** Class name applied when the splitter is hovered.\n * - **CN:** 分割条悬停时应用的类名。\n */\n hover?: string;\n /**\n * - **EN:** Class name applied when the splitter is being dragged.\n * - **CN:** 分割条拖动时应用的类名。\n */\n dragging?: string;\n /**\n * - **EN:** Class name applied to the splitter handle.\n * - **CN:** 分割条手柄的类名。\n */\n handle?: string;\n };\n /**\n * - **EN:** Semantic styles\n * - **CN:** 语义化样式\n */\n styles?: {\n /**\n * - **EN:** Custom styles for the splitter handle.\n * - **CN:** 分割条手柄的自定义样式。\n */\n handle?: CSSProperties;\n };\n /**\n * - **EN:** Callback function when the splitter ratio changes.\n * - **CN:** 分割比例变化时的回调函数。\n */\n onChange?: (ratio?: number) => void;\n}\n\nconst useSplitter = (props: UseSplitterProps) => {\n const {\n container: containerFromProps,\n defaultRatio,\n minRatio = 0.15,\n maxRatio = 1 - minRatio,\n direction = 'vertical',\n splitterWidth = 1,\n className,\n classNames,\n styles,\n prefixCls: prefixClsInProps,\n style,\n onChange,\n } = props || {};\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const prefixCls = getPrefixCls('splitter', prefixClsInProps);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n const directionRef = useRefValue(direction);\n const [splitterRef, setSplitterRef] = useState<HTMLDivElement | null>(null);\n const [container, setContainer] = useState(containerFromProps);\n const [percent, setPercent] = useState(defaultRatio);\n const percentRef = useRefValue(percent);\n const onChangeRef = useRefValue(onChange);\n const [width, setWidth] = useState(\n container && defaultRatio ? (container?.clientWidth || 0) * defaultRatio : undefined\n );\n const [dragging, setDragging] = useState(false);\n const minRatioRef = useRefValue(minRatio);\n const maxRatioRef = useRefValue(maxRatio);\n const [isOver, setIsOver] = useState(false);\n\n useEffect(() => {\n if (!dragging) return;\n const onMove = (e: MouseEvent) => {\n const el = container;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n if (direction === 'vertical') {\n const x = e.clientX - rect.left;\n const ratio = Math.max(minRatioRef.current, Math.min(maxRatioRef.current, x / rect.width));\n setPercent(ratio);\n setWidth(x);\n onChangeRef.current?.(ratio);\n } else {\n const y = e.clientY - rect.top;\n const ratio = Math.max(minRatioRef.current, Math.min(maxRatioRef.current, y / rect.height));\n setPercent(ratio);\n setWidth(y);\n onChangeRef.current?.(ratio);\n }\n // prevent text selection while dragging\n e.preventDefault();\n };\n const onUp = () => setDragging(false);\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp, { once: true });\n\n return () => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n };\n }, [container, dragging, direction, minRatioRef, maxRatioRef]);\n\n useEffect(() => {\n const containerDom = containerFromProps ?? (splitterRef?.parentElement as HTMLDivElement | undefined) ?? undefined;\n setContainer(containerDom);\n }, [containerFromProps, splitterRef]);\n\n // Initialize percent and width on mount\n useEffect(() => {\n if (defaultRatio && container && percentRef.current == null) {\n const rect = container.getBoundingClientRect();\n setPercent(defaultRatio);\n if (directionRef.current === 'vertical') {\n setWidth(rect.width * defaultRatio);\n onChangeRef.current?.(defaultRatio);\n } else {\n setWidth(rect.height * defaultRatio);\n onChangeRef.current?.(defaultRatio);\n }\n }\n }, [defaultRatio, container]);\n\n const vertical = direction === 'vertical';\n const dom = wrapCSSVar(\n <div\n ref={setSplitterRef}\n className={names(\n hashId,\n cssVarCls,\n prefixCls,\n className,\n isOver ? names(`${prefixCls}-hover`, classNames?.hover) : undefined,\n dragging ? names(`${prefixCls}-dragging`, classNames?.dragging) : undefined,\n {\n [`${prefixCls}-vertical`]: vertical,\n [`${prefixCls}-horizontal`]: !vertical,\n }\n )}\n style={{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [`--splitter-width` as any]: splitterWidth ? `${splitterWidth}px` : undefined,\n ...style,\n }}\n onMouseDown={() => setDragging(true)}\n onMouseEnter={() => setIsOver(true)}\n onMouseLeave={() => setIsOver(false)}\n role=\"separator\"\n aria-orientation={vertical ? 'vertical' : 'horizontal'}\n aria-label=\"Resize\"\n >\n <div className={names(`${prefixCls}-handle`, classNames?.handle)} style={styles?.handle}></div>\n </div>\n );\n\n return {\n dom,\n percent,\n width,\n dragging,\n direction,\n };\n};\n\nexport default useSplitter;\n"],
5
+ "mappings": "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",
6
+ "names": ["useStyle", "useRefValue", "names"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiny-codes/react-easy",
3
- "version": "1.7.6",
3
+ "version": "1.7.8",
4
4
  "description": "Simplify React and AntDesign development with practical components and hooks",
5
5
  "keywords": [
6
6
  "react",
@@ -46,6 +46,7 @@
46
46
  "crypto-js": "^4.2.0",
47
47
  "lexical": "^0.33.1",
48
48
  "react-contexify": "^6.0.0",
49
+ "react-resize-detector": "^12.3.0",
49
50
  "sockjs-client": "^1.6.1"
50
51
  },
51
52
  "devDependencies": {