@easyv/biz-components 2.1.5 → 2.1.6

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 (84) hide show
  1. package/dist/lib/components/ai-components/mobile-voice-input/icon-button.es.js +1 -1
  2. package/dist/lib/components/ai-components/mobile-voice-input/mobile-voice-input.es.js +5 -5
  3. package/dist/lib/components/code-mirror-editor/code-mirror-editor.es.js +9 -9
  4. package/dist/lib/components/code-mirror-editor/code-mirror-editor.es.js.map +1 -1
  5. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.es.js +84 -0
  6. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.es.js.map +1 -0
  7. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.es.js +58 -0
  8. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.es.js.map +1 -0
  9. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.es.js +97 -0
  10. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.es.js.map +1 -0
  11. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus.es.js +1063 -0
  12. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus.es.js.map +1 -0
  13. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid.module.less.es.js +7 -0
  14. package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid.module.less.es.js.map +1 -0
  15. package/dist/lib/components/easyv-reactgrid-plus/utils.es.js +93 -0
  16. package/dist/lib/components/easyv-reactgrid-plus/utils.es.js.map +1 -0
  17. package/dist/lib/easyv-biz-components/src/components/code-mirror-editor/code-mirror-editor.d.ts +2 -2
  18. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.d.ts +14 -0
  19. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.d.ts +11 -0
  20. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.d.ts +16 -0
  21. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus.d.ts +16 -0
  22. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus.types.d.ts +18 -0
  23. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/index.d.ts +1 -0
  24. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/test/easyv-react-grid-plus.cy.d.ts +1 -0
  25. package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/utils.d.ts +6 -0
  26. package/dist/lib/easyv-biz-components/src/components/index.d.ts +1 -0
  27. package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/constants.d.ts +3 -1
  28. package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/types.d.ts +1 -0
  29. package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/utils.d.ts +1 -0
  30. package/dist/lib/easyv-biz-components/src/utils/easy-fetch/easy-fetch.d.ts +13 -0
  31. package/dist/lib/easyv-biz-components/src/utils/easy-fetch/index.d.ts +1 -0
  32. package/dist/lib/easyv-biz-components/src/utils/easy-fetch/test/easy-fetch.cy.d.ts +1 -0
  33. package/dist/lib/easyv-biz-components/src/utils/easy-fetch/types.d.ts +6 -0
  34. package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/component-dimension.d.ts +2 -0
  35. package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/easyv-gui-helper.d.ts +3 -0
  36. package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/types.d.ts +3 -0
  37. package/dist/lib/easyv-biz-components/src/utils/index.d.ts +2 -0
  38. package/dist/lib/easyv-biz-components/src/utils/twin/index.d.ts +1 -0
  39. package/dist/lib/easyv-biz-components/src/utils/twin/utils.d.ts +5 -0
  40. package/dist/lib/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js +2 -2
  41. package/dist/lib/index.es.js +8 -1
  42. package/dist/lib/index.es.js.map +1 -1
  43. package/dist/lib/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-table/build/lib/index.es.js +103 -0
  44. package/dist/lib/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-table/build/lib/index.es.js.map +1 -0
  45. package/dist/lib/node_modules/.pnpm/@tanstack_react-virtual@3.13.23_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-virtual/dist/esm/index.es.js +53 -0
  46. package/dist/lib/node_modules/.pnpm/@tanstack_react-virtual@3.13.23_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-virtual/dist/esm/index.es.js.map +1 -0
  47. package/dist/lib/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.es.js +2672 -0
  48. package/dist/lib/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.es.js.map +1 -0
  49. package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/index.es.js +871 -0
  50. package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/index.es.js.map +1 -0
  51. package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/utils.es.js +73 -0
  52. package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/utils.es.js.map +1 -0
  53. package/dist/lib/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.es.js +11 -0
  54. package/dist/lib/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.es.js.map +1 -0
  55. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{button-Dip6wfc7.es.es.js → button-VOE5PncW.es.es.js} +2 -2
  56. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{button-Dip6wfc7.es.es.js.map → button-VOE5PncW.es.es.js.map} +1 -1
  57. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-EAFzPBke.es.es.js → index-6AIVHTQ0.es.es.js} +11 -11
  58. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-EAFzPBke.es.es.js.map → index-6AIVHTQ0.es.es.js.map} +1 -1
  59. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-zvVd1BJp.es.es.js → index-DttpqRHH.es.es.js} +596 -605
  60. package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-DttpqRHH.es.es.js.map +1 -0
  61. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{input-Dhdn9e9Z.es.es.js → input-CqQJPvav.es.es.js} +54 -54
  62. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{input-Dhdn9e9Z.es.es.js.map → input-CqQJPvav.es.es.js.map} +1 -1
  63. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{keycode-DOHuQiUY.es.es.js → keycode-cVKDBtW_.es.es.js} +4 -4
  64. package/dist/lib/packages/easyv-arco/dist/lib/chunks/{keycode-DOHuQiUY.es.es.js.map → keycode-cVKDBtW_.es.es.js.map} +1 -1
  65. package/dist/lib/packages/easyv-arco/dist/lib/index.es.es.js.map +1 -1
  66. package/dist/lib/stats.html +1 -1
  67. package/dist/lib/style.pkg.css +1 -1
  68. package/dist/lib/utils/ai-agent-message-manager/ai-agent-message-manager.es.js +9 -1
  69. package/dist/lib/utils/ai-agent-message-manager/ai-agent-message-manager.es.js.map +1 -1
  70. package/dist/lib/utils/ai-agent-message-manager/constants.es.js +4 -2
  71. package/dist/lib/utils/ai-agent-message-manager/constants.es.js.map +1 -1
  72. package/dist/lib/utils/ai-agent-message-manager/types.es.js.map +1 -1
  73. package/dist/lib/utils/ai-agent-message-manager/utils.es.js +10 -0
  74. package/dist/lib/utils/ai-agent-message-manager/utils.es.js.map +1 -0
  75. package/dist/lib/utils/easy-fetch/easy-fetch.es.js +88 -0
  76. package/dist/lib/utils/easy-fetch/easy-fetch.es.js.map +1 -0
  77. package/dist/lib/utils/easyv-gui-helper/easyv-gui-helper.es.js +13 -4
  78. package/dist/lib/utils/easyv-gui-helper/easyv-gui-helper.es.js.map +1 -1
  79. package/dist/lib/utils/show-modal/show-modal.es.js +5 -5
  80. package/dist/lib/utils/twin/utils.es.js +30 -0
  81. package/dist/lib/utils/twin/utils.es.js.map +1 -0
  82. package/dist/tailwindcss.pkg.css +113 -0
  83. package/package.json +13 -7
  84. package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { j as jsxRuntimeExports } from "../../../node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.es.js";
2
2
  import "../../../packages/easyv-arco/dist/lib/index.es.es.js";
3
3
  import classNames from "../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js";
4
- import { A } from "../../../packages/easyv-arco/dist/lib/chunks/button-Dip6wfc7.es.es.js";
4
+ import { A } from "../../../packages/easyv-arco/dist/lib/chunks/button-VOE5PncW.es.es.js";
5
5
  const IconButton = (props) => {
6
6
  const { className = "", icon, onClick } = props;
7
7
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -6,9 +6,9 @@ import useMemoizedFn from "../../../node_modules/.pnpm/ahooks@3.8.5_react@18.2.0
6
6
  import classNames from "../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js";
7
7
  import { IconButton } from "./icon-button.es.js";
8
8
  import { useTencentSentenceRecognition } from "../../../hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js";
9
- import { M as Ie } from "../../../packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js";
10
- import { A as Jn } from "../../../packages/easyv-arco/dist/lib/chunks/input-Dhdn9e9Z.es.es.js";
11
- import { A } from "../../../packages/easyv-arco/dist/lib/chunks/button-Dip6wfc7.es.es.js";
9
+ import { M as De } from "../../../packages/easyv-arco/dist/lib/chunks/index-DttpqRHH.es.es.js";
10
+ import { A as Jn } from "../../../packages/easyv-arco/dist/lib/chunks/input-CqQJPvav.es.es.js";
11
+ import { A } from "../../../packages/easyv-arco/dist/lib/chunks/button-VOE5PncW.es.es.js";
12
12
  import { VoiceAnimation } from "../../voice-animation/voice-animation.es.js";
13
13
  import { getIsPrivateDeployEnv } from "../../../utils/common/common.es.js";
14
14
  const MobileVoiceInputCpn = (props, ref) => {
@@ -61,12 +61,12 @@ const MobileVoiceInputCpn = (props, ref) => {
61
61
  if (recordTime < 500) {
62
62
  setVoiceRecognizeRes("");
63
63
  needRequestAsr = false;
64
- Ie.error("录音时间过短");
64
+ De.error("录音时间过短");
65
65
  }
66
66
  if (recordTime > 59 * 1e3) {
67
67
  setVoiceRecognizeRes("");
68
68
  needRequestAsr = false;
69
- Ie.error("录音时间最多支持一分钟");
69
+ De.error("录音时间最多支持一分钟");
70
70
  }
71
71
  stopVoiceRecord(needRequestAsr);
72
72
  }
@@ -15,7 +15,7 @@ import { createCustomCompletionsSource, lintJavaScriptCode } from "./utils.es.js
15
15
  const CodeMirrorEditor = (props) => {
16
16
  const {
17
17
  languageMode,
18
- code,
18
+ value,
19
19
  onChange,
20
20
  wrapperClassName,
21
21
  wrapperStyle,
@@ -25,8 +25,8 @@ const CodeMirrorEditor = (props) => {
25
25
  customCompletions,
26
26
  ...restCodeMirrorProps
27
27
  } = props;
28
- const handleOnChange = (value) => {
29
- onChange == null ? void 0 : onChange(value);
28
+ const handleOnChange = (value2) => {
29
+ onChange == null ? void 0 : onChange(value2);
30
30
  };
31
31
  const createCustomCompletions = useCallback(
32
32
  () => createCustomCompletionsSource(customCompletions),
@@ -34,16 +34,16 @@ const CodeMirrorEditor = (props) => {
34
34
  );
35
35
  const createJSLinter = useMemoizedFn(() => {
36
36
  return (view) => {
37
- const code2 = view.state.doc.toString();
38
- return lintJavaScriptCode(code2, environment, view);
37
+ const code = view.state.doc.toString();
38
+ return lintJavaScriptCode(code, environment, view);
39
39
  };
40
40
  });
41
41
  const createJSONLinter = () => {
42
42
  const fn = (view) => {
43
43
  const diagnostics = [];
44
- const code2 = view.state.doc.toString();
44
+ const code = view.state.doc.toString();
45
45
  try {
46
- JSON.parse(code2);
46
+ JSON.parse(code);
47
47
  } catch (error) {
48
48
  const match = error.message.match(/position (\d+)/);
49
49
  if (match) {
@@ -103,12 +103,12 @@ const CodeMirrorEditor = (props) => {
103
103
  ReactCodeMirror,
104
104
  {
105
105
  ...restCodeMirrorProps,
106
- value: code,
106
+ value,
107
107
  extensions: [
108
108
  ...Array.isArray(langExtension) ? langExtension : [langExtension],
109
109
  ...showLintGutter ? [lintGutter()] : [],
110
110
  linter(codeLinter()),
111
- ...placeholderText && !code ? [placeholder(placeholderText)] : [],
111
+ ...placeholderText && !value ? [placeholder(placeholderText)] : [],
112
112
  EditorView.lineWrapping
113
113
  // 添加自动换行扩展
114
114
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"code-mirror-editor.es.js","sources":["../../../../src/components/code-mirror-editor/code-mirror-editor.tsx"],"sourcesContent":["import { ComponentProps, useCallback, useMemo } from \"react\";\nimport { javascript, javascriptLanguage } from \"@codemirror/lang-javascript\";\nimport { json } from \"@codemirror/lang-json\";\nimport { sql } from \"@codemirror/lang-sql\";\nimport { Diagnostic, linter, lintGutter, LintSource } from \"@codemirror/lint\";\nimport { EditorView, placeholder } from \"@codemirror/view\";\nimport { tags as t } from \"@lezer/highlight\";\nimport { abcdefInit } from \"@uiw/codemirror-theme-abcdef\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { useMemoizedFn } from \"ahooks\";\nimport classNames from \"classnames\";\nimport { CustomCompletionConfig } from \"./types\";\nimport { createCustomCompletionsSource, lintJavaScriptCode } from \"./utils\";\nimport \"./completion.css\";\n\nexport interface CodeMirrorEditorProps extends ComponentProps<typeof CodeMirror> {\n languageMode: \"javascript\" | \"json\" | \"sql\";\n code: string;\n onChange: (v: string) => void;\n wrapperClassName?: string;\n wrapperStyle?: React.CSSProperties;\n environment?: \"browser\" | \"node\"; // 运行环境选择\n placeholder?: string; // placeholder 文本\n /** 是否显示左侧错误图标,默认为 false */\n showLintGutter?: boolean;\n /** 自定义补全配置 */\n customCompletions?: CustomCompletionConfig;\n}\n\nexport const CodeMirrorEditor = (props: CodeMirrorEditorProps) => {\n const {\n languageMode,\n code,\n onChange,\n wrapperClassName,\n wrapperStyle,\n environment = \"browser\",\n placeholder: placeholderText,\n showLintGutter = false,\n customCompletions,\n ...restCodeMirrorProps\n } = props;\n\n const handleOnChange = (value: string) => {\n onChange?.(value);\n };\n\n // 创建自定义补全源,用于全局对象方法补全和自定义变量/函数补全\n const createCustomCompletions = useCallback(\n () => createCustomCompletionsSource(customCompletions),\n [customCompletions],\n );\n\n // 自定义JavaScript语法检查器\n const createJSLinter: () => LintSource = useMemoizedFn(() => {\n return (view: EditorView) => {\n const code = view.state.doc.toString() as string;\n return lintJavaScriptCode(code, environment, view);\n };\n });\n\n // 自定义JSON语法检查器\n const createJSONLinter: () => LintSource = () => {\n const fn: LintSource = (view: any) => {\n const diagnostics: Diagnostic[] = [];\n const code = view.state.doc.toString();\n\n try {\n JSON.parse(code);\n } catch (error: any) {\n const match = error.message.match(/position (\\d+)/);\n if (match) {\n const pos = parseInt(match[1]);\n const line = view.state.doc.lineAt(pos);\n const from = line.from;\n const to = line.to;\n\n diagnostics.push({\n from,\n to,\n severity: \"error\",\n message: `JSON解析错误: ${error.message.replace(\"JSON.parse: \", \"\")}`,\n });\n }\n }\n return diagnostics;\n };\n return fn;\n };\n\n // 为JavaScript语言添加自定义补全源\n const langExtension = useMemo(() => {\n if (languageMode === \"javascript\") {\n return [\n javascript(),\n javascriptLanguage.data.of({\n autocomplete: createCustomCompletions(),\n }),\n ];\n }\n if (languageMode === \"json\") {\n return json();\n }\n return sql();\n }, [languageMode, createCustomCompletions]);\n const codeLinter = () => {\n if (languageMode === \"javascript\") {\n return createJSLinter();\n }\n if (languageMode === \"json\") {\n return createJSONLinter();\n }\n return null;\n };\n\n return (\n <div\n className={classNames(\n \"biz-border-one biz-border-[#393b4a]\",\n 'rp-[[class~=\"cm-gutters-before\"]]:biz-border-r-[1px] rp-[[class~=\"cm-gutters-before\"]]:biz-border-[#393b4a]',\n 'rp-[[class~=\"cm-gutters-before\"]]:biz-border-solid rp-[[class~=\"cm-gutters-before\"]]:biz-border-0',\n // 防止聚焦时边框变成虚线\n 'rp-[[class~=\"cm-focused\"]]:!biz-outline-0',\n \"rp-[.cm-completionDetail]:!biz-text-[#ffffff66] rp-[.cm-completionDetail]:!biz-not-italic\",\n wrapperClassName,\n )}\n style={wrapperStyle}\n >\n <CodeMirror\n {...restCodeMirrorProps}\n value={code}\n extensions={[\n ...(Array.isArray(langExtension) ? langExtension : [langExtension]),\n ...(showLintGutter ? [lintGutter()] : []),\n linter(codeLinter()),\n ...(placeholderText && !code ? [placeholder(placeholderText)] : []),\n EditorView.lineWrapping, // 添加自动换行扩展\n ]}\n theme={abcdefInit({\n settings: {\n caret: \"#c6c6c6\",\n fontFamily: \"monospace\",\n gutterBackground: \"#111111\", // 行号列背景色\n gutterForeground: \"rgba(255, 255, 255, 0.8)\", // 行号文字颜色\n gutterBorder: \"#393b4a\", // 行号列边框颜色\n lineHighlight: \"rgba(255, 255, 255, 0.031)\", // 高亮行背景色\n },\n styles: [\n { tag: t.comment, color: \"#6272a4\" },\n { tag: t.string, color: \"#61afef\" }, // 字符串引号中的文字\n { tag: t.number, color: \"#e5c07b\" },\n ],\n })}\n onChange={handleOnChange}\n basicSetup={{\n lineNumbers: true,\n highlightActiveLineGutter: true,\n highlightActiveLine: true,\n bracketMatching: true,\n closeBrackets: true,\n foldGutter: true,\n tabSize: 2,\n indentOnInput: true,\n syntaxHighlighting: true,\n autocompletion: true,\n ...(typeof restCodeMirrorProps?.basicSetup === \"object\"\n ? restCodeMirrorProps.basicSetup\n : undefined),\n }}\n />\n </div>\n );\n};\n"],"names":["code","jsx","CodeMirror","t"],"mappings":"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"}
1
+ {"version":3,"file":"code-mirror-editor.es.js","sources":["../../../../src/components/code-mirror-editor/code-mirror-editor.tsx"],"sourcesContent":["import { ComponentProps, useCallback, useMemo } from \"react\";\nimport { javascript, javascriptLanguage } from \"@codemirror/lang-javascript\";\nimport { json } from \"@codemirror/lang-json\";\nimport { sql } from \"@codemirror/lang-sql\";\nimport { Diagnostic, linter, lintGutter, LintSource } from \"@codemirror/lint\";\nimport { EditorView, placeholder } from \"@codemirror/view\";\nimport { tags as t } from \"@lezer/highlight\";\nimport { abcdefInit } from \"@uiw/codemirror-theme-abcdef\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { useMemoizedFn } from \"ahooks\";\nimport classNames from \"classnames\";\nimport { CustomCompletionConfig } from \"./types\";\nimport { createCustomCompletionsSource, lintJavaScriptCode } from \"./utils\";\nimport \"./completion.css\";\n\nexport interface CodeMirrorEditorProps extends ComponentProps<typeof CodeMirror> {\n languageMode: \"javascript\" | \"json\" | \"sql\";\n value?: string;\n onChange?: (v: string) => void;\n wrapperClassName?: string;\n wrapperStyle?: React.CSSProperties;\n environment?: \"browser\" | \"node\"; // 运行环境选择\n placeholder?: string; // placeholder 文本\n /** 是否显示左侧错误图标,默认为 false */\n showLintGutter?: boolean;\n /** 自定义补全配置 */\n customCompletions?: CustomCompletionConfig;\n}\n\nexport const CodeMirrorEditor = (props: CodeMirrorEditorProps) => {\n const {\n languageMode,\n value,\n onChange,\n wrapperClassName,\n wrapperStyle,\n environment = \"browser\",\n placeholder: placeholderText,\n showLintGutter = false,\n customCompletions,\n ...restCodeMirrorProps\n } = props;\n\n const handleOnChange = (value: string) => {\n onChange?.(value);\n };\n\n // 创建自定义补全源,用于全局对象方法补全和自定义变量/函数补全\n const createCustomCompletions = useCallback(\n () => createCustomCompletionsSource(customCompletions),\n [customCompletions],\n );\n\n // 自定义JavaScript语法检查器\n const createJSLinter: () => LintSource = useMemoizedFn(() => {\n return (view: EditorView) => {\n const code = view.state.doc.toString() as string;\n return lintJavaScriptCode(code, environment, view);\n };\n });\n\n // 自定义JSON语法检查器\n const createJSONLinter: () => LintSource = () => {\n const fn: LintSource = (view: any) => {\n const diagnostics: Diagnostic[] = [];\n const code = view.state.doc.toString();\n\n try {\n JSON.parse(code);\n } catch (error: any) {\n const match = error.message.match(/position (\\d+)/);\n if (match) {\n const pos = parseInt(match[1]);\n const line = view.state.doc.lineAt(pos);\n const from = line.from;\n const to = line.to;\n\n diagnostics.push({\n from,\n to,\n severity: \"error\",\n message: `JSON解析错误: ${error.message.replace(\"JSON.parse: \", \"\")}`,\n });\n }\n }\n return diagnostics;\n };\n return fn;\n };\n\n // 为JavaScript语言添加自定义补全源\n const langExtension = useMemo(() => {\n if (languageMode === \"javascript\") {\n return [\n javascript(),\n javascriptLanguage.data.of({\n autocomplete: createCustomCompletions(),\n }),\n ];\n }\n if (languageMode === \"json\") {\n return json();\n }\n return sql();\n }, [languageMode, createCustomCompletions]);\n const codeLinter = () => {\n if (languageMode === \"javascript\") {\n return createJSLinter();\n }\n if (languageMode === \"json\") {\n return createJSONLinter();\n }\n return null;\n };\n\n return (\n <div\n className={classNames(\n \"biz-border-one biz-border-[#393b4a]\",\n 'rp-[[class~=\"cm-gutters-before\"]]:biz-border-r-[1px] rp-[[class~=\"cm-gutters-before\"]]:biz-border-[#393b4a]',\n 'rp-[[class~=\"cm-gutters-before\"]]:biz-border-solid rp-[[class~=\"cm-gutters-before\"]]:biz-border-0',\n // 防止聚焦时边框变成虚线\n 'rp-[[class~=\"cm-focused\"]]:!biz-outline-0',\n \"rp-[.cm-completionDetail]:!biz-text-[#ffffff66] rp-[.cm-completionDetail]:!biz-not-italic\",\n wrapperClassName,\n )}\n style={wrapperStyle}\n >\n <CodeMirror\n {...restCodeMirrorProps}\n value={value}\n extensions={[\n ...(Array.isArray(langExtension) ? langExtension : [langExtension]),\n ...(showLintGutter ? [lintGutter()] : []),\n linter(codeLinter()),\n ...(placeholderText && !value ? [placeholder(placeholderText)] : []),\n EditorView.lineWrapping, // 添加自动换行扩展\n ]}\n theme={abcdefInit({\n settings: {\n caret: \"#c6c6c6\",\n fontFamily: \"monospace\",\n gutterBackground: \"#111111\", // 行号列背景色\n gutterForeground: \"rgba(255, 255, 255, 0.8)\", // 行号文字颜色\n gutterBorder: \"#393b4a\", // 行号列边框颜色\n lineHighlight: \"rgba(255, 255, 255, 0.031)\", // 高亮行背景色\n },\n styles: [\n { tag: t.comment, color: \"#6272a4\" },\n { tag: t.string, color: \"#61afef\" }, // 字符串引号中的文字\n { tag: t.number, color: \"#e5c07b\" },\n ],\n })}\n onChange={handleOnChange}\n basicSetup={{\n lineNumbers: true,\n highlightActiveLineGutter: true,\n highlightActiveLine: true,\n bracketMatching: true,\n closeBrackets: true,\n foldGutter: true,\n tabSize: 2,\n indentOnInput: true,\n syntaxHighlighting: true,\n autocompletion: true,\n ...(typeof restCodeMirrorProps?.basicSetup === \"object\"\n ? restCodeMirrorProps.basicSetup\n : undefined),\n }}\n />\n </div>\n );\n};\n"],"names":["value","jsx","CodeMirror","t"],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { j as jsxRuntimeExports } from "../../node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.es.js";
2
+ import { getContextMenuItems } from "./utils.es.js";
3
+ const EasyvReactGridPlusContextMenu = ({
4
+ visible,
5
+ x,
6
+ y,
7
+ isRowHeaderMenu,
8
+ isColHeaderMenu,
9
+ insertRowCount,
10
+ insertColCount,
11
+ setInsertRowCount,
12
+ setInsertColCount,
13
+ runMenuAction
14
+ }) => {
15
+ if (!visible) return null;
16
+ const items = getContextMenuItems(isRowHeaderMenu, isColHeaderMenu).filter(
17
+ (item) => item.visible
18
+ );
19
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
20
+ "div",
21
+ {
22
+ onMouseDown: (event) => {
23
+ event.stopPropagation();
24
+ },
25
+ style: {
26
+ position: "fixed",
27
+ left: x,
28
+ top: y,
29
+ width: 220,
30
+ backgroundColor: "#232630",
31
+ border: "1px solid #2f3440",
32
+ boxShadow: "1px 2px 5px 2px #33333326",
33
+ borderRadius: 6,
34
+ padding: "6px 0",
35
+ fontSize: 12,
36
+ zIndex: 1e4
37
+ },
38
+ children: items.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
39
+ "div",
40
+ {
41
+ onClick: () => {
42
+ void runMenuAction(item.key);
43
+ },
44
+ className: "biz-px-3 biz-h-[36px] biz-flex biz-items-center biz-justify-between biz-cursor-pointer biz-text-[#b4b7c1] hover:biz-bg-[#3a89fe] hover:biz-text-white biz-transition-colors",
45
+ children: [
46
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: item.label }),
47
+ item.withInput && /* @__PURE__ */ jsxRuntimeExports.jsxs(
48
+ "div",
49
+ {
50
+ onClick: (event) => {
51
+ event.stopPropagation();
52
+ },
53
+ className: "biz-flex biz-items-center biz-gap-1",
54
+ children: [
55
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
56
+ "input",
57
+ {
58
+ value: item.withInput === "row" ? insertRowCount : insertColCount,
59
+ onChange: (event) => {
60
+ const value = Number(event.target.value || "1");
61
+ if (item.withInput === "row") {
62
+ setInsertRowCount(Number.isFinite(value) && value > 0 ? Math.floor(value) : 1);
63
+ } else {
64
+ setInsertColCount(Number.isFinite(value) && value > 0 ? Math.floor(value) : 1);
65
+ }
66
+ },
67
+ className: "biz-w-10 biz-h-5 biz-text-center biz-bg-[#1b1e25] biz-border biz-border-[#3a3f4b] biz-text-[#b4b7c1]"
68
+ }
69
+ ),
70
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: item.withInput === "row" ? "行" : "列" })
71
+ ]
72
+ }
73
+ )
74
+ ]
75
+ },
76
+ item.key
77
+ ))
78
+ }
79
+ );
80
+ };
81
+ export {
82
+ EasyvReactGridPlusContextMenu
83
+ };
84
+ //# sourceMappingURL=easyv-react-grid-plus-context-menu.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easyv-react-grid-plus-context-menu.es.js","sources":["../../../../src/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { getContextMenuItems } from \"./utils\";\n\ninterface EasyvReactGridPlusContextMenuProps {\n visible: boolean;\n x: number;\n y: number;\n isRowHeaderMenu: boolean;\n isColHeaderMenu: boolean;\n insertRowCount: number;\n insertColCount: number;\n setInsertRowCount: (value: number) => void;\n setInsertColCount: (value: number) => void;\n runMenuAction: (action: string) => Promise<void>;\n}\n\nexport const EasyvReactGridPlusContextMenu = ({\n visible,\n x,\n y,\n isRowHeaderMenu,\n isColHeaderMenu,\n insertRowCount,\n insertColCount,\n setInsertRowCount,\n setInsertColCount,\n runMenuAction,\n}: EasyvReactGridPlusContextMenuProps) => {\n if (!visible) return null;\n\n const items = getContextMenuItems(isRowHeaderMenu, isColHeaderMenu).filter(\n (item) => item.visible,\n );\n\n return (\n <div\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n style={{\n position: \"fixed\",\n left: x,\n top: y,\n width: 220,\n backgroundColor: \"#232630\",\n border: \"1px solid #2f3440\",\n boxShadow: \"1px 2px 5px 2px #33333326\",\n borderRadius: 6,\n padding: \"6px 0\",\n fontSize: 12,\n zIndex: 10000,\n }}\n >\n {items.map((item) => (\n <div\n key={item.key}\n onClick={() => {\n void runMenuAction(item.key);\n }}\n className=\"biz-px-3 biz-h-[36px] biz-flex biz-items-center biz-justify-between biz-cursor-pointer biz-text-[#b4b7c1] hover:biz-bg-[#3a89fe] hover:biz-text-white biz-transition-colors\"\n >\n <span>{item.label}</span>\n {item.withInput && (\n <div\n onClick={(event) => {\n event.stopPropagation();\n }}\n className=\"biz-flex biz-items-center biz-gap-1\"\n >\n <input\n value={item.withInput === \"row\" ? insertRowCount : insertColCount}\n onChange={(event) => {\n const value = Number(event.target.value || \"1\");\n if (item.withInput === \"row\") {\n setInsertRowCount(Number.isFinite(value) && value > 0 ? Math.floor(value) : 1);\n } else {\n setInsertColCount(Number.isFinite(value) && value > 0 ? Math.floor(value) : 1);\n }\n }}\n className=\"biz-w-10 biz-h-5 biz-text-center biz-bg-[#1b1e25] biz-border biz-border-[#3a3f4b] biz-text-[#b4b7c1]\"\n />\n <span>{item.withInput === \"row\" ? \"行\" : \"列\"}</span>\n </div>\n )}\n </div>\n ))}\n </div>\n );\n};\n"],"names":["jsx","jsxs"],"mappings":";;AAgBO,MAAM,gCAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0C;AACpC,MAAA,CAAC,QAAgB,QAAA;AAErB,QAAM,QAAQ,oBAAoB,iBAAiB,eAAe,EAAE;AAAA,IAClE,CAAC,SAAS,KAAK;AAAA,EACjB;AAGE,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAa,CAAC,UAAU;AACtB,cAAM,gBAAgB;AAAA,MACxB;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,cAAc;AAAA,QACd,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MAEC,UAAA,MAAM,IAAI,CAAC,SACVC,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,SAAS,MAAM;AACR,iBAAA,cAAc,KAAK,GAAG;AAAA,UAC7B;AAAA,UACA,WAAU;AAAA,UAEV,UAAA;AAAA,YAACD,kCAAAA,IAAA,QAAA,EAAM,eAAK,MAAM,CAAA;AAAA,YACjB,KAAK,aACJC,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,CAAC,UAAU;AAClB,wBAAM,gBAAgB;AAAA,gBACxB;AAAA,gBACA,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAAD,kCAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO,KAAK,cAAc,QAAQ,iBAAiB;AAAA,sBACnD,UAAU,CAAC,UAAU;AACnB,8BAAM,QAAQ,OAAO,MAAM,OAAO,SAAS,GAAG;AAC1C,4BAAA,KAAK,cAAc,OAAO;AACV,4CAAA,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,wBAAA,OACxE;AACa,4CAAA,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,wBAAA;AAAA,sBAEjF;AAAA,sBACA,WAAU;AAAA,oBAAA;AAAA,kBACZ;AAAA,wDACC,QAAM,EAAA,UAAA,KAAK,cAAc,QAAQ,MAAM,IAAI,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAC9C;AAAA,QAAA;AAAA,QA3BG,KAAK;AAAA,MA8Bb,CAAA;AAAA,IAAA;AAAA,EACH;AAEJ;"}
@@ -0,0 +1,58 @@
1
+ import { j as jsxRuntimeExports } from "../../node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.es.js";
2
+ import React__default, { useState } from "react";
3
+ const EasyvReactGridPlusEditableCell = ({
4
+ value: initialValue,
5
+ row: rowIndex,
6
+ column: colIndex,
7
+ updateData,
8
+ isEditing,
9
+ onRequestEdit,
10
+ onFinishEdit
11
+ }) => {
12
+ const [value, setValue] = useState(initialValue);
13
+ const [isComposing, setIsComposing] = useState(false);
14
+ const onBlur = () => {
15
+ updateData(rowIndex, colIndex, value);
16
+ onFinishEdit();
17
+ };
18
+ const onKeyDown = (e) => {
19
+ const nativeEvent = e.nativeEvent;
20
+ if (isComposing || nativeEvent.isComposing || nativeEvent.keyCode === 229) {
21
+ return;
22
+ }
23
+ if (e.key === "Enter") {
24
+ updateData(rowIndex, colIndex, value);
25
+ onFinishEdit();
26
+ }
27
+ };
28
+ React__default.useEffect(() => {
29
+ setValue(initialValue);
30
+ }, [initialValue]);
31
+ if (isEditing) {
32
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
33
+ "input",
34
+ {
35
+ className: "biz-w-full biz-h-full biz-bg-transparent biz-border-none biz-outline-none biz-text-center biz-text-white biz-px-1",
36
+ value,
37
+ onChange: (e) => setValue(e.target.value),
38
+ onCompositionStart: () => setIsComposing(true),
39
+ onCompositionEnd: () => setIsComposing(false),
40
+ onBlur,
41
+ onKeyDown,
42
+ autoFocus: true
43
+ }
44
+ );
45
+ }
46
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
47
+ "div",
48
+ {
49
+ className: "biz-w-full biz-h-full biz-relative biz-flex biz-items-center biz-justify-center",
50
+ onDoubleClick: onRequestEdit,
51
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "biz-w-full biz-px-1 biz-overflow-hidden biz-text-ellipsis biz-whitespace-nowrap", children: value })
52
+ }
53
+ );
54
+ };
55
+ export {
56
+ EasyvReactGridPlusEditableCell
57
+ };
58
+ //# sourceMappingURL=easyv-react-grid-plus-editable-cell.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easyv-react-grid-plus-editable-cell.es.js","sources":["../../../../src/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\ninterface EasyvReactGridPlusEditableCellProps {\n value: any;\n row: number;\n column: number;\n updateData: (row: number, col: number, value: any) => void;\n isEditing: boolean;\n onRequestEdit: () => void;\n onFinishEdit: () => void;\n}\n\nexport const EasyvReactGridPlusEditableCell = ({\n value: initialValue,\n row: rowIndex,\n column: colIndex,\n updateData,\n isEditing,\n onRequestEdit,\n onFinishEdit,\n}: EasyvReactGridPlusEditableCellProps) => {\n const [value, setValue] = useState(initialValue);\n const [isComposing, setIsComposing] = useState(false);\n\n const onBlur = () => {\n updateData(rowIndex, colIndex, value);\n onFinishEdit();\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const nativeEvent = e.nativeEvent as KeyboardEvent & {\n isComposing?: boolean;\n keyCode?: number;\n };\n if (isComposing || nativeEvent.isComposing || nativeEvent.keyCode === 229) {\n return;\n }\n if (e.key === \"Enter\") {\n updateData(rowIndex, colIndex, value);\n onFinishEdit();\n }\n };\n\n React.useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n if (isEditing) {\n return (\n <input\n className=\"biz-w-full biz-h-full biz-bg-transparent biz-border-none biz-outline-none biz-text-center biz-text-white biz-px-1\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onCompositionStart={() => setIsComposing(true)}\n onCompositionEnd={() => setIsComposing(false)}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n autoFocus\n />\n );\n }\n\n return (\n <div\n className=\"biz-w-full biz-h-full biz-relative biz-flex biz-items-center biz-justify-center\"\n onDoubleClick={onRequestEdit}\n >\n <div className=\"biz-w-full biz-px-1 biz-overflow-hidden biz-text-ellipsis biz-whitespace-nowrap\">\n {value}\n </div>\n </div>\n );\n};\n"],"names":["React","jsx"],"mappings":";;AAYO,MAAM,iCAAiC,CAAC;AAAA,EAC7C,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA2C;AACzC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AAEpD,QAAM,SAAS,MAAM;AACR,eAAA,UAAU,UAAU,KAAK;AACvB,iBAAA;AAAA,EACf;AAEM,QAAA,YAAY,CAAC,MAA2B;AAC5C,UAAM,cAAc,EAAE;AAItB,QAAI,eAAe,YAAY,eAAe,YAAY,YAAY,KAAK;AACzE;AAAA,IAAA;AAEE,QAAA,EAAE,QAAQ,SAAS;AACV,iBAAA,UAAU,UAAU,KAAK;AACvB,mBAAA;AAAA,IAAA;AAAA,EAEjB;AAEAA,iBAAM,UAAU,MAAM;AACpB,aAAS,YAAY;AAAA,EAAA,GACpB,CAAC,YAAY,CAAC;AAEjB,MAAI,WAAW;AAEX,WAAAC,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV;AAAA,QACA,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,QACxC,oBAAoB,MAAM,eAAe,IAAI;AAAA,QAC7C,kBAAkB,MAAM,eAAe,KAAK;AAAA,QAC5C;AAAA,QACA;AAAA,QACA,WAAS;AAAA,MAAA;AAAA,IACX;AAAA,EAAA;AAKF,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,eAAe;AAAA,MAEf,UAACA,kCAAA,IAAA,OAAA,EAAI,WAAU,mFACZ,UACH,MAAA,CAAA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
@@ -0,0 +1,97 @@
1
+ import { useRef, useCallback, useEffect } from "react";
2
+ const useGridSelectionAutoScroll = ({
3
+ parentRef,
4
+ isSelectingRange,
5
+ selectionStart,
6
+ selectRangeCells,
7
+ stopSelectingRange
8
+ }) => {
9
+ const selectionPointerRef = useRef(null);
10
+ const autoScrollFrameRef = useRef(null);
11
+ const setSelectionPointer = useCallback((x, y) => {
12
+ selectionPointerRef.current = { x, y };
13
+ }, []);
14
+ const updateSelectionByPointer = useCallback(
15
+ (clientX, clientY) => {
16
+ if (!isSelectingRange || !selectionStart || !parentRef.current) return;
17
+ const hitElement = document.elementFromPoint(clientX, clientY);
18
+ if (!hitElement) return;
19
+ const cellElement = hitElement.closest(
20
+ "[data-grid-row][data-grid-col]"
21
+ );
22
+ if (!cellElement) return;
23
+ const rowText = cellElement.getAttribute("data-grid-row");
24
+ const colText = cellElement.getAttribute("data-grid-col");
25
+ const row = Number(rowText);
26
+ const col = Number(colText);
27
+ if (Number.isNaN(row) || Number.isNaN(col)) return;
28
+ selectRangeCells(selectionStart.row, selectionStart.col, row, col);
29
+ },
30
+ [isSelectingRange, parentRef, selectRangeCells, selectionStart]
31
+ );
32
+ useEffect(() => {
33
+ if (!isSelectingRange) return;
34
+ const onMouseUp = () => {
35
+ selectionPointerRef.current = null;
36
+ if (autoScrollFrameRef.current !== null) {
37
+ cancelAnimationFrame(autoScrollFrameRef.current);
38
+ autoScrollFrameRef.current = null;
39
+ }
40
+ stopSelectingRange();
41
+ };
42
+ window.addEventListener("mouseup", onMouseUp);
43
+ return () => {
44
+ window.removeEventListener("mouseup", onMouseUp);
45
+ };
46
+ }, [isSelectingRange, stopSelectingRange]);
47
+ useEffect(() => {
48
+ if (!isSelectingRange) return;
49
+ const onMouseMove = (event) => {
50
+ setSelectionPointer(event.clientX, event.clientY);
51
+ };
52
+ window.addEventListener("mousemove", onMouseMove);
53
+ return () => {
54
+ window.removeEventListener("mousemove", onMouseMove);
55
+ };
56
+ }, [isSelectingRange, setSelectionPointer]);
57
+ useEffect(() => {
58
+ if (!isSelectingRange || !selectionStart) return;
59
+ const edgeDistance = 32;
60
+ const maxSpeed = 10;
61
+ const tick = () => {
62
+ if (!parentRef.current) {
63
+ autoScrollFrameRef.current = requestAnimationFrame(tick);
64
+ return;
65
+ }
66
+ const pointer = selectionPointerRef.current;
67
+ if (pointer) {
68
+ const rect = parentRef.current.getBoundingClientRect();
69
+ const leftRatio = Math.max(0, (rect.left + edgeDistance - pointer.x) / edgeDistance);
70
+ const rightRatio = Math.max(0, (pointer.x - (rect.right - edgeDistance)) / edgeDistance);
71
+ const topRatio = Math.max(0, (rect.top + edgeDistance - pointer.y) / edgeDistance);
72
+ const bottomRatio = Math.max(0, (pointer.y - (rect.bottom - edgeDistance)) / edgeDistance);
73
+ const scrollX = rightRatio > 0 ? Math.min(maxSpeed, rightRatio * maxSpeed) : -Math.min(maxSpeed, leftRatio * maxSpeed);
74
+ const scrollY = bottomRatio > 0 ? Math.min(maxSpeed, bottomRatio * maxSpeed) : -Math.min(maxSpeed, topRatio * maxSpeed);
75
+ if (scrollX !== 0 || scrollY !== 0) {
76
+ parentRef.current.scrollBy(scrollX, scrollY);
77
+ }
78
+ updateSelectionByPointer(pointer.x, pointer.y);
79
+ }
80
+ autoScrollFrameRef.current = requestAnimationFrame(tick);
81
+ };
82
+ autoScrollFrameRef.current = requestAnimationFrame(tick);
83
+ return () => {
84
+ if (autoScrollFrameRef.current !== null) {
85
+ cancelAnimationFrame(autoScrollFrameRef.current);
86
+ autoScrollFrameRef.current = null;
87
+ }
88
+ };
89
+ }, [isSelectingRange, parentRef, selectionStart, updateSelectionByPointer]);
90
+ return {
91
+ setSelectionPointer
92
+ };
93
+ };
94
+ export {
95
+ useGridSelectionAutoScroll
96
+ };
97
+ //# sourceMappingURL=easyv-react-grid-plus-selection.hook.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easyv-react-grid-plus-selection.hook.es.js","sources":["../../../../src/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.ts"],"sourcesContent":["import { RefObject, useCallback, useEffect, useRef } from \"react\";\n\ninterface UseGridSelectionAutoScrollOptions {\n parentRef: RefObject<HTMLDivElement>;\n isSelectingRange: boolean;\n selectionStart: { row: number; col: number } | null;\n selectRangeCells: (startRow: number, startCol: number, endRow: number, endCol: number) => void;\n stopSelectingRange: () => void;\n}\n\nexport const useGridSelectionAutoScroll = ({\n parentRef,\n isSelectingRange,\n selectionStart,\n selectRangeCells,\n stopSelectingRange,\n}: UseGridSelectionAutoScrollOptions) => {\n const selectionPointerRef = useRef<{ x: number; y: number } | null>(null);\n const autoScrollFrameRef = useRef<number | null>(null);\n\n const setSelectionPointer = useCallback((x: number, y: number) => {\n selectionPointerRef.current = { x, y };\n }, []);\n\n const updateSelectionByPointer = useCallback(\n (clientX: number, clientY: number) => {\n if (!isSelectingRange || !selectionStart || !parentRef.current) return;\n const hitElement = document.elementFromPoint(clientX, clientY);\n if (!hitElement) return;\n const cellElement = hitElement.closest(\n \"[data-grid-row][data-grid-col]\",\n ) as HTMLElement | null;\n if (!cellElement) return;\n const rowText = cellElement.getAttribute(\"data-grid-row\");\n const colText = cellElement.getAttribute(\"data-grid-col\");\n const row = Number(rowText);\n const col = Number(colText);\n if (Number.isNaN(row) || Number.isNaN(col)) return;\n selectRangeCells(selectionStart.row, selectionStart.col, row, col);\n },\n [isSelectingRange, parentRef, selectRangeCells, selectionStart],\n );\n\n useEffect(() => {\n if (!isSelectingRange) return;\n const onMouseUp = () => {\n selectionPointerRef.current = null;\n if (autoScrollFrameRef.current !== null) {\n cancelAnimationFrame(autoScrollFrameRef.current);\n autoScrollFrameRef.current = null;\n }\n stopSelectingRange();\n };\n window.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n }, [isSelectingRange, stopSelectingRange]);\n\n useEffect(() => {\n if (!isSelectingRange) return;\n const onMouseMove = (event: MouseEvent) => {\n setSelectionPointer(event.clientX, event.clientY);\n };\n window.addEventListener(\"mousemove\", onMouseMove);\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n };\n }, [isSelectingRange, setSelectionPointer]);\n\n useEffect(() => {\n if (!isSelectingRange || !selectionStart) return;\n const edgeDistance = 32;\n const maxSpeed = 10;\n const tick = () => {\n if (!parentRef.current) {\n autoScrollFrameRef.current = requestAnimationFrame(tick);\n return;\n }\n const pointer = selectionPointerRef.current;\n if (pointer) {\n const rect = parentRef.current.getBoundingClientRect();\n const leftRatio = Math.max(0, (rect.left + edgeDistance - pointer.x) / edgeDistance);\n const rightRatio = Math.max(0, (pointer.x - (rect.right - edgeDistance)) / edgeDistance);\n const topRatio = Math.max(0, (rect.top + edgeDistance - pointer.y) / edgeDistance);\n const bottomRatio = Math.max(0, (pointer.y - (rect.bottom - edgeDistance)) / edgeDistance);\n const scrollX =\n rightRatio > 0\n ? Math.min(maxSpeed, rightRatio * maxSpeed)\n : -Math.min(maxSpeed, leftRatio * maxSpeed);\n const scrollY =\n bottomRatio > 0\n ? Math.min(maxSpeed, bottomRatio * maxSpeed)\n : -Math.min(maxSpeed, topRatio * maxSpeed);\n if (scrollX !== 0 || scrollY !== 0) {\n parentRef.current.scrollBy(scrollX, scrollY);\n }\n updateSelectionByPointer(pointer.x, pointer.y);\n }\n autoScrollFrameRef.current = requestAnimationFrame(tick);\n };\n autoScrollFrameRef.current = requestAnimationFrame(tick);\n return () => {\n if (autoScrollFrameRef.current !== null) {\n cancelAnimationFrame(autoScrollFrameRef.current);\n autoScrollFrameRef.current = null;\n }\n };\n }, [isSelectingRange, parentRef, selectionStart, updateSelectionByPointer]);\n\n return {\n setSelectionPointer,\n };\n};\n"],"names":[],"mappings":"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"}