@skopon-cool/form-sdk 0.6.4 → 0.6.5

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.
@@ -122,7 +122,7 @@ export interface FormBlock {
122
122
  fileReviewRequired?: boolean;
123
123
  /** 物料采集来源模式,由 skopon-admin 环节配置。 */
124
124
  fileSourceMode?: 'upload_required' | 'upload_or_asset' | 'asset_only';
125
- /** 通用收集流从 Footage 为当前素材位查询的候选;仅提交选中的文件 URL。 */
125
+ /** 通用收集流从 Footage 为当前素材位查询的候选;提交选中的素材 ID。 */
126
126
  fileAssetOptions?: FormAssetOption[];
127
127
  /** 对应 Footage 同步素材位的限定 key。 */
128
128
  assetSlotKey?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.6.4",
6
+ "version": "0.6.5",
7
7
  "description": "Skopon form rendering SDK (A2UI + form_definition) with submit helpers",
8
8
  "type": "module",
9
9
  "sideEffects": [
@@ -38,12 +38,10 @@ import {
38
38
  getRegisteredCatalogComponents,
39
39
  } from '../blocks/registry'
40
40
  import FilePlaceholderIcon from '../icons/FilePlaceholderIcon'
41
- import {
42
- isUploadCancelledError,
43
- uploadFileToCdn,
44
- } from '../client/uploadClient'
41
+ import { isUploadCancelledError } from '../client/uploadClient'
45
42
  import { useA2uiPreviewMode } from './a2uiPreviewContext'
46
43
  import { useFileUploadStatus } from './fileUploadStatusContext'
44
+ import { useMaterialUpload } from './materialUploadContext'
47
45
  import {
48
46
  asOptionalString,
49
47
  asStringArray,
@@ -573,11 +571,34 @@ interface FileUploadListItem {
573
571
  name: string
574
572
  status: 'uploading' | 'done' | 'error'
575
573
  url?: string
574
+ assetId?: string
575
+ source?: 'upload' | 'library_select'
576
576
  error?: string
577
577
  }
578
578
 
579
- function normalizeFileUrls(value: unknown): string[] {
580
- return asStringArray(value).map((url) => url.trim()).filter(Boolean)
579
+ interface FileValueRef {
580
+ assetId?: string
581
+ source?: 'upload' | 'library_select'
582
+ url?: string
583
+ }
584
+
585
+ function normalizeFileValues(value: unknown): FileValueRef[] {
586
+ const values = Array.isArray(value) ? value : value == null || value === '' ? [] : [value]
587
+ return values.reduce<FileValueRef[]>((result, entry) => {
588
+ if (typeof entry === 'string' && entry.trim()) {
589
+ result.push({ url: entry.trim() })
590
+ return result
591
+ }
592
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry)) return result
593
+ const obj = entry as Record<string, unknown>
594
+ const assetId = String(obj.asset_id ?? obj.assetId ?? '').trim()
595
+ if (!assetId) return result
596
+ result.push({
597
+ assetId,
598
+ source: obj.source === 'library_select' ? 'library_select' as const : 'upload' as const,
599
+ })
600
+ return result
601
+ }, [])
581
602
  }
582
603
 
583
604
  function fileNameFromUrl(url: string): string {
@@ -597,6 +618,7 @@ function fileItemFromUrl(url: string, uid: string): FileUploadListItem {
597
618
  function FileUploadPreview({ context }: { context: ComponentContext }) {
598
619
  const { interactive } = useA2uiPreviewMode()
599
620
  const { beginUpload } = useFileUploadStatus()
621
+ const uploadMaterial = useMaterialUpload()
600
622
  const { value, setValue, setValueSilent, fieldName } = useSkoponBoundField(context, 'value', {
601
623
  component: 'FileUpload',
602
624
  changeAction: 'change',
@@ -640,14 +662,25 @@ function FileUploadPreview({ context }: { context: ComponentContext }) {
640
662
  : sourceMode === 'upload_or_asset'
641
663
  ? '物料或素材'
642
664
  : '物料 · 仅上传'
643
- const initialUrls = normalizeFileUrls(value)
665
+ const initialValues = normalizeFileValues(value)
644
666
  const externalUidRef = useRef(0)
645
667
  const mountedRef = useRef(true)
646
668
  const controllersRef = useRef(new Map<string, AbortController>())
647
669
  const setValueRef = useRef(setValue)
648
670
  setValueRef.current = setValue
649
671
  const [items, setItems] = useState<FileUploadListItem[]>(() => [
650
- ...initialUrls.map((url) => fileItemFromUrl(url, `external-${externalUidRef.current++}`)),
672
+ ...initialValues.map((entry) => {
673
+ if (entry.url) return fileItemFromUrl(entry.url, `external-${externalUidRef.current++}`)
674
+ const option = assetOptions.find((item) => item.assetId === entry.assetId)
675
+ return {
676
+ uid: `asset-${entry.assetId}-${externalUidRef.current++}`,
677
+ name: option?.label || `素材 ${entry.assetId}`,
678
+ status: 'done' as const,
679
+ url: option?.previewUrl || option?.url,
680
+ assetId: entry.assetId,
681
+ source: entry.source,
682
+ }
683
+ }),
651
684
  ...rejectedUrls.map((url) => ({
652
685
  ...fileItemFromUrl(url, `rejected-${externalUidRef.current++}`),
653
686
  status: 'error' as const,
@@ -660,16 +693,18 @@ function FileUploadPreview({ context }: { context: ComponentContext }) {
660
693
  const commitItems = useCallback(
661
694
  (
662
695
  updater: (current: FileUploadListItem[]) => FileUploadListItem[],
663
- writeUrls: boolean,
696
+ writeValues: boolean,
664
697
  ) => {
665
698
  const next = updater(itemsRef.current)
666
699
  itemsRef.current = next
667
700
  if (mountedRef.current) setItems(next)
668
- if (writeUrls) {
701
+ if (writeValues) {
669
702
  setValueRef.current(
670
703
  next
671
- .filter((item) => item.status === 'done' && item.url)
672
- .map((item) => item.url as string),
704
+ .filter((item) => item.status === 'done' && (item.assetId || item.url))
705
+ .map((item) => item.assetId
706
+ ? { asset_id: item.assetId, source: item.source || 'upload' }
707
+ : item.url as string),
673
708
  )
674
709
  }
675
710
  return next
@@ -687,27 +722,34 @@ function FileUploadPreview({ context }: { context: ComponentContext }) {
687
722
  }, [])
688
723
 
689
724
  useEffect(() => {
690
- const urls = normalizeFileUrls(value)
691
- const rawIsNormalizedArray =
692
- Array.isArray(value) &&
693
- value.length === urls.length &&
694
- value.every((entry, index) => typeof entry === 'string' && entry === urls[index])
695
- if (!rawIsNormalizedArray) setValueSilent(urls)
696
-
697
- const consumed = new Set<number>()
725
+ const normalized = normalizeFileValues(value)
726
+ if (!Array.isArray(value)) {
727
+ setValueSilent(normalized.map((entry) => entry.assetId
728
+ ? { asset_id: entry.assetId, source: entry.source || 'upload' }
729
+ : entry.url))
730
+ }
731
+ const expected = new Set(normalized.map((entry) => entry.assetId ? `asset:${entry.assetId}` : `url:${entry.url}`))
698
732
  commitItems(
699
733
  (current) => {
700
- const next = current.filter((item) => {
701
- if (item.status !== 'done' || !item.url) return true
702
- const index = urls.findIndex((url, i) => !consumed.has(i) && url === item.url)
703
- if (index < 0) return false
704
- consumed.add(index)
705
- return true
706
- })
707
- urls.forEach((url, index) => {
708
- if (!consumed.has(index)) {
709
- next.push(fileItemFromUrl(url, `external-${externalUidRef.current++}`))
734
+ const next = current.filter((item) =>
735
+ item.status !== 'done' || expected.has(item.assetId ? `asset:${item.assetId}` : `url:${item.url}`))
736
+ const present = new Set(next.map((item) => item.assetId ? `asset:${item.assetId}` : `url:${item.url}`))
737
+ normalized.forEach((entry) => {
738
+ const key = entry.assetId ? `asset:${entry.assetId}` : `url:${entry.url}`
739
+ if (present.has(key)) return
740
+ if (entry.url) {
741
+ next.push(fileItemFromUrl(entry.url, `external-${externalUidRef.current++}`))
742
+ return
710
743
  }
744
+ const option = assetOptions.find((item) => item.assetId === entry.assetId)
745
+ next.push({
746
+ uid: `asset-${entry.assetId}-${externalUidRef.current++}`,
747
+ name: option?.label || `素材 ${entry.assetId}`,
748
+ status: 'done',
749
+ url: option?.previewUrl || option?.url,
750
+ assetId: entry.assetId,
751
+ source: entry.source,
752
+ })
711
753
  })
712
754
  return next
713
755
  },
@@ -730,14 +772,31 @@ function FileUploadPreview({ context }: { context: ComponentContext }) {
730
772
  )
731
773
  const endUpload = beginUpload()
732
774
 
733
- void uploadFileToCdn(file, { signal: controller.signal })
775
+ const upload = uploadMaterial
776
+ ? uploadMaterial(file, {
777
+ fieldName,
778
+ moduleId: readString(props.moduleId) || undefined,
779
+ positionKey: fieldName || undefined,
780
+ assetSlotKey: readString(props.assetSlotKey) || undefined,
781
+ assetType: readString(props.assetType) || undefined,
782
+ }, { signal: controller.signal })
783
+ : Promise.reject(new Error('当前宿主未配置私有物料上传,请联系管理员'))
784
+ void upload
734
785
  .then((result) => {
735
786
  if (!mountedRef.current || controller.signal.aborted) return
736
787
  commitItems(
737
788
  (current) =>
738
789
  current.map((item) =>
739
790
  item.uid === uid
740
- ? { ...item, status: 'done', url: result.url, error: undefined }
791
+ ? {
792
+ ...item,
793
+ status: 'done',
794
+ name: result.name || item.name,
795
+ url: result.previewUrl,
796
+ assetId: result.assetId || undefined,
797
+ source: result.assetId ? 'upload' : undefined,
798
+ error: undefined,
799
+ }
741
800
  : item,
742
801
  ),
743
802
  true,
@@ -759,7 +818,7 @@ function FileUploadPreview({ context }: { context: ComponentContext }) {
759
818
  endUpload()
760
819
  })
761
820
  },
762
- [beginUpload, commitItems, hasMaxLimit, interactive, maxCount, sourceMode],
821
+ [beginUpload, commitItems, fieldName, hasMaxLimit, interactive, maxCount, props, sourceMode, uploadMaterial],
763
822
  )
764
823
 
765
824
  const handleRemove = useCallback(
@@ -795,7 +854,14 @@ function FileUploadPreview({ context }: { context: ComponentContext }) {
795
854
  }
796
855
  commitItems((current) => {
797
856
  const retained = maxCount === 1 ? [] : current.filter((item) => item.status !== 'error' && item.url !== asset.url)
798
- return [...retained, { uid: `asset-${asset.assetId}-${externalUidRef.current++}`, name: asset.label, status: 'done', url: asset.url }]
857
+ return [...retained, {
858
+ uid: `asset-${asset.assetId}-${externalUidRef.current++}`,
859
+ name: asset.label,
860
+ status: 'done',
861
+ url: asset.previewUrl || asset.url,
862
+ assetId: asset.assetId,
863
+ source: 'library_select',
864
+ }]
799
865
  }, true)
800
866
  setAssetPickerOpen(false)
801
867
  }
@@ -62,6 +62,7 @@ function renderFileSurface(options: {
62
62
  fileReviewMessage?: string
63
63
  fileRejectedUrls?: string[]
64
64
  help?: string
65
+ withUploader?: boolean
65
66
  } = {}) {
66
67
  const doc = blocksToA2ui(
67
68
  {
@@ -98,6 +99,7 @@ function renderFileSurface(options: {
98
99
  surfaceId: 'upload-test',
99
100
  fieldNames: ['attachments'],
100
101
  onUploadingChange: options.onUploadingChange,
102
+ uploadMaterial: options.withUploader === false ? undefined : uploadMock,
101
103
  }),
102
104
  )
103
105
  const input = view.container.querySelector('input[type="file"]') as HTMLInputElement
@@ -139,9 +141,9 @@ describe('FileUploadPreview', () => {
139
141
  expect(container.querySelector('input[type="file"]')?.hasAttribute('disabled')).toBe(true)
140
142
  expect(ref.current?.getValues()).toEqual({ attachments: ['https://cdn.example.com/approved.jpg'] })
141
143
  })
142
- it('stores successful CDN URLs in user selection order', async () => {
143
- const first = deferred<{ url: string }>()
144
- const second = deferred<{ url: string }>()
144
+ it('stores successful private asset IDs in user selection order', async () => {
145
+ const first = deferred<{ assetId: string; name: string; previewUrl: string }>()
146
+ const second = deferred<{ assetId: string; name: string; previewUrl: string }>()
145
147
  uploadMock
146
148
  .mockImplementationOnce(() => first.promise)
147
149
  .mockImplementationOnce(() => second.promise)
@@ -158,16 +160,16 @@ describe('FileUploadPreview', () => {
158
160
  await waitFor(() => expect(uploadMock).toHaveBeenCalledTimes(2))
159
161
  expect(uploadingChanges).toContain(true)
160
162
 
161
- await act(async () => second.resolve({ url: 'https://cdn.example.com/second.pdf' }))
163
+ await act(async () => second.resolve({ assetId: 'mat_second', name: 'second.pdf', previewUrl: 'https://cdn.example.com/second.pdf' }))
162
164
  expect(ref.current?.getValues()).toEqual({
163
- attachments: ['https://cdn.example.com/second.pdf'],
165
+ attachments: [{ asset_id: 'mat_second', source: 'upload' }],
164
166
  })
165
- await act(async () => first.resolve({ url: 'https://cdn.example.com/first.pdf' }))
167
+ await act(async () => first.resolve({ assetId: 'mat_first', name: 'first.pdf', previewUrl: 'https://cdn.example.com/first.pdf' }))
166
168
  await waitFor(() =>
167
169
  expect(ref.current?.getValues()).toEqual({
168
170
  attachments: [
169
- 'https://cdn.example.com/first.pdf',
170
- 'https://cdn.example.com/second.pdf',
171
+ { asset_id: 'mat_first', source: 'upload' },
172
+ { asset_id: 'mat_second', source: 'upload' },
171
173
  ],
172
174
  }),
173
175
  )
@@ -185,11 +187,11 @@ describe('FileUploadPreview', () => {
185
187
  it('allows removing below minCount and aborts an in-flight request', async () => {
186
188
  let signal: AbortSignal | undefined
187
189
  uploadMock.mockImplementation(
188
- (_file: File, options?: { signal?: AbortSignal }) => {
190
+ (_file: File, _field: unknown, options?: { signal?: AbortSignal }) => {
189
191
  signal = options?.signal
190
- return new Promise<{ url: string }>((resolve) => {
192
+ return new Promise<{ assetId: string; name: string }>((resolve) => {
191
193
  signal?.addEventListener('abort', () => {
192
- resolve({ url: 'https://cdn.example.com/ignored.pdf' })
194
+ resolve({ assetId: 'mat_ignored', name: 'ignored.pdf' })
193
195
  })
194
196
  })
195
197
  },
@@ -219,6 +221,14 @@ describe('FileUploadPreview', () => {
219
221
  )
220
222
  expect(getByText('legacy file.pdf')).toBeTruthy()
221
223
  })
224
+
225
+ it('fails closed when the host does not inject a private uploader', async () => {
226
+ const { input, getByText, ref } = renderFileSurface({ withUploader: false })
227
+ fireEvent.change(input, { target: { files: [new File(['x'], 'private.pdf')] } })
228
+ await waitFor(() => expect(getByText('当前宿主未配置私有物料上传,请联系管理员')).toBeTruthy())
229
+ expect(ref.current?.getValues()).toEqual({ attachments: [] })
230
+ expect(uploadMock).not.toHaveBeenCalled()
231
+ })
222
232
  })
223
233
 
224
234
  describe('Footage selection in generic material forms', () => {
@@ -231,12 +241,12 @@ describe('Footage selection in generic material forms', () => {
231
241
  return { ref, ...render(createElement(SkoponFormRenderer, { ref, doc, surfaceId: 'asset-test', fieldNames: ['scene'] })) }
232
242
  }
233
243
 
234
- it('asset-only fields choose from Footage and submit the URL without uploading', async () => {
244
+ it('asset-only fields submit the selected asset identity without uploading', async () => {
235
245
  const view = renderAssetField('asset_only')
236
246
  expect(view.container.querySelector('input[type="file"]')).toBeNull()
237
247
  fireEvent.click(view.getByRole('button', { name: '选择素材' }))
238
248
  fireEvent.click(await view.findByRole('button', { name: '选择素材 山景' }))
239
- await waitFor(() => expect(view.ref.current?.getValues().scene).toEqual(['https://cdn.test/scene.jpg']))
249
+ await waitFor(() => expect(view.ref.current?.getValues().scene).toEqual([{ asset_id: '17', source: 'library_select' }]))
240
250
  expect(uploadMock).not.toHaveBeenCalled()
241
251
  })
242
252
 
@@ -245,6 +255,6 @@ describe('Footage selection in generic material forms', () => {
245
255
  expect(view.container.querySelector('input[type="file"]')).not.toBeNull()
246
256
  fireEvent.click(view.getByRole('button', { name: '选择素材' }))
247
257
  fireEvent.click(await view.findByRole('button', { name: '选择素材 山景' }))
248
- await waitFor(() => expect(view.ref.current?.getValues().scene).toEqual(['https://cdn.test/scene.jpg']))
258
+ await waitFor(() => expect(view.ref.current?.getValues().scene).toEqual([{ asset_id: '17', source: 'library_select' }]))
249
259
  })
250
260
  })
@@ -0,0 +1,43 @@
1
+ import { createContext, useContext, type ReactNode } from 'react'
2
+
3
+ export interface MaterialUploadFieldContext {
4
+ fieldName?: string
5
+ moduleId?: string
6
+ positionKey?: string
7
+ assetSlotKey?: string
8
+ assetType?: string
9
+ }
10
+
11
+ export interface MaterialUploadResult {
12
+ assetId: string
13
+ name: string
14
+ mimeType?: string
15
+ size?: number
16
+ previewUrl?: string
17
+ }
18
+
19
+ export type MaterialUploadFn = (
20
+ file: File,
21
+ context: MaterialUploadFieldContext,
22
+ options?: { signal?: AbortSignal },
23
+ ) => Promise<MaterialUploadResult>
24
+
25
+ const MaterialUploadContext = createContext<MaterialUploadFn | null>(null)
26
+
27
+ export function MaterialUploadProvider({
28
+ uploadMaterial,
29
+ children,
30
+ }: {
31
+ uploadMaterial?: MaterialUploadFn | null
32
+ children: ReactNode
33
+ }) {
34
+ return (
35
+ <MaterialUploadContext.Provider value={uploadMaterial ?? null}>
36
+ {children}
37
+ </MaterialUploadContext.Provider>
38
+ )
39
+ }
40
+
41
+ export function useMaterialUpload(): MaterialUploadFn | null {
42
+ return useContext(MaterialUploadContext)
43
+ }
@@ -41,6 +41,7 @@ import {
41
41
  import SkoponFormRenderer, { type SkoponFormRendererRef } from './SkoponFormRenderer'
42
42
  import CurlSubmitBlock from './CurlSubmitBlock'
43
43
  import SkoponFormProvider from './SkoponFormProvider'
44
+ import type { MaterialUploadFn } from '../catalog/materialUploadContext'
44
45
 
45
46
  const REFRESH_REPORT_DEBOUNCE_MS = 80
46
47
 
@@ -82,6 +83,8 @@ export interface AskUserFormCardProps {
82
83
  contentSearch?: ContentSearchFn | null
83
84
  /** 案例单选组件:注入搜索函数 */
84
85
  caseSearch?: CaseSearchFn | null
86
+ /** 用户私有物料上传函数,由宿主负责浏览器直传及上下文。 */
87
+ uploadMaterial?: MaterialUploadFn | null
85
88
  }
86
89
 
87
90
  interface AskUserFormCardBodyProps extends AskUserFormCardProps {
@@ -103,6 +106,7 @@ function AskUserFormCardBody({
103
106
  resumeSearch = null,
104
107
  contentSearch = null,
105
108
  caseSearch = null,
109
+ uploadMaterial = null,
106
110
  onSurfaceReadyChange,
107
111
  onAutoControlReady,
108
112
  }: AskUserFormCardBodyProps) {
@@ -516,6 +520,7 @@ function AskUserFormCardBody({
516
520
  resumeSearch={resumeSearch}
517
521
  contentSearch={contentSearch}
518
522
  caseSearch={caseSearch}
523
+ uploadMaterial={uploadMaterial}
519
524
  onUploadingChange={setUploading}
520
525
  />
521
526
 
@@ -16,6 +16,7 @@ import { isA2uiSurfaceEmpty, surfaceDocToMessages } from '../adapter/a2uiAdapter
16
16
  import { SKOPON_CATALOG_ID, buildSkoponCatalog } from '../catalog/a2uiCustomCatalog'
17
17
  import { A2uiPreviewModeProvider } from '../catalog/a2uiPreviewContext'
18
18
  import { FileUploadStatusProvider } from '../catalog/fileUploadStatusContext'
19
+ import { MaterialUploadProvider, type MaterialUploadFn } from '../catalog/materialUploadContext'
19
20
  import { CaseSearchProvider, type CaseSearchFn } from '../catalog/caseSearchContext'
20
21
  import { ContentSearchProvider, type ContentSearchFn } from '../catalog/contentSearchContext'
21
22
  import { ResumeSearchProvider, type ResumeSearchFn } from '../catalog/resumeSearchContext'
@@ -41,6 +42,8 @@ export interface SkoponFormRendererProps {
41
42
  caseSearch?: CaseSearchFn | null
42
43
  /** 任意文件上传任务的聚合状态 */
43
44
  onUploadingChange?: (uploading: boolean) => void
45
+ /** 宿主注入的用户私有物料直传;未注入时上传会失败并提示配置。 */
46
+ uploadMaterial?: MaterialUploadFn | null
44
47
  /** 外层已包裹 SkoponFormProvider 时可设为 false,避免重复 ConfigProvider */
45
48
  wrapProvider?: boolean
46
49
  }
@@ -57,6 +60,7 @@ const SkoponFormRenderer = forwardRef<SkoponFormRendererRef, SkoponFormRendererP
57
60
  contentSearch = null,
58
61
  caseSearch = null,
59
62
  onUploadingChange,
63
+ uploadMaterial = null,
60
64
  wrapProvider = true,
61
65
  },
62
66
  ref,
@@ -144,6 +148,7 @@ const SkoponFormRenderer = forwardRef<SkoponFormRendererRef, SkoponFormRendererP
144
148
  }
145
149
 
146
150
  const content = (
151
+ <MaterialUploadProvider uploadMaterial={uploadMaterial}>
147
152
  <FileUploadStatusProvider onUploadingChange={onUploadingChange}>
148
153
  <ResumeSearchProvider resumeSearch={resumeSearch}>
149
154
  <ContentSearchProvider contentSearch={contentSearch}>
@@ -159,6 +164,7 @@ const SkoponFormRenderer = forwardRef<SkoponFormRendererRef, SkoponFormRendererP
159
164
  </ContentSearchProvider>
160
165
  </ResumeSearchProvider>
161
166
  </FileUploadStatusProvider>
167
+ </MaterialUploadProvider>
162
168
  )
163
169
 
164
170
  return wrapProvider ? <SkoponFormProvider>{content}</SkoponFormProvider> : content
@@ -187,7 +187,7 @@ export interface FormBlock {
187
187
  fileReviewRequired?: boolean
188
188
  /** 物料采集来源模式,由 skopon-admin 环节配置。 */
189
189
  fileSourceMode?: 'upload_required' | 'upload_or_asset' | 'asset_only'
190
- /** 通用收集流从 Footage 为当前素材位查询的候选;仅提交选中的文件 URL。 */
190
+ /** 通用收集流从 Footage 为当前素材位查询的候选;提交选中的素材 ID。 */
191
191
  fileAssetOptions?: FormAssetOption[]
192
192
  /** 对应 Footage 同步素材位的限定 key。 */
193
193
  assetSlotKey?: string