@skopon-cool/form-sdk 0.1.0
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.
- package/README.md +82 -0
- package/dist/adapter/a2uiAdapter.d.ts +21 -0
- package/dist/adapter/a2uiAdapter.d.ts.map +1 -0
- package/dist/adapter/extractSurfaceValues.d.ts +8 -0
- package/dist/adapter/extractSurfaceValues.d.ts.map +1 -0
- package/dist/adapter/formFileAccept.d.ts +17 -0
- package/dist/adapter/formFileAccept.d.ts.map +1 -0
- package/dist/adapter/formFilePlaceholderIcon.d.ts +5 -0
- package/dist/adapter/formFilePlaceholderIcon.d.ts.map +1 -0
- package/dist/adapter/formMedia.d.ts +7 -0
- package/dist/adapter/formMedia.d.ts.map +1 -0
- package/dist/adapter/formSchema.d.ts +6 -0
- package/dist/adapter/formSchema.d.ts.map +1 -0
- package/dist/adapter/id.d.ts +4 -0
- package/dist/adapter/id.d.ts.map +1 -0
- package/dist/adapter/resolveSurface.d.ts +6 -0
- package/dist/adapter/resolveSurface.d.ts.map +1 -0
- package/dist/catalog/a2uiCustomCatalog.d.ts +10 -0
- package/dist/catalog/a2uiCustomCatalog.d.ts.map +1 -0
- package/dist/catalog/a2uiPreviewContext.d.ts +11 -0
- package/dist/catalog/a2uiPreviewContext.d.ts.map +1 -0
- package/dist/catalog/useSkoponBoundField.d.ts +10 -0
- package/dist/catalog/useSkoponBoundField.d.ts.map +1 -0
- package/dist/client/formClient.d.ts +22 -0
- package/dist/client/formClient.d.ts.map +1 -0
- package/dist/components/AskUserFormCard.d.ts +13 -0
- package/dist/components/AskUserFormCard.d.ts.map +1 -0
- package/dist/components/CurlSubmitBlock.d.ts +10 -0
- package/dist/components/CurlSubmitBlock.d.ts.map +1 -0
- package/dist/components/SkoponA2uiStreamRenderer.d.ts +11 -0
- package/dist/components/SkoponA2uiStreamRenderer.d.ts.map +1 -0
- package/dist/components/SkoponFormRenderer.d.ts +16 -0
- package/dist/components/SkoponFormRenderer.d.ts.map +1 -0
- package/dist/form-sdk.css +1 -0
- package/dist/icons/FilePlaceholderIcon.d.ts +10 -0
- package/dist/icons/FilePlaceholderIcon.d.ts.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1332 -0
- package/dist/submit/buildCurlStatement.d.ts +2 -0
- package/dist/submit/buildCurlStatement.d.ts.map +1 -0
- package/dist/submit/intersectPayloadWithForm.d.ts +17 -0
- package/dist/submit/intersectPayloadWithForm.d.ts.map +1 -0
- package/dist/submit/submitFormJson.d.ts +12 -0
- package/dist/submit/submitFormJson.d.ts.map +1 -0
- package/dist/types/index.d.ts +76 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +53 -0
- package/src/adapter/a2uiAdapter.test.ts +150 -0
- package/src/adapter/a2uiAdapter.ts +490 -0
- package/src/adapter/extractSurfaceValues.ts +25 -0
- package/src/adapter/formFileAccept.ts +198 -0
- package/src/adapter/formFilePlaceholderIcon.ts +33 -0
- package/src/adapter/formMedia.ts +50 -0
- package/src/adapter/formSchema.ts +139 -0
- package/src/adapter/id.ts +24 -0
- package/src/adapter/resolveSurface.ts +66 -0
- package/src/catalog/a2uiCustomCatalog.tsx +548 -0
- package/src/catalog/a2uiPreviewContext.tsx +26 -0
- package/src/catalog/useSkoponBoundField.ts +57 -0
- package/src/client/formClient.ts +72 -0
- package/src/components/AskUserFormCard.tsx +155 -0
- package/src/components/CurlSubmitBlock.tsx +60 -0
- package/src/components/SkoponA2uiStreamRenderer.tsx +70 -0
- package/src/components/SkoponFormRenderer.tsx +100 -0
- package/src/icons/FilePlaceholderIcon.tsx +40 -0
- package/src/index.ts +67 -0
- package/src/styles/a2ui-preview.css +345 -0
- package/src/styles/index.css +190 -0
- package/src/submit/buildCurlStatement.ts +13 -0
- package/src/submit/intersectPayloadWithForm.ts +54 -0
- package/src/submit/submit.test.ts +63 -0
- package/src/submit/submitFormJson.ts +50 -0
- package/src/types/index.ts +139 -0
package/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# @skopon/form-sdk
|
|
2
|
+
|
|
3
|
+
Skopon 表单渲染 SDK:基于 A2UI v0.9 + skopon 自定义 catalog,统一渲染 `form_definition`、A2UI surface 与增量 message 流,并提供 Ask User 提交能力(默认复制 curl,可选 POST JSON)。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @skopon/form-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Peer dependencies:`react`、`react-dom`、`antd`、`@a2ui/react`、`@a2ui/web_core`、`dayjs`。
|
|
12
|
+
|
|
13
|
+
## 样式
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import '@skopon/form-sdk/styles.css'
|
|
17
|
+
// 或从主入口 side-effect 引入(import '@skopon/form-sdk' 已包含样式)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 渲染 form_definition
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { SkoponFormRenderer, blocksToA2ui, resolveSurfaceFromFormDefinition } from '@skopon/form-sdk'
|
|
24
|
+
|
|
25
|
+
const surface = resolveSurfaceFromFormDefinition(formDefinition)
|
|
26
|
+
// 或
|
|
27
|
+
const surface = blocksToA2ui(formDefinition)
|
|
28
|
+
|
|
29
|
+
<SkoponFormRenderer doc={surface} interactive />
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## A2UI 增量流
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { SkoponA2uiStreamRenderer } from '@skopon/form-sdk'
|
|
36
|
+
|
|
37
|
+
<SkoponA2uiStreamRenderer messages={incomingMessages} interactive />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Ask User(QA / 流程 AI 聊天)
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
import { AskUserFormCard, createFormClient } from '@skopon/form-sdk'
|
|
44
|
+
|
|
45
|
+
const client = createFormClient({
|
|
46
|
+
baseUrl: '/api/v1',
|
|
47
|
+
getHeaders: () => ({ Authorization: 'Bearer …' }),
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
<AskUserFormCard
|
|
51
|
+
payload={message.payload}
|
|
52
|
+
formUniqueId={message.form_unique_id}
|
|
53
|
+
callbackUrl={message.callback_url}
|
|
54
|
+
fetchFormDetail={client.fetchDetail}
|
|
55
|
+
submitMode="curl"
|
|
56
|
+
/>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 提交
|
|
60
|
+
|
|
61
|
+
- `submitMode: 'curl'`(默认):复制 curl 到剪贴板
|
|
62
|
+
- `submitMode: 'post'`:`submitFormJson(callbackUrl, values)` POST JSON
|
|
63
|
+
|
|
64
|
+
独立工具:
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
import { buildCurlStatement, submitFormJson } from '@skopon/form-sdk'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 从 form_bp 拉取详情
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import { createFormClient } from '@skopon/form-sdk'
|
|
74
|
+
|
|
75
|
+
const client = createFormClient({
|
|
76
|
+
baseUrl: '/api/v1',
|
|
77
|
+
detailPath: '/dev/form/detail',
|
|
78
|
+
getHeaders: async () => ({ Authorization: '…' }),
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const detail = await client.fetchDetail({ formUniqueId: 'formuid-xxx' })
|
|
82
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { A2uiSurfaceDoc, FormSchema } from '../types/index';
|
|
2
|
+
export interface BlocksToA2uiOptions {
|
|
3
|
+
styleId?: string | null;
|
|
4
|
+
/** 是否写入 title/description 为 Text 组件;预览区由 FormTitleField 展示时可设为 false */
|
|
5
|
+
includeHeader?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** surface 是否仅含空 root Column(无可视内容) */
|
|
8
|
+
export declare function isA2uiSurfaceEmpty(doc: A2uiSurfaceDoc | null | undefined): boolean;
|
|
9
|
+
/** FormBlock[] -> A2UI surface 文档 */
|
|
10
|
+
export declare function blocksToA2ui(definition: Pick<FormSchema, 'title' | 'description' | 'blocks'>, options?: BlocksToA2uiOptions): A2uiSurfaceDoc;
|
|
11
|
+
/** A2UI surface 文档 -> FormSchema(已 sync 出 jsonSchema) */
|
|
12
|
+
export declare function a2uiToBlocks(doc: A2uiSurfaceDoc | null | undefined): FormSchema;
|
|
13
|
+
/**
|
|
14
|
+
* 便携 surface 文档 -> A2UI v0.9 消息列表(供 MessageProcessor 消费)。
|
|
15
|
+
* 返回宽松类型,调用方按需 `as unknown as A2uiMessage[]`。
|
|
16
|
+
*/
|
|
17
|
+
export declare function surfaceDocToMessages(doc: A2uiSurfaceDoc, options: {
|
|
18
|
+
surfaceId: string;
|
|
19
|
+
catalogId: string;
|
|
20
|
+
}): Record<string, unknown>[];
|
|
21
|
+
//# sourceMappingURL=a2uiAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2uiAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/a2uiAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EAKd,UAAU,EACX,MAAM,gBAAgB,CAAA;AAwOvB,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAOlF;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,aAAa,GAAG,QAAQ,CAAC,EAChE,OAAO,CAAC,EAAE,mBAAmB,GAC5B,cAAc,CAiChB;AAgJD,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CA0B/E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAChD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAgB3B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MessageProcessor } from '@a2ui/web_core/v0_9';
|
|
2
|
+
import type { ReactComponentImplementation } from '@a2ui/react/v0_9';
|
|
3
|
+
type SkoponProcessor = MessageProcessor<ReactComponentImplementation>;
|
|
4
|
+
/** 从 MessageProcessor surface 的 dataModel 读取已填字段值。 */
|
|
5
|
+
export declare function extractSurfaceValues(processor: SkoponProcessor, surfaceId: string, fieldNames: string[]): Record<string, unknown>;
|
|
6
|
+
export declare function collectInputFieldNames(fieldNames?: string[]): string[];
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=extractSurfaceValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractSurfaceValues.d.ts","sourceRoot":"","sources":["../../src/adapter/extractSurfaceValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAA;AAEpE,KAAK,eAAe,GAAG,gBAAgB,CAAC,4BAA4B,CAAC,CAAA;AAErE,sDAAsD;AACtD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEtE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface FormFileAcceptOption {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
/** UI 选项 value;Office 类为分组 key,生成 accept 时展开为多个 MIME */
|
|
6
|
+
export declare const FORM_FILE_TYPE_OPTIONS: FormFileAcceptOption[];
|
|
7
|
+
export declare const FORM_FILE_TYPE_MIME_MAP: Record<string, string[]>;
|
|
8
|
+
export declare const FORM_FILE_TYPE_EXTENSION_MAP: Record<string, string[]>;
|
|
9
|
+
export declare const FORM_FILE_EXTENSION_OPTIONS: FormFileAcceptOption[];
|
|
10
|
+
export declare function normalizeFileAcceptExtensions(extensions?: string[]): string[];
|
|
11
|
+
export declare function normalizeFileAcceptTypes(types?: string[]): string[];
|
|
12
|
+
export declare function expandFileAcceptTypesToMime(types?: string[]): string[];
|
|
13
|
+
export declare function getFileExtensionOptionsForTypes(types?: string[]): FormFileAcceptOption[];
|
|
14
|
+
export declare function filterFileAcceptExtensionsForTypes(types?: string[], extensions?: string[]): string[];
|
|
15
|
+
export declare function buildFileAcceptAttribute(types?: string[], extensions?: string[]): string | undefined;
|
|
16
|
+
export declare function formatFileAcceptSummary(types?: string[], extensions?: string[]): string | null;
|
|
17
|
+
//# sourceMappingURL=formFileAccept.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formFileAccept.d.ts","sourceRoot":"","sources":["../../src/adapter/formFileAccept.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,EAWxD,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAoB5D,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAWjE,CAAA;AAeD,eAAO,MAAM,2BAA2B,EAAE,oBAAoB,EA0B7D,CAAA;AAmBD,wBAAgB,6BAA6B,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAS7E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAYnE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAOtE;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,oBAAoB,EAAE,CAYxB;AAED,wBAAgB,kCAAkC,CAChD,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,MAAM,EAAE,CAKV;AAED,wBAAgB,wBAAwB,CACtC,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,uBAAuB,CACrC,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,MAAM,GAAG,IAAI,CAYf"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FormFilePlaceholderIcon } from '../types/index';
|
|
2
|
+
export declare const FORM_FILE_PLACEHOLDER_ICON_VALUES: FormFilePlaceholderIcon[];
|
|
3
|
+
export declare const FORM_FILE_PLACEHOLDER_ICON_LABELS: Record<FormFilePlaceholderIcon, string>;
|
|
4
|
+
export declare function normalizeFilePlaceholderIcon(value?: string): FormFilePlaceholderIcon;
|
|
5
|
+
//# sourceMappingURL=formFilePlaceholderIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formFilePlaceholderIcon.d.ts","sourceRoot":"","sources":["../../src/adapter/formFilePlaceholderIcon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAE7D,eAAO,MAAM,iCAAiC,EAAE,uBAAuB,EAOtE,CAAA;AAED,eAAO,MAAM,iCAAiC,EAAE,MAAM,CACpD,uBAAuB,EACvB,MAAM,CAQP,CAAA;AAID,wBAAgB,4BAA4B,CAC1C,KAAK,CAAC,EAAE,MAAM,GACb,uBAAuB,CAKzB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FormBlock, FormMediaSize } from '../types/index';
|
|
2
|
+
export declare function normalizeMediaSize(raw: unknown): FormMediaSize;
|
|
3
|
+
export declare function normalizeMediaUrls(raw: Pick<FormBlock, 'mediaUrls' | 'mediaUrl'>, maxCount: number): string[];
|
|
4
|
+
export declare function getMediaUrls(block: Pick<FormBlock, 'mediaUrls' | 'mediaUrl'>): string[];
|
|
5
|
+
export declare function getMediaSizeClass(size: FormMediaSize | undefined): string;
|
|
6
|
+
export declare function buildMediaListClassName(size: FormMediaSize | undefined): string;
|
|
7
|
+
//# sourceMappingURL=formMedia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formMedia.d.ts","sourceRoot":"","sources":["../../src/adapter/formMedia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAG9D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAQ9D;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,UAAU,CAAC,EAC9C,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CAeV;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,MAAM,EAAE,CAQvF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAEzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAE/E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FormBlock, FormBlockType, FormSchema } from '../types/index';
|
|
2
|
+
export declare function syncFormDefinition(definition: FormSchema): FormSchema;
|
|
3
|
+
export declare function normalizeFormDefinition(raw: FormSchema | undefined): FormSchema;
|
|
4
|
+
export declare function createEmptyFormDefinition(): FormSchema;
|
|
5
|
+
export declare function createEmptyBlock(type: FormBlockType): FormBlock;
|
|
6
|
+
//# sourceMappingURL=formSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formSchema.d.ts","sourceRoot":"","sources":["../../src/adapter/formSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAsE1E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAOrE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAW/E;AAED,wBAAgB,yBAAyB,IAAI,UAAU,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAsC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/adapter/id.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,wBAAgB,UAAU,IAAI,MAAM,CAiBnC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { A2uiSurfaceDoc, FormBlock, FormDefinitionPayload, FormSchema } from '../types/index';
|
|
2
|
+
import { type BlocksToA2uiOptions } from './a2uiAdapter';
|
|
3
|
+
export declare function resolveSurfaceFromFormDefinition(raw: FormDefinitionPayload | FormSchema | undefined, options?: BlocksToA2uiOptions): A2uiSurfaceDoc | null;
|
|
4
|
+
export declare function buildAskUserSurface(formDef: Pick<FormSchema, 'title' | 'description'>, matchedBlocks: FormBlock[], options?: BlocksToA2uiOptions): A2uiSurfaceDoc;
|
|
5
|
+
export declare function mapFormDefinitionFromDto(raw: unknown): FormSchema | undefined;
|
|
6
|
+
//# sourceMappingURL=resolveSurface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveSurface.d.ts","sourceRoot":"","sources":["../../src/adapter/resolveSurface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAkD,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAYxG,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,qBAAqB,GAAG,UAAU,GAAG,SAAS,EACnD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,cAAc,GAAG,IAAI,CAiBvB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,aAAa,CAAC,EAClD,aAAa,EAAE,SAAS,EAAE,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,cAAc,CAShB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAe7E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Catalog } from '@a2ui/web_core/v0_9';
|
|
2
|
+
import { type ReactComponentImplementation } from '@a2ui/react/v0_9';
|
|
3
|
+
/**
|
|
4
|
+
* 在 A2UI basicCatalog 基础上扩展/覆盖 skopon 预览组件,
|
|
5
|
+
* 使 A2uiFormRenderer 与编辑区 BlockPreview 视觉一致。
|
|
6
|
+
*/
|
|
7
|
+
export declare const SKOPON_CATALOG_ID = "skopon-form-v0_9";
|
|
8
|
+
/** 构建合并后的 skopon catalog(预览每次重建,避免 HMR 缓存旧组件)。 */
|
|
9
|
+
export declare function buildSkoponCatalog(): Catalog<ReactComponentImplementation>;
|
|
10
|
+
//# sourceMappingURL=a2uiCustomCatalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2uiCustomCatalog.d.ts","sourceRoot":"","sources":["../../src/catalog/a2uiCustomCatalog.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAyB,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,kBAAkB,CAAA;AAiBzB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,qBAAqB,CAAA;AAqfnD,kDAAkD;AAClD,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,4BAA4B,CAAC,CAkB1E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface A2uiPreviewMode {
|
|
3
|
+
/** 预览是否允许填写交互(默认 true) */
|
|
4
|
+
interactive: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function A2uiPreviewModeProvider({ interactive, children, }: {
|
|
7
|
+
interactive: boolean;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
export declare function useA2uiPreviewMode(): A2uiPreviewMode;
|
|
11
|
+
//# sourceMappingURL=a2uiPreviewContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2uiPreviewContext.d.ts","sourceRoot":"","sources":["../../src/catalog/a2uiPreviewContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjE,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,WAAW,EAAE,OAAO,CAAA;CACrB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,WAAW,EACX,QAAQ,GACT,EAAE;IACD,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,SAAS,CAAA;CACpB,+BAMA;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ComponentContext } from '@a2ui/web_core/v0_9';
|
|
2
|
+
/** 将 skopon 预览控件绑定到 A2UI surface dataModel(与 basicCatalog binder 行为一致)。 */
|
|
3
|
+
export declare function useSkoponBoundField(context: ComponentContext, field?: string): {
|
|
4
|
+
value: unknown;
|
|
5
|
+
setValue: (next: unknown) => void;
|
|
6
|
+
hasBinding: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function asOptionalString(value: unknown): string | undefined;
|
|
9
|
+
export declare function asStringArray(value: unknown): string[];
|
|
10
|
+
//# sourceMappingURL=useSkoponBoundField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSkoponBoundField.d.ts","sourceRoot":"","sources":["../../src/catalog/useSkoponBoundField.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAY3D,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAU;;qBAsBnE,OAAO;;EAQjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAInE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAItD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FormDetailResult } from '../types/index';
|
|
2
|
+
export interface FormDetailDto {
|
|
3
|
+
form_id: number;
|
|
4
|
+
form_unique_id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
disabled: number;
|
|
7
|
+
form_definition: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface FormClientOptions {
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
detailPath?: string;
|
|
12
|
+
fetch?: typeof fetch;
|
|
13
|
+
getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
|
|
14
|
+
}
|
|
15
|
+
export interface FormClient {
|
|
16
|
+
fetchDetail: (ref: {
|
|
17
|
+
formUniqueId?: string;
|
|
18
|
+
formId?: number;
|
|
19
|
+
}) => Promise<FormDetailResult>;
|
|
20
|
+
}
|
|
21
|
+
export declare function createFormClient(options?: FormClientOptions): FormClient;
|
|
22
|
+
//# sourceMappingURL=formClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formClient.d.ts","sourceRoot":"","sources":["../../src/client/formClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAA;AAGlE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,CAAC,GAAG,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAC5F;AAgBD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAmC5E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FormDetailResult, SubmitMode } from '../types/index';
|
|
2
|
+
export interface AskUserFormCardProps {
|
|
3
|
+
payload: unknown;
|
|
4
|
+
formUniqueId: string;
|
|
5
|
+
callbackUrl?: string | null;
|
|
6
|
+
submitMode?: SubmitMode;
|
|
7
|
+
fetchFormDetail: (ref: {
|
|
8
|
+
formUniqueId: string;
|
|
9
|
+
}) => Promise<FormDetailResult>;
|
|
10
|
+
onNotify?: (type: 'success' | 'error', message: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export default function AskUserFormCard({ payload, formUniqueId, callbackUrl, submitMode, fetchFormDetail, onNotify, }: AskUserFormCardProps): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=AskUserFormCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AskUserFormCard.d.ts","sourceRoot":"","sources":["../../src/components/AskUserFormCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAc,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAQ9E,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,eAAe,EAAE,CAAC,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC7E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChE;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAmB,EACnB,eAAe,EACf,QAAQ,GACT,EAAE,oBAAoB,+BAgItB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface CurlSubmitBlockProps {
|
|
2
|
+
payload: unknown;
|
|
3
|
+
callbackUrl?: string | null;
|
|
4
|
+
title?: string;
|
|
5
|
+
unpublishedFormId?: string | null;
|
|
6
|
+
incompleteFormId?: string | null;
|
|
7
|
+
onNotify?: (type: 'success' | 'error', message: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export default function CurlSubmitBlock({ payload, callbackUrl, title, unpublishedFormId, incompleteFormId, onNotify, }: CurlSubmitBlockProps): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=CurlSubmitBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CurlSubmitBlock.d.ts","sourceRoot":"","sources":["../../src/components/CurlSubmitBlock.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChE;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,OAAO,EACP,WAAW,EACX,KAAK,EACL,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,GACT,EAAE,oBAAoB,+BAsCtB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type A2uiMessage } from '@a2ui/web_core/v0_9';
|
|
3
|
+
export interface SkoponA2uiStreamRendererProps {
|
|
4
|
+
/** 增量追加的 A2UI v0.9 消息 */
|
|
5
|
+
messages: A2uiMessage[];
|
|
6
|
+
surfaceId?: string;
|
|
7
|
+
emptyHint?: ReactNode;
|
|
8
|
+
interactive?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export default function SkoponA2uiStreamRenderer({ messages, surfaceId, emptyHint, interactive, }: SkoponA2uiStreamRendererProps): import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=SkoponA2uiStreamRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkoponA2uiStreamRenderer.d.ts","sourceRoot":"","sources":["../../src/components/SkoponA2uiStreamRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC5E,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAOxE,MAAM,WAAW,6BAA6B;IAC5C,yBAAyB;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,EAC/C,QAAQ,EACR,SAAgC,EAChC,SAAgB,EAChB,WAAkB,GACnB,EAAE,6BAA6B,+BAgD/B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { A2uiSurfaceDoc } from '../types/index';
|
|
3
|
+
export interface SkoponFormRendererRef {
|
|
4
|
+
getValues: (fieldNames?: string[]) => Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface SkoponFormRendererProps {
|
|
7
|
+
doc: A2uiSurfaceDoc | null | undefined;
|
|
8
|
+
surfaceId?: string;
|
|
9
|
+
emptyHint?: ReactNode;
|
|
10
|
+
interactive?: boolean;
|
|
11
|
+
/** 默认用于 getValues() 的字段名列表 */
|
|
12
|
+
fieldNames?: string[];
|
|
13
|
+
}
|
|
14
|
+
declare const SkoponFormRenderer: import("react").ForwardRefExoticComponent<SkoponFormRendererProps & import("react").RefAttributes<SkoponFormRendererRef>>;
|
|
15
|
+
export default SkoponFormRenderer;
|
|
16
|
+
//# sourceMappingURL=SkoponFormRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkoponFormRenderer.d.ts","sourceRoot":"","sources":["../../src/components/SkoponFormRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAKd,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAMpD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,QAAA,MAAM,kBAAkB,2HAkEvB,CAAA;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.a2ui-surface.a2ui-container{--a2ui-color-border: var(--color-border);--a2ui-color-border-hover: var(--color-border-strong);--a2ui-color-input: var(--color-surface);--a2ui-color-on-input: var(--color-text);--a2ui-color-on-background: var(--color-text);--a2ui-color-on-surface: var(--color-text);--a2ui-color-primary: var(--color-primary);--a2ui-color-primary-hover: var(--color-primary-hover);--a2ui-color-on-primary: var(--color-on-primary);--a2ui-color-surface: var(--color-surface);--a2ui-color-secondary-hover: var(--color-bg-subtle);--a2ui-border-radius: var(--radius-md);--a2ui-border-width: 1px;--a2ui-column-gap: var(--space-form-item);--a2ui-row-gap: var(--space-3);--a2ui-spacing-xs: var(--space-1);--a2ui-spacing-s: var(--space-2);--a2ui-spacing-m: var(--space-3);--a2ui-spacing-l: var(--space-4);--a2ui-font-size-xs: var(--font-size-xs);--a2ui-font-size-s: var(--font-size-sm);--a2ui-font-size-m: var(--font-size-base);--a2ui-font-size-l: var(--font-size-lg);--a2ui-font-size-xl: var(--font-size-xl);--a2ui-font-size-2xl: var(--font-size-2xl);--a2ui-line-height-headings: var(--line-height-tight);--a2ui-line-height-body: var(--line-height-base);width:100%;color:var(--color-text);font-family:var(--font-sans);font-size:var(--font-size-base);line-height:var(--line-height-base)}.a2ui-surface.a2ui-container h1,.a2ui-surface.a2ui-container h2,.a2ui-surface.a2ui-container h3,.a2ui-surface.a2ui-container h4,.a2ui-surface.a2ui-container h5{margin:0 0 var(--space-4);font-family:var(--font-sans);font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);color:var(--color-text)}.a2ui-surface.a2ui-container h1{font-size:var(--font-size-2xl)}.a2ui-surface.a2ui-container h2{font-size:var(--font-size-xl)}.a2ui-surface.a2ui-container h3{font-size:var(--font-size-lg)}.a2ui-surface.a2ui-container h4{font-size:var(--font-size-base)}.a2ui-surface.a2ui-container p{margin:0 0 var(--space-4);font-size:var(--font-size-base);line-height:var(--line-height-relaxed);color:var(--color-text-secondary)}.a2ui-surface.a2ui-container label:not(:has(input)):has(+input:is([type=text],[type=number],[type=email],[type=tel],[type=url],[type=password],[type=date],[type=time],[type=datetime-local])),.a2ui-surface.a2ui-container label:not(:has(input)):has(+textarea){display:block;margin:0 0 var(--space-2);font-size:var(--font-size-lg);font-weight:var(--font-weight-medium);line-height:var(--line-height-base);color:var(--color-text)}.a2ui-surface.a2ui-container strong{display:block;margin:0 0 var(--space-2);font-size:var(--font-size-lg);font-weight:var(--font-weight-medium);line-height:var(--line-height-base);color:var(--color-text)}.a2ui-surface.a2ui-container div:has(>input[type=checkbox]:first-child+label){display:flex;align-items:center;gap:var(--space-2)}.a2ui-surface.a2ui-container input[type=checkbox]:not(label input)+label,.a2ui-surface.a2ui-container input[type=radio]:not(label input)+label{display:inline;margin:0;font-size:var(--font-size-base);font-weight:var(--font-weight-normal);line-height:var(--line-height-base);color:var(--color-text);cursor:pointer}.a2ui-surface.a2ui-container div:has(>label>input[type=checkbox]),.a2ui-surface.a2ui-container div:has(>label>input[type=radio]){display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2);width:100%}.a2ui-surface.a2ui-container label:has(>input[type=checkbox]),.a2ui-surface.a2ui-container label:has(>input[type=radio]){display:inline-flex;align-items:center;gap:var(--space-2);margin:0;width:auto;max-width:100%;font-size:var(--font-size-base);font-weight:var(--font-weight-normal);line-height:var(--line-height-base);color:var(--color-text);cursor:pointer}.a2ui-surface.a2ui-container label:has(>input[type=checkbox])>span,.a2ui-surface.a2ui-container label:has(>input[type=radio])>span{font-size:var(--font-size-base);line-height:var(--line-height-base);color:var(--color-text)}.a2ui-surface.a2ui-container input[type=text],.a2ui-surface.a2ui-container input[type=number],.a2ui-surface.a2ui-container input[type=email],.a2ui-surface.a2ui-container input[type=tel],.a2ui-surface.a2ui-container input[type=url],.a2ui-surface.a2ui-container input[type=password],.a2ui-surface.a2ui-container input[type=date],.a2ui-surface.a2ui-container input[type=time],.a2ui-surface.a2ui-container input[type=datetime-local],.a2ui-surface.a2ui-container textarea{display:block;width:100%;min-height:var(--button-height-md);box-sizing:border-box;padding:var(--space-2) var(--space-3);font-family:var(--font-sans);font-size:var(--font-size-base);line-height:var(--line-height-base);color:var(--color-text);background-color:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);transition:border-color var(--duration-fast) var(--ease-default),box-shadow var(--duration-fast) var(--ease-default)}.a2ui-surface.a2ui-container textarea{min-height:calc(var(--button-height-md) * 2);padding-top:var(--space-2);padding-bottom:var(--space-2);resize:vertical}.a2ui-surface.a2ui-container input[type=text]:hover,.a2ui-surface.a2ui-container input[type=number]:hover,.a2ui-surface.a2ui-container input[type=email]:hover,.a2ui-surface.a2ui-container input[type=tel]:hover,.a2ui-surface.a2ui-container input[type=url]:hover,.a2ui-surface.a2ui-container input[type=password]:hover,.a2ui-surface.a2ui-container input[type=date]:hover,.a2ui-surface.a2ui-container input[type=time]:hover,.a2ui-surface.a2ui-container input[type=datetime-local]:hover,.a2ui-surface.a2ui-container textarea:hover{border-color:var(--color-border-strong)}.a2ui-surface.a2ui-container input[type=text]:focus,.a2ui-surface.a2ui-container input[type=number]:focus,.a2ui-surface.a2ui-container input[type=email]:focus,.a2ui-surface.a2ui-container input[type=tel]:focus,.a2ui-surface.a2ui-container input[type=url]:focus,.a2ui-surface.a2ui-container input[type=password]:focus,.a2ui-surface.a2ui-container input[type=date]:focus,.a2ui-surface.a2ui-container input[type=time]:focus,.a2ui-surface.a2ui-container input[type=datetime-local]:focus,.a2ui-surface.a2ui-container textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:var(--shadow-focus)}.a2ui-surface.a2ui-container input[type=checkbox]:not(.ant-checkbox-input),.a2ui-surface.a2ui-container input[type=radio]:not(.ant-radio-input){width:16px;height:16px;min-height:0;min-width:16px;margin:0;padding:0;flex-shrink:0;border:none;border-radius:var(--radius-sm);background:transparent;box-shadow:none;accent-color:var(--color-primary);cursor:pointer;vertical-align:middle}.a2ui-surface.a2ui-container input[type=checkbox]:not(.ant-checkbox-input):not(label input),.a2ui-surface.a2ui-container input[type=radio]:not(.ant-radio-input):not(label input){border:1px solid var(--color-border);background:var(--color-surface)}.a2ui-surface.a2ui-container input[type=radio]:not(.ant-radio-input):not(label input){border-radius:50%}.a2ui-surface.a2ui-container input[type=checkbox]:not(.ant-checkbox-input):focus,.a2ui-surface.a2ui-container input[type=radio]:not(.ant-radio-input):focus{outline:none;box-shadow:var(--shadow-focus)}.a2ui-surface.a2ui-container button:not([class*=ant-]){min-height:var(--button-height-md);padding:0 var(--button-padding-x-md);font-family:var(--font-sans);font-size:var(--button-font-size-md);font-weight:var(--button-font-weight);line-height:var(--line-height-base);color:var(--color-text);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-pill);cursor:pointer;transition:background-color var(--duration-fast) var(--ease-default),border-color var(--duration-fast) var(--ease-default),color var(--duration-fast) var(--ease-default)}.a2ui-surface.a2ui-container button:not([class*=ant-]):hover:not(:disabled){border-color:var(--color-border-strong);background:var(--color-bg-subtle)}.a2ui-surface.a2ui-container button:not([class*=ant-]):disabled{cursor:not-allowed;opacity:.45}.a2ui-surface.a2ui-container button.chip,.a2ui-surface.a2ui-container button.chip.selected,.a2ui-surface.a2ui-container button.selected{min-height:var(--button-height-sm);padding:0 var(--button-padding-x-sm);font-size:var(--button-font-size-sm)}.a2ui-surface.a2ui-container button.chip.selected,.a2ui-surface.a2ui-container button.selected{color:var(--color-on-primary);background-color:var(--color-primary-solid);border-color:var(--color-primary-solid)}.a2ui-surface.a2ui-container button.chip.selected:hover,.a2ui-surface.a2ui-container button.selected:hover{background-color:var(--color-primary-hover);border-color:var(--color-primary-hover)}.a2ui-surface.a2ui-container span[style*="color: red"],.a2ui-surface.a2ui-container span[style*="color:red"]{display:block;margin-top:var(--space-1);font-size:var(--font-size-xs);line-height:var(--line-height-relaxed);color:var(--color-danger-text)!important}.a2ui-surface.a2ui-container img:not(.form-media-item){max-width:100%;height:auto;border-radius:var(--radius-md)}.a2ui-surface.a2ui-container .form-block-preview{width:100%}.a2ui-surface.a2ui-container .form-block-preview+.form-block-preview,.a2ui-surface.a2ui-container .form-block-preview-label+.form-block-preview-control,.a2ui-surface.a2ui-container .form-block-preview-label+.form-media-preview,.a2ui-surface.a2ui-container .form-block-preview-label+.form-media-list,.a2ui-surface.a2ui-container .form-block-preview-label+.form-file-upload-preview{margin-top:var(--space-2)}.a2ui-surface.a2ui-container .form-block-preview .ant-upload-drag{border-radius:var(--radius-md)}.a2ui-surface.a2ui-container .form-block-preview-control.ant-picker{width:100%}.a2ui-surface.a2ui-container .form-block-preview-control.ant-switch{margin-top:var(--space-1)}.form-block-preview{padding:var(--space-1) 0 var(--space-2)}.form-block-preview-label{font-size:var(--font-size-lg);font-weight:var(--font-weight-medium);margin-bottom:var(--space-2);color:var(--color-text)}.form-block-preview-control{margin-top:var(--space-1)}.form-block-preview-help{display:block;margin-top:var(--space-2);font-size:var(--font-size-xs);color:var(--color-text-muted)}.form-media-preview{max-width:100%;border-radius:var(--radius-md);overflow:hidden}.form-media-list{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--space-2);max-width:100%}.form-media-item{display:block;flex-shrink:0;object-fit:cover;border-radius:var(--radius-md)}.form-media-list.form-media-size-huge .form-media-item{width:480px;height:480px}.form-media-list.form-media-size-huge .form-media-item.form-media-item--audio{width:480px;height:48px}.form-media-list.form-media-size-large .form-media-item{width:320px;height:320px}.form-media-list.form-media-size-large .form-media-item.form-media-item--audio{width:320px;height:48px}.form-media-list.form-media-size-medium .form-media-item{width:160px;height:160px}.form-media-list.form-media-size-medium .form-media-item.form-media-item--audio{width:160px;height:48px}.form-media-list.form-media-size-small .form-media-item{width:80px;height:80px}.form-media-list.form-media-size-small .form-media-item.form-media-item--audio{width:80px;height:48px}.form-media-list.form-media-size-icon .form-media-item{width:48px;height:48px}.form-media-preview--empty{display:flex;align-items:center;justify-content:center;min-height:120px;padding:var(--space-4);border:1px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-subtle);color:var(--color-text-muted);font-size:var(--font-size-sm);text-align:center}.form-file-upload-preview{margin-top:var(--space-1)}.form-file-upload-preview .ant-upload-drag{border-color:var(--color-border);background:var(--color-bg-subtle)}.form-file-upload-preview-icon{margin:0 0 var(--space-2);color:var(--color-primary)}.form-file-upload-preview-text{margin:0;font-size:var(--font-size-sm);color:var(--color-text-secondary)}.ask-user-form-card{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}.ask-user-form-actions{display:flex;justify-content:flex-end}.ask-user-curl-card{display:flex;flex-direction:column;gap:var(--space-1);min-width:0;padding:var(--space-2);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);background:var(--color-bg-subtle, rgba(0, 0, 0, .03))}.ask-user-curl-card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.ask-user-curl-card-header-title{display:flex;align-items:center;gap:var(--space-2);min-width:0;flex:1 1 auto}.ask-user-curl-unpublished-tag{margin:0;flex-shrink:0;color:var(--color-warning, #d48806);background:#d488061f;border-color:transparent}.ask-user-curl-incomplete-tag{margin:0;flex-shrink:0;color:var(--color-primary);background:var(--color-primary-subtle);border-color:transparent}.skopon-form-curl-json,.flow-artifact-generate-chat-json{margin:0;padding:var(--space-2);font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-all}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FormFilePlaceholderIcon } from '../types/index';
|
|
2
|
+
interface FilePlaceholderIconProps {
|
|
3
|
+
type: FormFilePlaceholderIcon;
|
|
4
|
+
size?: number;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
/** 文件上传占位图标(@ant-design/icons,与 admin 编辑区语义对齐)。 */
|
|
8
|
+
export default function FilePlaceholderIcon({ type, size, className, }: FilePlaceholderIconProps): import("react").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=FilePlaceholderIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilePlaceholderIcon.d.ts","sourceRoot":"","sources":["../../src/icons/FilePlaceholderIcon.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAW7D,UAAU,wBAAwB;IAChC,IAAI,EAAE,uBAAuB,CAAA;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,mDAAmD;AACnD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,IAAI,EACJ,IAAS,EACT,SAAS,GACV,EAAE,wBAAwB,+BAS1B"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type { A2uiBinding, A2uiComponentName, A2uiComponentNode, A2uiSurfaceDoc, FormBlock, FormBlockOption, FormBlockType, FormDefinitionPayload, FormDetailResult, FormFilePlaceholderIcon, FormJsonSchema, FormMediaSize, FormSchema, SubmitMode, } from './types/index';
|
|
2
|
+
export { A2UI_PROTOCOL_VERSION, FORM_MEDIA_SIZES, isInputBlockType, isLayoutBlockType, isMediaBlockType, } from './types/index';
|
|
3
|
+
export { a2uiToBlocks, blocksToA2ui, isA2uiSurfaceEmpty, surfaceDocToMessages, type BlocksToA2uiOptions, } from './adapter/a2uiAdapter';
|
|
4
|
+
export { buildAskUserSurface, mapFormDefinitionFromDto, resolveSurfaceFromFormDefinition, } from './adapter/resolveSurface';
|
|
5
|
+
export { normalizeFormDefinition, syncFormDefinition } from './adapter/formSchema';
|
|
6
|
+
export { extractSurfaceValues } from './adapter/extractSurfaceValues';
|
|
7
|
+
export { buildCurlStatement } from './submit/buildCurlStatement';
|
|
8
|
+
export { intersectPayloadWithForm, type PayloadFormIntersection } from './submit/intersectPayloadWithForm';
|
|
9
|
+
export { copyTextToClipboard, submitFormJson, type SubmitFormJsonOptions, type SubmitFormJsonResult, } from './submit/submitFormJson';
|
|
10
|
+
export { createFormClient, type FormClient, type FormClientOptions } from './client/formClient';
|
|
11
|
+
export { default as SkoponFormRenderer } from './components/SkoponFormRenderer';
|
|
12
|
+
export type { SkoponFormRendererProps, SkoponFormRendererRef } from './components/SkoponFormRenderer';
|
|
13
|
+
export { default as SkoponA2uiStreamRenderer } from './components/SkoponA2uiStreamRenderer';
|
|
14
|
+
export type { SkoponA2uiStreamRendererProps } from './components/SkoponA2uiStreamRenderer';
|
|
15
|
+
export { default as AskUserFormCard } from './components/AskUserFormCard';
|
|
16
|
+
export type { AskUserFormCardProps } from './components/AskUserFormCard';
|
|
17
|
+
export { default as CurlSubmitBlock } from './components/CurlSubmitBlock';
|
|
18
|
+
export type { CurlSubmitBlockProps } from './components/CurlSubmitBlock';
|
|
19
|
+
import './styles/index.css';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,wBAAwB,EAAE,KAAK,uBAAuB,EAAE,MAAM,mCAAmC,CAAA;AAC1G,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE/F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAC/E,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAErG,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAC3F,YAAY,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAA;AAE1F,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,oBAAoB,CAAA"}
|