@skopon-cool/form-sdk 0.1.1 → 0.1.4

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 (93) hide show
  1. package/README.md +49 -11
  2. package/dist/adapter/a2uiAdapter.d.ts +0 -1
  3. package/dist/adapter/a2uiAdapter.d.ts.map +1 -1
  4. package/dist/adapter/formFileAccept.d.ts.map +1 -1
  5. package/dist/adapter/formSchema.d.ts +1 -0
  6. package/dist/adapter/formSchema.d.ts.map +1 -1
  7. package/dist/blocks/case_singleselect/adapter.d.ts +10 -0
  8. package/dist/blocks/case_singleselect/adapter.d.ts.map +1 -0
  9. package/dist/blocks/case_singleselect/catalog.d.ts +2 -0
  10. package/dist/blocks/case_singleselect/catalog.d.ts.map +1 -0
  11. package/dist/blocks/case_singleselect/index.d.ts +3 -0
  12. package/dist/blocks/case_singleselect/index.d.ts.map +1 -0
  13. package/dist/blocks/registry.d.ts +8 -0
  14. package/dist/blocks/registry.d.ts.map +1 -0
  15. package/dist/blocks/resume_multiselect/adapter.d.ts +10 -0
  16. package/dist/blocks/resume_multiselect/adapter.d.ts.map +1 -0
  17. package/dist/blocks/resume_multiselect/catalog.d.ts +2 -0
  18. package/dist/blocks/resume_multiselect/catalog.d.ts.map +1 -0
  19. package/dist/blocks/resume_multiselect/index.d.ts +3 -0
  20. package/dist/blocks/resume_multiselect/index.d.ts.map +1 -0
  21. package/dist/blocks/types.d.ts +27 -0
  22. package/dist/blocks/types.d.ts.map +1 -0
  23. package/dist/catalog/a2uiCustomCatalog.d.ts.map +1 -1
  24. package/dist/catalog/caseSearchContext.d.ts +28 -0
  25. package/dist/catalog/caseSearchContext.d.ts.map +1 -0
  26. package/dist/catalog/resumeSearchContext.d.ts +30 -0
  27. package/dist/catalog/resumeSearchContext.d.ts.map +1 -0
  28. package/dist/catalog/skoponCaseSelect.d.ts +2 -0
  29. package/dist/catalog/skoponCaseSelect.d.ts.map +1 -0
  30. package/dist/catalog/skoponResumeSelect.d.ts +2 -0
  31. package/dist/catalog/skoponResumeSelect.d.ts.map +1 -0
  32. package/dist/catalog/useSkoponBoundField.d.ts +2 -0
  33. package/dist/catalog/useSkoponBoundField.d.ts.map +1 -1
  34. package/dist/client/formClient.d.ts.map +1 -1
  35. package/dist/components/AskUserFormCard.d.ts +10 -2
  36. package/dist/components/AskUserFormCard.d.ts.map +1 -1
  37. package/dist/components/SkoponA2uiStreamRenderer.d.ts +7 -1
  38. package/dist/components/SkoponA2uiStreamRenderer.d.ts.map +1 -1
  39. package/dist/components/SkoponA2uiStreamRenderer.test.d.ts +2 -0
  40. package/dist/components/SkoponA2uiStreamRenderer.test.d.ts.map +1 -0
  41. package/dist/components/SkoponFormRenderer.d.ts +6 -0
  42. package/dist/components/SkoponFormRenderer.d.ts.map +1 -1
  43. package/dist/form-sdk.css +1 -1
  44. package/dist/index.d.ts +7 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +1390 -710
  47. package/dist/submit/buildCurlStatement.d.ts +8 -0
  48. package/dist/submit/buildCurlStatement.d.ts.map +1 -1
  49. package/dist/submit/intersectPayloadBlocksWithForm.d.ts +26 -0
  50. package/dist/submit/intersectPayloadBlocksWithForm.d.ts.map +1 -0
  51. package/dist/submit/submitFormJson.d.ts.map +1 -1
  52. package/dist/types/index.d.ts +26 -2
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/package.json +11 -6
  55. package/src/adapter/a2uiAdapter.test.ts +116 -0
  56. package/src/adapter/a2uiAdapter.ts +48 -4
  57. package/src/adapter/formFileAccept.test.ts +53 -0
  58. package/src/adapter/formFileAccept.ts +11 -2
  59. package/src/adapter/formSchema.test.ts +35 -0
  60. package/src/adapter/formSchema.ts +70 -3
  61. package/src/blocks/case_singleselect/adapter.ts +74 -0
  62. package/src/blocks/case_singleselect/catalog.ts +1 -0
  63. package/src/blocks/case_singleselect/index.ts +14 -0
  64. package/src/blocks/registry.ts +34 -0
  65. package/src/blocks/resume_multiselect/adapter.ts +57 -0
  66. package/src/blocks/resume_multiselect/catalog.ts +1 -0
  67. package/src/blocks/resume_multiselect/index.ts +14 -0
  68. package/src/blocks/types.ts +34 -0
  69. package/src/catalog/a2uiCustomCatalog.tsx +34 -5
  70. package/src/catalog/caseSearchContext.tsx +46 -0
  71. package/src/catalog/resumeSearchContext.tsx +48 -0
  72. package/src/catalog/skoponCaseSelect.tsx +215 -0
  73. package/src/catalog/skoponResumeSelect.tsx +227 -0
  74. package/src/catalog/textFieldPreview.test.tsx +1 -1
  75. package/src/catalog/useSkoponBoundField.test.ts +62 -0
  76. package/src/catalog/useSkoponBoundField.ts +10 -1
  77. package/src/client/formClient.test.ts +83 -0
  78. package/src/client/formClient.ts +10 -2
  79. package/src/components/AskUserFormCard.tsx +146 -58
  80. package/src/components/SkoponA2uiStreamRenderer.test.ts +78 -0
  81. package/src/components/SkoponA2uiStreamRenderer.test.tsx +103 -0
  82. package/src/components/SkoponA2uiStreamRenderer.tsx +141 -23
  83. package/src/components/SkoponFormRenderer.tsx +42 -17
  84. package/src/index.ts +34 -2
  85. package/src/styles/index.css +65 -0
  86. package/src/submit/buildCurlStatement.ts +49 -0
  87. package/src/submit/intersectPayloadBlocksWithForm.ts +175 -0
  88. package/src/submit/submit.test.ts +170 -10
  89. package/src/submit/submitFormJson.ts +20 -1
  90. package/src/types/index.ts +30 -0
  91. package/dist/submit/intersectPayloadWithForm.d.ts +0 -17
  92. package/dist/submit/intersectPayloadWithForm.d.ts.map +0 -1
  93. package/src/submit/intersectPayloadWithForm.ts +0 -54
@@ -17,6 +17,8 @@ export type A2uiComponentName =
17
17
  | 'FileUpload'
18
18
  | 'SkoponMedia'
19
19
  | 'SkoponSelect'
20
+ | 'SkoponResumeSelect'
21
+ | 'SkoponCaseSelect'
20
22
 
21
23
  export interface A2uiComponentNode {
22
24
  id: string
@@ -53,6 +55,8 @@ export type FormBlockType =
53
55
  | 'datetime'
54
56
  | 'time'
55
57
  | 'file'
58
+ | 'resume_multiselect'
59
+ | 'case_singleselect'
56
60
  | 'image'
57
61
  | 'video'
58
62
  | 'audio'
@@ -80,6 +84,24 @@ export interface FormBlockOption {
80
84
  label: string
81
85
  }
82
86
 
87
+ /** 简历多选组件:渲染时用于 /univ/resume/search 的筛选条件 */
88
+ export interface FormResumeFilter {
89
+ names?: string[]
90
+ agentUniqueIds?: string[]
91
+ resumeUniqueIds?: string[]
92
+ pageSize?: number
93
+ }
94
+
95
+ /** 案例单选组件:渲染时用于 /univ/case/list 的筛选条件 */
96
+ export interface FormCaseFilter {
97
+ /** Agent 类型(编辑器辅助,运行时不用) */
98
+ agentKind?: string
99
+ /** Agent unique_id(编辑器辅助,运行时不用) */
100
+ agentUniqueId?: string
101
+ flowId?: number
102
+ pageSize?: number
103
+ }
104
+
83
105
  export interface FormBlock {
84
106
  id: string
85
107
  type: FormBlockType
@@ -98,6 +120,14 @@ export interface FormBlock {
98
120
  fileMinCount?: number
99
121
  fileMaxCount?: number
100
122
  defaultValue?: string | string[] | boolean
123
+ /** 简历多选:是否显示「换一批」 */
124
+ resumeEnableRefresh?: boolean
125
+ /** 简历多选:列表筛选条件(持久化进 block json) */
126
+ resumeFilter?: FormResumeFilter
127
+ /** 案例单选:是否显示「换一批」 */
128
+ caseEnableRefresh?: boolean
129
+ /** 案例单选:列表筛选条件(持久化进 block json) */
130
+ caseFilter?: FormCaseFilter
101
131
  }
102
132
 
103
133
  export interface FormSchema {
@@ -1,17 +0,0 @@
1
- import type { FormBlock, FormSchema } from '../types/index';
2
- /** payload 单个字段的元数据约定(见 docs/ask/ payload.json) */
3
- export interface AskUserPayloadField {
4
- 用途描述?: string;
5
- 字段类型?: string;
6
- 字段格式?: string;
7
- 字段枚举?: string;
8
- [key: string]: unknown;
9
- }
10
- export type AskUserPayload = Record<string, AskUserPayloadField | unknown>;
11
- export interface PayloadFormIntersection {
12
- matchedBlocks: FormBlock[];
13
- remainderPayload: AskUserPayload;
14
- }
15
- export declare function getPayloadKeys(payload: unknown): string[];
16
- export declare function intersectPayloadWithForm(payload: unknown, formDefinition: FormSchema | undefined): PayloadFormIntersection;
17
- //# sourceMappingURL=intersectPayloadWithForm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intersectPayloadWithForm.d.ts","sourceRoot":"","sources":["../../src/submit/intersectPayloadWithForm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAG3D,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAA;AAE1E,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,SAAS,EAAE,CAAA;IAC1B,gBAAgB,EAAE,cAAc,CAAA;CACjC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAGzD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,UAAU,GAAG,SAAS,GACrC,uBAAuB,CA0BzB"}
@@ -1,54 +0,0 @@
1
- import type { FormBlock, FormSchema } from '../types/index'
2
- import { isInputBlockType } from '../types/index'
3
-
4
- /** payload 单个字段的元数据约定(见 docs/ask/ payload.json) */
5
- export interface AskUserPayloadField {
6
- 用途描述?: string
7
- 字段类型?: string
8
- 字段格式?: string
9
- 字段枚举?: string
10
- [key: string]: unknown
11
- }
12
-
13
- export type AskUserPayload = Record<string, AskUserPayloadField | unknown>
14
-
15
- export interface PayloadFormIntersection {
16
- matchedBlocks: FormBlock[]
17
- remainderPayload: AskUserPayload
18
- }
19
-
20
- export function getPayloadKeys(payload: unknown): string[] {
21
- if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return []
22
- return Object.keys(payload as Record<string, unknown>)
23
- }
24
-
25
- export function intersectPayloadWithForm(
26
- payload: unknown,
27
- formDefinition: FormSchema | undefined,
28
- ): PayloadFormIntersection {
29
- const keys = getPayloadKeys(payload)
30
- const source = (payload ?? {}) as Record<string, unknown>
31
-
32
- const blocks = formDefinition?.blocks ?? []
33
- const inputBlockNames = new Set(
34
- blocks
35
- .filter((block) => isInputBlockType(block.type) && block.name?.trim())
36
- .map((block) => block.name!.trim()),
37
- )
38
-
39
- const matchedBlocks = blocks.filter(
40
- (block) =>
41
- isInputBlockType(block.type) &&
42
- block.name?.trim() &&
43
- keys.includes(block.name.trim()),
44
- )
45
-
46
- const remainderPayload: AskUserPayload = {}
47
- for (const key of keys) {
48
- if (!inputBlockNames.has(key)) {
49
- remainderPayload[key] = source[key]
50
- }
51
- }
52
-
53
- return { matchedBlocks, remainderPayload }
54
- }