@nokecy/qc-ui 1.0.65 → 1.0.67

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 (197) hide show
  1. package/dist/cjs/RuleBuilder/LogicSelector.d.ts +23 -0
  2. package/dist/cjs/RuleBuilder/LogicSelector.js +54 -0
  3. package/dist/cjs/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
  4. package/dist/cjs/RuleBuilder/RuleBuilderContainer.js +209 -0
  5. package/dist/cjs/RuleBuilder/RuleCard.d.ts +20 -0
  6. package/dist/cjs/RuleBuilder/RuleCard.js +196 -0
  7. package/dist/cjs/RuleBuilder/RuleGroupEditor.d.ts +25 -0
  8. package/dist/cjs/RuleBuilder/RuleGroupEditor.js +191 -0
  9. package/dist/cjs/RuleBuilder/constants/operators.d.ts +47 -0
  10. package/dist/cjs/RuleBuilder/constants/operators.js +172 -0
  11. package/dist/cjs/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
  12. package/dist/cjs/RuleBuilder/context/RuleBuilderContext.js +286 -0
  13. package/dist/cjs/RuleBuilder/index.d.ts +25 -0
  14. package/dist/cjs/RuleBuilder/index.js +308 -0
  15. package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
  16. package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.js +80 -0
  17. package/dist/cjs/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
  18. package/dist/cjs/RuleBuilder/inputs/MultiValueInput.js +128 -0
  19. package/dist/cjs/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
  20. package/dist/cjs/RuleBuilder/inputs/SingleValueInput.js +81 -0
  21. package/dist/cjs/RuleBuilder/inputs/ValueInput.d.ts +29 -0
  22. package/dist/cjs/RuleBuilder/inputs/ValueInput.js +80 -0
  23. package/dist/cjs/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
  24. package/dist/cjs/RuleBuilder/selectors/FieldSelector.js +45 -0
  25. package/dist/cjs/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
  26. package/dist/cjs/RuleBuilder/selectors/OperatorSelector.js +51 -0
  27. package/dist/cjs/RuleBuilder/styles/index.module.less +443 -0
  28. package/dist/cjs/RuleBuilder/styles/index.module.less.d.ts +43 -0
  29. package/dist/cjs/RuleBuilder/types/index.d.ts +232 -0
  30. package/dist/cjs/RuleBuilder/types/index.js +83 -0
  31. package/dist/cjs/RuleBuilder/utils/pathHelpers.d.ts +65 -0
  32. package/dist/cjs/RuleBuilder/utils/pathHelpers.js +241 -0
  33. package/dist/cjs/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
  34. package/dist/cjs/RuleBuilder/utils/ruleHelpers.js +154 -0
  35. package/dist/cjs/RuleBuilder/utils/validation.d.ts +25 -0
  36. package/dist/cjs/RuleBuilder/utils/validation.js +241 -0
  37. package/dist/cjs/components/RegexEditor/core/RegexEditor.d.ts +34 -0
  38. package/dist/cjs/components/RegexEditor/core/RegexEditor.js +223 -0
  39. package/dist/cjs/components/RegexEditor/core/RegexEditor.less +119 -0
  40. package/dist/cjs/components/RegexEditor/core/extensions/errorMarker.d.ts +49 -0
  41. package/dist/cjs/components/RegexEditor/core/extensions/errorMarker.js +158 -0
  42. package/dist/cjs/components/RegexEditor/core/types.d.ts +79 -0
  43. package/dist/cjs/components/RegexEditor/core/types.js +5 -0
  44. package/dist/cjs/components/RegexEditor/hooks/index.d.ts +9 -0
  45. package/dist/cjs/components/RegexEditor/hooks/index.js +19 -0
  46. package/dist/cjs/components/RegexEditor/hooks/useRegexTester.d.ts +95 -0
  47. package/dist/cjs/components/RegexEditor/hooks/useRegexTester.js +234 -0
  48. package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.d.ts +71 -0
  49. package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.js +215 -0
  50. package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.d.ts +64 -0
  51. package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.js +438 -0
  52. package/dist/cjs/components/RegexEditor/index.d.ts +16 -0
  53. package/dist/cjs/components/RegexEditor/index.js +232 -0
  54. package/dist/cjs/components/RegexEditor/templates/TemplateSelector.d.ts +36 -0
  55. package/dist/cjs/components/RegexEditor/templates/TemplateSelector.js +322 -0
  56. package/dist/cjs/components/RegexEditor/templates/builtinTemplates.d.ts +36 -0
  57. package/dist/cjs/components/RegexEditor/templates/builtinTemplates.js +340 -0
  58. package/dist/cjs/components/RegexEditor/templates/index.d.ts +10 -0
  59. package/dist/cjs/components/RegexEditor/templates/index.js +184 -0
  60. package/dist/cjs/components/RegexEditor/templates/storage.d.ts +74 -0
  61. package/dist/cjs/components/RegexEditor/templates/storage.js +337 -0
  62. package/dist/cjs/components/RegexEditor/templates/templateManager.d.ts +67 -0
  63. package/dist/cjs/components/RegexEditor/templates/templateManager.js +277 -0
  64. package/dist/cjs/components/RegexEditor/templates/types.d.ts +111 -0
  65. package/dist/cjs/components/RegexEditor/templates/types.js +94 -0
  66. package/dist/cjs/components/RegexEditor/testing/types.d.ts +55 -0
  67. package/dist/cjs/components/RegexEditor/testing/types.js +5 -0
  68. package/dist/cjs/components/RegexEditor/validation/complexity.d.ts +22 -0
  69. package/dist/cjs/components/RegexEditor/validation/complexity.js +196 -0
  70. package/dist/cjs/components/RegexEditor/validation/parser.d.ts +53 -0
  71. package/dist/cjs/components/RegexEditor/validation/parser.js +129 -0
  72. package/dist/cjs/components/RegexEditor/validation/types.d.ts +146 -0
  73. package/dist/cjs/components/RegexEditor/validation/types.js +5 -0
  74. package/dist/cjs/components/RegexEditor/validation/validator.d.ts +60 -0
  75. package/dist/cjs/components/RegexEditor/validation/validator.js +218 -0
  76. package/dist/cjs/components/RegexEditor/visualizer/FlagsSelector.d.ts +20 -0
  77. package/dist/cjs/components/RegexEditor/visualizer/FlagsSelector.js +98 -0
  78. package/dist/cjs/components/RegexEditor/visualizer/MatchItem.d.ts +25 -0
  79. package/dist/cjs/components/RegexEditor/visualizer/MatchItem.js +201 -0
  80. package/dist/cjs/components/RegexEditor/visualizer/RegexRailroadDiagram.d.ts +32 -0
  81. package/dist/cjs/components/RegexEditor/visualizer/RegexRailroadDiagram.js +192 -0
  82. package/dist/cjs/components/RegexEditor/visualizer/RegexTester.d.ts +22 -0
  83. package/dist/cjs/components/RegexEditor/visualizer/RegexTester.js +255 -0
  84. package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.d.ts +19 -0
  85. package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.js +155 -0
  86. package/dist/cjs/components/RegexEditor/visualizer/index.d.ts +12 -0
  87. package/dist/cjs/components/RegexEditor/visualizer/index.js +76 -0
  88. package/dist/cjs/components/RegexEditor/visualizer/types.d.ts +131 -0
  89. package/dist/cjs/components/RegexEditor/visualizer/types.js +5 -0
  90. package/dist/cjs/components/RegexEditor/visualizer/utils.d.ts +106 -0
  91. package/dist/cjs/components/RegexEditor/visualizer/utils.js +268 -0
  92. package/dist/cjs/index.d.ts +5 -1
  93. package/dist/cjs/index.js +62 -0
  94. package/dist/cjs/standardFormDialog/StandardFormDialog.js +26 -5
  95. package/dist/cjs/standardFormDialog/useStandardFormSchema.d.ts +1 -1
  96. package/dist/cjs/standardFormDialog/withStandardForm.d.ts +2 -2
  97. package/dist/cjs/types/railroad-diagrams.d.ts +59 -0
  98. package/dist/cjs/types/regexp-tree.d.ts +175 -0
  99. package/dist/esm/RuleBuilder/LogicSelector.d.ts +23 -0
  100. package/dist/esm/RuleBuilder/LogicSelector.js +47 -0
  101. package/dist/esm/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
  102. package/dist/esm/RuleBuilder/RuleBuilderContainer.js +203 -0
  103. package/dist/esm/RuleBuilder/RuleCard.d.ts +20 -0
  104. package/dist/esm/RuleBuilder/RuleCard.js +191 -0
  105. package/dist/esm/RuleBuilder/RuleGroupEditor.d.ts +25 -0
  106. package/dist/esm/RuleBuilder/RuleGroupEditor.js +184 -0
  107. package/dist/esm/RuleBuilder/constants/operators.d.ts +47 -0
  108. package/dist/esm/RuleBuilder/constants/operators.js +169 -0
  109. package/dist/esm/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
  110. package/dist/esm/RuleBuilder/context/RuleBuilderContext.js +271 -0
  111. package/dist/esm/RuleBuilder/index.d.ts +25 -0
  112. package/dist/esm/RuleBuilder/index.js +42 -0
  113. package/dist/esm/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
  114. package/dist/esm/RuleBuilder/inputs/BetweenValueInput.js +73 -0
  115. package/dist/esm/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
  116. package/dist/esm/RuleBuilder/inputs/MultiValueInput.js +121 -0
  117. package/dist/esm/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
  118. package/dist/esm/RuleBuilder/inputs/SingleValueInput.js +74 -0
  119. package/dist/esm/RuleBuilder/inputs/ValueInput.d.ts +29 -0
  120. package/dist/esm/RuleBuilder/inputs/ValueInput.js +73 -0
  121. package/dist/esm/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
  122. package/dist/esm/RuleBuilder/selectors/FieldSelector.js +38 -0
  123. package/dist/esm/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
  124. package/dist/esm/RuleBuilder/selectors/OperatorSelector.js +44 -0
  125. package/dist/esm/RuleBuilder/styles/index.module.less +443 -0
  126. package/dist/esm/RuleBuilder/styles/index.module.less.d.ts +43 -0
  127. package/dist/esm/RuleBuilder/types/index.d.ts +232 -0
  128. package/dist/esm/RuleBuilder/types/index.js +91 -0
  129. package/dist/esm/RuleBuilder/utils/pathHelpers.d.ts +65 -0
  130. package/dist/esm/RuleBuilder/utils/pathHelpers.js +228 -0
  131. package/dist/esm/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
  132. package/dist/esm/RuleBuilder/utils/ruleHelpers.js +145 -0
  133. package/dist/esm/RuleBuilder/utils/validation.d.ts +25 -0
  134. package/dist/esm/RuleBuilder/utils/validation.js +236 -0
  135. package/dist/esm/components/RegexEditor/core/RegexEditor.d.ts +34 -0
  136. package/dist/esm/components/RegexEditor/core/RegexEditor.js +214 -0
  137. package/dist/esm/components/RegexEditor/core/RegexEditor.less +119 -0
  138. package/dist/esm/components/RegexEditor/core/extensions/errorMarker.d.ts +49 -0
  139. package/dist/esm/components/RegexEditor/core/extensions/errorMarker.js +154 -0
  140. package/dist/esm/components/RegexEditor/core/types.d.ts +79 -0
  141. package/dist/esm/components/RegexEditor/core/types.js +1 -0
  142. package/dist/esm/components/RegexEditor/hooks/index.d.ts +9 -0
  143. package/dist/esm/components/RegexEditor/hooks/index.js +8 -0
  144. package/dist/esm/components/RegexEditor/hooks/useRegexTester.d.ts +95 -0
  145. package/dist/esm/components/RegexEditor/hooks/useRegexTester.js +230 -0
  146. package/dist/esm/components/RegexEditor/hooks/useRegexValidation.d.ts +71 -0
  147. package/dist/esm/components/RegexEditor/hooks/useRegexValidation.js +211 -0
  148. package/dist/esm/components/RegexEditor/hooks/useTemplateManager.d.ts +64 -0
  149. package/dist/esm/components/RegexEditor/hooks/useTemplateManager.js +430 -0
  150. package/dist/esm/components/RegexEditor/index.d.ts +16 -0
  151. package/dist/esm/components/RegexEditor/index.js +27 -0
  152. package/dist/esm/components/RegexEditor/templates/TemplateSelector.d.ts +36 -0
  153. package/dist/esm/components/RegexEditor/templates/TemplateSelector.js +316 -0
  154. package/dist/esm/components/RegexEditor/templates/builtinTemplates.d.ts +36 -0
  155. package/dist/esm/components/RegexEditor/templates/builtinTemplates.js +335 -0
  156. package/dist/esm/components/RegexEditor/templates/index.d.ts +10 -0
  157. package/dist/esm/components/RegexEditor/templates/index.js +19 -0
  158. package/dist/esm/components/RegexEditor/templates/storage.d.ts +74 -0
  159. package/dist/esm/components/RegexEditor/templates/storage.js +335 -0
  160. package/dist/esm/components/RegexEditor/templates/templateManager.d.ts +67 -0
  161. package/dist/esm/components/RegexEditor/templates/templateManager.js +274 -0
  162. package/dist/esm/components/RegexEditor/templates/types.d.ts +111 -0
  163. package/dist/esm/components/RegexEditor/templates/types.js +90 -0
  164. package/dist/esm/components/RegexEditor/testing/types.d.ts +55 -0
  165. package/dist/esm/components/RegexEditor/testing/types.js +1 -0
  166. package/dist/esm/components/RegexEditor/validation/complexity.d.ts +22 -0
  167. package/dist/esm/components/RegexEditor/validation/complexity.js +190 -0
  168. package/dist/esm/components/RegexEditor/validation/parser.d.ts +53 -0
  169. package/dist/esm/components/RegexEditor/validation/parser.js +123 -0
  170. package/dist/esm/components/RegexEditor/validation/types.d.ts +145 -0
  171. package/dist/esm/components/RegexEditor/validation/types.js +1 -0
  172. package/dist/esm/components/RegexEditor/validation/validator.d.ts +60 -0
  173. package/dist/esm/components/RegexEditor/validation/validator.js +213 -0
  174. package/dist/esm/components/RegexEditor/visualizer/FlagsSelector.d.ts +20 -0
  175. package/dist/esm/components/RegexEditor/visualizer/FlagsSelector.js +93 -0
  176. package/dist/esm/components/RegexEditor/visualizer/MatchItem.d.ts +25 -0
  177. package/dist/esm/components/RegexEditor/visualizer/MatchItem.js +194 -0
  178. package/dist/esm/components/RegexEditor/visualizer/RegexRailroadDiagram.d.ts +32 -0
  179. package/dist/esm/components/RegexEditor/visualizer/RegexRailroadDiagram.js +186 -0
  180. package/dist/esm/components/RegexEditor/visualizer/RegexTester.d.ts +22 -0
  181. package/dist/esm/components/RegexEditor/visualizer/RegexTester.js +248 -0
  182. package/dist/esm/components/RegexEditor/visualizer/astToRailroad.d.ts +18 -0
  183. package/dist/esm/components/RegexEditor/visualizer/astToRailroad.js +150 -0
  184. package/dist/esm/components/RegexEditor/visualizer/index.d.ts +12 -0
  185. package/dist/esm/components/RegexEditor/visualizer/index.js +17 -0
  186. package/dist/esm/components/RegexEditor/visualizer/types.d.ts +131 -0
  187. package/dist/esm/components/RegexEditor/visualizer/types.js +1 -0
  188. package/dist/esm/components/RegexEditor/visualizer/utils.d.ts +106 -0
  189. package/dist/esm/components/RegexEditor/visualizer/utils.js +256 -0
  190. package/dist/esm/index.d.ts +5 -1
  191. package/dist/esm/index.js +6 -2
  192. package/dist/esm/standardFormDialog/StandardFormDialog.js +26 -5
  193. package/dist/esm/types/railroad-diagrams.d.ts +59 -0
  194. package/dist/esm/types/regexp-tree.d.ts +175 -0
  195. package/dist/umd/qc-ui.min.css +1 -1
  196. package/dist/umd/qc-ui.min.js +1 -1
  197. package/package.json +23 -7
@@ -0,0 +1,106 @@
1
+ /**
2
+ * 正则表达式可视化 - 工具函数
3
+ *
4
+ * @module RegexEditor/visualizer/utils
5
+ * @description 提供匹配、标志转换等工具函数
6
+ */
7
+ import type { RegexFlags, MatchResult } from './types';
8
+ /**
9
+ * 将标志对象转换为标志字符串
10
+ *
11
+ * @param flags - 标志对象
12
+ * @returns 标志字符串 (如 "gim")
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * flagsToString({ global: true, ignoreCase: true })
17
+ * // => "gi"
18
+ * ```
19
+ */
20
+ export declare function flagsToString(flags?: RegexFlags): string;
21
+ /**
22
+ * 将标志字符串转换为标志对象
23
+ *
24
+ * @param flagsStr - 标志字符串 (如 "gim")
25
+ * @returns 标志对象
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * stringToFlags("gi")
30
+ * // => { global: true, ignoreCase: true }
31
+ * ```
32
+ */
33
+ export declare function stringToFlags(flagsStr: string): RegexFlags;
34
+ /**
35
+ * 执行正则匹配并返回所有匹配结果
36
+ *
37
+ * @param pattern - 正则表达式模式
38
+ * @param text - 测试文本
39
+ * @param flags - 标志
40
+ * @param maxMatches - 最大匹配数量限制
41
+ * @param timeout - 超时时间 (毫秒)
42
+ * @returns 匹配结果数组,如果出错返回 null
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * const results = performMatch('\\d+', 'abc 123 def 456', { global: true });
47
+ * // => [
48
+ * // { index: 4, lastIndex: 7, fullMatch: '123', groups: ['123'] },
49
+ * // { index: 12, lastIndex: 15, fullMatch: '456', groups: ['456'] }
50
+ * // ]
51
+ * ```
52
+ */
53
+ export declare function performMatch(pattern: string, text: string, flags?: RegexFlags, maxMatches?: number, timeout?: number): MatchResult[] | null;
54
+ /**
55
+ * 执行正则替换并返回结果
56
+ *
57
+ * @param pattern - 正则表达式模式
58
+ * @param text - 原始文本
59
+ * @param replaceText - 替换文本 (支持 $1, $2 等)
60
+ * @param flags - 标志
61
+ * @returns 替换后的文本,如果出错返回 null
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * performReplace('(\\d+)', 'abc 123 def', 'NUM:$1', { global: true })
66
+ * // => "abc NUM:123 def"
67
+ * ```
68
+ */
69
+ export declare function performReplace(pattern: string, text: string, replaceText: string, flags?: RegexFlags): string | null;
70
+ /**
71
+ * 高亮文本中的匹配部分
72
+ *
73
+ * @param text - 原始文本
74
+ * @param matches - 匹配结果数组
75
+ * @returns 带高亮标记的 HTML 字符串
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * highlightMatches('abc 123 def', [
80
+ * { index: 4, lastIndex: 7, fullMatch: '123', groups: ['123'] }
81
+ * ])
82
+ * // => 'abc <mark class="regex-match">123</mark> def'
83
+ * ```
84
+ */
85
+ export declare function highlightMatches(text: string, matches: MatchResult[]): string;
86
+ /**
87
+ * 格式化匹配位置
88
+ *
89
+ * @param match - 匹配结果
90
+ * @returns 格式化的位置字符串
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * formatPosition({ index: 10, lastIndex: 15, ... })
95
+ * // => "10-15"
96
+ * ```
97
+ */
98
+ export declare function formatPosition(match: MatchResult): string;
99
+ /**
100
+ * 检查正则表达式是否有效
101
+ *
102
+ * @param pattern - 正则表达式模式
103
+ * @param flags - 标志
104
+ * @returns 是否有效
105
+ */
106
+ export declare function isValidRegex(pattern: string, flags?: RegexFlags): boolean;
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.flagsToString = flagsToString;
7
+ exports.formatPosition = formatPosition;
8
+ exports.highlightMatches = highlightMatches;
9
+ exports.isValidRegex = isValidRegex;
10
+ exports.performMatch = performMatch;
11
+ exports.performReplace = performReplace;
12
+ exports.stringToFlags = stringToFlags;
13
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
14
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
17
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
18
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
19
+ /**
20
+ * 正则表达式可视化 - 工具函数
21
+ *
22
+ * @module RegexEditor/visualizer/utils
23
+ * @description 提供匹配、标志转换等工具函数
24
+ */
25
+
26
+ /**
27
+ * 将标志对象转换为标志字符串
28
+ *
29
+ * @param flags - 标志对象
30
+ * @returns 标志字符串 (如 "gim")
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * flagsToString({ global: true, ignoreCase: true })
35
+ * // => "gi"
36
+ * ```
37
+ */
38
+ function flagsToString(flags) {
39
+ if (!flags) return '';
40
+ var result = '';
41
+ if (flags.global) result += 'g';
42
+ if (flags.ignoreCase) result += 'i';
43
+ if (flags.multiline) result += 'm';
44
+ if (flags.dotAll) result += 's';
45
+ if (flags.unicode) result += 'u';
46
+ if (flags.sticky) result += 'y';
47
+ return result;
48
+ }
49
+
50
+ /**
51
+ * 将标志字符串转换为标志对象
52
+ *
53
+ * @param flagsStr - 标志字符串 (如 "gim")
54
+ * @returns 标志对象
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * stringToFlags("gi")
59
+ * // => { global: true, ignoreCase: true }
60
+ * ```
61
+ */
62
+ function stringToFlags(flagsStr) {
63
+ return {
64
+ global: flagsStr.includes('g'),
65
+ ignoreCase: flagsStr.includes('i'),
66
+ multiline: flagsStr.includes('m'),
67
+ dotAll: flagsStr.includes('s'),
68
+ unicode: flagsStr.includes('u'),
69
+ sticky: flagsStr.includes('y')
70
+ };
71
+ }
72
+
73
+ /**
74
+ * 执行正则匹配并返回所有匹配结果
75
+ *
76
+ * @param pattern - 正则表达式模式
77
+ * @param text - 测试文本
78
+ * @param flags - 标志
79
+ * @param maxMatches - 最大匹配数量限制
80
+ * @param timeout - 超时时间 (毫秒)
81
+ * @returns 匹配结果数组,如果出错返回 null
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * const results = performMatch('\\d+', 'abc 123 def 456', { global: true });
86
+ * // => [
87
+ * // { index: 4, lastIndex: 7, fullMatch: '123', groups: ['123'] },
88
+ * // { index: 12, lastIndex: 15, fullMatch: '456', groups: ['456'] }
89
+ * // ]
90
+ * ```
91
+ */
92
+ function performMatch(pattern, text, flags) {
93
+ var maxMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1000;
94
+ var timeout = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 5000;
95
+ try {
96
+ // 创建正则表达式
97
+ var flagsStr = flagsToString(flags);
98
+ var regex = new RegExp(pattern, flagsStr);
99
+ var results = [];
100
+ var startTime = Date.now();
101
+
102
+ // 如果是全局匹配,使用 exec 循环
103
+ if (flags !== null && flags !== void 0 && flags.global) {
104
+ var match;
105
+ while ((match = regex.exec(text)) !== null) {
106
+ // 检查超时
107
+ if (Date.now() - startTime > timeout) {
108
+ console.warn('正则匹配超时');
109
+ break;
110
+ }
111
+
112
+ // 检查数量限制
113
+ if (results.length >= maxMatches) {
114
+ console.warn("\u5339\u914D\u6570\u91CF\u8D85\u8FC7\u9650\u5236 (".concat(maxMatches, ")"));
115
+ break;
116
+ }
117
+ if (match.index !== undefined) {
118
+ results.push({
119
+ index: match.index,
120
+ lastIndex: match.index + match[0].length,
121
+ fullMatch: match[0],
122
+ groups: Array.from(match),
123
+ namedGroups: match.groups
124
+ });
125
+ }
126
+
127
+ // 防止无限循环(零宽匹配)
128
+ if (match.index === regex.lastIndex) {
129
+ regex.lastIndex++;
130
+ }
131
+ }
132
+ } else {
133
+ // 非全局匹配,只匹配一次
134
+ var _match = regex.exec(text);
135
+ if (_match && _match.index !== undefined) {
136
+ results.push({
137
+ index: _match.index,
138
+ lastIndex: _match.index + _match[0].length,
139
+ fullMatch: _match[0],
140
+ groups: Array.from(_match),
141
+ namedGroups: _match.groups
142
+ });
143
+ }
144
+ }
145
+ return results;
146
+ } catch (error) {
147
+ console.error('正则匹配错误:', error);
148
+ return null;
149
+ }
150
+ }
151
+
152
+ /**
153
+ * 执行正则替换并返回结果
154
+ *
155
+ * @param pattern - 正则表达式模式
156
+ * @param text - 原始文本
157
+ * @param replaceText - 替换文本 (支持 $1, $2 等)
158
+ * @param flags - 标志
159
+ * @returns 替换后的文本,如果出错返回 null
160
+ *
161
+ * @example
162
+ * ```ts
163
+ * performReplace('(\\d+)', 'abc 123 def', 'NUM:$1', { global: true })
164
+ * // => "abc NUM:123 def"
165
+ * ```
166
+ */
167
+ function performReplace(pattern, text, replaceText, flags) {
168
+ try {
169
+ var flagsStr = flagsToString(flags);
170
+ var regex = new RegExp(pattern, flagsStr);
171
+ return text.replace(regex, replaceText);
172
+ } catch (error) {
173
+ console.error('正则替换错误:', error);
174
+ return null;
175
+ }
176
+ }
177
+
178
+ /**
179
+ * 高亮文本中的匹配部分
180
+ *
181
+ * @param text - 原始文本
182
+ * @param matches - 匹配结果数组
183
+ * @returns 带高亮标记的 HTML 字符串
184
+ *
185
+ * @example
186
+ * ```ts
187
+ * highlightMatches('abc 123 def', [
188
+ * { index: 4, lastIndex: 7, fullMatch: '123', groups: ['123'] }
189
+ * ])
190
+ * // => 'abc <mark class="regex-match">123</mark> def'
191
+ * ```
192
+ */
193
+ function highlightMatches(text, matches) {
194
+ if (!matches || matches.length === 0) {
195
+ return escapeHtml(text);
196
+ }
197
+
198
+ // 按索引排序
199
+ var sortedMatches = _toConsumableArray(matches).sort(function (a, b) {
200
+ return a.index - b.index;
201
+ });
202
+ var result = '';
203
+ var lastIndex = 0;
204
+ sortedMatches.forEach(function (match, idx) {
205
+ // 添加未匹配部分
206
+ if (match.index > lastIndex) {
207
+ result += escapeHtml(text.substring(lastIndex, match.index));
208
+ }
209
+
210
+ // 添加匹配部分 (带高亮)
211
+ result += "<mark class=\"regex-match\" data-match-index=\"".concat(idx, "\">").concat(escapeHtml(match.fullMatch), "</mark>");
212
+ lastIndex = match.lastIndex;
213
+ });
214
+
215
+ // 添加剩余部分
216
+ if (lastIndex < text.length) {
217
+ result += escapeHtml(text.substring(lastIndex));
218
+ }
219
+ return result;
220
+ }
221
+
222
+ /**
223
+ * 转义 HTML 特殊字符
224
+ */
225
+ function escapeHtml(text) {
226
+ var map = {
227
+ '&': '&amp;',
228
+ '<': '&lt;',
229
+ '>': '&gt;',
230
+ '"': '&quot;',
231
+ "'": '&#039;'
232
+ };
233
+ return text.replace(/[&<>"']/g, function (char) {
234
+ return map[char];
235
+ });
236
+ }
237
+
238
+ /**
239
+ * 格式化匹配位置
240
+ *
241
+ * @param match - 匹配结果
242
+ * @returns 格式化的位置字符串
243
+ *
244
+ * @example
245
+ * ```ts
246
+ * formatPosition({ index: 10, lastIndex: 15, ... })
247
+ * // => "10-15"
248
+ * ```
249
+ */
250
+ function formatPosition(match) {
251
+ return "".concat(match.index, "-").concat(match.lastIndex);
252
+ }
253
+
254
+ /**
255
+ * 检查正则表达式是否有效
256
+ *
257
+ * @param pattern - 正则表达式模式
258
+ * @param flags - 标志
259
+ * @returns 是否有效
260
+ */
261
+ function isValidRegex(pattern, flags) {
262
+ try {
263
+ new RegExp(pattern, flagsToString(flags));
264
+ return true;
265
+ } catch (_unused) {
266
+ return false;
267
+ }
268
+ }
@@ -18,9 +18,13 @@ import ConfirmPro from "./ConfirmPro";
18
18
  import { GeneratedListPage } from "./generatedListPage";
19
19
  import { StandardFormDialog, withStandardForm, FieldCreators, createSelectField, createCascaderField } from "./standardFormDialog";
20
20
  import DeleteConfirm from "./deleteConfirm";
21
- export { AgGridColumn, AgGridPlus, ArrayTable, ArrayTableIndex, Card, Dashboard, DialogSelect, DraggableModal, Editable, ExtensibleGrid, flattenTreeDeep, FormDesigner, FormProContext, FormProLayout, GridPlusContext, ImportModal, QueryBuilder, ToolBar, FullScreenAlert, ConfirmPro, GeneratedListPage, StandardFormDialog, withStandardForm, FieldCreators, createSelectField, createCascaderField, DeleteConfirm };
21
+ import { RuleBuilder } from "./RuleBuilder";
22
+ import { RegexEditor, useRegexValidation, useTemplateManager, TemplateSelector, TemplateCategory, RegexTester, FlagsSelector, MatchItem, RegexRailroadDiagram } from "./components/RegexEditor";
23
+ export { AgGridColumn, AgGridPlus, ArrayTable, ArrayTableIndex, Card, Dashboard, DialogSelect, DraggableModal, Editable, ExtensibleGrid, flattenTreeDeep, FormDesigner, FormProContext, FormProLayout, GridPlusContext, ImportModal, QueryBuilder, ToolBar, FullScreenAlert, ConfirmPro, GeneratedListPage, StandardFormDialog, withStandardForm, FieldCreators, createSelectField, createCascaderField, DeleteConfirm, RuleBuilder, RegexEditor, useRegexValidation, useTemplateManager, TemplateSelector, TemplateCategory, RegexTester, FlagsSelector, MatchItem, RegexRailroadDiagram, };
22
24
  export type * from "./generatedListPage";
23
25
  export type * from "./standardFormDialog";
24
26
  export type * from "./deleteConfirm";
25
27
  export type * from "./importModal";
26
28
  export type * from "./fullScreenAlert";
29
+ export type * from "./RuleBuilder";
30
+ export type { ParseResult as RegexParseResult, ValidationResult as RegexValidationResult, RegexError, ComplexityMetrics, ASTNode, AstRegExp, RegexTemplate, TestResult as RegexTestResult, CodeMirrorWrapperProps, RegexEditorProps, RegexFlags, MatchResult, RegexTesterProps, FlagsSelectorProps, MatchItemProps, RegexRailroadDiagramProps, } from "./components/RegexEditor";
package/dist/cjs/index.js CHANGED
@@ -81,6 +81,12 @@ Object.defineProperty(exports, "FieldCreators", {
81
81
  return _standardFormDialog.FieldCreators;
82
82
  }
83
83
  });
84
+ Object.defineProperty(exports, "FlagsSelector", {
85
+ enumerable: true,
86
+ get: function get() {
87
+ return _RegexEditor.FlagsSelector;
88
+ }
89
+ });
84
90
  Object.defineProperty(exports, "FormDesigner", {
85
91
  enumerable: true,
86
92
  get: function get() {
@@ -123,18 +129,60 @@ Object.defineProperty(exports, "ImportModal", {
123
129
  return _importModal.default;
124
130
  }
125
131
  });
132
+ Object.defineProperty(exports, "MatchItem", {
133
+ enumerable: true,
134
+ get: function get() {
135
+ return _RegexEditor.MatchItem;
136
+ }
137
+ });
126
138
  Object.defineProperty(exports, "QueryBuilder", {
127
139
  enumerable: true,
128
140
  get: function get() {
129
141
  return _queryBuilder.default;
130
142
  }
131
143
  });
144
+ Object.defineProperty(exports, "RegexEditor", {
145
+ enumerable: true,
146
+ get: function get() {
147
+ return _RegexEditor.RegexEditor;
148
+ }
149
+ });
150
+ Object.defineProperty(exports, "RegexRailroadDiagram", {
151
+ enumerable: true,
152
+ get: function get() {
153
+ return _RegexEditor.RegexRailroadDiagram;
154
+ }
155
+ });
156
+ Object.defineProperty(exports, "RegexTester", {
157
+ enumerable: true,
158
+ get: function get() {
159
+ return _RegexEditor.RegexTester;
160
+ }
161
+ });
162
+ Object.defineProperty(exports, "RuleBuilder", {
163
+ enumerable: true,
164
+ get: function get() {
165
+ return _RuleBuilder.RuleBuilder;
166
+ }
167
+ });
132
168
  Object.defineProperty(exports, "StandardFormDialog", {
133
169
  enumerable: true,
134
170
  get: function get() {
135
171
  return _standardFormDialog.StandardFormDialog;
136
172
  }
137
173
  });
174
+ Object.defineProperty(exports, "TemplateCategory", {
175
+ enumerable: true,
176
+ get: function get() {
177
+ return _RegexEditor.TemplateCategory;
178
+ }
179
+ });
180
+ Object.defineProperty(exports, "TemplateSelector", {
181
+ enumerable: true,
182
+ get: function get() {
183
+ return _RegexEditor.TemplateSelector;
184
+ }
185
+ });
138
186
  Object.defineProperty(exports, "ToolBar", {
139
187
  enumerable: true,
140
188
  get: function get() {
@@ -159,6 +207,18 @@ Object.defineProperty(exports, "flattenTreeDeep", {
159
207
  return _agGridPlus.flattenTreeDeep;
160
208
  }
161
209
  });
210
+ Object.defineProperty(exports, "useRegexValidation", {
211
+ enumerable: true,
212
+ get: function get() {
213
+ return _RegexEditor.useRegexValidation;
214
+ }
215
+ });
216
+ Object.defineProperty(exports, "useTemplateManager", {
217
+ enumerable: true,
218
+ get: function get() {
219
+ return _RegexEditor.useTemplateManager;
220
+ }
221
+ });
162
222
  Object.defineProperty(exports, "withStandardForm", {
163
223
  enumerable: true,
164
224
  get: function get() {
@@ -185,4 +245,6 @@ var _ConfirmPro = _interopRequireDefault(require("./ConfirmPro"));
185
245
  var _generatedListPage = require("./generatedListPage");
186
246
  var _standardFormDialog = require("./standardFormDialog");
187
247
  var _deleteConfirm = _interopRequireDefault(require("./deleteConfirm"));
248
+ var _RuleBuilder = require("./RuleBuilder");
249
+ var _RegexEditor = require("./components/RegexEditor");
188
250
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -253,12 +253,33 @@ var StandardFormDialog = function StandardFormDialog(props) {
253
253
  var errors = form.errors;
254
254
  var errorFields = Object.keys(errors);
255
255
  if (errorFields.length > 0) {
256
- var fieldNames = errorFields.map(function (field) {
257
- // 尝试获取字段的显示名称
258
- var fieldSchema = form.getFieldState(field);
259
- return (fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.title) || field;
256
+ var fieldNames = errorFields.map(function (fieldPath) {
257
+ try {
258
+ var _field$componentProps;
259
+ // 使用 query API 获取字段实例以获取正确的标题
260
+ var field = form.query(fieldPath).take();
261
+ // 优先使用 title,其次使用 componentProps.title,最后使用字段路径
262
+ return (field === null || field === void 0 ? void 0 : field.title) || (field === null || field === void 0 || (_field$componentProps = field.componentProps) === null || _field$componentProps === void 0 ? void 0 : _field$componentProps.title) || fieldPath;
263
+ } catch (_unused) {
264
+ // 如果查询失败,使用字段路径
265
+ return fieldPath;
266
+ }
267
+ });
268
+
269
+ // 限制显示数量,避免提示过长
270
+ var displayNames = fieldNames.slice(0, 5);
271
+ var remaining = fieldNames.length - displayNames.length;
272
+ var errorMessage = "\u8BF7\u68C0\u67E5\u8868\u5355\u9519\u8BEF\uFF1A".concat(displayNames.join('、'));
273
+ if (remaining > 0) {
274
+ errorMessage += " \u7B49".concat(fieldNames.length, "\u4E2A\u5B57\u6BB5");
275
+ }
276
+ _antd.message.error(errorMessage);
277
+
278
+ // 在控制台输出详细错误信息供调试
279
+ console.error('表单验证失败:', {
280
+ errorFields: fieldNames,
281
+ errors: errors
260
282
  });
261
- _antd.message.error("\u8BF7\u68C0\u67E5\u8868\u5355\u9519\u8BEF\uFF1A".concat(fieldNames.join(', ')));
262
283
  }
263
284
  }, []);
264
285
 
@@ -32,7 +32,7 @@ export declare const createSelectField: (title: string, options: Array<{
32
32
  required?: boolean | undefined;
33
33
  placeholder?: string | undefined;
34
34
  gridSpan?: number | undefined;
35
- mode?: "multiple" | "tags" | undefined;
35
+ mode?: "tags" | "multiple" | undefined;
36
36
  } | undefined) => any;
37
37
  /**
38
38
  * 快速创建常用字段的工具函数集合
@@ -173,7 +173,7 @@ export declare const createSelectField: (title: string, options: {
173
173
  export declare const createCascaderField: (title: string, options: any[], config?: {
174
174
  required?: boolean | undefined;
175
175
  changeOnSelect?: boolean | undefined;
176
- expandTrigger?: "hover" | "click" | undefined;
176
+ expandTrigger?: "click" | "hover" | undefined;
177
177
  placeholder?: string | undefined;
178
178
  }) => {
179
179
  type: string;
@@ -187,7 +187,7 @@ export declare const createCascaderField: (title: string, options: any[], config
187
187
  };
188
188
  options: any[];
189
189
  changeOnSelect: boolean;
190
- expandTrigger: "hover" | "click";
190
+ expandTrigger: "click" | "hover";
191
191
  };
192
192
  };
193
193
  export default withStandardForm;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Type definitions for railroad-diagrams
3
+ * Project: https://github.com/tabatkins/railroad-diagrams
4
+ */
5
+
6
+ declare module 'railroad-diagrams' {
7
+ export class Diagram {
8
+ constructor(children: DiagramNode[]);
9
+ toSVG(): SVGElement;
10
+ toString(): string;
11
+ }
12
+
13
+ export class ComplexDiagram extends Diagram {}
14
+
15
+ export class Sequence {
16
+ constructor(children: DiagramNode[]);
17
+ }
18
+
19
+ export class Choice {
20
+ constructor(defaultIndex: number, children: DiagramNode[]);
21
+ }
22
+
23
+ export class Optional {
24
+ constructor(child: DiagramNode, skip?: 'skip');
25
+ }
26
+
27
+ export class OneOrMore {
28
+ constructor(child: DiagramNode, repeat?: DiagramNode);
29
+ }
30
+
31
+ export class ZeroOrMore {
32
+ constructor(child: DiagramNode, repeat?: DiagramNode, skip?: 'skip');
33
+ }
34
+
35
+ export class Terminal {
36
+ constructor(text: string);
37
+ }
38
+
39
+ export class NonTerminal {
40
+ constructor(text: string);
41
+ }
42
+
43
+ export class Comment {
44
+ constructor(text: string);
45
+ }
46
+
47
+ export class Skip {}
48
+
49
+ export type DiagramNode =
50
+ | Sequence
51
+ | Choice
52
+ | Optional
53
+ | OneOrMore
54
+ | ZeroOrMore
55
+ | Terminal
56
+ | NonTerminal
57
+ | Comment
58
+ | Skip;
59
+ }