@kc-one/smart-fill-sdk 0.0.1

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 (38) hide show
  1. package/README.md +204 -0
  2. package/dist/examples/vanilla/main.d.ts +2 -0
  3. package/dist/examples/vanilla/main.d.ts.map +1 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.esm.js +1492 -0
  6. package/dist/index.umd.cjs +92 -0
  7. package/dist/src/adapters/native.d.ts +3 -0
  8. package/dist/src/adapters/native.d.ts.map +1 -0
  9. package/dist/src/client/gateway-client.d.ts +52 -0
  10. package/dist/src/client/gateway-client.d.ts.map +1 -0
  11. package/dist/src/config/defaults.d.ts +7 -0
  12. package/dist/src/config/defaults.d.ts.map +1 -0
  13. package/dist/src/core/errors.d.ts +13 -0
  14. package/dist/src/core/errors.d.ts.map +1 -0
  15. package/dist/src/core/instance-manager.d.ts +24 -0
  16. package/dist/src/core/instance-manager.d.ts.map +1 -0
  17. package/dist/src/core/smart-fill-instance.d.ts +105 -0
  18. package/dist/src/core/smart-fill-instance.d.ts.map +1 -0
  19. package/dist/src/core/smart-fill.d.ts +39 -0
  20. package/dist/src/core/smart-fill.d.ts.map +1 -0
  21. package/dist/src/events/event-bus.d.ts +12 -0
  22. package/dist/src/events/event-bus.d.ts.map +1 -0
  23. package/dist/src/filler/dom-filler.d.ts +32 -0
  24. package/dist/src/filler/dom-filler.d.ts.map +1 -0
  25. package/dist/src/index.d.ts +10 -0
  26. package/dist/src/index.d.ts.map +1 -0
  27. package/dist/src/rules/local-rules.d.ts +9 -0
  28. package/dist/src/rules/local-rules.d.ts.map +1 -0
  29. package/dist/src/scanner/dom-scanner.d.ts +34 -0
  30. package/dist/src/scanner/dom-scanner.d.ts.map +1 -0
  31. package/dist/src/scanner/fingerprint.d.ts +22 -0
  32. package/dist/src/scanner/fingerprint.d.ts.map +1 -0
  33. package/dist/src/types/index.d.ts +255 -0
  34. package/dist/src/types/index.d.ts.map +1 -0
  35. package/dist/src/ui/panel.d.ts +78 -0
  36. package/dist/src/ui/panel.d.ts.map +1 -0
  37. package/dist/style.css +1 -0
  38. package/package.json +35 -0
@@ -0,0 +1,22 @@
1
+ import { FieldOption } from '../types';
2
+ /** 提取稳定 ID,动态/随机 ID 返回空字符串 */
3
+ export declare function stableId(value?: string | null): string;
4
+ /**
5
+ * 生成字段结构指纹。
6
+ * 基于 fieldId、tagName、type、label 等稳定属性拼接哈希,
7
+ * 回填前与当前 DOM 对比,防止页面结构变化导致误填。
8
+ */
9
+ export declare function createFingerprint(input: {
10
+ fieldId?: string;
11
+ tagName?: string;
12
+ type?: string;
13
+ name?: string;
14
+ id?: string;
15
+ label?: string;
16
+ placeholder?: string;
17
+ section?: string;
18
+ options?: FieldOption[];
19
+ }): string;
20
+ /** 文本归一化:去空白、转小写,用于关键词匹配 */
21
+ export declare function normalize(value: unknown): string;
22
+ //# sourceMappingURL=fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../src/scanner/fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAS3C,8BAA8B;AAC9B,wBAAgB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,UAM7C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;CACxB,UAmBA;AAED,4BAA4B;AAC5B,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,UAKvC"}
@@ -0,0 +1,255 @@
1
+ /**
2
+
3
+ * Smart Fill SDK 对外 TypeScript 类型定义。
4
+
5
+ *
6
+
7
+ * 按领域分组:字段模型 → 配置 → 识别 → 回填 → 事件 → 适配器
8
+
9
+ */
10
+ /** 支持的表单控件类型 */
11
+ export type FieldType = 'text' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'date' | 'number' | 'amount' | 'cascader';
12
+ /** 下拉/单选/多选选项 */
13
+ export type FieldOption = {
14
+ label: string;
15
+ value: string | number | boolean;
16
+ };
17
+ /**
18
+
19
+ * 扫描后的字段描述符(运行时产物)。
20
+
21
+ * 由 DomScanner 从 DOM 或 FieldSchema 生成,贯穿识别与回填全流程。
22
+
23
+ */
24
+ export type FieldDescriptor = {
25
+ /** 字段唯一标识,对应 data-smart-fill-key / name / 自动生成 */
26
+ fieldId: string;
27
+ /** 字段结构指纹,回填前校验 DOM 未变化 */
28
+ fingerprint: string;
29
+ /** 所属扫描批次 token,与 ApplyInput.scanToken 对齐 */
30
+ scanToken: string;
31
+ type: FieldType;
32
+ /** 本地规则分流:inherit 跟随总开关 | off 跳过 | only 仅本地 */
33
+ localRuleMode?: 'inherit' | 'off' | 'only';
34
+ /** 展示用标签,来自 label 元素或 aria-label */
35
+ label: string;
36
+ placeholder?: string;
37
+ name?: string;
38
+ id?: string;
39
+ section?: string;
40
+ options?: FieldOption[];
41
+ /** 字段来源:registered=业务注册 | form_scan=DOM 扫描 */
42
+ source: 'registered' | 'form_config' | 'form_scan' | 'page_scan';
43
+ required?: boolean;
44
+ readonly?: boolean;
45
+ disabled?: boolean;
46
+ /** 关联 DOM 元素引用,回填时直接写入 */
47
+ element?: HTMLElement;
48
+ };
49
+ /**
50
+
51
+ * 业务方显式注册的字段 Schema(L3 模式)。
52
+
53
+ * 通过 registerFields 传入,优先级高于 DOM 自动扫描。
54
+
55
+ */
56
+ export type FieldSchema = {
57
+ fieldId: string;
58
+ label: string;
59
+ type: FieldType;
60
+ localRuleMode?: 'inherit' | 'off' | 'only';
61
+ path?: string;
62
+ scope?: 'form' | 'detail' | 'dialog';
63
+ /** 明细行 key,与 fieldId 组合为唯一标识 */
64
+ rowKey?: string | number;
65
+ required?: boolean;
66
+ section?: string;
67
+ options?: FieldOption[];
68
+ /** DOM 元素或 CSS 选择器,扫描时解析为 element */
69
+ element?: HTMLElement | string;
70
+ /** 自定义读值,覆盖默认 DOM 读取 */
71
+ getValue?: () => unknown;
72
+ /** 自定义写值,覆盖默认 DOM 写入 */
73
+ setValue?: (value: unknown) => void | Promise<void>;
74
+ /** AI 返回值转换,写入前执行 */
75
+ transform?: (aiValue: unknown) => unknown;
76
+ /** 写入前校验,返回 true 通过,string 为失败原因 */
77
+ validate?: (value: unknown) => boolean | string | Promise<boolean | string>;
78
+ };
79
+ /** SmartFill.setup 全局初始化配置(网关 baseURL 见 config/defaults.ts) */
80
+ export type SmartFillSetupConfig = {
81
+ /** API 密钥,格式 seKey-xxx */
82
+ apiKey: string;
83
+ /** HTTP 请求超时毫秒数,默认 30000 */
84
+ requestTimeoutMs?: number;
85
+ };
86
+ /** SmartFill.create 页面实例配置 */
87
+ export type SmartFillCreateConfig = {
88
+ /** 表单编码,识别请求携带给后端 */
89
+ formCode?: string;
90
+ /** @deprecated 已不再拉取远端 formConfig */
91
+ strictFormConfig?: boolean;
92
+ /** 扫描根节点,默认 document */
93
+ root?: HTMLElement | ShadowRoot;
94
+ /** DOM 自动扫描最大字段数,默认 200 */
95
+ maxFields?: number;
96
+ locale?: 'zh-CN' | 'en-US';
97
+ /** 面板文案覆盖,key 见 ui/panel.ts 中 t() 调用 */
98
+ messages?: Record<string, string>;
99
+ };
100
+ export type SessionResponse = {
101
+ apiKey: string;
102
+ accessToken?: string;
103
+ features?: {
104
+ text: boolean;
105
+ image: boolean;
106
+ ai: boolean;
107
+ localRuleOnly: boolean;
108
+ };
109
+ expiresIn?: number;
110
+ refreshBefore?: number;
111
+ rulesVersion?: string;
112
+ };
113
+ /** @deprecated 远端表单配置,当前扫描流程已不再使用 */
114
+ export type FormConfigResponse = {
115
+ formCode: string;
116
+ configVersion: string;
117
+ rulesVersion: string;
118
+ scanContainer?: string;
119
+ fields?: FieldSchema[];
120
+ strict: boolean;
121
+ };
122
+ /** 识别请求入参 */
123
+ export type RecognizePayload = {
124
+ scanToken: string;
125
+ text?: string;
126
+ images?: File[];
127
+ };
128
+ /**
129
+
130
+ * 单条识别建议。
131
+
132
+ * 来源:local_rule(本地规则)| ocr | ai(后端)| map
133
+
134
+ */
135
+ export type FieldSuggestion = {
136
+ fieldId: string;
137
+ scanToken: string;
138
+ groupId?: string | number;
139
+ label: string;
140
+ value: unknown;
141
+ displayValue?: string;
142
+ /** 0~1,决定是否自动回填 */
143
+ confidence: number;
144
+ source: 'local_rule' | 'ocr' | 'ai' | 'map';
145
+ reason?: string;
146
+ warnings?: string[];
147
+ };
148
+ /** recognize 完整返回,含 suggestions 与 trace 追踪信息 */
149
+ export type RecognizeResult = {
150
+ scanToken: string;
151
+ suggestions: FieldSuggestion[];
152
+ warnings?: string[];
153
+ trace: {
154
+ traceId: string;
155
+ usedOcr: boolean;
156
+ usedAi: boolean;
157
+ durationMs: number;
158
+ };
159
+ };
160
+ /** 自动回填候选项,recognize 完成后由 toAutoApplyState 生成 */
161
+ export type AutoApplyItem = {
162
+ applyItemId: string;
163
+ fieldId: string;
164
+ scanToken: string;
165
+ groupId?: string | number;
166
+ label: string;
167
+ value: unknown;
168
+ /** 回填前页面当前值,用于对比展示 */
169
+ currentValue: unknown;
170
+ displayValue?: string;
171
+ confidence: number;
172
+ source: FieldSuggestion['source'];
173
+ warnings?: string[];
174
+ previousValue?: unknown;
175
+ };
176
+ /** 面板展示与自动回填使用的候选状态 */
177
+ export type AutoApplyState = {
178
+ scanToken: string;
179
+ items: AutoApplyItem[];
180
+ traceId: string;
181
+ };
182
+ /** 手动/自动回填入参 */
183
+ export type ApplyInput = {
184
+ scanToken: string;
185
+ applyBatchId?: string;
186
+ values: Array<{
187
+ fieldId: string;
188
+ value: unknown;
189
+ source?: FieldSuggestion['source'];
190
+ }>;
191
+ };
192
+ /** 回填执行结果:applied 成功项 + skipped 跳过项及原因 */
193
+ export type ApplyResult = {
194
+ applied: Array<{
195
+ fieldId: string;
196
+ label: string;
197
+ value: unknown;
198
+ previousValue?: unknown;
199
+ }>;
200
+ skipped: Array<{
201
+ fieldId: string;
202
+ label: string;
203
+ attemptedValue: unknown;
204
+ reason: string;
205
+ reasonCode: string;
206
+ }>;
207
+ warnings?: string[];
208
+ };
209
+ /** 结构化错误,通过 instance.on('error') 或面板展示 */
210
+ export type SmartFillError = {
211
+ code: string;
212
+ message: string;
213
+ stage: 'setup' | 'scan' | 'recognize' | 'apply' | 'ui';
214
+ traceId?: string;
215
+ retryable?: boolean;
216
+ details?: unknown;
217
+ };
218
+ /** 实例级事件映射,通过 instance.on(event, handler) 订阅 */
219
+ export type SmartFillEventMap = {
220
+ ready: {
221
+ apiKey: string;
222
+ };
223
+ scanCompleted: {
224
+ scanToken: string;
225
+ fieldCount: number;
226
+ };
227
+ recognizing: {
228
+ scanToken: string;
229
+ traceId: string;
230
+ };
231
+ recognized: RecognizeResult;
232
+ applying: {
233
+ scanToken: string;
234
+ count: number;
235
+ };
236
+ applied: ApplyResult;
237
+ error: SmartFillError;
238
+ };
239
+ /**
240
+
241
+ * 组件库回填适配器。
242
+
243
+ * 用于 AntD Select、Element DatePicker 等非原生控件,
244
+
245
+ * 通过 match 判断是否接管 setValue/getValue。
246
+
247
+ */
248
+ export type SmartFillAdapter = {
249
+ name: string;
250
+ match: (element: HTMLElement, field: FieldDescriptor) => boolean;
251
+ getValue?: (field: FieldDescriptor) => unknown;
252
+ setValue: (field: FieldDescriptor, value: unknown) => void | Promise<void>;
253
+ validateApplied?: (field: FieldDescriptor, value: unknown) => boolean | Promise<boolean>;
254
+ };
255
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { ApplyResult, AutoApplyState } from '../types';
2
+ type PanelOptions = {
3
+ /** inline=嵌入容器 | floating=悬浮按钮+弹框 */
4
+ mode: 'inline' | 'floating';
5
+ /** 文案覆盖,key 见 t() 调用 */
6
+ messages?: Record<string, string>;
7
+ /** 面板初始展开状态;未传时 inline 默认展开、floating 默认收起 */
8
+ initialOpen?: boolean;
9
+ /** 本地优先识别初始状态,默认 false */
10
+ localPriorityEnabled?: boolean;
11
+ onOpen: () => void | Promise<void>;
12
+ onClose: () => void;
13
+ onRecognize: (payload: {
14
+ text?: string;
15
+ images?: File[];
16
+ }) => Promise<unknown>;
17
+ /** 本地优先开关变更回调,同步到 SmartFillInstance */
18
+ onLocalPriorityChange?: (enabled: boolean) => void;
19
+ };
20
+ export declare class SmartFillPanel {
21
+ private readonly options;
22
+ /** 面板宿主元素,挂载到 container 下 */
23
+ private host;
24
+ /** Shadow DOM 根或 fallback 到 host */
25
+ private root;
26
+ /** 识别结果候选项,供 review 区域展示 */
27
+ private autoApplyState;
28
+ /** 用户选择的图片文件列表 */
29
+ private selectedFiles;
30
+ /** 文本输入框内容缓存,render 重绘时保留 */
31
+ private inputText;
32
+ /** 本地优先识别开关状态 */
33
+ private localPriorityEnabled;
34
+ /** 面板展开状态:inline 默认展开,floating 默认收起 */
35
+ private isOpen;
36
+ /** floating 模式拖拽状态 */
37
+ private dragState;
38
+ /** 拖拽结束后抑制 click 触发 open,避免误开面板 */
39
+ private suppressOpenClick;
40
+ /** 鼠标是否正悬浮在图片区,供 Ctrl+V 粘贴图片触发判断 */
41
+ private isUploadHovering;
42
+ constructor(options: PanelOptions);
43
+ /** 挂载面板到指定容器,创建 Shadow DOM 并首次渲染 */
44
+ mount(container: HTMLElement): void;
45
+ /** 控制面板展开/收起 */
46
+ setOpen(open: boolean): void;
47
+ /** 同步本地优先开关状态(来自其他面板/外部持久化),不触发 onLocalPriorityChange */
48
+ setLocalPriorityEnabled(enabled: boolean): void;
49
+ /** 识别按钮 loading 状态 */
50
+ setBusy(busy: boolean, text?: string): void;
51
+ /** 更新底部状态文案 */
52
+ setStatus(text: string): void;
53
+ /** 展示错误状态(红色文案) */
54
+ setError(text: string): void;
55
+ /** 更新识别结果列表并刷新 review 区域 */
56
+ setAutoApplyState(state: AutoApplyState): void;
57
+ /** 展示回填结果统计(成功/跳过数量) */
58
+ setApplyResult(result: ApplyResult): void;
59
+ /** 移除 DOM 节点并解绑拖拽监听 */
60
+ destroy(): void;
61
+ private render;
62
+ private bindEvents;
63
+ private clearFormState;
64
+ /** 清空当前已选图片与上传文案,供 clear 和图片识别成功后复用 */
65
+ private resetSelectedFiles;
66
+ /** 校验并触发图片识别,支持点击选择 / 拖拽 / 粘贴三种入口 */
67
+ private handleImages;
68
+ private startDrag;
69
+ private handleDragMove;
70
+ private handleDragEnd;
71
+ /** 面板聚焦或鼠标悬浮在图片区时接管全局粘贴图片 */
72
+ private handleDocumentPaste;
73
+ private keepHostInViewport;
74
+ private query;
75
+ private t;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/ui/panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM5D,KAAK,YAAY,GAAG;IAClB,qCAAqC;IACrC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0BAA0B;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,WAAW,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9E,uCAAuC;IACvC,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CACnD,CAAA;AAED,qBAAa,cAAc;IA6Bb,OAAO,CAAC,QAAQ,CAAC,OAAO;IA5BpC,6BAA6B;IAC7B,OAAO,CAAC,IAAI,CAA2B;IACvC,oCAAoC;IACpC,OAAO,CAAC,IAAI,CAAwC;IACpD,4BAA4B;IAC5B,OAAO,CAAC,cAAc,CAA8B;IACpD,kBAAkB;IAClB,OAAO,CAAC,aAAa,CAAa;IAClC,6BAA6B;IAC7B,OAAO,CAAC,SAAS,CAAK;IACtB,iBAAiB;IACjB,OAAO,CAAC,oBAAoB,CAAS;IACrC,uCAAuC;IACvC,OAAO,CAAC,MAAM,CAAQ;IACtB,sBAAsB;IACtB,OAAO,CAAC,SAAS,CAOF;IACf,mCAAmC;IACnC,OAAO,CAAC,iBAAiB,CAAQ;IACjC,oCAAoC;IACpC,OAAO,CAAC,gBAAgB,CAAQ;gBAEH,OAAO,EAAE,YAAY;IAIlD,oCAAoC;IACpC,KAAK,CAAC,SAAS,EAAE,WAAW;IAU5B,gBAAgB;IAChB,OAAO,CAAC,IAAI,EAAE,OAAO;IAMrB,yDAAyD;IACzD,uBAAuB,CAAC,OAAO,EAAE,OAAO;IAMxC,sBAAsB;IACtB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,SAAK;IAQhC,eAAe;IACf,SAAS,CAAC,IAAI,EAAE,MAAM;IAQtB,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAQrB,4BAA4B;IAC5B,iBAAiB,CAAC,KAAK,EAAE,cAAc;IAOvC,wBAAwB;IACxB,cAAc,CAAC,MAAM,EAAE,WAAW;IAQlC,uBAAuB;IACvB,OAAO;IAYP,OAAO,CAAC,MAAM;IAuDd,OAAO,CAAC,UAAU;IAsElB,OAAO,CAAC,cAAc;IAQtB,uCAAuC;IACvC,OAAO,CAAC,kBAAkB;IAQ1B,qCAAqC;YACvB,YAAY;IAuC1B,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,cAAc,CAgBrB;IAED,OAAO,CAAC,aAAa,CAcpB;IAED,6BAA6B;IAC7B,OAAO,CAAC,mBAAmB,CAgB1B;IAED,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,CAAC;CAGV"}
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ [data-smart-fill-highlighted=true]{background:#eaf3ff!important;transition:background-color .2s ease}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@kc-one/smart-fill-sdk",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "main": "./dist/index.umd.js",
6
+ "module": "./dist/index.es.js",
7
+ "typings": "./dist/index.d.ts",
8
+ "scripts": {
9
+ "test": "echo \"Error: no test specified\" && exit 1"
10
+ },
11
+ "keywords": [],
12
+ "author": "",
13
+ "license": "ISC",
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "registry": "https://registry.npmjs.org/"
17
+ },
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/index.es.js",
21
+ "require": "./dist/index.umd.js"
22
+ },
23
+ "./dist/style.css": {
24
+ "import": "./dist/style.css",
25
+ "require": "./dist/style.css"
26
+ }
27
+ },
28
+ "peerDependencies": {
29
+ "element-plus": "> 2.2.0",
30
+ "vue": "> 3.2.0"
31
+ },
32
+ "files": [
33
+ "dist"
34
+ ]
35
+ }