@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,158 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.updateErrorMarkers = exports.setErrorsEffect = exports.errorDecorationsField = exports.createErrorMarkers = void 0;
7
+ var _view = require("@codemirror/view");
8
+ var _state = require("@codemirror/state");
9
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ 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; } /**
12
+ * CodeMirror 错误标注扩展
13
+ *
14
+ * @description
15
+ * 为 CodeMirror 编辑器添加错误标注功能,支持波浪下划线高亮显示错误位置。
16
+ *
17
+ * @module RegexEditor/core/extensions/errorMarker
18
+ */
19
+ /**
20
+ * 设置错误的 StateEffect
21
+ */
22
+ var setErrorsEffect = exports.setErrorsEffect = _state.StateEffect.define();
23
+
24
+ /**
25
+ * 错误标注装饰
26
+ *
27
+ * @description
28
+ * 使用红色波浪下划线标注错误位置
29
+ */
30
+ var errorMark = _view.Decoration.mark({
31
+ attributes: {
32
+ class: 'cm-regex-error',
33
+ style: 'text-decoration: wavy underline red; text-decoration-skip-ink: none;'
34
+ }
35
+ });
36
+
37
+ /**
38
+ * 警告标注装饰
39
+ *
40
+ * @description
41
+ * 使用橙色波浪下划线标注警告位置
42
+ */
43
+ var warningMark = _view.Decoration.mark({
44
+ attributes: {
45
+ class: 'cm-regex-warning',
46
+ style: 'text-decoration: wavy underline orange; text-decoration-skip-ink: none;'
47
+ }
48
+ });
49
+
50
+ /**
51
+ * 信息标注装饰
52
+ *
53
+ * @description
54
+ * 使用蓝色波浪下划线标注信息位置
55
+ */
56
+ var infoMark = _view.Decoration.mark({
57
+ attributes: {
58
+ class: 'cm-regex-info',
59
+ style: 'text-decoration: wavy underline blue; text-decoration-skip-ink: none;'
60
+ }
61
+ });
62
+
63
+ /**
64
+ * 错误装饰状态字段
65
+ *
66
+ * @description
67
+ * 管理错误标注的 DecorationSet
68
+ */
69
+ var errorDecorationsField = exports.errorDecorationsField = _state.StateField.define({
70
+ create: function create() {
71
+ return _view.Decoration.none;
72
+ },
73
+ update: function update(decorations, tr) {
74
+ // 遍历事务中的所有 effect
75
+ var _iterator = _createForOfIteratorHelper(tr.effects),
76
+ _step;
77
+ try {
78
+ var _loop = function _loop() {
79
+ var effect = _step.value;
80
+ if (effect.is(setErrorsEffect)) {
81
+ // 更新错误标注
82
+ var errors = effect.value;
83
+ var newDecorations = [];
84
+ errors.forEach(function (error) {
85
+ var _error$position = error.position,
86
+ start = _error$position.start,
87
+ end = _error$position.end;
88
+
89
+ // 确保位置有效
90
+ if (start >= 0 && end <= tr.newDoc.length && start < end) {
91
+ // 根据严重程度选择装饰
92
+ var mark = errorMark;
93
+ if (error.severity === 'warning') {
94
+ mark = warningMark;
95
+ } else if (error.severity === 'info') {
96
+ mark = infoMark;
97
+ }
98
+ newDecorations.push(mark.range(start, end));
99
+ }
100
+ });
101
+ return {
102
+ v: _view.Decoration.set(newDecorations, true)
103
+ };
104
+ }
105
+ },
106
+ _ret;
107
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
108
+ _ret = _loop();
109
+ if (_ret) return _ret.v;
110
+ }
111
+
112
+ // 如果文档改变,需要映射装饰位置
113
+ } catch (err) {
114
+ _iterator.e(err);
115
+ } finally {
116
+ _iterator.f();
117
+ }
118
+ return decorations.map(tr.changes);
119
+ },
120
+ provide: function provide(f) {
121
+ return _view.EditorView.decorations.from(f);
122
+ }
123
+ });
124
+
125
+ /**
126
+ * 创建错误标注扩展
127
+ *
128
+ * @param errors - 错误列表
129
+ * @returns CodeMirror 扩展数组
130
+ *
131
+ * @example
132
+ * ```typescript
133
+ * const extensions = [
134
+ * javascript(),
135
+ * createErrorMarkers(errors)
136
+ * ];
137
+ * ```
138
+ */
139
+ var createErrorMarkers = exports.createErrorMarkers = function createErrorMarkers(errors) {
140
+ return [errorDecorationsField];
141
+ };
142
+
143
+ /**
144
+ * 更新错误标注的辅助函数
145
+ *
146
+ * @param view - EditorView 实例
147
+ * @param errors - 新的错误列表
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * updateErrorMarkers(editorView, validationErrors);
152
+ * ```
153
+ */
154
+ var updateErrorMarkers = exports.updateErrorMarkers = function updateErrorMarkers(view, errors) {
155
+ view.dispatch({
156
+ effects: setErrorsEffect.of(errors)
157
+ });
158
+ };
@@ -0,0 +1,79 @@
1
+ /**
2
+ * 正则表达式编辑器核心组件 - 类型定义
3
+ *
4
+ * @module RegexEditor/core/types
5
+ * @description 定义编辑器核心组件的 Props 和相关类型
6
+ */
7
+ import type { RegexError, ValidationResult } from '../validation/types';
8
+ /**
9
+ * CodeMirror 包装器组件属性
10
+ *
11
+ * @interface CodeMirrorWrapperProps
12
+ * @property {string} value - 编辑器内容
13
+ * @property {(value: string) => void} onChange - 内容变更回调
14
+ * @property {string} [placeholder] - 占位符文本
15
+ * @property {boolean} [readOnly] - 是否只读模式
16
+ * @property {boolean} [disabled] - 是否禁用编辑
17
+ * @property {RegexError[]} [errors] - 错误列表(用于标注)
18
+ * @property {string} [height] - 编辑器高度(CSS 值)
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <CodeMirrorWrapper
23
+ * value={pattern}
24
+ * onChange={setPattern}
25
+ * placeholder="请输入正则表达式"
26
+ * errors={validationErrors}
27
+ * height="120px"
28
+ * />
29
+ * ```
30
+ */
31
+ export interface CodeMirrorWrapperProps {
32
+ value: string;
33
+ onChange: (value: string) => void;
34
+ placeholder?: string;
35
+ readOnly?: boolean;
36
+ disabled?: boolean;
37
+ errors?: RegexError[];
38
+ height?: string;
39
+ }
40
+ /**
41
+ * 正则表达式编辑器组件属性
42
+ *
43
+ * @interface RegexEditorProps
44
+ * @property {string} [value] - 正则表达式字符串
45
+ * @property {(value: string) => void} [onChange] - 值变更回调
46
+ * @property {string} [placeholder] - 占位符文本
47
+ * @property {boolean} [readOnly] - 是否只读模式
48
+ * @property {boolean} [disabled] - 是否禁用编辑
49
+ * @property {boolean} [showComplexity] - 是否显示复杂度分析
50
+ * @property {boolean} [showRailroadDiagram] - 是否显示 Railroad Diagram 可视化
51
+ * @property {(result: ValidationResult) => void} [onValidate] - 验证结果回调
52
+ * @property {string} [height] - 编辑器高度(CSS 值)
53
+ *
54
+ * @example
55
+ * ```tsx
56
+ * <RegexEditor
57
+ * value={pattern}
58
+ * onChange={setPattern}
59
+ * showComplexity={true}
60
+ * height="200px"
61
+ * onValidate={(result) => {
62
+ * if (!result.valid) {
63
+ * console.error('验证失败:', result.errors);
64
+ * }
65
+ * }}
66
+ * />
67
+ * ```
68
+ */
69
+ export interface RegexEditorProps {
70
+ value?: string;
71
+ onChange?: (value: string) => void;
72
+ placeholder?: string;
73
+ readOnly?: boolean;
74
+ disabled?: boolean;
75
+ showComplexity?: boolean;
76
+ showRailroadDiagram?: boolean;
77
+ onValidate?: (result: ValidationResult) => void;
78
+ height?: string;
79
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,9 @@
1
+ /**
2
+ * React Hooks for RegexEditor
3
+ *
4
+ * @module RegexEditor/hooks
5
+ */
6
+ export { useRegexValidation } from './useRegexValidation';
7
+ export type { UseRegexValidationResult } from './useRegexValidation';
8
+ export { useTemplateManager } from './useTemplateManager';
9
+ export type { UseTemplateManagerOptions, UseTemplateManagerReturn, } from './useTemplateManager';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useRegexValidation", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _useRegexValidation.useRegexValidation;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "useTemplateManager", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _useTemplateManager.useTemplateManager;
16
+ }
17
+ });
18
+ var _useRegexValidation = require("./useRegexValidation");
19
+ var _useTemplateManager = require("./useTemplateManager");
@@ -0,0 +1,95 @@
1
+ /**
2
+ * useRegexTester Hook
3
+ *
4
+ * @module RegexEditor/hooks/useRegexTester
5
+ * @description 提供正则测试功能的 React Hook
6
+ */
7
+ import type { RegexFlags, MatchResult } from '../visualizer/types';
8
+ /**
9
+ * Hook 配置选项
10
+ */
11
+ export interface UseRegexTesterOptions {
12
+ /** 初始测试文本 */
13
+ initialTestText?: string;
14
+ /** 初始标志 */
15
+ initialFlags?: RegexFlags;
16
+ /** 最大匹配数量 */
17
+ maxMatches?: number;
18
+ /** 匹配超时时间 (毫秒) */
19
+ matchTimeout?: number;
20
+ /** 匹配结果回调 */
21
+ onMatchResults?: (results: MatchResult[]) => void;
22
+ /** 防抖延迟 (毫秒) */
23
+ debounceDelay?: number;
24
+ }
25
+ /**
26
+ * Hook 返回值
27
+ */
28
+ export interface UseRegexTesterResult {
29
+ /** 测试文本 */
30
+ testText: string;
31
+ /** 设置测试文本 */
32
+ setTestText: (text: string) => void;
33
+ /** 标志 */
34
+ flags: RegexFlags;
35
+ /** 设置标志 */
36
+ setFlags: (flags: RegexFlags) => void;
37
+ /** 匹配结果 */
38
+ matches: MatchResult[];
39
+ /** 是否正在匹配 */
40
+ isMatching: boolean;
41
+ /** 匹配错误 */
42
+ error: string | null;
43
+ /** 是否有效的正则表达式 */
44
+ isValid: boolean;
45
+ /** 清空测试文本 */
46
+ clearTestText: () => void;
47
+ /** 重新匹配 */
48
+ rematch: () => void;
49
+ }
50
+ /**
51
+ * 正则测试 Hook
52
+ *
53
+ * @param pattern - 正则表达式模式
54
+ * @param options - 配置选项
55
+ * @returns Hook 结果
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * const {
60
+ * testText,
61
+ * setTestText,
62
+ * flags,
63
+ * setFlags,
64
+ * matches,
65
+ * isValid,
66
+ * } = useRegexTester(pattern, {
67
+ * initialTestText: 'test@example.com',
68
+ * initialFlags: { global: true },
69
+ * });
70
+ * ```
71
+ */
72
+ export declare function useRegexTester(pattern: string, options?: UseRegexTesterOptions): UseRegexTesterResult;
73
+ /**
74
+ * 替换预览 Hook
75
+ *
76
+ * @param pattern - 正则表达式模式
77
+ * @param text - 原始文本
78
+ * @param replaceText - 替换文本
79
+ * @param flags - 标志
80
+ * @returns 替换结果和错误
81
+ *
82
+ * @example
83
+ * ```tsx
84
+ * const { result, error } = useReplacePreview(
85
+ * '(\\d+)',
86
+ * 'abc 123 def',
87
+ * 'NUM:$1',
88
+ * { global: true }
89
+ * );
90
+ * ```
91
+ */
92
+ export declare function useReplacePreview(pattern: string, text: string, replaceText: string, flags?: RegexFlags): {
93
+ result: string | null;
94
+ error: string | null;
95
+ };
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useRegexTester = useRegexTester;
7
+ exports.useReplacePreview = useReplacePreview;
8
+ var _react = require("react");
9
+ var _utils = require("../visualizer/utils");
10
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
11
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
+ 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); }
13
+ 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; }
14
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
15
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /**
16
+ * useRegexTester Hook
17
+ *
18
+ * @module RegexEditor/hooks/useRegexTester
19
+ * @description 提供正则测试功能的 React Hook
20
+ */
21
+ /**
22
+ * Hook 配置选项
23
+ */
24
+
25
+ /**
26
+ * Hook 返回值
27
+ */
28
+
29
+ /**
30
+ * 正则测试 Hook
31
+ *
32
+ * @param pattern - 正则表达式模式
33
+ * @param options - 配置选项
34
+ * @returns Hook 结果
35
+ *
36
+ * @example
37
+ * ```tsx
38
+ * const {
39
+ * testText,
40
+ * setTestText,
41
+ * flags,
42
+ * setFlags,
43
+ * matches,
44
+ * isValid,
45
+ * } = useRegexTester(pattern, {
46
+ * initialTestText: 'test@example.com',
47
+ * initialFlags: { global: true },
48
+ * });
49
+ * ```
50
+ */
51
+ function useRegexTester(pattern) {
52
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
53
+ var _options$initialTestT = options.initialTestText,
54
+ initialTestText = _options$initialTestT === void 0 ? '' : _options$initialTestT,
55
+ _options$initialFlags = options.initialFlags,
56
+ initialFlags = _options$initialFlags === void 0 ? {
57
+ global: true
58
+ } : _options$initialFlags,
59
+ _options$maxMatches = options.maxMatches,
60
+ maxMatches = _options$maxMatches === void 0 ? 1000 : _options$maxMatches,
61
+ _options$matchTimeout = options.matchTimeout,
62
+ matchTimeout = _options$matchTimeout === void 0 ? 5000 : _options$matchTimeout,
63
+ onMatchResults = options.onMatchResults,
64
+ _options$debounceDela = options.debounceDelay,
65
+ debounceDelay = _options$debounceDela === void 0 ? 300 : _options$debounceDela;
66
+
67
+ // 状态
68
+ var _useState = (0, _react.useState)(initialTestText),
69
+ _useState2 = _slicedToArray(_useState, 2),
70
+ testText = _useState2[0],
71
+ setTestText = _useState2[1];
72
+ var _useState3 = (0, _react.useState)(initialFlags),
73
+ _useState4 = _slicedToArray(_useState3, 2),
74
+ flags = _useState4[0],
75
+ setFlags = _useState4[1];
76
+ var _useState5 = (0, _react.useState)(false),
77
+ _useState6 = _slicedToArray(_useState5, 2),
78
+ isMatching = _useState6[0],
79
+ setIsMatching = _useState6[1];
80
+ var _useState7 = (0, _react.useState)(null),
81
+ _useState8 = _slicedToArray(_useState7, 2),
82
+ error = _useState8[0],
83
+ setError = _useState8[1];
84
+ var _useState9 = (0, _react.useState)(pattern),
85
+ _useState10 = _slicedToArray(_useState9, 2),
86
+ debouncedPattern = _useState10[0],
87
+ setDebouncedPattern = _useState10[1];
88
+ var _useState11 = (0, _react.useState)(testText),
89
+ _useState12 = _slicedToArray(_useState11, 2),
90
+ debouncedText = _useState12[0],
91
+ setDebouncedText = _useState12[1];
92
+
93
+ // 防抖: 模式变化
94
+ (0, _react.useEffect)(function () {
95
+ var timer = setTimeout(function () {
96
+ setDebouncedPattern(pattern);
97
+ }, debounceDelay);
98
+ return function () {
99
+ return clearTimeout(timer);
100
+ };
101
+ }, [pattern, debounceDelay]);
102
+
103
+ // 防抖: 文本变化
104
+ (0, _react.useEffect)(function () {
105
+ var timer = setTimeout(function () {
106
+ setDebouncedText(testText);
107
+ }, debounceDelay);
108
+ return function () {
109
+ return clearTimeout(timer);
110
+ };
111
+ }, [testText, debounceDelay]);
112
+
113
+ // 检查正则表达式是否有效
114
+ var isValid = (0, _react.useMemo)(function () {
115
+ return (0, _utils.isValidRegex)(debouncedPattern, flags);
116
+ }, [debouncedPattern, flags]);
117
+
118
+ // 执行匹配
119
+ var matches = (0, _react.useMemo)(function () {
120
+ // 清空错误
121
+ setError(null);
122
+
123
+ // 空模式或空文本
124
+ if (!debouncedPattern || !debouncedText) {
125
+ return [];
126
+ }
127
+
128
+ // 无效正则
129
+ if (!isValid) {
130
+ setError('无效的正则表达式');
131
+ return [];
132
+ }
133
+ try {
134
+ setIsMatching(true);
135
+ var _results = (0, _utils.performMatch)(debouncedPattern, debouncedText, flags, maxMatches, matchTimeout);
136
+ if (_results === null) {
137
+ setError('匹配失败或超时');
138
+ return [];
139
+ }
140
+ return _results;
141
+ } catch (err) {
142
+ var errorMessage = err instanceof Error ? err.message : '未知错误';
143
+ setError("\u5339\u914D\u9519\u8BEF: ".concat(errorMessage));
144
+ return [];
145
+ } finally {
146
+ setIsMatching(false);
147
+ }
148
+ }, [debouncedPattern, debouncedText, flags, isValid, maxMatches, matchTimeout]);
149
+
150
+ // 通知匹配结果
151
+ (0, _react.useEffect)(function () {
152
+ if (onMatchResults) {
153
+ onMatchResults(matches);
154
+ }
155
+ }, [matches, onMatchResults]);
156
+
157
+ // 清空测试文本
158
+ var clearTestText = (0, _react.useCallback)(function () {
159
+ setTestText('');
160
+ }, []);
161
+
162
+ // 重新匹配 (强制刷新)
163
+ var rematch = (0, _react.useCallback)(function () {
164
+ setDebouncedPattern(pattern);
165
+ setDebouncedText(testText);
166
+ }, [pattern, testText]);
167
+ return {
168
+ testText: testText,
169
+ setTestText: setTestText,
170
+ flags: flags,
171
+ setFlags: setFlags,
172
+ matches: matches,
173
+ isMatching: isMatching,
174
+ error: error,
175
+ isValid: isValid,
176
+ clearTestText: clearTestText,
177
+ rematch: rematch
178
+ };
179
+ }
180
+
181
+ /**
182
+ * 替换预览 Hook
183
+ *
184
+ * @param pattern - 正则表达式模式
185
+ * @param text - 原始文本
186
+ * @param replaceText - 替换文本
187
+ * @param flags - 标志
188
+ * @returns 替换结果和错误
189
+ *
190
+ * @example
191
+ * ```tsx
192
+ * const { result, error } = useReplacePreview(
193
+ * '(\\d+)',
194
+ * 'abc 123 def',
195
+ * 'NUM:$1',
196
+ * { global: true }
197
+ * );
198
+ * ```
199
+ */
200
+ function useReplacePreview(pattern, text, replaceText, flags) {
201
+ return (0, _react.useMemo)(function () {
202
+ if (!pattern || !text) {
203
+ return {
204
+ result: null,
205
+ error: null
206
+ };
207
+ }
208
+ if (!(0, _utils.isValidRegex)(pattern, flags)) {
209
+ return {
210
+ result: null,
211
+ error: '无效的正则表达式'
212
+ };
213
+ }
214
+ try {
215
+ var result = (0, _utils.performReplace)(pattern, text, replaceText, flags);
216
+ if (result === null) {
217
+ return {
218
+ result: null,
219
+ error: '替换失败'
220
+ };
221
+ }
222
+ return {
223
+ result: result,
224
+ error: null
225
+ };
226
+ } catch (err) {
227
+ var errorMessage = err instanceof Error ? err.message : '未知错误';
228
+ return {
229
+ result: null,
230
+ error: "\u66FF\u6362\u9519\u8BEF: ".concat(errorMessage)
231
+ };
232
+ }
233
+ }, [pattern, text, replaceText, flags]);
234
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * useRegexValidation Hook
3
+ *
4
+ * @description
5
+ * React Hook 用于正则表达式验证,集成解析、验证、复杂度分析。
6
+ * 提供去抖优化和完整的状态管理。
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const { validationResult, complexity, isValidating } = useRegexValidation(pattern);
11
+ *
12
+ * if (validationResult?.valid) {
13
+ * console.log('验证通过');
14
+ * } else {
15
+ * console.error('错误:', validationResult?.errors);
16
+ * }
17
+ *
18
+ * if (complexity?.backtrackingRisk === 'high') {
19
+ * console.warn('高回溯风险:', complexity.suggestions);
20
+ * }
21
+ * ```
22
+ */
23
+ import type { ValidationResult, ComplexityMetrics } from '../validation/types';
24
+ /**
25
+ * useRegexValidation Hook 返回值
26
+ */
27
+ export interface UseRegexValidationResult {
28
+ /** 验证结果 */
29
+ validationResult: ValidationResult | null;
30
+ /** 复杂度分析结果 */
31
+ complexity: ComplexityMetrics | null;
32
+ /** 是否正在验证 */
33
+ isValidating: boolean;
34
+ /** 手动触发验证 */
35
+ validate: (value: string) => Promise<void>;
36
+ }
37
+ /**
38
+ * 正则表达式验证 Hook
39
+ *
40
+ * @param pattern - 正则表达式字符串
41
+ * @param options - 配置选项
42
+ * @param options.debounceMs - 去抖延迟时间(默认 300ms)
43
+ * @returns {UseRegexValidationResult} 验证结果和方法
44
+ *
45
+ * @remarks
46
+ * 该 Hook 提供以下功能:
47
+ * - 自动验证: 监听 pattern 变化并自动触发验证
48
+ * - 去抖优化: 300ms 防抖延迟,避免频繁验证
49
+ * - 完整状态: validationResult, complexity, isValidating
50
+ * - 手动验证: 提供 validate 方法支持手动触发
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * function MyComponent() {
55
+ * const [pattern, setPattern] = useState('');
56
+ * const { validationResult, complexity, isValidating } = useRegexValidation(pattern);
57
+ *
58
+ * return (
59
+ * <div>
60
+ * <input value={pattern} onChange={e => setPattern(e.target.value)} />
61
+ * {isValidating && <Spin />}
62
+ * {validationResult?.errors.map(err => <Alert key={err.type} message={err.message} />)}
63
+ * {complexity && <Badge>性能评分: {complexity.performanceScore}</Badge>}
64
+ * </div>
65
+ * );
66
+ * }
67
+ * ```
68
+ */
69
+ export declare const useRegexValidation: (pattern: string, options?: {
70
+ debounceMs?: number | undefined;
71
+ }) => UseRegexValidationResult;