@flowgram.ai/type-editor 0.4.12 → 0.4.15
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/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/type-editor.ts","../src/contexts/index.tsx","../src/utils/registry-adapter.tsx","../src/type-registry/string.tsx","../src/type-registry/object.tsx","../src/type-registry/number.tsx","../src/type-registry/integer.tsx","../src/type-registry/boolean.tsx","../src/type-registry/array.tsx","../src/type-registry/index.ts","../src/services/type-registry-manager.ts","../src/services/index.tsx","../src/services/type-editor-service.ts","../src/utils/monitor-data/monitor-data.ts","../src/utils/monitor-data/use-monitor-data.ts","../src/components/type-editor/common.ts","../src/services/clipboard-service.ts","../src/services/shortcut-service.ts","../src/services/type-operation-service.ts","../src/components/type-editor/columns/value.tsx","../src/components/type-editor/hooks/disabled.ts","../src/components/type-editor/columns/style.ts","../src/components/type-editor/columns/type.tsx","../src/components/type-editor/utils.ts","../src/components/type-editor/formatter/index.ts","../src/components/type-selector/index.tsx","../src/components/type-selector/cascader-v2/index.tsx","../src/components/type-selector/cascader-v2/type-search.tsx","../src/components/type-selector/hooks/use-hight-light.tsx","../src/components/type-selector/hooks/option-value.ts","../src/components/type-selector/hooks/focus-item.ts","../src/components/type-selector/cascader-v2/style.ts","../src/components/type-selector/cascader-v2/type-cascader.tsx","../src/components/type-selector/utils/index.tsx","../src/components/type-selector/hooks/root-types.ts","../src/components/type-selector/cascader-v2/trigger.tsx","../src/components/type-selector/hooks/hot-key.ts","../src/components/type-editor/columns/required.tsx","../src/components/type-editor/columns/private.tsx","../src/components/type-editor/columns/operate.tsx","../src/components/type-editor/hooks/type-edit.ts","../src/components/type-editor/hooks/paste-data.ts","../src/components/type-editor/hooks/error-cell.ts","../src/components/type-editor/hooks/active-pos.ts","../src/components/type-editor/columns/key.tsx","../src/components/type-editor/indent.tsx","../src/components/type-editor/hooks/key-visible.tsx","../src/components/type-editor/columns/description.tsx","../src/components/type-editor/hooks/editor-listener.tsx","../src/components/type-editor/hooks/hot-key.ts","../src/components/type-editor/hooks/drag-drop.ts","../src/components/type-editor/columns/default.tsx","../src/components/type-editor/columns/index.ts","../src/components/type-editor/index.tsx","../src/components/type-editor/type-editor.tsx","../src/components/type-editor/table.tsx","../src/components/type-editor/style.ts","../src/components/type-editor/hooks/formatter-value.ts","../src/components/type-editor/mode/type-definition.ts","../src/components/type-editor/mode/declare-assign.ts","../src/components/type-editor/mode/index.ts","../src/services/utils.ts","../src/components/type-editor/header.tsx","../src/components/type-editor/drop-tip.tsx","../src/components/type-editor/cell.tsx","../src/components/feedback/feedback.tsx","../src/components/feedback/style.ts","../src/components/type-editor/hooks/blink.ts","../src/components/type-editor/error.tsx","../src/components/type-editor/body.tsx","../src/components/type-editor/tool-bar.tsx","../src/components/type-editor/type.ts","../src/components/type-editor/tools/undo-redo.tsx","../src/components/type-editor/tools/create-by-data.tsx","../src/components/type-editor/tools/style.ts","../src/preset/object-type-editor/index.tsx"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// Import Table css\nimport '@douyinfe/semi-ui/lib/es/table';\n\nexport * from './types';\nexport { TypeEditorContext } from './contexts';\nexport { columnConfigs as typeEditorColumnConfigs } from './components/type-editor/columns';\nexport * from './components';\nexport * from './services/type-editor-service';\nexport * from './services/type-registry-manager';\nexport * from '@flowgram.ai/json-schema';\nexport * from './preset';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FC, Ref } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRegistryManager } from '../services/type-registry-manager';\nimport { type ShortcutsService, type TypeEditorService } from '../services';\n\nexport interface TypeEditorPos {\n x: number;\n y: number;\n}\n\nexport interface TypeEditorDropInfo {\n rowDataId: string;\n indent: number;\n index: number;\n}\n\nexport interface TypeChangeContext {\n type: TypeEditorColumnType;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface EditorProps {\n keyCheck: boolean;\n}\n\nexport interface RenderProps<TypeSchema extends Partial<IJsonSchema>> {\n rowData: TypeEditorRowData<TypeSchema>;\n readonly?: boolean;\n onViewMode: () => void;\n typeEditor: TypeEditorService<TypeSchema>;\n onChildrenVisibleChange: (rowDataKey: string, newVal: boolean) => void;\n onChange: () => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n onEditMode: () => void;\n dragSource?: Ref<HTMLSpanElement>;\n error: boolean;\n onError?: (msg: string[]) => void;\n unOpenKeys: Record<string, boolean>;\n config: Omit<TypeEditorColumnViewConfig, 'type' | 'visible'>;\n}\n\nexport interface ShortcutContext<TypeSchema extends Partial<IJsonSchema>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n rowData: TypeEditorRowData<TypeSchema>;\n onChange: () => void;\n onRemoveEmptyLine: (id: string) => void;\n typeEditor: TypeEditorService<TypeSchema>;\n onError?: (msg?: string) => void;\n typeDefinitionService: TypeEditorRegistryManager<TypeSchema>;\n}\n\nexport interface InfoContext {\n shortcuts: ShortcutsService;\n}\nexport interface TypeEditorColumnConfig<TypeSchema extends Partial<IJsonSchema>> {\n /**\n * type\n */\n type: TypeEditorColumnType;\n /**\n * 标题\n */\n label: string;\n /**\n * 百分比\n */\n width?: number;\n /**\n * 是否可 focus\n */\n focusable?: boolean;\n /**\n * label ❓ 提示\n */\n info?: () => string;\n /**\n * 只读态 render\n */\n viewRender?: FC<RenderProps<TypeSchema>>;\n /**\n * 编辑态 render\n */\n editRender?: FC<RenderProps<TypeSchema>>;\n /**\n * 是否自定义拖拽\n */\n customDrop?: boolean;\n\n /**\n * 校验该行是否存在错误\n */\n validateCell?: (\n rowData: TypeEditorRowData<TypeSchema>,\n extra: TypeEditorSpecialConfig<TypeSchema>\n ) =>\n | {\n level: 'error' | 'warning';\n msg?: string;\n }\n | undefined;\n\n /**\n * 快捷键响应\n */\n shortcuts?: {\n onEnter?: (ctx: ShortcutContext<TypeSchema>) => void;\n onTab?: (ctx: ShortcutContext<TypeSchema>) => void;\n onUp?: (ctx: ShortcutContext<TypeSchema>) => void;\n onDown?: (ctx: ShortcutContext<TypeSchema>) => void;\n onLeft?: (ctx: ShortcutContext<TypeSchema>) => void;\n onRight?: (ctx: ShortcutContext<TypeSchema>) => void;\n onCopy?: (ctx: ShortcutContext<TypeSchema>) => void;\n onPaste?: (ctx: ShortcutContext<TypeSchema>) => void;\n onDelete?: (ctx: ShortcutContext<TypeSchema>) => void;\n };\n}\n\nexport interface TypeEditorColumnViewConfig {\n /**\n * 类型\n */\n type: TypeEditorColumnType;\n /**\n * 是否可见\n */\n visible: boolean;\n}\n\nexport interface DisableTypeInfo {\n type: string;\n reason: string;\n}\n\nexport interface TypeEditorColumnViewConfig {\n /**\n * 类型\n */\n type: TypeEditorColumnType;\n /**\n * 是否可见\n */\n visible: boolean;\n}\n\nexport enum TypeEditorColumnType {\n /**\n *\n */\n Key = 'key',\n Type = 'type',\n Required = 'required',\n Description = 'description',\n Default = 'default',\n Operate = 'operate',\n Value = 'value',\n Private = 'private',\n}\n\nexport interface TypeEditorExtraInfo {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value?: any;\n}\n\nexport type TypeEditorSchema<TypeSchema extends Partial<IJsonSchema>> = TypeSchema & {\n extra?: TypeEditorExtraInfo;\n};\n\nexport interface TypeEditorSpecialConfig<TypeSchema extends Partial<IJsonSchema>> {\n /**\n * 默认值展示模式\n *\n * default 默认编辑模式\n * server 为展示后端兜底默认值\n */\n defaultMode?: 'default' | 'server';\n /**\n * 支持自定义校验 Name 函数\n */\n customValidateName?: (name: string) => string;\n /**\n * 关闭自动修复 index\n */\n disableFixIndex?: boolean;\n\n /**\n * 是否可以编辑 key 的可见\n */\n editorVisible?: boolean | string;\n /**\n * 隐藏拖拽\n */\n hiddenDrag?: boolean;\n /**\n * 使用 extra 字段,而非 flow 字段\n */\n useExtra?: boolean;\n /**\n * type-selector 禁用类型\n */\n customDisabledTypes?: Array<DisableTypeInfo>;\n /**\n * 是否禁用 add\n */\n disabledAdd?: (rowData: TypeEditorRowData<TypeSchema>) => string;\n /**\n * 自定义默认值展示\n */\n customDefaultView?: (ctx: {\n rowData: TypeEditorRowData<TypeSchema>;\n value: unknown;\n disabled?: string;\n onChange: (value: unknown) => void;\n onSubmit: (value: unknown) => void;\n }) => JSX.Element;\n /**\n * 自定义 default 禁用规则\n */\n customDefaultEditable?: (rowData: TypeEditorRowData<TypeSchema>) => true | string;\n}\n\nexport type TypeEditorRowData<TypeSchema extends Partial<IJsonSchema>> = TypeSchema & {\n /**\n * 当前行的唯一值\n */\n id: string;\n /**\n * key 值\n */\n key: string;\n /**\n * 是否必填\n */\n isRequired: boolean;\n /**\n * 层数\n */\n level: number;\n /**\n * rowData 关联的 IJsonSchema\n */\n self: TypeEditorSchema<TypeSchema>;\n /**\n * 父节点 IJsonSchema\n */\n parent?: TypeEditorSchema<TypeSchema>;\n /**\n * 子节点个数,只包括子类型\n */\n childrenCount: number;\n /**\n * 子节点个数,包括子类型嵌套类型\n */\n deepChildrenCount: number;\n /**\n * 不能编辑的列\n * 和 IJsonSchema 中 editable 的关系\n * editable 为 false,会将 disableEditColumn 每个 column 都填上\n */\n disableEditColumn?: Array<{ column: TypeEditorColumnType; reason: string }>;\n /**\n * 是否不能拖拽\n */\n cannotDrag?: boolean;\n /**\n * 行\n */\n index: number;\n /**\n *\n */\n extraConfig: TypeEditorSpecialConfig<TypeSchema>;\n\n /**\n * 父节点 rowId\n */\n parentId?: string;\n /**\n * path\n */\n path: string[];\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { createContext, useContext, useEffect, useMemo } from 'react';\n\nimport { Container, interfaces } from 'inversify';\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\n\nimport {\n getTypeDefinitionAdapter,\n ITypeDefinitionAdapter,\n registryFormatter,\n} from '../utils/registry-adapter';\nimport { TypeEditorRegistry } from '../types';\nimport { defaultTypeRegistryCreators } from '../type-registry';\nimport { TypeEditorRegistryManager } from '../services/type-registry-manager';\nimport {\n ClipboardService,\n ShortcutsService,\n TypeEditorOperationService,\n TypeEditorService,\n} from '../services';\n\nexport type TypeRegistryCreatorsAdapter<TypeSchema extends Partial<IJsonSchema>> = (\n param: Parameters<JsonSchemaTypeRegistryCreator<TypeSchema, TypeEditorRegistry<TypeSchema>>>[0] &\n ITypeDefinitionAdapter<TypeSchema>\n) => ReturnType<JsonSchemaTypeRegistryCreator<TypeSchema, TypeEditorRegistry<TypeSchema>>>;\n\nexport const TypeEditorContext = createContext<{\n /**\n * @deprecated\n */\n typeRegistryCreators?: TypeRegistryCreatorsAdapter<IJsonSchema>[];\n}>({});\n\ninterface Context {\n container: Container;\n}\n\nconst TypeContext = createContext<Context>({\n container: new Container(),\n});\n\nexport function useService<T>(identifier: interfaces.ServiceIdentifier): T {\n const container = useContext(TypeContext).container;\n\n return container.get(identifier) as T;\n}\n\nexport const TypeEditorProvider = <TypeSchema extends Partial<IJsonSchema>>({\n children,\n typeRegistryCreators = [],\n onInit,\n}: Parameters<\n React.FunctionComponent<{\n children: JSX.Element;\n onInit?: () => void;\n typeRegistryCreators?: TypeRegistryCreatorsAdapter<TypeSchema>[];\n }>\n>[0]) => {\n const container = useMemo(() => {\n const res = new Container();\n\n res.bind(TypeEditorService).toSelf().inSingletonScope();\n res.bind(TypeEditorOperationService).toSelf().inSingletonScope();\n res.bind(TypeEditorRegistryManager).toSelf().inSingletonScope();\n res.bind(ShortcutsService).toSelf().inSingletonScope();\n res.bind(ClipboardService).toSelf().inSingletonScope();\n\n return res;\n }, []);\n\n useEffect(() => {\n const typeManager =\n container.get<TypeEditorRegistryManager<TypeSchema>>(TypeEditorRegistryManager);\n\n [...defaultTypeRegistryCreators].forEach((creator) => {\n typeManager.register(\n creator as unknown as JsonSchemaTypeRegistryCreator<\n TypeSchema,\n TypeEditorRegistry<TypeSchema>\n >\n );\n });\n }, [container]);\n\n useEffect(() => {\n const typeManager =\n container.get<TypeEditorRegistryManager<TypeSchema>>(TypeEditorRegistryManager);\n\n const adapter = getTypeDefinitionAdapter(typeManager);\n\n typeRegistryCreators.forEach((creator) => {\n typeManager.register(creator({ typeManager, ...adapter }));\n });\n\n typeManager.getAllTypeRegistries().forEach((registry) => {\n const res = registryFormatter(registry, typeManager);\n typeManager.register(res);\n });\n\n typeManager.triggerChanges();\n onInit?.();\n }, [typeRegistryCreators, onInit, container]);\n\n return <TypeContext.Provider value={{ container }}>{children}</TypeContext.Provider>;\n};\n\nexport const useTypeDefinitionManager = <TypeSchema extends Partial<IJsonSchema>>() =>\n useService<TypeEditorRegistryManager<TypeSchema>>(TypeEditorRegistryManager);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space, Typography } from '@douyinfe/semi-ui';\n\nimport { TypeEditorRegistry } from '../types';\nimport { TypeEditorRegistryManager } from '../services/type-registry-manager';\n\nexport const registryFormatter = <TypeSchema extends Partial<IJsonSchema>>(\n registry: Partial<TypeEditorRegistry<TypeSchema>>,\n manager: TypeEditorRegistryManager<TypeSchema>\n): Partial<TypeEditorRegistry<TypeSchema>> => {\n const res: Record<string, unknown> = {\n ...registry,\n };\n\n const apiMap: Record<string, string> = {\n getItemTypes: 'getSupportedItemTypes',\n getIJsonSchemaByStringValue: 'getTypeSchemaByStringValue',\n getStringValue: 'getStringValueByTypeSchema',\n getIJsonSchemaProperties: 'getTypeSchemaProperties',\n getIJsonSchemaPropertiesParent: 'getPropertiesParent',\n getChildrenExtraJsonPaths: 'getJsonPaths',\n getDefaultIJsonSchema: 'getDefaultSchema',\n };\n\n Object.keys(apiMap).forEach((api) => {\n if (res[api]) {\n res[apiMap[api]] = res[api];\n }\n if (res[apiMap[api]]) {\n res[api] = res[apiMap[api]];\n }\n });\n\n return {\n ...res,\n getDisplayLabel: (type: IJsonSchema) => (\n <Space style={{ width: '100%' }}>\n {manager?.getDisplayIcon(type as TypeSchema)}\n <div style={{ flex: 1, width: 0, display: 'flex' }}>\n <Typography.Text size=\"small\" ellipsis={{ showTooltip: true }}>\n {manager.getComplexText(type as TypeSchema)}\n </Typography.Text>\n </div>\n </Space>\n ),\n getIJsonSchemaDeepField: (type: TypeSchema) => manager.getTypeSchemaDeepChildField(type),\n } as unknown as TypeEditorRegistry<TypeSchema>;\n};\n\ninterface ITypeDefinitionManager<TypeSchema extends Partial<IJsonSchema>> {\n getDefinitionByIJsonSchema: (\n typeSchema?: TypeSchema\n ) => TypeEditorRegistry<TypeSchema> | undefined;\n getAllTypeDefinitions: () => TypeEditorRegistry<TypeSchema>[];\n getDefinitionByType: (type: string) => TypeEditorRegistry<TypeSchema> | undefined;\n getUndefinedIJsonSchema: () => TypeSchema;\n}\n\nexport interface ITypeDefinitionAdapter<TypeSchema extends Partial<IJsonSchema>> {\n /**\n * @deprecated 兼容旧接口,已废弃,请使用 typeRegistryManager\n */\n typeDefinitionManager: ITypeDefinitionManager<TypeSchema>;\n /**\n * @deprecated 兼容旧接口,已废弃,请使用 typeRegistryManager 的 getComplexText 方法\n */\n utils: {\n getComposedLabel: (type: TypeSchema) => string;\n };\n}\n\nexport const getTypeDefinitionAdapter = <TypeSchema extends Partial<IJsonSchema>>(\n manager: TypeEditorRegistryManager<TypeSchema>\n): ITypeDefinitionAdapter<TypeSchema> => {\n const typeDefinitionManager: ITypeDefinitionManager<TypeSchema> = {\n getDefinitionByIJsonSchema: (typeSchema?: TypeSchema) =>\n typeSchema ? manager.getTypeBySchema(typeSchema) : undefined,\n getAllTypeDefinitions: () => manager.getTypeRegistriesWithParentType(),\n getDefinitionByType: (type) => manager.getTypeByName(type),\n getUndefinedIJsonSchema: () => manager.getTypeByName('unknown')!.getDefaultSchema(),\n };\n\n return {\n typeDefinitionManager,\n utils: {\n getComposedLabel: (type: TypeSchema) => manager.getComplexText(type),\n },\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Input } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const stringRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'string',\n getInputNode: ({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>) => (\n <Input\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n }}\n autoFocus\n value={value}\n onChange={onChange}\n onBlur={onSubmit}\n />\n ),\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Typography } from '@douyinfe/semi-ui';\n\nexport const objectRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'object',\n getInputNode: (): React.JSX.Element => (\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: '0 8px',\n }}\n >\n <Typography.Text>Not Supported</Typography.Text>\n </div>\n ),\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { InputNumber } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const numberRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'number',\n getInputNode({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>): React.JSX.Element {\n return (\n <InputNumber\n autoFocus\n value={value}\n style={{ width: '100%', height: '100%' }}\n onChange={onChange}\n onBlur={onSubmit}\n />\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { InputNumber } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const integerRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'integer',\n getInputNode({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>): React.JSX.Element {\n return (\n <InputNumber\n autoFocus\n value={value}\n style={{ width: '100%', height: '100%' }}\n onChange={onChange}\n onBlur={onSubmit}\n />\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Select } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const booleanRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'boolean',\n\n getInputNode({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>): React.JSX.Element {\n return (\n <Select\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n background: 'var(--semi-color-bg-0)',\n }}\n optionList={[\n {\n value: 1,\n label: 'True',\n },\n {\n value: 0,\n label: 'False',\n },\n ]}\n className={'flow-type-select'}\n value={Number(value)}\n onSelect={(v) => {\n onChange(Boolean(v));\n onSubmit();\n }}\n />\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Space, Typography } from '@douyinfe/semi-ui';\n\nexport const arrayRegistryCreator: JsonSchemaTypeRegistryCreator = ({ typeManager }) => ({\n type: 'array',\n\n getDisplayLabel: (type: IJsonSchema) => {\n const config = typeManager.getTypeBySchema(type);\n\n return (\n <Space style={{ width: '100%' }}>\n {config?.getDisplayIcon(type) || config?.icon}\n <div style={{ flex: 1, width: 0, display: 'flex' }}>\n <Typography.Text size=\"small\" ellipsis={{ showTooltip: true }}>\n {typeManager.getComplexText(type)}\n </Typography.Text>\n </div>\n </Space>\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// import { TypeDefinitionRegistryCreator } from '@flow-ide-editor/flow-schema-type-definitions';\n\nimport { JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\n\nimport { stringRegistryCreator } from './string';\nimport { objectRegistryCreator } from './object';\nimport { numberRegistryCreator } from './number';\nimport { integerRegistryCreator } from './integer';\nimport { booleanRegistryCreator } from './boolean';\nimport { arrayRegistryCreator } from './array';\n\nexport const defaultTypeRegistryCreators: JsonSchemaTypeRegistryCreator[] = [\n stringRegistryCreator,\n numberRegistryCreator,\n integerRegistryCreator,\n booleanRegistryCreator,\n objectRegistryCreator,\n arrayRegistryCreator,\n];\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { JsonSchemaTypeManager, IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRegistry } from '../types';\n\nexport class TypeEditorRegistryManager<\n TypeSchema extends Partial<IJsonSchema>\n> extends JsonSchemaTypeManager<TypeSchema, TypeEditorRegistry<TypeSchema>> {}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable import/no-unresolved */\nimport 'reflect-metadata';\nexport * from './type-editor-service';\nexport * from './shortcut-service';\nexport * from './clipboard-service';\nexport * from './type-operation-service';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { MonitorData } from '../utils';\nimport {\n type TypeEditorColumnType,\n type TypeEditorRowData,\n TypeEditorDropInfo,\n TypeEditorColumnConfig,\n TypeEditorPos,\n TypeEditorColumnViewConfig,\n ShortcutContext,\n} from '../types';\nimport { TypeRegistryCreatorsAdapter } from '../contexts';\nimport { ROOT_FIELD_ID } from '../components/type-editor/common';\nimport { TypeEditorRegistryManager } from './type-registry-manager';\nimport { ClipboardService } from './clipboard-service';\n\n@injectable()\nexport class TypeEditorService<TypeSchema extends Partial<IJsonSchema>> {\n private _configs: Map<TypeEditorColumnType, TypeEditorColumnConfig<TypeSchema>> = new Map();\n\n private _activePos: TypeEditorPos = { x: -1, y: -1 };\n\n // -1 为 header\n private _dropInfo: TypeEditorDropInfo = {\n rowDataId: '',\n indent: -1,\n index: -2,\n };\n\n public errorMsgs = new MonitorData<{ pos: TypeEditorPos; msg?: string }[]>([]);\n\n public editValue: unknown;\n\n public onChange: (\n typeSchema?: TypeSchema,\n ctx?: {\n storeState?: boolean;\n }\n ) => void;\n\n public onRemoveEmptyLine: (id: string) => void;\n\n public onGlobalAdd: ((id: string) => void) | undefined;\n\n public typeRegistryCreators?: TypeRegistryCreatorsAdapter<TypeSchema>[];\n\n private dataSource: TypeEditorRowData<TypeSchema>[] = [];\n\n public dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>> = {};\n\n public dataSourceTouchedMap: Record<string, boolean> = {};\n\n public blink = new MonitorData(false);\n\n public columnViewConfig: TypeEditorColumnViewConfig[] = [];\n\n public onActivePosChange = new Emitter<TypeEditorPos>();\n\n public onDropInfoChange = new Emitter<TypeEditorDropInfo>();\n\n @inject(ClipboardService)\n public clipboard: ClipboardService;\n\n @inject(TypeEditorRegistryManager)\n public typeDefinition: TypeEditorRegistryManager<TypeSchema>;\n\n public rootTypeSchema: TypeSchema;\n\n public setErrorMsg = (pos: TypeEditorPos, msg?: string) => {\n const newMsgs = [...this.errorMsgs.data];\n const item = newMsgs.find((v) => v.pos.x === pos.x && v.pos.y === pos.y);\n if (item) {\n item.msg = msg;\n } else {\n newMsgs.push({ pos, msg });\n }\n this.errorMsgs.update(newMsgs);\n };\n\n public refreshErrorMsgAfterRemove = (index: number) => {\n // 删除被删去那行的 errorMsgs\n const newMsgs = this.errorMsgs.data.filter((msg) => msg.pos.y !== index);\n\n newMsgs.forEach((msg) => {\n if (msg.pos.y > index) {\n msg.pos.y = msg.pos.y - 1;\n }\n });\n\n this.errorMsgs.update(newMsgs);\n };\n\n public checkActivePosError = () => {\n const pos = this.activePos;\n\n return !!this.errorMsgs.data.find((v) => v.pos.x === pos.x && v.pos.y === pos.y && v.msg);\n };\n\n public setEditValue = (val: unknown) => {\n this.editValue = val;\n };\n\n public registerConfigs(\n config: TypeEditorColumnConfig<TypeSchema> | TypeEditorColumnConfig<TypeSchema>[]\n ): void {\n const configs = Array.isArray(config) ? config : [config];\n\n configs.map((c) => {\n this._configs.set(c.type, c);\n });\n }\n\n public addConfigProps(\n type: TypeEditorColumnType,\n config: Partial<Omit<TypeEditorColumnConfig<TypeSchema>, 'type'>>\n ): void {\n const configByType = this.getConfigByType(type);\n\n if (!configByType) {\n return;\n }\n\n const newConfig = {\n ...configByType,\n ...config,\n };\n\n this._configs.set(type, newConfig);\n }\n\n public getConfigs = (): TypeEditorColumnConfig<TypeSchema>[] =>\n Array.from(this._configs.values());\n\n public getConfigByType(\n type: TypeEditorColumnType\n ): TypeEditorColumnConfig<TypeSchema> | undefined {\n return this._configs.get(type);\n }\n\n public triggerShortcutEvent(\n event: 'enter' | 'tab' | 'left' | 'right' | 'up' | 'down' | 'copy' | 'paste' | 'delete'\n ): void {\n const column = this.columnViewConfig[this.activePos.x];\n\n const columnConfig = this.getConfigByType(column?.type);\n if (!columnConfig) {\n return;\n }\n\n const ctx: ShortcutContext<TypeSchema> = {\n value: this.editValue,\n rowData: this.dataSource[this.activePos.y],\n onRemoveEmptyLine: this.onRemoveEmptyLine,\n onChange: this.onChange,\n typeEditor: this,\n typeDefinitionService: this.typeDefinition,\n };\n\n switch (event) {\n case 'enter': {\n columnConfig.shortcuts?.onEnter?.(ctx);\n return;\n }\n case 'tab': {\n columnConfig.shortcuts?.onTab?.(ctx);\n return;\n }\n case 'down': {\n columnConfig.shortcuts?.onDown?.(ctx);\n return;\n }\n case 'up': {\n columnConfig.shortcuts?.onUp?.(ctx);\n return;\n }\n case 'left': {\n columnConfig.shortcuts?.onLeft?.(ctx);\n return;\n }\n case 'right': {\n columnConfig.shortcuts?.onRight?.(ctx);\n return;\n }\n case 'copy': {\n columnConfig.shortcuts?.onCopy?.(ctx);\n return;\n }\n case 'paste': {\n columnConfig.shortcuts?.onPaste?.(ctx);\n return;\n }\n case 'delete': {\n columnConfig.shortcuts?.onDelete?.(ctx);\n return;\n }\n\n default: {\n return;\n }\n }\n }\n\n public get activePos(): TypeEditorPos {\n return this._activePos;\n }\n\n private checkRowDataColumnCanEdit = (\n rowData: TypeEditorRowData<TypeSchema>,\n column: TypeEditorColumnType\n ): boolean =>\n !(rowData.disableEditColumn || []).map((v) => v.column).includes(column) &&\n this.getConfigByType(column)?.focusable !== false;\n\n /**\n * 获取可编辑的下一列/上一列\n */\n private getCanEditColumn(originPos: TypeEditorPos, direction: 'next' | 'last'): TypeEditorPos {\n const newX =\n (originPos.x + this.columnViewConfig.length + (direction === 'next' ? 1 : -1)) %\n this.columnViewConfig.length;\n\n const newPos = {\n y: originPos.y,\n x: newX,\n };\n\n if (\n this.checkRowDataColumnCanEdit(\n this.dataSource[newPos.y],\n this.columnViewConfig[newPos.x].type\n )\n ) {\n return newPos;\n }\n\n return this.getCanEditColumn(newPos, direction);\n }\n\n /**\n * 获取可编辑的下一行/上一行\n */\n private getCanEditLine(originPos: TypeEditorPos, direction: 'next' | 'last'): TypeEditorPos {\n const newY =\n (originPos.y + this.dataSource.length + (direction === 'next' ? 1 : -1)) %\n this.dataSource.length;\n\n const newPos = {\n y: newY,\n x: originPos.x,\n };\n\n if (\n this.checkRowDataColumnCanEdit(\n this.dataSource[newPos.y],\n this.columnViewConfig[newPos.x].type\n )\n ) {\n return newPos;\n }\n\n return this.getCanEditLine(newPos, direction);\n }\n\n /**\n * 获取下一个可编辑的\n */\n private getNextEditItem = (pos: TypeEditorPos): TypeEditorPos => {\n const newPos = { ...pos };\n\n if (newPos.x === this.columnViewConfig.length - 1) {\n newPos.y = (1 + newPos.y) % this.dataSource.length;\n newPos.x = 0;\n } else {\n newPos.x = newPos.x + 1;\n }\n\n if (\n this.checkRowDataColumnCanEdit(\n this.dataSource[newPos.y],\n this.columnViewConfig[newPos.x].type\n )\n ) {\n return newPos;\n }\n\n return this.getNextEditItem(newPos);\n };\n\n public moveActivePosToNextLine(): void {\n const newPos = this.getCanEditLine(this.activePos, 'next');\n\n this.setActivePos(newPos);\n }\n\n public moveActivePosToNextLineWithAddLine(rowData: TypeEditorRowData<TypeSchema>): void {\n const newPos = { ...this.activePos };\n\n if (!rowData.parentId) {\n return;\n }\n\n const parentData = this.dataSourceMap[rowData.parentId] || this.dataSourceMap[ROOT_FIELD_ID];\n\n const id = this.dataSourceMap[rowData.parentId] ? rowData.parentId : ROOT_FIELD_ID;\n const addChild = parentData.index + parentData.deepChildrenCount === rowData.index;\n\n if (addChild) {\n if (this.onGlobalAdd) {\n this.onGlobalAdd(id);\n newPos.y = newPos.y + 1;\n } else {\n newPos.y = -1;\n }\n } else {\n newPos.y = newPos.y + 1;\n }\n this.setActivePos(newPos);\n }\n\n public moveActivePosToLastLine(): void {\n const newPos = this.getCanEditLine(this.activePos, 'last');\n\n this.setActivePos(newPos);\n }\n\n public moveActivePosToLastColumn(): void {\n const newPos = this.getCanEditColumn(this.activePos, 'last');\n this.setActivePos(newPos);\n }\n\n public moveActivePosToNextColumn(): void {\n const newPos = this.getCanEditColumn(this.activePos, 'next');\n\n this.setActivePos(newPos);\n }\n\n public moveActivePosToNextItem(): void {\n const newPos = this.getNextEditItem(this.activePos);\n\n this.setActivePos(newPos);\n }\n\n public setActivePos(pos: TypeEditorPos): void {\n if (this.checkActivePosError()) {\n return;\n }\n this._activePos = pos;\n\n this.onActivePosChange.fire(this._activePos);\n }\n\n public clearActivePos(): void {\n this._activePos = { x: -1, y: -1 };\n this.onActivePosChange.fire(this._activePos);\n }\n\n public setDataSource(newData: TypeEditorRowData<TypeSchema>[]): void {\n this.dataSource = newData;\n }\n\n public getDataSource(): TypeEditorRowData<TypeSchema>[] {\n return this.dataSource;\n }\n\n public setColumnViewConfig(config: TypeEditorColumnViewConfig[]): void {\n this.columnViewConfig = config;\n }\n\n public get dropInfo(): TypeEditorDropInfo {\n return this._dropInfo;\n }\n\n public setDropInfo(dropInfo: TypeEditorDropInfo): void {\n if (\n dropInfo.indent === this.dropInfo.indent &&\n this.dropInfo.rowDataId === dropInfo.rowDataId &&\n this.dropInfo.index === dropInfo.index\n ) {\n return;\n }\n this._dropInfo = dropInfo;\n this.onDropInfoChange.fire(dropInfo);\n }\n\n public clearDropInfo(): void {\n this.setDropInfo({ rowDataId: '', indent: -1, index: -2 });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Emitter, type Event } from '@flowgram.ai/utils';\n\n/**\n * 定义用于在 service 的一些需要被监听 onChange 的 data\n * 搭配 useMonitorData 使用\n */\nexport class MonitorData<Type> {\n private _data: Type;\n\n protected readonly onDataChangeEmitter = new Emitter<{\n prev: Type;\n next: Type;\n }>();\n\n readonly onDataChange: Event<{\n prev: Type;\n next: Type;\n }> = this.onDataChangeEmitter.event;\n\n public get data(): Type {\n return this._data;\n }\n\n public constructor(initialValue?: Type) {\n if (initialValue !== undefined) {\n this._data = initialValue;\n }\n }\n\n public update(data: Type) {\n const prev = this._data;\n this._data = data;\n this.onDataChangeEmitter.fire({\n prev,\n next: data,\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { type MonitorData } from './monitor-data';\n\nexport const useMonitorData = <Type>(\n monitorData: MonitorData<Type> | undefined\n): { data: Type | undefined } => {\n const [data, setData] = useState(monitorData?.data);\n\n useEffect(() => {\n const dispose = monitorData?.onDataChange(({ prev, next }) => {\n setData(next);\n });\n return () => {\n dispose?.dispose();\n };\n }, [monitorData]);\n\n return {\n data,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * empty key 前缀\n */\nexport const SUFFIX = '___empty___';\n\n/**\n * 表格 header 高度\n */\nexport const HEADER_HIGHT = 36;\n/**\n * 表格 cell 高度\n * 36 高度 + 1px border\n */\nexport const CELL_HIGHT = 36 + 1;\n\n/**\n * cell padding 宽度\n */\nexport const CELL_PADDING = 8;\n\n/**\n * 单个缩进的宽度\n */\nexport const INDENT_WIDTH = 16;\n\n/**\n * 操作栏高度\n */\nexport const TAB_BRA_HIGHT = 0;\n\n/**\n * test id 前缀\n */\nexport const COMPONENT_ID_PREFIX = 'type-editor-component-id';\n\n/**\n * root 字段 id\n */\nexport const ROOT_FIELD_ID = 'root';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\nimport { Event, Emitter } from '@flowgram.ai/utils';\n\n@injectable()\nexport class ClipboardService {\n public readonly onClipboardChangedEmitter = new Emitter<string>();\n\n readonly onClipboardChanged: Event<string> = this.onClipboardChangedEmitter.event;\n\n /**\n * 读取浏览器数据\n */\n private get data(): Promise<string> {\n return navigator.clipboard.readText();\n }\n\n private async saveReadData(): Promise<{\n error?: string;\n data?: string;\n }> {\n try {\n const data = await this.data;\n return {\n data,\n };\n } catch (error) {\n return {\n error: error as string,\n };\n }\n }\n\n /**\n * 设置剪切板数据\n */\n public async writeData(newStrData: string): Promise<void> {\n const oldSaveData = await this.saveReadData();\n\n // 读取错误可能是没有读取权限,此时不校验是否相等,直接写入剪切板\n if (oldSaveData.error || oldSaveData.data !== newStrData) {\n if (navigator.clipboard && window.isSecureContext) {\n await navigator.clipboard.writeText(newStrData);\n const event = document.createEvent('Event');\n event.initEvent('onchange');\n (event as unknown as { value: string }).value = newStrData;\n navigator.clipboard.dispatchEvent(event);\n } else {\n const textarea = document.createElement('textarea');\n textarea.value = newStrData;\n\n // 视区以外渲染 dom,无法 display none,否则无文本 copy\n textarea.style.display = 'absolute';\n textarea.style.left = '-99999999px';\n\n document.body.prepend(textarea);\n\n // highlight the content of the textarea element\n textarea.select();\n\n try {\n document.execCommand('copy');\n } catch (err) {\n console.log(err);\n } finally {\n textarea.remove();\n }\n }\n\n this.onClipboardChangedEmitter.fire(newStrData);\n }\n }\n\n /**\n * 获取剪切板数据\n */\n\n public async readData(): Promise<string> {\n const res = await this.saveReadData();\n if (res.error) {\n throw Error(res.error);\n }\n return res.data || '';\n }\n\n public clearData(): void {\n this.writeData('');\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\n\n@injectable()\nexport class ShortcutsService {}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { isEqual } from 'lodash-es';\nimport { injectable } from 'inversify';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { MonitorData } from '../utils';\n\ninterface StackItem {\n id: string;\n value: string;\n}\n\n// 操作注册\n@injectable()\nexport class TypeEditorOperationService<TypeSchema extends Partial<IJsonSchema>> {\n public undoStack: StackItem[] = [];\n\n public redoStack: StackItem[] = [];\n\n private _id_idx = 0;\n\n private _getNewId(): string {\n return `${this._id_idx++}`;\n }\n\n public _storeState = (value: TypeSchema) => {\n if (this.redoStack.length > 0) {\n this.redoStack.splice(0);\n }\n\n this.undoStack.push({\n id: this._getNewId(),\n value: JSON.stringify(value),\n });\n this.refreshUndoRedoStatus();\n };\n\n public canUndo = new MonitorData(false);\n\n public canRedo = new MonitorData(false);\n\n public constructor() {\n this.refreshUndoRedoStatus();\n }\n\n public refreshUndoRedoStatus() {\n this.canRedo.update(this.redoStack.length !== 0);\n this.canUndo.update(this.undoStack.length > 1);\n }\n\n public getCurrentState(): TypeSchema | undefined {\n const top = this.undoStack[this.undoStack.length - 1];\n\n if (top) {\n return JSON.parse(top.value);\n }\n return;\n }\n\n public clear(): void {\n this.undoStack = [];\n this.redoStack = [];\n }\n\n public storeState(value: TypeSchema): void {\n if (isEqual(this.getCurrentState(), value)) {\n return;\n }\n\n this._storeState(value);\n }\n\n public async undo(): Promise<void> {\n const top = this.undoStack.pop();\n if (top) {\n this.redoStack.push(top);\n }\n\n this.refreshUndoRedoStatus();\n }\n\n public async redo(): Promise<void> {\n const top = this.redoStack.pop();\n\n if (top) {\n this.undoStack.push(top);\n }\n\n this.refreshUndoRedoStatus();\n }\n\n public debugger(): void {\n console.log('getCurrentState - debugger', this.getCurrentState());\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip, Typography } from '@douyinfe/semi-ui';\n// import { TypeInput, TypeText } from '@api-builder/base-type-definition';\n\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport {\n GlobalSelectStyle,\n KeyEditorContainer,\n KeyViewContainer,\n TypeTextContainer,\n} from './style';\n\nexport const TypeText: FC<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value?: any;\n type: IJsonSchema;\n}> = ({ value, type }) => {\n const typeDefinition = useTypeDefinitionManager();\n\n const content = useMemo(() => {\n const config = typeDefinition.getTypeBySchema(type);\n\n return config?.getValueText ? config.getValueText(value) : value || '';\n }, [value, type]);\n\n return (\n <TypeTextContainer>\n <Typography.Text ellipsis={{ showTooltip: true }}>{content}</Typography.Text>\n </TypeTextContainer>\n );\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({ rowData, onEditMode }) => {\n const disabled = useDisabled(TypeEditorColumnType.Value, rowData);\n\n if (disabled) {\n return (\n <KeyViewContainer disabled>\n <Tooltip content={disabled}>\n <div style={{ width: '100%', height: '100%' }}>\n <TypeText value={rowData.self?.extra?.value} type={rowData.self} />\n </div>\n </Tooltip>\n </KeyViewContainer>\n );\n }\n\n return (\n <KeyViewContainer onClick={() => onEditMode()}>\n <TypeText value={rowData.self?.extra?.value} type={rowData.self} />\n </KeyViewContainer>\n );\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const valueRef = useRef(rowData.self.extra?.value);\n const [value, setValue] = useState(rowData.self.extra?.value);\n const typeDefinition = useTypeDefinitionManager();\n const config = useMemo(() => typeDefinition.getTypeBySchema(rowData.self), [rowData.self]);\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n useEffect(() => {\n setValue(rowData.self.extra?.value);\n valueRef.current = rowData.self.extra?.value;\n }, [rowData.self.extra?.value]);\n\n const handleSubmit = useCallback(() => {\n if (!rowData.self.extra) {\n rowData.self.extra = {};\n }\n\n rowData.self.extra.value = valueRef.current;\n onChange();\n\n onViewMode();\n }, [onChange, rowData]);\n\n return (\n <KeyEditorContainer>\n <GlobalSelectStyle />\n {config &&\n config?.getInputNode?.({\n value: value,\n onChange: (v: unknown) => {\n valueRef.current = v;\n setValue(v);\n },\n type: rowData.self,\n onSubmit: () => {\n handleSubmit();\n onViewMode();\n },\n })}\n </KeyEditorContainer>\n );\n};\n\nexport const valueColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Value,\n width: 15,\n label: 'Value',\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ rowData, onChange, typeEditor, value, typeDefinitionService }) => {\n const config = typeDefinitionService.getTypeBySchema(rowData.self);\n if (config?.typeInputConfig?.canEnter) {\n rowData.self.description = value;\n\n onChange();\n typeEditor.moveActivePosToNextLine();\n }\n },\n onTab: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.description = value;\n onChange();\n typeEditor.moveActivePosToNextItem();\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorColumnType, TypeEditorRowData } from '../../../types';\n\nexport const useDisabled = <TypeSchema extends Partial<IJsonSchema>>(\n type: TypeEditorColumnType,\n rowData: TypeEditorRowData<TypeSchema>\n): string | undefined => {\n const disabled = (rowData.disableEditColumn || []).find((r) => r.column === type);\n\n if (disabled?.reason) {\n return disabled?.reason;\n }\n\n if (typeof rowData.extra?.editable === 'string') {\n return rowData.extra?.editable;\n }\n\n return rowData.extra?.editable === false ? `${type} is not editable.` : undefined;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { Input, Typography } from '@douyinfe/semi-ui';\n\nexport const KeyViewContainer = styled.div<{\n disabled?: boolean;\n}>`\n width: 100%;\n display: flex;\n align-items: center;\n height: 20px;\n ${(props) => (props.disabled ? 'cursor: not-allowed !important;' : '')}\n svg {\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n }\n`;\n\nexport const KeyViewContent = styled.div`\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n width: 0;\n flex: 1;\n`;\n\nexport const KeyEditorContainer = styled.div`\n height: 100%;\n width: 100%;\n display: flex;\n\n svg {\n flex-shrink: 0;\n }\n\n .semi-input-wrapper-focus {\n border-color: transparent !important;\n }\n\n .semi-input-wrapper:hover {\n background-color: var(--semi-color-fill-0);\n }\n\n .semi-cascader:hover {\n background-color: var(--semi-color-fill-0);\n }\n\n .semi-cascader:focus {\n border-color: transparent !important;\n }\n\n .semi-cascader-focus {\n border-color: transparent !important;\n }\n`;\n\nexport const KeyEditorInput = styled(Input)`\n flex: 1;\n height: 100%;\n display: flex;\n align-items: center;\n input {\n font-size: 12px !important;\n }\n`;\n\nexport const KeyViewText = styled(Typography.Text)<{\n disabled?: boolean;\n}>`\n flex: 1;\n cursor: text;\n font-size: 12px;\n height: 100%;\n ${(props) =>\n props.disabled\n ? `\n cursor: not-allowed !important;\n `\n : ''}\n`;\n\nexport const BaseIcon = styled.div<{\n draggable?: boolean;\n triangle?: boolean;\n disabled?: boolean;\n primary?: boolean;\n isRotate?: boolean;\n}>`\n color: var(--semi-color-text-2);\n cursor: pointer;\n\n ${(props) =>\n props.draggable\n ? `\n cursor: grab;\n margin-right: 4px;\n `\n : ''}\n\n ${(props) =>\n props.triangle\n ? `\n transform: rotate(270deg);\n\n `\n : ''}\n\n ${(props) =>\n props.isRotate\n ? `\n transform: rotate(360deg);\n\n `\n : ''}\n\n ${(props) =>\n props.disabled\n ? `\n opacity: 0.5;\n cursor: not-allowed;\n `\n : ''}\n\n ${(props) =>\n props.primary\n ? `\n color: var(--semi-color-primary) !important;\n `\n : ''}\n\n &:hover {\n color: var(--semi-color-primary);\n }\n`;\n\nexport const CenterContainer = styled.div`\n width: 100%;\n height: 20px;\n display: flex;\n align-items: center;\n gap: 12px;\n justify-content: center;\n`;\n\nexport const TypeDisableViewContainer = styled(KeyViewContainer)`\n color: var(--semi-color-disabled-text) !important;\n cursor: not-allowed;\n font-size: 12px;\n\n :global {\n .semi-typography {\n color: var(--semi-color-disabled-text) !important;\n }\n }\n`;\n\nexport const TypeTextContainer = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n box-sizing: border-box;\n align-items: center;\n padding: 1px 5px;\n`;\n\nexport const GlobalSelectStyle = createGlobalStyle`\n .semi-select {\n border: none !important\n }\n\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { pick } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Toast, Tooltip } from '@douyinfe/semi-ui';\nimport { IconHelpCircle } from '@douyinfe/semi-icons';\n\nimport { typeEditorUtils } from '../utils';\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeSelector } from '../../type-selector';\nimport { TypeEditorColumnConfig, TypeEditorColumnType, TypeEditorRowData } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { BaseIcon, KeyEditorContainer, KeyViewContainer, TypeDisableViewContainer } from './style';\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({ rowData, onEditMode }) => {\n const typeService = useTypeDefinitionManager();\n\n const disabled = useDisabled(TypeEditorColumnType.Type, rowData);\n const [refresh, setRefresh] = useState(0);\n\n useEffect(() => {\n typeService.onTypeRegistryChange(() => {\n setRefresh((v) => v + 1);\n });\n }, [typeService]);\n\n const typeConfig = useMemo(() => typeService.getTypeBySchema(rowData.self), [refresh, rowData]);\n\n const unknownNode = (\n <BaseIcon>\n <IconHelpCircle style={{ marginRight: 4 }} />\n Unknown\n </BaseIcon>\n );\n\n return disabled ? (\n <>\n <TypeDisableViewContainer>\n <Tooltip content={disabled}>\n {typeConfig?.getDisplayLabel?.(rowData) || unknownNode}\n </Tooltip>\n </TypeDisableViewContainer>\n </>\n ) : (\n <KeyViewContainer\n onClick={() => {\n onEditMode();\n }}\n >\n {typeConfig?.getDisplayLabel?.(rowData) || unknownNode}\n </KeyViewContainer>\n );\n};\n\nconst setCellValue = (rowData: TypeEditorRowData<IJsonSchema>, newData: IJsonSchema): void => {\n const othersProps = pick(rowData.self, ['required', 'description', 'flow']);\n\n if (rowData.parent?.properties) {\n rowData.parent.properties[rowData.key] = {\n ...newData,\n ...othersProps,\n };\n }\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const [value, setValue] = useState(rowData.self);\n const typeService = useTypeDefinitionManager();\n\n return (\n <KeyEditorContainer>\n <TypeSelector\n value={value}\n typeRegistryCreators={typeEditor.typeRegistryCreators}\n disableTypes={rowData.extraConfig?.customDisabledTypes}\n onDropdownVisibleChange={(vis) => {\n if (!vis) {\n onViewMode();\n }\n }}\n onChange={(newData, ctx) => {\n if (!newData) {\n return;\n }\n\n setCellValue(rowData, newData);\n\n setValue(newData);\n onChange();\n\n let unClose = false;\n\n typeEditorUtils.traverseIJsonSchema(newData, (type) => {\n const def = typeService.getTypeBySchema(type);\n if (def?.typeCascaderConfig?.unClosePanelAfterSelect) {\n unClose = true;\n }\n });\n\n if (ctx.source === 'type-selector' && !unClose) {\n onViewMode();\n }\n }}\n defaultOpen\n onBlur={() => {\n onViewMode();\n }}\n />\n </KeyEditorContainer>\n );\n};\nexport const typeColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Type,\n label: 'Type',\n width: 20,\n viewRender: ViewRender,\n shortcuts: {\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n onCopy: (ctx) => {\n const {\n typeEditor: { typeDefinition, clipboard },\n rowData,\n } = ctx;\n const config = typeDefinition.getTypeBySchema(rowData.self);\n if (config) {\n const optionValue = config.getStringValueByTypeSchema?.(rowData.self);\n const type =\n optionValue && config.getTypeSchemaByStringValue\n ? config.getTypeSchemaByStringValue(optionValue)\n : config.getDefaultSchema();\n type.properties = rowData.properties;\n type.required = rowData.required;\n clipboard.writeData(JSON.stringify(type));\n Toast.success('Copy type success!');\n } else {\n Toast.error('Copy type failed: this type undefined');\n }\n },\n\n onPaste: (ctx) => {\n const {\n typeEditor: { typeDefinition, clipboard, onChange },\n rowData,\n } = ctx;\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data) as IJsonSchema;\n const originIndex = rowData.extra?.index || 0;\n const config = parseData && typeDefinition.getTypeBySchema(parseData);\n if (config && typeof parseData === 'object') {\n typeEditorUtils.fixFlowIndex(parseData);\n if (parseData.extra) {\n parseData.extra.index = originIndex;\n }\n setCellValue(rowData, parseData);\n onChange();\n } else {\n Toast.warning('Please paste the correct type schema!');\n }\n });\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { forwardRef } from 'react';\n\nimport { nanoid } from 'nanoid';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorSpecialConfig } from '../../types';\nimport { disableFixIndexFormatter, emptyKeyFormatter } from './formatter';\nimport { SUFFIX, COMPONENT_ID_PREFIX } from './common';\n\nconst genNewTypeSchema = <TypeSchema extends Partial<IJsonSchema>>(\n index: number\n): [string, TypeSchema] => {\n const newKey = genEmptyKey();\n\n return [\n newKey,\n {\n type: 'string',\n extra: {\n index,\n },\n } as TypeSchema,\n ];\n};\n\nconst traverseIJsonSchema = <TypeSchema extends Partial<IJsonSchema>>(\n root: TypeSchema | undefined,\n cb: (type: TypeSchema) => void\n): void => {\n if (root) {\n cb(root);\n\n if (root.items) {\n traverseIJsonSchema(root.items as TypeSchema, cb);\n }\n if (root.additionalProperties) {\n traverseIJsonSchema(root.additionalProperties as TypeSchema, cb);\n }\n\n if (root.properties) {\n Object.values(root.properties).forEach((v) => {\n traverseIJsonSchema(v as TypeSchema, cb);\n });\n }\n }\n};\n\nexport const jsonParse = (jsonString?: string) => {\n try {\n return JSON.parse(jsonString || '');\n } catch (error) {\n // todo 兼容错误形态JSON\n return undefined;\n }\n};\n\nconst sortProperties = <TypeSchema extends Partial<IJsonSchema>>(typeSchema: TypeSchema) => {\n const { properties = {} } = typeSchema;\n const originKeys = Object.keys(properties);\n\n const sortKeys = originKeys.sort(\n (a, b) => (properties[a].extra?.index || 0) - (properties[b].extra?.index || 0)\n );\n\n for (let i = 0; i < sortKeys.length; i++) {\n const key = sortKeys[i];\n\n fixFlowIndex(properties[key]);\n\n properties[key].extra!.index = i;\n }\n};\n\nconst fixFlowIndex = <TypeSchema extends Partial<IJsonSchema>>(type: TypeSchema, idx = 0): void => {\n if (!type) {\n return;\n }\n\n if (!type.extra) {\n type.extra = {};\n }\n\n if (type.extra.index === undefined) {\n type.extra.index = idx;\n }\n};\n\nconst getInitialSchema = <TypeSchema extends Partial<IJsonSchema>>(): TypeSchema => {\n const res: IJsonSchema = {\n type: 'object',\n properties: {},\n };\n return res as TypeSchema;\n};\n\nconst clone = <T>(val: T): T => (val ? JSON.parse(JSON.stringify(val)) : val);\n\nconst isTempState = <TypeSchema extends Partial<IJsonSchema>>(\n type: TypeSchema,\n customValidateName?: (value: string) => string\n): boolean => {\n let error = false;\n\n traverseIJsonSchema(type, (c) => {\n if (c.properties) {\n Object.keys(c.properties).forEach((key) => {\n const res = isEmptyKey(key) || customValidateName?.(key);\n if (res) {\n error = true;\n }\n });\n }\n });\n\n return error;\n};\n\nconst genEmptyKey = () => SUFFIX + nanoid();\n\nconst isEmptyKey = (key: string) => key.startsWith(SUFFIX);\n\nconst formateKey = (key: string) => (isEmptyKey(key) ? '' : key);\n\nconst deFormateKey = (key: string, originKey?: string) => (!key ? originKey || genEmptyKey() : key);\n\nconst formateTypeSchema = <TypeSchema extends Partial<IJsonSchema>>(\n typeSchema: TypeSchema,\n config: TypeEditorSpecialConfig<TypeSchema>\n): TypeSchema => {\n const newSchema = JSON.parse(JSON.stringify(typeSchema));\n\n const formatters = [emptyKeyFormatter];\n if (config.disableFixIndex) {\n formatters.push(disableFixIndexFormatter);\n }\n\n traverseIJsonSchema(newSchema, (type) => {\n formatters.forEach((formatter) => {\n formatter(type);\n });\n });\n\n return newSchema;\n};\n\nconst valueToTypeSchema = <TypeSchema extends Partial<IJsonSchema>>(value: unknown): TypeSchema => {\n // return\n\n switch (typeof value) {\n case 'string': {\n return {\n type: 'string',\n } as TypeSchema;\n }\n case 'bigint':\n case 'number': {\n return {\n type: 'number',\n } as TypeSchema;\n }\n case 'boolean': {\n return {\n type: 'boolean',\n } as TypeSchema;\n }\n case 'object': {\n if (value) {\n if (Array.isArray(value)) {\n return {\n type: 'array',\n items: valueToTypeSchema(value[0]),\n } as TypeSchema;\n } else {\n const object: IJsonSchema = {\n type: 'object',\n properties: {},\n };\n Object.keys(value).forEach((k) => {\n object.properties![k] = valueToTypeSchema((value as any)[k]);\n });\n return object as TypeSchema;\n }\n }\n break;\n }\n default:\n break;\n }\n return { type: 'string' } as TypeSchema;\n};\n\nexport const typeEditorUtils = {\n genNewTypeSchema,\n sortProperties,\n traverseIJsonSchema,\n fixFlowIndex,\n genEmptyKey,\n jsonParse,\n clone,\n formateTypeSchema,\n isTempState,\n valueToTypeSchema,\n deFormateKey,\n formateKey,\n getInitialSchema,\n};\n\nexport function fixedTSForwardRef<T, P = object>(\n render: (props: P, ref: React.Ref<T>) => JSX.Element\n): (props: P & React.RefAttributes<T>) => JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return forwardRef(render as any) as any;\n}\n\nexport const getComponentId = (id: string): string => `${COMPONENT_ID_PREFIX}-${id}`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { SUFFIX } from '../common';\nexport type Formatter = (typeSchema: Partial<IJsonSchema>) => void;\n\nexport const extraFormatter: Formatter = (type) => {\n if (type.extra !== undefined) {\n type.extra = type.extra;\n\n delete type.extra;\n }\n};\n\nexport const extraDeFormatter: Formatter = (type) => {\n if (type.extra !== undefined) {\n type.extra = type.extra;\n delete type.extra;\n }\n};\n\nexport const emptyKeyFormatter: Formatter = (type) => {\n if (type.properties) {\n Object.keys(type.properties).forEach((k) => {\n if (k.startsWith(SUFFIX)) {\n delete type.properties![k];\n }\n });\n }\n};\n\nexport const disableFixIndexFormatter: Formatter = (type) => {\n if (type.extra) {\n delete type.extra.index;\n\n if (Object.keys(type.extra).length === 0) {\n delete type.extra;\n }\n }\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorProvider } from '../../contexts';\nimport { type Props } from './type';\nimport { CascaderV2 } from './cascader-v2';\n\nexport const TypeSelector = <TypeSchema extends Partial<IJsonSchema>>(props: Props<TypeSchema>) => {\n const [init, setInit] = useState(false);\n return (\n <TypeEditorProvider\n typeRegistryCreators={props.typeRegistryCreators}\n onInit={() => setInit(true)}\n >\n {init ? <CascaderV2 {...(props as unknown as Props<IJsonSchema>)} /> : <></>}\n </TypeEditorProvider>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Popover } from '@douyinfe/semi-ui';\n\nimport { TypeSelectorRef, type Props } from '../type';\nimport { FlowSchemaInitCtx } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { TypeSearchPanel } from './type-search';\nimport { TypeCascader } from './type-cascader';\nimport { Trigger } from './trigger';\nimport { CascaderContainer, CustomCascaderContainer } from './style';\n\nexport const CascaderV2 = (\n props: Props<IJsonSchema> & {\n onInit?: (typeEditorRef: TypeSelectorRef) => void;\n }\n) => {\n const {\n triggerRender,\n disabled,\n defaultOpen,\n onInit,\n value,\n onDropdownVisibleChange,\n getPopupContainer = () => document.body,\n } = props;\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const typeSelectorRef = useRef<TypeSelectorRef>(null);\n\n const [searchValue, setSearchValue] = useState('');\n\n const typeService = useTypeDefinitionManager();\n\n useEffect(() => {\n if (typeSelectorRef.current) {\n onInit?.(typeSelectorRef.current);\n }\n }, [typeSelectorRef.current, onInit]);\n\n const [rePosKey, setReposKey] = useState(0);\n const [context, setContext] = useState<FlowSchemaInitCtx>(\n (value && typeService.getTypeBySchema(value)?.typeCascaderConfig?.generateInitCtx?.(value)) ||\n {}\n );\n\n const [visible, setVisible] = useState(defaultOpen);\n\n if (disabled) {\n return (\n <>\n {triggerRender ? (\n <CustomCascaderContainer>{triggerRender()}</CustomCascaderContainer>\n ) : (\n <CascaderContainer>\n <Trigger\n typeSelectorRef={typeSelectorRef}\n triggerRef={triggerRef}\n searchValue={searchValue}\n onSearchChange={setSearchValue}\n ctx={context}\n {...props}\n />\n </CascaderContainer>\n )}\n </>\n );\n }\n\n return (\n <>\n <Popover\n rePosKey={rePosKey}\n visible={visible}\n onVisibleChange={(v) => {\n setVisible(v);\n if (onDropdownVisibleChange) {\n onDropdownVisibleChange(v);\n }\n if (v) {\n setReposKey((key) => key + 1);\n }\n }}\n autoAdjustOverflow\n trigger=\"click\"\n position=\"bottomLeft\"\n getPopupContainer={getPopupContainer}\n content={\n !searchValue ? (\n <TypeCascader\n ref={typeSelectorRef}\n onContextChange={setContext}\n onRePos={() => setReposKey((pre) => pre + 1)}\n {...props}\n />\n ) : (\n <TypeSearchPanel\n onSearchChange={setSearchValue}\n ref={typeSelectorRef}\n triggerRef={triggerRef}\n query={searchValue}\n {...props}\n />\n )\n }\n >\n {triggerRender ? (\n <CustomCascaderContainer>{triggerRender()}</CustomCascaderContainer>\n ) : (\n <CascaderContainer>\n <Trigger\n triggerRef={triggerRef}\n searchValue={searchValue}\n onSearchChange={setSearchValue}\n typeSelectorRef={typeSelectorRef}\n ctx={context}\n {...props}\n />\n </CascaderContainer>\n )}\n </Popover>\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, {\n type FC,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Typography } from '@douyinfe/semi-ui';\n\nimport { type SearchResultItem, type Props, TypeSelectorRef } from '../type';\nimport { useHighlightKeyword } from '../hooks/use-hight-light';\nimport { useTypeTransform } from '../hooks/option-value';\nimport { useFocusItemSearch } from '../hooks/focus-item';\nimport { TypeEditorRegistry } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { SearchIcon, SearchText, StyledSearchList, TextGlobalStyle, TypeSearchText } from './style';\n\nconst defaultDeep = 2;\n\ninterface CacheItem {\n /** array-array-string **/\n key: string;\n type: string;\n disabled?: string;\n}\n\nconst SearchItem: FC<{\n item: SearchResultItem;\n query: string;\n focusValue: string;\n selectValue: string;\n onSelect: (item: SearchResultItem, value: IJsonSchema) => void;\n}> = ({ item, query, focusValue, onSelect, selectValue }) => {\n const typeService = useTypeDefinitionManager();\n\n const { convertOptionValueToModeValue } = useTypeTransform();\n\n const config = typeService.getTypeByName(item.type);\n\n const typeSchema = useMemo(\n () => convertOptionValueToModeValue(item.value) as IJsonSchema,\n [item.value]\n );\n\n const text = useMemo(() => config?.getDisplayText(typeSchema), [typeSchema, config]);\n\n const label = useHighlightKeyword(\n text || '',\n query,\n {\n color: 'var(--semi-color-primary)',\n fontWeight: 600,\n },\n item.value\n );\n\n return (\n <li\n key={item.value}\n onClick={() => (item.disabled ? undefined : onSelect(item, typeSchema))}\n style={{\n minWidth: 'unset',\n background: focusValue === item.value ? 'var(--semi-color-fill-0)' : undefined,\n }}\n className={classNames(\n 'semi-cascader-option',\n item.disabled && 'semi-cascader-option-disabled',\n selectValue === item.value && 'semi-cascader-option-select'\n )}\n >\n <TextGlobalStyle />\n <SearchText disabled={!!item.disabled}>\n <SearchIcon>{config?.getDisplayIcon?.(typeSchema)}</SearchIcon>\n <Typography.Text ellipsis={{ showTooltip: true }}>\n <span>{label}</span>\n </Typography.Text>\n </SearchText>\n </li>\n );\n};\n// eslint-disable-next-line react/display-name\nexport const TypeSearchPanel = forwardRef<\n TypeSelectorRef,\n Props<IJsonSchema> & {\n query: string;\n triggerRef: React.RefObject<HTMLDivElement | null>;\n onSearchChange: (query: string) => void;\n }\n>(({ query, disableTypes = [], onChange, triggerRef, value, onSearchChange }, ref) => {\n const typeService = useTypeDefinitionManager();\n const {\n convertValueToOptionValue,\n checkHasChildren,\n convertOptionValueToModeValue,\n getModeOptionChildrenType,\n } = useTypeTransform();\n\n const customDisableType = useMemo(() => {\n const map = new Map<string, string>();\n\n disableTypes.forEach((v) => {\n map.set(v.type, v.reason);\n });\n return map;\n }, [disableTypes]);\n\n const selectValue = useMemo(() => convertValueToOptionValue(value), [value]);\n\n const [searchResult, setSearchResult] = useState<SearchResultItem[]>([]);\n\n const levelCache = useRef<CacheItem[][]>([]);\n\n const handleGenLevelInfo = useCallback(\n (level: number) => {\n for (let i = 0; i < level; i++) {\n if (levelCache.current[i]) {\n continue;\n }\n\n if (i === 0) {\n const newRootTypes = typeService.getTypeRegistriesWithParentType();\n levelCache.current[i] = newRootTypes.map((type) => ({\n key: type.type,\n type: type.type,\n parentLabels: [],\n disabled: customDisableType.get(type.type),\n }));\n } else {\n const lastLevelCache = levelCache.current[i - 1];\n const newCacheTypes: CacheItem[] = [];\n levelCache.current[i] = newCacheTypes;\n lastLevelCache.forEach((type) => {\n // disabled 的就不用下钻了\n if (type.disabled) {\n return;\n }\n const config = typeService.getTypeByName(type.type);\n\n const parentTypes = type.key.split('-');\n if (\n config &&\n checkHasChildren(config as TypeEditorRegistry<IJsonSchema>, {\n level: i,\n })\n ) {\n const childrenTypes = getModeOptionChildrenType(\n config as TypeEditorRegistry<IJsonSchema>,\n {\n parentType: type.type,\n level: i,\n parentTypes,\n }\n );\n\n childrenTypes.forEach((child) => {\n const childConfig = typeService.getTypeByName(child.type);\n\n newCacheTypes.push({\n type: child.type,\n key: [...parentTypes, child.type].join('-'),\n disabled:\n child.disabled ||\n (childConfig?.customDisabled\n ? childConfig.customDisabled({\n level: i + 1,\n parentType: type.type,\n parentTypes,\n })\n : undefined),\n });\n });\n }\n });\n }\n }\n },\n [customDisableType]\n );\n\n const handleGenSearchResult = useCallback(() => {\n const len = levelCache.current.length;\n if (!query) {\n setSearchResult([]);\n return;\n }\n\n const newSearchResult: SearchResultItem[] = [];\n for (let i = 0; i < len; i++) {\n const cacheTypes = levelCache.current[i] || [];\n\n cacheTypes.forEach((type) => {\n const config = typeService.getTypeByName(type.type);\n\n if (config && config.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) > -1) {\n newSearchResult.push({\n value: type.key,\n icon: config.icon,\n disabled: type.disabled,\n level: i,\n type: type.type,\n });\n }\n });\n }\n\n setSearchResult(newSearchResult);\n }, [query]);\n\n useEffect(() => {\n handleGenLevelInfo(defaultDeep);\n }, [handleGenLevelInfo]);\n\n useEffect(() => {\n handleGenSearchResult();\n }, [query]);\n\n const viewValue = useMemo(\n () =>\n searchResult.filter((item) => {\n const config = typeService.getTypeByName(item.type);\n return (\n config &&\n !checkHasChildren(config as TypeEditorRegistry<IJsonSchema>, {\n level: item.level,\n })\n );\n }),\n [searchResult, typeService]\n );\n\n const { focusValue } = useFocusItemSearch({\n ref,\n viewValue,\n onChange: (v) => {\n const newVal = convertOptionValueToModeValue(v);\n onChange?.(newVal as IJsonSchema, { source: 'custom-panel' });\n onSearchChange('');\n },\n });\n\n return (\n <div\n className={classNames('semi-cascader-option-lists')}\n style={triggerRef.current ? { width: Math.max(triggerRef.current.clientWidth, 150) } : {}}\n >\n <StyledSearchList className={classNames('semi-cascader-option-list')}>\n <>\n {viewValue.length === 0 ? (\n <TypeSearchText type=\"secondary\">No results.</TypeSearchText>\n ) : (\n <>\n {viewValue.map((item) => (\n <SearchItem\n selectValue={selectValue}\n key={item.value}\n query={query}\n focusValue={focusValue}\n item={item}\n onSelect={(_, v) => onChange?.(v, { source: 'type-selector' })}\n />\n ))}\n </>\n )}\n </>\n </StyledSearchList>\n </div>\n );\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { type CSSProperties } from 'react';\n/**\n * 搜索结果高亮\n */\nexport const useHighlightKeyword = (\n label: string,\n keyword?: string,\n hightLightStyle: CSSProperties = {},\n id?: string\n // color = 'rgba(var(--semi-orange-5), 1)',\n): (string | React.JSX.Element)[] => {\n if (label && keyword) {\n return label.split(new RegExp(`(${keyword})`, 'gi')).map((c, i) =>\n c.toLocaleLowerCase() === keyword.toLocaleLowerCase() ? (\n <span\n key={c + i + id}\n style={{\n color: 'rgba(var(--semi-orange-5), 1)',\n ...hightLightStyle,\n }}\n >\n {c}\n </span>\n ) : (\n <span key={c + i + id}>{c}</span>\n )\n );\n }\n return [label];\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRegistry } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\n\nexport const useTypeTransform = () => {\n const typeService = useTypeDefinitionManager();\n\n /**\n * 根据提交值获取选项值\n * 正常和 OptionValue 一致,不用特殊转化\n * 但是在 IJsonSchema 的场景,这两个值会不同\n * 级联场景也会不一样,因为 级联场景会 type-type\n */\n const convertValueToOptionValue = useMemo(\n () => (originValue: IJsonSchema | undefined) => {\n const type = originValue && typeService.getTypeBySchema(originValue);\n\n return (originValue && type?.getStringValueByTypeSchema?.(originValue)) || '';\n },\n [typeService]\n );\n\n /**\n * 根据选项值获取提交值\n * 正常和 OptionValue 一致,不用特殊转化\n * 但是在 IJsonSchema 的场景,这两个值会不同\n * 级联场景也会不一样,因为 级联场景会 type-type\n */\n const convertOptionValueToModeValue = useMemo(\n () => (optionValue: string | undefined) => {\n const [root, ...rest] = (optionValue || '').split('-');\n\n const rooType = typeService.getTypeByName(root);\n\n if (rooType?.getTypeSchemaByStringValue) {\n return rooType.getTypeSchemaByStringValue(rest.join('-'));\n }\n\n return rooType?.getDefaultSchema();\n },\n [typeService]\n );\n\n /**\n * 判断是否有子类型\n */\n const checkHasChildren = useMemo(\n () =>\n (\n typeDef: TypeEditorRegistry<IJsonSchema>,\n ctx: {\n level: number;\n }\n ): boolean =>\n (typeDef?.getSupportedItemTypes && typeDef.getSupportedItemTypes(ctx).length !== 0) ||\n !!typeDef.container,\n [typeService]\n );\n\n const getModeOptionChildrenType = useMemo(\n () =>\n (\n typeDef: TypeEditorRegistry<IJsonSchema> | undefined,\n ctx: {\n parentType: string;\n level: number;\n parentTypes?: string[];\n }\n ) => {\n const getSupportType = (parentType = ''): TypeEditorRegistry<IJsonSchema>[] =>\n typeService.getTypeRegistriesWithParentType(\n parentType\n ) as TypeEditorRegistry<IJsonSchema>[];\n\n const support = new Set(getSupportType(ctx.parentType).map((v) => v.type));\n return (\n (typeDef?.getSupportedItemTypes && typeDef.getSupportedItemTypes(ctx)) ||\n []\n ).filter((v) => support.has(v.type));\n },\n [typeService]\n );\n\n return {\n convertOptionValueToModeValue,\n convertValueToOptionValue,\n checkHasChildren,\n getModeOptionChildrenType,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useImperativeHandle, useMemo, useState } from 'react';\n\nimport { noop } from 'lodash-es';\n\nimport { TypeSelectorRef, type CascaderOption, type SearchResultItem } from '../type';\n\ninterface Pos {\n x: number;\n y: number;\n}\n\nconst validatePos = (pos: Pos): boolean => pos.x >= 0 && pos.y >= 0;\n\nexport const useFocusItemCascader = ({\n rootTypes,\n renderData,\n cascaderTypes,\n ref,\n onCollapse,\n onChange,\n}: {\n rootTypes: CascaderOption[];\n cascaderTypes: string[];\n onChange: (newVal: string) => void;\n renderData: { item: string; options: CascaderOption[] }[];\n ref: React.ForwardedRef<TypeSelectorRef>;\n onCollapse: (type: string, level: number) => void;\n}) => {\n const [focusPos, setFocusPos] = useState<Pos>({ x: -1, y: -1 });\n\n const allOptions = useMemo(\n () => [rootTypes, ...renderData.map((item) => item.options)],\n [rootTypes, renderData]\n );\n\n const initPos = useCallback(() => {\n setFocusPos({\n x: 0,\n y: 0,\n });\n }, []);\n\n const focusItem = useMemo(() => allOptions[focusPos.x]?.[focusPos.y], [focusPos, allOptions]);\n\n const focusValue = useMemo(\n () => allOptions[focusPos.x]?.[focusPos.y]?.value,\n [focusPos, allOptions]\n );\n\n useImperativeHandle(\n ref,\n (): TypeSelectorRef => ({\n initFocusItem() {\n initPos();\n },\n clearFocusItem() {\n setFocusPos({\n x: -1,\n y: -1,\n });\n },\n moveFocusItemUp() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n const { x, y } = focusPos;\n\n if (!allOptions[x]?.[y]) {\n return;\n }\n\n // 向上查找,直到找到一个 disabled not 的 item\n let newY = (y - 1 + allOptions[x].length) % allOptions[x].length;\n let item = allOptions[x]?.[newY];\n\n while (item?.disabled && newY !== y) {\n newY = (newY - 1 + allOptions[x].length) % allOptions[x].length;\n item = allOptions[x]?.[newY];\n }\n\n if (newY !== y) {\n setFocusPos({\n x,\n y: newY,\n });\n }\n },\n moveFocusItemDown() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n\n const { x, y } = focusPos;\n\n if (!allOptions[x]?.[y]) {\n return;\n }\n\n // 向上查找,直到找到一个 disabled not 的 item\n let newY = (y + 1) % allOptions[x].length;\n let item = allOptions[x]?.[newY];\n\n while (item?.disabled && newY !== y) {\n newY = (newY + 1) % allOptions[x].length;\n item = allOptions[x]?.[newY];\n }\n\n if (newY !== y) {\n setFocusPos({\n x,\n y: newY,\n });\n }\n },\n moveFocusItemLeft() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n\n const childrenPanelLen = cascaderTypes.length;\n\n if (childrenPanelLen > 0) {\n const lastParentType = cascaderTypes[childrenPanelLen - 1];\n\n const newY = allOptions[childrenPanelLen - 1]?.findIndex(\n (v) => v.type === lastParentType\n );\n\n onCollapse(lastParentType, childrenPanelLen - 1);\n\n setFocusPos({\n x: focusPos.x - 1,\n y: newY || 0,\n });\n }\n },\n moveFocusItemRight() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n\n if (focusItem && !focusItem.isLeaf && cascaderTypes[focusPos.x] !== focusItem.type) {\n onCollapse(focusItem.type, focusPos.x);\n setFocusPos({\n x: focusPos.x + 1,\n y: 0,\n });\n }\n },\n\n selectFocusItem() {\n if (!validatePos(focusPos)) {\n return;\n }\n if (focusItem?.isLeaf) {\n onChange(focusValue);\n }\n },\n })\n );\n\n return {\n focusValue,\n };\n};\nexport const useFocusItemSearch = ({\n ref,\n onChange,\n viewValue,\n}: {\n viewValue: SearchResultItem[];\n onChange: (newVal: string) => void;\n\n ref: React.ForwardedRef<TypeSelectorRef>;\n}) => {\n const [focusPos, setFocusPos] = useState(-1);\n\n const focusValue = useMemo(() => viewValue[focusPos]?.value, [viewValue, focusPos]);\n\n const focusItem = useMemo(() => viewValue[focusPos], [viewValue, focusPos]);\n\n useImperativeHandle(ref, () => ({\n selectFocusItem() {\n if (!focusItem.disabled) {\n onChange(focusValue);\n }\n },\n moveFocusItemDown() {\n if (focusPos < 0) {\n setFocusPos(0);\n return;\n }\n\n let newPos = (focusPos + 1) % viewValue.length;\n\n while (viewValue[newPos]?.disabled && newPos !== focusPos) {\n newPos = (newPos + 1) % viewValue.length;\n }\n\n setFocusPos(newPos);\n },\n moveFocusItemLeft: noop,\n moveFocusItemRight: noop,\n moveFocusItemUp() {\n if (focusPos < 0) {\n setFocusPos(0);\n return;\n }\n\n let newPos = (focusPos - 1 + viewValue.length) % viewValue.length;\n\n while (viewValue[newPos]?.disabled && newPos !== focusPos) {\n newPos = (newPos - 1 + viewValue.length) % viewValue.length;\n }\n\n setFocusPos(newPos);\n },\n initFocusItem() {\n setFocusPos(0);\n },\n clearFocusItem() {\n setFocusPos(-1);\n },\n }));\n\n return {\n focusValue,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { Typography } from '@douyinfe/semi-ui';\n\nexport const StyledFullContainer = styled.div`\n width: 100%;\n height: 100%;\n`;\n\nexport const CustomCascaderContainer = styled.span`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\n\nexport const CascaderContainer = styled(StyledFullContainer)`\n position: relative;\n`;\n\nexport const TriggerText = styled.div`\n display: flex;\n width: 100%;\n`;\n\nexport const CascaderDropdown = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n`;\n\nexport const TriggerGlobalStyle = createGlobalStyle`\n .semi-cascader-selection {\n font-size: 12px !important;\n\n svg {\n width: 12px;\n height: 12px;\n }\n }\n`;\n\nexport const CascaderOptionItem = styled.li<{ focus?: boolean }>`\n ${(props) => (props.focus ? 'background-color: var(--semi-color-fill-0)' : '')}\n`;\n\nexport const DropdownGlobalStyle = createGlobalStyle`\n .semi-cascader-option-lists {\n max-width: 510px;\n overflow-x: auto;\n height: auto;\n\n\n .semi-cascader-option-list {\n width: 150px;\n flex-shrink: 0;\n border-left: none;\n border-right: 1px solid var(--semi-color-fill-0);\n\n max-height: 50vh;\n\n ::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n\n .semi-cascader-option {\n font-size: 12px !important;\n width: 100%;\n padding: 6px 12px;\n cursor: pointer;\n box-sizing: border-box;\n\n svg {\n width: 12px;\n height: 12px;\n }\n }\n }\n\n\n .semi-cascader-option-disabled {\n cursor: not-allowed;\n }\n\n }\n\n .semi-cascader-option-icon {\n margin-right:8px;\n }\n\n .semi-cascader-option-icon-empty {\n margin-right: 0;\n }\n\n`;\n\nexport const StyledSearchList = styled.ul`\n &::-webkit-scrollbar {\n display: none;\n }\n width: 100%;\n height: 100%;\n`;\n\nexport const TypeSearchText = styled(Typography.Text)`\n padding: 8px 12px;\n`;\n\nexport const TextGlobalStyle = createGlobalStyle`\n .semi-typography {\n color: unset !important;\n }\n\n`;\nexport const SearchText = styled.span<{\n disabled?: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n width: 100%;\n gap: 8px;\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n ${(props) => (props.disabled ? 'color: var(--semi-color-disabled-text);' : '')};\n`;\n\nexport const SearchIcon = styled.span`\n display: inline-flex;\n align-items: center;\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { type FC, forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconCheckboxTick, IconChevronRight } from '@douyinfe/semi-icons';\n\nimport { typeSelectorUtils } from '../utils';\nimport { TypeSelectorRef, type CascaderOption, type Props } from '../type';\nimport { useTypeTransform } from '../hooks/option-value';\nimport { useFocusItemCascader } from '../hooks/focus-item';\nimport { useCascaderRootTypes } from '../hooks';\nimport { FlowSchemaInitCtx, TypeEditorRegistry } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { CascaderDropdown, CascaderOptionItem, DropdownGlobalStyle } from './style';\ninterface OptionListProps {\n options: Array<CascaderOption>;\n\n /**\n * 蓝色背景,用于父类型展开/收起\n */\n activeType?: string;\n /**\n * 蓝色字体,用于表示选中的值\n */\n selectValue?: string;\n /**\n * 灰色背景,当前 focus 的类型\n */\n focusValue?: string;\n onCollapse?: (val: string) => void;\n onSelect?: (\n value: string,\n source?: Parameters<Required<Props<IJsonSchema>>['onChange']>[1]['source']\n ) => void;\n}\n\nconst OptionList: FC<OptionListProps> = ({\n options,\n activeType,\n selectValue,\n onCollapse,\n onSelect,\n focusValue,\n}) => (\n <ul className=\"semi-cascader-option-list\">\n {options.map((opt) => {\n const child = (\n <CascaderOptionItem\n focus={focusValue === opt.value}\n onClick={\n !opt.disabled\n ? () =>\n opt.isLeaf\n ? onSelect?.(\n opt.value,\n opt.source as Parameters<\n Required<Props<IJsonSchema>>['onChange']\n >[1]['source']\n )\n : onCollapse?.(opt.type)\n : undefined\n }\n key={opt.value}\n className={classNames(\n 'semi-cascader-option',\n activeType === opt.type && 'semi-cascader-option-active',\n selectValue === opt.value && 'semi-cascader-option-select',\n\n opt.disabled && 'semi-cascader-option-disabled'\n )}\n >\n <span className=\"semi-cascader-option-label\">\n {selectValue === opt.value ? (\n <IconCheckboxTick\n className={classNames('semi-cascader-option-icon')}\n style={{\n color: selectValue === opt.value ? 'var(--semi-color-primary)' : undefined,\n }}\n />\n ) : (\n <span className=\"semi-cascader-option-icon semi-cascader-option-icon-empty\" />\n )}\n {typeof opt.label === 'string' ? <span>{opt.label}</span> : opt.label}\n </span>\n {!opt.isLeaf && <IconChevronRight />}\n </CascaderOptionItem>\n );\n\n return opt.disabled ? <Tooltip content={opt.disabled}>{child}</Tooltip> : child;\n })}\n </ul>\n);\n\nconst useGenerateCascaderTypes = () => {\n const typeService = useTypeDefinitionManager();\n\n const generateCascaderTypes = useCallback(\n (value?: string) => {\n const res: string[] = [];\n\n const types = value?.split('-') || [];\n const arr = types.splice(0, types.length - 1) || [];\n\n while (arr.length > 0) {\n const type = arr.shift();\n if (type) {\n const config = type ? typeService.getTypeByName(type) : undefined;\n\n if (config?.customChildOptionValue) {\n const extras = config.customChildOptionValue();\n arr.splice(0, extras.length);\n }\n res.push(type);\n }\n }\n\n return res;\n },\n [typeService]\n );\n\n return generateCascaderTypes;\n};\n\nconst generateCustomPanelType = (value?: string) => (value?.split('-') || []).pop() || '';\n\n// eslint-disable-next-line react/display-name\nexport const TypeCascader = forwardRef<\n TypeSelectorRef,\n Props<IJsonSchema> & {\n onContextChange: (ctx: FlowSchemaInitCtx) => void;\n onRePos: () => void;\n }\n>(({ value: originValue, onChange, onContextChange, onRePos, disableTypes = [] }, ref) => {\n const typeService = useTypeDefinitionManager();\n\n const {\n convertOptionValueToModeValue,\n convertValueToOptionValue,\n\n getModeOptionChildrenType,\n } = useTypeTransform();\n\n const customDisableType = useMemo(() => {\n const map = new Map<string, string>();\n\n disableTypes.forEach((v) => {\n map.set(v.type, v.reason);\n });\n return map;\n }, [disableTypes]);\n\n const rootTypes = useCascaderRootTypes(customDisableType);\n\n const generateCascaderTypes = useGenerateCascaderTypes();\n\n const value = useMemo(() => convertValueToOptionValue(originValue), [originValue]);\n\n const [cascaderTypes, setCascaderLTypes] = useState<string[]>(generateCascaderTypes(value));\n\n const [customPanelType, setCustomPanelType] = useState(generateCustomPanelType(value));\n\n const handleChange = useCallback(\n (\n newOptionValue: string,\n source: Parameters<Required<Props<IJsonSchema>>['onChange']>[1]['source'] = 'type-selector'\n ) => {\n if (newOptionValue === value) {\n setCascaderLTypes(generateCascaderTypes(newOptionValue));\n setCustomPanelType(generateCustomPanelType(newOptionValue));\n onRePos();\n\n return;\n }\n const newValue = convertOptionValueToModeValue(newOptionValue);\n\n if (onChange) {\n onChange(newValue as IJsonSchema, {\n source,\n });\n }\n\n setCascaderLTypes(generateCascaderTypes(newOptionValue));\n\n setCustomPanelType(generateCustomPanelType(newOptionValue));\n\n const newCtx =\n (newValue &&\n typeService.getTypeBySchema(newValue)?.typeCascaderConfig?.generateInitCtx?.(newValue)) ||\n {};\n\n onContextChange(newCtx);\n },\n [onChange, onContextChange, value]\n );\n\n const renderData = useMemo(\n () =>\n cascaderTypes.map((item, level) => {\n const parentDef = typeService.getTypeByName(item);\n\n const childrenType = getModeOptionChildrenType(\n parentDef as TypeEditorRegistry<IJsonSchema>,\n {\n parentType: item,\n level: level + 1,\n parentTypes: [...cascaderTypes].splice(0, level),\n }\n );\n\n const prefix = [...cascaderTypes]\n .splice(0, level + 1)\n .map((type) => {\n const config = typeService.getTypeByName(type);\n if (config?.customChildOptionValue) {\n return [type, config.customChildOptionValue()];\n }\n return type;\n })\n .flat()\n .join('-');\n\n const options: CascaderOption[] = childrenType\n .map((child) => {\n const def = typeService.getTypeByName(child.type);\n if (def) {\n return typeSelectorUtils.definitionToCascaderOption({\n config: def,\n customDisableType,\n prefix,\n // parentConfig: parentDef,\n level: level + 1,\n disabled: child.disabled,\n parentType: item,\n parentTypes: [...cascaderTypes].splice(0, level + 1),\n });\n }\n })\n .filter(Boolean) as CascaderOption[];\n\n return {\n item,\n options,\n };\n }),\n [cascaderTypes, customDisableType]\n );\n\n const handleCollapse = useCallback(\n (type: string, level: number) => {\n const newCascaderTypes = [...cascaderTypes];\n\n if (cascaderTypes[level] !== type) {\n newCascaderTypes.splice(level);\n newCascaderTypes.push(type);\n } else {\n newCascaderTypes.splice(level);\n }\n setCustomPanelType('');\n onRePos();\n setCascaderLTypes(newCascaderTypes);\n },\n [cascaderTypes]\n );\n\n const { focusValue } = useFocusItemCascader({\n rootTypes,\n onCollapse: handleCollapse,\n renderData,\n cascaderTypes,\n onChange: (v) => handleChange(v, 'type-selector'),\n ref,\n });\n\n return (\n <CascaderDropdown>\n <DropdownGlobalStyle />\n <div className=\"semi-cascader-option-lists\">\n <OptionList\n activeType={cascaderTypes[0]}\n selectValue={value}\n options={rootTypes}\n focusValue={focusValue}\n onSelect={handleChange}\n onCollapse={(type) => handleCollapse(type, 0)}\n />\n\n {renderData.map(({ item, options }, level) => (\n <OptionList\n onSelect={handleChange}\n key={item + level}\n focusValue={focusValue}\n activeType={cascaderTypes[level + 1]}\n selectValue={value}\n options={options}\n onCollapse={(type) => handleCollapse(type, level + 1)}\n />\n ))}\n\n {(originValue &&\n typeService.getTypeByName(customPanelType)?.typeCascaderConfig?.customCascaderPanel?.({\n typeSchema: originValue,\n onChange: ((newVal: IJsonSchema) => {\n onChange?.(newVal, {\n source: 'custom-panel',\n });\n const newCtx =\n typeService\n .getTypeBySchema(newVal)\n ?.typeCascaderConfig?.generateInitCtx?.(newVal) || {};\n\n onContextChange(newCtx);\n }) as (typeSchema: Partial<IJsonSchema>) => void,\n })) ||\n null}\n </div>\n </CascaderDropdown>\n );\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\n\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { type CascaderOption } from '../type';\nimport { TypeEditorRegistry } from '../../../types';\n\n// import s from '../index.module.less';\n\nconst definitionToCascaderOption = <TypeSchema extends Partial<IJsonSchema>>({\n config,\n customDisableType = new Map(),\n prefix,\n parentTypes,\n disabled,\n parentType,\n level,\n}: {\n level: number;\n config: TypeEditorRegistry<TypeSchema>;\n parentType?: string;\n customDisableType?: Map<string, string>;\n parentTypes: string[];\n prefix?: string;\n disabled?: string;\n}): CascaderOption => {\n const typeValue = config.type;\n\n const optionValue = prefix ? [prefix, typeValue].join('-') : typeValue;\n\n const label = (\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n {config.icon}\n <span>{config.label}</span>\n </div>\n );\n\n const customDisabled =\n config.customDisabled && config.customDisabled({ level, parentType: parentType!, parentTypes });\n\n const reason = disabled || customDisableType.get(typeValue) || customDisabled;\n\n return {\n disabled: reason,\n value: optionValue,\n label,\n type: typeValue,\n source: config.typeCascaderConfig?.unClosePanelAfterSelect ? 'custom-panel' : 'type-selector',\n isLeaf: reason\n ? true\n : !(\n (config.getSupportedItemTypes && config.getSupportedItemTypes({ level }).length !== 0) ||\n config.container\n ),\n };\n};\n\nexport const typeSelectorUtils = {\n definitionToCascaderOption,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { typeSelectorUtils } from '../utils';\nimport { type CascaderOption } from '../type';\nimport { useTypeDefinitionManager } from '../../../contexts';\n\nconst genId = (options: CascaderOption[]): string =>\n options.map((v) => `${v.disabled}${v.label}`).join('-');\n\nexport const useCascaderRootTypes = (customDisableType: Map<string, string>) => {\n const [rootTypes, setRootTypes] = useState<CascaderOption[]>([]);\n const typeService = useTypeDefinitionManager();\n\n useEffect(() => {\n const init = () => {\n const newRootTypes = typeService.getTypeRegistriesWithParentType().map((config) => {\n const res = typeSelectorUtils.definitionToCascaderOption({\n customDisableType,\n config,\n level: 0,\n parentTypes: [],\n });\n return res;\n });\n\n if (genId(newRootTypes) !== genId(rootTypes)) {\n setRootTypes(newRootTypes);\n }\n };\n init();\n const dispose = typeService.onTypeRegistryChange(init);\n return () => {\n dispose.dispose();\n };\n }, [rootTypes, customDisableType]);\n\n return rootTypes;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo, useState } from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Input } from '@douyinfe/semi-ui';\nimport { IconChevronDown } from '@douyinfe/semi-icons';\n\nimport { TypeSelectorRef, type Props } from '../type';\nimport { useTypeSelectorHotKey } from '../hooks/hot-key';\nimport { FlowSchemaInitCtx } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { TriggerGlobalStyle, StyledFullContainer, TriggerText } from './style';\n\nexport const Trigger = ({\n value: originValue,\n ctx,\n typeSelectorRef,\n triggerRef,\n searchValue,\n onSearchChange,\n}: Props<IJsonSchema> & {\n ctx: FlowSchemaInitCtx;\n searchValue: string;\n triggerRef: React.RefObject<HTMLDivElement | null>;\n typeSelectorRef: React.MutableRefObject<TypeSelectorRef | null>;\n onSearchChange: (query: string) => void;\n}) => {\n const typeService = useTypeDefinitionManager();\n\n const value = useMemo(() => {\n if (!originValue) {\n return;\n }\n const type = typeService.getTypeBySchema(originValue);\n\n return type?.getStringValueByTypeSchema?.(originValue) || '';\n }, [originValue]);\n\n const [focus, setFocus] = useState(false);\n\n const hotkeys = useTypeSelectorHotKey(typeSelectorRef);\n\n const reverseLabel = useMemo(() => {\n if (!value || !originValue) {\n return;\n }\n\n const def = typeService.getTypeBySchema(originValue);\n\n return def ? def.getDisplayLabel(originValue) : <>{value}</>;\n }, [originValue, value]);\n\n return (\n <StyledFullContainer\n ref={triggerRef as React.RefObject<HTMLDivElement>}\n className={classNames(\n 'semi-cascader semi-cascader-focus semi-cascader-single semi-cascader-filterable'\n )}\n >\n <TriggerGlobalStyle />\n <div className=\"semi-cascader-selection\">\n <div className=\"semi-cascader-search-wrapper\">\n {!searchValue && (\n <TriggerText\n style={{\n opacity: focus ? 0.5 : 1,\n }}\n className={classNames('semi-cascader-selection-text-inactive')}\n >\n <>{reverseLabel}</>\n </TriggerText>\n )}\n\n <div className=\"semi-input-wrapper semi-input-wrapper-focus semi-input-wrapper-default\">\n <Input\n autoFocus\n onFocus={() => {\n setFocus(true);\n }}\n onKeyDown={(e) => {\n const hotKey = hotkeys.find((item) => item.matcher(e));\n hotKey?.callback();\n if (hotKey?.preventDefault) {\n e.preventDefault();\n }\n }}\n value={searchValue}\n onChange={(newVal) => {\n onSearchChange(newVal);\n }}\n className=\"semi-cascader-input\"\n onBlur={() => {\n setFocus(false);\n }}\n />\n </div>\n </div>\n </div>\n <div className=\"semi-cascader-arrow\">\n <IconChevronDown />\n </div>\n </StyledFullContainer>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { TypeSelectorRef } from '../type';\n\ninterface HotKeyConfig {\n matcher: (event: React.KeyboardEvent) => boolean;\n callback: () => void;\n preventDefault?: boolean;\n}\n\nexport const useTypeSelectorHotKey = (selector: React.MutableRefObject<TypeSelectorRef | null>) => {\n const hotKeyConfig: HotKeyConfig[] = useMemo(() => {\n const res: HotKeyConfig[] = [\n {\n matcher: (e) => e.key === 'Enter',\n callback: () => {\n selector.current?.selectFocusItem();\n },\n },\n {\n matcher: (e) => e.key === 'ArrowUp',\n callback: () => {\n selector.current?.moveFocusItemUp();\n },\n preventDefault: true,\n },\n\n {\n matcher: (e) => e.key === 'ArrowLeft',\n callback: () => {\n selector.current?.moveFocusItemLeft();\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowRight',\n callback: () => {\n selector.current?.moveFocusItemRight();\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowDown',\n callback: () => {\n selector.current?.moveFocusItemDown();\n },\n preventDefault: true,\n },\n ];\n\n return res;\n }, []);\n\n return hotKeyConfig;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Checkbox, Toast, Tooltip } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeEditorRowData, TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { CenterContainer } from './style';\n\nconst setCellValue = (rowData: TypeEditorRowData<IJsonSchema>) => {\n const { parent } = rowData;\n\n if (!parent) {\n return;\n }\n\n if (!parent.required) {\n parent.required = [];\n }\n\n const idx = parent.required.findIndex((key) => key === rowData.key);\n if (idx !== -1) {\n parent.required.splice(idx, 1);\n } else {\n parent.required.push(rowData.key);\n }\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n onChange,\n onEditMode,\n}) => {\n const disabled = useDisabled(TypeEditorColumnType.Required, rowData);\n\n const child = (\n <Checkbox\n disabled={!!disabled}\n checked={!!rowData.isRequired}\n onChange={() => {\n setCellValue(rowData);\n onChange();\n\n onEditMode();\n }}\n />\n );\n\n return (\n <CenterContainer onClick={!disabled ? () => onEditMode() : undefined}>\n {disabled ? <Tooltip content={disabled}>{child}</Tooltip> : child}\n </CenterContainer>\n );\n};\n\nexport const requiredColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Required,\n label: 'Required',\n width: 11,\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ onChange, rowData, typeEditor }) => {\n setCellValue(rowData);\n onChange();\n typeEditor.moveActivePosToNextLine();\n },\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n\n onCopy: (ctx) => {\n const {\n rowData,\n typeEditor: { clipboard },\n } = ctx;\n\n clipboard.writeData(\n JSON.stringify({\n required: rowData.isRequired,\n })\n );\n\n Toast.success('Copy required success!');\n },\n\n onPaste: (ctx) => {\n const {\n typeEditor: { clipboard, onChange },\n rowData,\n } = ctx;\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data);\n const disabled = (rowData.disableEditColumn || []).find(\n (r) => r.column === TypeEditorColumnType.Required\n );\n if (disabled) {\n Toast.warning('The current cell does not support editing!');\n return;\n }\n if (parseData && typeof parseData === 'object' && parseData.required !== undefined) {\n const { parent } = rowData;\n if (!parent) {\n return;\n }\n if (!parent.required) {\n parent.required = [];\n }\n const idx = parent.required.findIndex((key) => key === rowData.key);\n const originRequired = idx !== -1;\n // 值不一致才更新\n if (originRequired !== parseData.required) {\n if (idx !== -1) {\n parent.required.splice(idx, 1);\n } else {\n parent.required.push(rowData.key);\n }\n onChange();\n }\n } else {\n Toast.warning('Please paste the correct info!');\n }\n });\n },\n\n onDown: (ctx) => {\n ctx.typeEditor.moveActivePosToNextLine();\n },\n onLeft: (ctx) => {\n ctx.typeEditor.moveActivePosToLastColumn();\n },\n onUp: (ctx) => {\n ctx.typeEditor.moveActivePosToLastLine();\n },\n onRight: (ctx) => {\n ctx.typeEditor.moveActivePosToNextColumn();\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable react/prop-types */\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Checkbox, Toast, Tooltip } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { useDisabled } from '../hooks/disabled';\n\n// import s from './index.module.less';\nimport { TypeEditorColumnConfig, TypeEditorColumnType, TypeEditorRowData } from '../../../types';\nimport { CenterContainer } from './style';\n\nconst setCellValue = (rowData: TypeEditorRowData<IJsonSchema>) => {\n if (!rowData.extra) {\n rowData.extra = {};\n }\n rowData.extra.private = !rowData.extra.private;\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n onChange,\n onEditMode,\n}) => {\n const disabled = useDisabled(TypeEditorColumnType.Required, rowData);\n\n const child = (\n <Checkbox\n disabled={!!disabled}\n checked={!!rowData.extra?.private}\n onChange={() => {\n setCellValue(rowData);\n onChange();\n onEditMode();\n }}\n />\n );\n\n return (\n <CenterContainer onClick={!disabled ? () => onEditMode() : undefined}>\n {disabled ? <Tooltip content={disabled}>{child}</Tooltip> : child}\n </CenterContainer>\n );\n};\n\nexport const privateColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Private,\n label: 'Private',\n width: 11,\n viewRender: ViewRender,\n info: () => 'Private under the current project.',\n shortcuts: {\n onEnter: ({ onChange, rowData, typeEditor }) => {\n setCellValue(rowData);\n onChange();\n typeEditor.moveActivePosToNextLine();\n },\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n\n onCopy: (ctx) => {\n const {\n rowData,\n typeEditor: { clipboard },\n } = ctx;\n\n clipboard.writeData(\n JSON.stringify({\n private: !!rowData.extra?.private,\n })\n );\n\n Toast.success('Copy required success!');\n },\n\n onPaste: (ctx) => {\n const {\n typeEditor: { clipboard, onChange },\n rowData,\n } = ctx;\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data);\n const disabled = (rowData.disableEditColumn || []).find(\n (r) => r.column === TypeEditorColumnType.Private\n );\n if (disabled) {\n Toast.warning('The current cell does not support editing!');\n return;\n }\n if (parseData && typeof parseData === 'object' && parseData.private !== undefined) {\n if (!rowData.extra) {\n rowData.extra = {};\n }\n rowData.extra.private = parseData.private;\n onChange();\n } else {\n Toast.warning('Please paste the correct info!');\n }\n });\n },\n\n onDown: (ctx) => {\n ctx.typeEditor.moveActivePosToNextLine();\n },\n onLeft: (ctx) => {\n ctx.typeEditor.moveActivePosToLastColumn();\n },\n onUp: (ctx) => {\n ctx.typeEditor.moveActivePosToLastLine();\n },\n onRight: (ctx) => {\n ctx.typeEditor.moveActivePosToNextColumn();\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { pick } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport toast from '@douyinfe/semi-ui/lib/es/toast';\nimport { Toast, Tooltip } from '@douyinfe/semi-ui';\nimport { IconCopy, IconCopyAdd, IconDelete } from '@douyinfe/semi-icons';\n\nimport { getComponentId, typeEditorUtils } from '../utils';\nimport { useRemoveType } from '../hooks/type-edit';\nimport { type PasteDataType, usePasteData } from '../hooks/paste-data';\nimport { useHasErrorCell } from '../hooks/error-cell';\nimport { useDisabled } from '../hooks/disabled';\n\n// import s from './index.module.less';\nimport { TypeEditorRowData, TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { ClipboardService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\nimport { BaseIcon, CenterContainer } from './style';\n\nconst pasteTooltipsMap: Record<PasteDataType<IJsonSchema>['type'], string | undefined> = {\n invalid: 'Please confirm whether the clipboard value is correct',\n multiple: 'Multiple fields are not supported to be pasted into this field.',\n single: undefined,\n};\n\nconst setCellValue = (\n rowData: TypeEditorRowData<IJsonSchema>,\n newData: IJsonSchema & {\n extra?: {\n key: string;\n required: boolean;\n };\n },\n onPaste?: (typeSchema?: IJsonSchema) => IJsonSchema | undefined\n): void => {\n const othersProps = pick(rowData.self, ['required', 'description', 'flow', 'extra']);\n\n if (rowData.parent?.properties) {\n const { parent } = rowData;\n // const key = newDat\n if (newData.extra) {\n let { key } = newData.extra;\n const { required } = newData.extra;\n\n // key !== rowData.key 处理重复对某个字段进行 paste\n while (parent.properties![key] && key !== rowData.key) {\n key = `${key}__copy`;\n }\n\n delete parent.properties![rowData.key];\n\n delete newData.extra;\n let newPasteData = {\n ...newData,\n ...othersProps,\n };\n if (onPaste) {\n newPasteData = onPaste(newPasteData) || newPasteData;\n }\n\n parent.properties![key] = newPasteData;\n\n if (!parent.required) {\n parent.required = [];\n }\n\n const idx = parent.required.findIndex((v) => v === rowData.key);\n\n if (idx !== -1) {\n parent.required.splice(idx, 1);\n }\n if (required) {\n parent.required.push(key);\n }\n } else {\n let newPasteData = {\n ...newData,\n ...othersProps,\n };\n if (onPaste) {\n newPasteData = onPaste(newPasteData) || newPasteData;\n }\n parent.properties![rowData.key] = newPasteData;\n }\n }\n};\n\nexport const operateColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Operate,\n label: 'Operate',\n width: 11,\n focusable: false,\n viewRender: ({ rowData, onChange, typeEditor, onPaste }) => {\n const disabled = useDisabled(TypeEditorColumnType.Operate, rowData);\n\n const clipboard = useService<ClipboardService>(ClipboardService);\n\n const { pasteData } = usePasteData();\n\n const typeDefinition = useTypeDefinitionManager();\n\n const hasError = useHasErrorCell(rowData, typeEditor);\n\n const handleRemove = useRemoveType(rowData, onChange);\n\n const pasteErrorTips = pasteTooltipsMap[pasteData.type];\n\n return (\n <CenterContainer>\n <Tooltip content={disabled || 'Remove'}>\n <BaseIcon primary disabled={!!disabled}>\n <IconDelete\n id={getComponentId('remove-field')}\n onClick={disabled ? undefined : handleRemove}\n size=\"small\"\n />\n </BaseIcon>\n </Tooltip>\n <Tooltip\n content={\n hasError\n ? 'The current field is incorrect and does not support copying.'\n : 'Copy this field'\n }\n >\n <BaseIcon primary disabled={!!hasError}>\n <IconCopy\n onClick={() => {\n if (hasError) {\n return;\n }\n const copyData = {\n ...rowData.self,\n extra: {\n key: rowData.key,\n required: rowData.isRequired,\n ...(rowData.self.extra || {}),\n },\n };\n\n clipboard.writeData(JSON.stringify(copyData));\n toast.success('copy this field success!');\n }}\n size=\"small\"\n />\n </BaseIcon>\n </Tooltip>\n <Tooltip\n content={disabled ? disabled : !pasteErrorTips ? 'Paste field here' : pasteErrorTips}\n >\n <BaseIcon primary disabled={!!(pasteErrorTips || disabled)}>\n <IconCopyAdd\n size=\"small\"\n onClick={() => {\n if (pasteErrorTips || disabled) {\n return;\n }\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data) as IJsonSchema;\n\n const originIndex = rowData.extra?.index || 0;\n\n const config = parseData && typeDefinition.getTypeBySchema(parseData);\n if (config && typeof parseData === 'object') {\n typeEditorUtils.fixFlowIndex(parseData);\n parseData.extra!.index = originIndex;\n setCellValue(rowData, parseData as any, onPaste);\n\n onChange();\n } else {\n Toast.warning('Please paste the correct type schema!');\n }\n });\n }}\n />\n </BaseIcon>\n </Tooltip>\n </CenterContainer>\n );\n },\n\n shortcuts: {\n onEnter: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextLine();\n },\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n\n onDown: (ctx) => {\n ctx.typeEditor.moveActivePosToNextLine();\n },\n onLeft: (ctx) => {\n ctx.typeEditor.moveActivePosToLastColumn();\n },\n onUp: (ctx) => {\n ctx.typeEditor.moveActivePosToLastLine();\n },\n onRight: (ctx) => {\n ctx.typeEditor.moveActivePosToNextColumn();\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useCallback } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Toast } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { TypeEditorRowData } from '../../../types';\nimport { TypeEditorService, ClipboardService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\nimport { usePasteData } from './paste-data';\n\nexport const useAddType = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void\n) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const typeService = useTypeDefinitionManager();\n\n const config = typeService.getTypeBySchema(rowData.self);\n\n const handleAddType = useCallback(\n (e: React.MouseEvent) => {\n if (!config) {\n return;\n }\n const currentSchema = rowData.self;\n if (currentSchema) {\n let index = -1;\n\n const parent = config.getPropertiesParent?.(currentSchema);\n\n if (!parent) {\n return false;\n }\n\n if (!parent.properties) {\n parent.properties = {};\n }\n\n Object.values(parent.properties).forEach((val) => {\n if (!val.extra) {\n val.extra = {\n index: 0,\n };\n }\n\n index = Math.max(index, val.extra?.index || 0);\n });\n\n const [key, schema] = typeEditorUtils.genNewTypeSchema(index + 1);\n\n parent.properties[key] = schema as IJsonSchema;\n\n const dataSource = typeEditor.getDataSource();\n\n let addIndex = rowData.index + 1;\n for (let i = rowData.index + 1, len = dataSource.length; i < len; i++) {\n if (dataSource[i].level > rowData.level) {\n addIndex++;\n } else {\n break;\n }\n }\n\n const newPos = {\n x: 0,\n y: addIndex,\n };\n onChange();\n typeEditor.setActivePos(newPos);\n }\n\n e.stopPropagation();\n e.preventDefault();\n },\n [rowData, config, onChange]\n );\n\n return handleAddType;\n};\n\nexport const usePasteAddType = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void,\n onPaste?: (type?: TypeSchema) => TypeSchema | undefined\n) => {\n const typeService = useTypeDefinitionManager();\n\n const clipboard = useService<ClipboardService>(ClipboardService);\n\n const { pasteDataFormate } = usePasteData<TypeSchema>();\n\n const handlePasteAddType = useCallback(\n (e: React.MouseEvent) => {\n clipboard.readData().then((data) => {\n const parseData = pasteDataFormate(data);\n if (parseData.type === 'invalid') {\n Toast.warning('Please paste the correct type schema!');\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n const currentSchema = rowData.self;\n let index = -1;\n const pasteDataItems =\n parseData.type === 'single' ? [parseData.value] : [...parseData.value];\n const config = typeService.getTypeBySchema(currentSchema);\n const parent = config?.getPropertiesParent?.(currentSchema);\n if (!parent) {\n return;\n }\n if (!parent.properties) {\n parent.properties = {};\n }\n Object.values(parent.properties).forEach((val) => {\n if (!val.extra) {\n val.extra = {\n index: 0,\n };\n }\n index = Math.max(index, val.extra.index || 0);\n });\n pasteDataItems.forEach((item) => {\n let itemKey =\n (item as { extra?: { key?: string } })?.extra?.key || typeEditorUtils.genEmptyKey();\n // key !== rowData.key 处理重复对某个字段进行 paste\n while (parent.properties![itemKey]) {\n itemKey = `${itemKey}__copy`;\n }\n if (!(item as { extra?: { value?: unknown } })?.extra?.value) {\n delete (item as { extra?: { value?: string } }).extra;\n }\n item.extra = { index: ++index };\n if (onPaste) {\n item = onPaste(item) || item;\n }\n parent.properties![itemKey] = item as IJsonSchema;\n });\n onChange();\n });\n e.stopPropagation();\n e.preventDefault();\n },\n\n [rowData, onChange]\n );\n\n return handlePasteAddType;\n};\n\nexport const useRemoveType = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void\n) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n return useCallback(() => {\n const { parent } = rowData;\n if (!parent) {\n return;\n }\n const { properties = {} } = parent;\n\n delete properties[rowData.key];\n typeEditorUtils.sortProperties(rowData.parent!);\n\n if (typeEditorService.activePos.y === rowData.index) {\n typeEditorService.clearActivePos();\n }\n typeEditorService.refreshErrorMsgAfterRemove(rowData.index);\n\n onChange();\n }, [onChange, rowData]);\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { typeEditorUtils } from '../utils';\nimport { ClipboardService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\n\nexport type PasteDataType<TypeSchema> =\n | {\n type: 'single';\n value: TypeSchema;\n }\n | {\n type: 'multiple';\n value: TypeSchema[];\n }\n | {\n type: 'invalid';\n };\n\nexport const usePasteData = <TypeSchema extends Partial<IJsonSchema>>() => {\n const clipboard = useService<ClipboardService>(ClipboardService);\n\n const [pasteData, setPasteData] = useState<PasteDataType<TypeSchema>>({\n type: 'invalid',\n });\n\n const typeDefinition = useTypeDefinitionManager();\n\n const pasteDataFormate = useMemo(\n () =>\n (data: string): PasteDataType<TypeSchema> => {\n const parseData = typeEditorUtils.jsonParse(data);\n\n if (!parseData || typeof parseData !== 'object') {\n return {\n type: 'invalid',\n };\n }\n\n if (Array.isArray(parseData)) {\n const isValid = parseData.every((item) => {\n const config = typeDefinition.getTypeBySchema(item);\n return !!config;\n });\n\n if (isValid) {\n return {\n type: 'multiple',\n value: parseData,\n };\n } else {\n return {\n type: 'invalid',\n };\n }\n } else {\n const config = typeDefinition.getTypeBySchema(parseData);\n\n if (config) {\n return {\n type: 'single',\n value: parseData,\n };\n } else {\n return {\n type: 'invalid',\n };\n }\n }\n },\n [typeDefinition]\n );\n\n useEffect(() => {\n clipboard.readData().then(\n (v) => {\n if (v !== undefined) {\n setPasteData(pasteDataFormate(v));\n }\n },\n (error) => {\n // console.log(error);\n }\n );\n\n const dispose = clipboard.onClipboardChanged((newData) => {\n setPasteData(pasteDataFormate(newData));\n });\n\n return () => {\n dispose.dispose();\n };\n }, [pasteDataFormate]);\n\n return {\n pasteDataFormate,\n pasteData,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\nimport { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { useMonitorData } from '../../../utils';\nimport { TypeEditorPos, TypeEditorRowData, TypeEditorColumnConfig } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\nimport { useActivePos } from './active-pos';\n\nexport const useEditCellErrorMsg = (pos: TypeEditorPos): string | undefined => {\n const typeEditor = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n\n const { data: errorMsgs } = useMonitorData(typeEditor.errorMsgs);\n\n const msg = useMemo(\n () => errorMsgs?.find((v) => v.pos.x === pos.x && v.pos.y === pos.y)?.msg,\n [pos, errorMsgs]\n );\n\n return msg;\n};\n\nexport const useViewCellErrorMsg = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n config: TypeEditorColumnConfig<TypeSchema>,\n pos: TypeEditorPos\n) => {\n const activePos = useActivePos();\n\n const res = useMemo(\n () =>\n (activePos.x !== pos.x || activePos.y !== pos.y) && config.validateCell\n ? config.validateCell(rowData, rowData.extraConfig)\n : undefined,\n [rowData, config, activePos, pos]\n );\n\n return res;\n};\n\nexport const useHasErrorCell = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n\n typeEditor: TypeEditorService<TypeSchema>\n): boolean => {\n const res = useMemo(() => {\n const configs = typeEditor.columnViewConfig.map((v) => typeEditor.getConfigByType(v.type));\n\n return (\n configs\n .map((config) =>\n config?.validateCell ? config.validateCell(rowData, rowData.extraConfig) : undefined\n )\n .filter(Boolean).length !== 0\n );\n }, [rowData, typeEditor]);\n\n return res;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\n\nexport const useActivePos = (): TypeEditorService<IJsonSchema>['activePos'] => {\n const typeEditorService = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n\n const [activePos, setActivePos] = useState<{ x: number; y: number }>(typeEditorService.activePos);\n\n useEffect(() => {\n const dispose = typeEditorService.onActivePosChange.event((v) => {\n setActivePos(v);\n });\n return () => {\n dispose.dispose();\n };\n }, []);\n\n return activePos;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable complexity */\n\nimport React, { useEffect, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconCopyAdd, IconHandle, IconPlus, IconTreeTriangleDown } from '@douyinfe/semi-icons';\n\nimport { getComponentId, typeEditorUtils } from '../utils';\nimport { WidthIndent } from '../indent';\nimport { useAddType, usePasteAddType } from '../hooks/type-edit';\nimport { usePasteData } from '../hooks/paste-data';\nimport { useKeyVisible } from '../hooks/key-visible';\nimport { useDisabled } from '../hooks/disabled';\nimport {\n ShortcutContext,\n TypeEditorColumnConfig,\n TypeEditorColumnType,\n TypeEditorRowData,\n} from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport {\n BaseIcon,\n KeyEditorContainer,\n KeyEditorInput,\n KeyViewContainer,\n KeyViewContent,\n KeyViewText,\n} from './style';\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n onEditMode,\n readonly,\n onChange,\n onPaste,\n unOpenKeys,\n onChildrenVisibleChange,\n dragSource,\n}) => {\n const { extraConfig } = rowData;\n\n const typeService = useTypeDefinitionManager();\n\n const config = typeService.getTypeBySchema(rowData.self);\n\n const disabled = useDisabled(TypeEditorColumnType.Key, rowData);\n\n const { hiddenDrag: originHiddenDrag } = extraConfig;\n\n const hiddenDrag = originHiddenDrag || readonly;\n\n const text = (\n <KeyViewText disabled={!!disabled} ellipsis={{ showTooltip: true }}>\n {typeEditorUtils.formateKey(rowData.key)}\n </KeyViewText>\n );\n\n const visibleNode = useKeyVisible(rowData, onChange, extraConfig);\n\n const handleAddType = useAddType(rowData, onChange);\n\n const draggable = !(rowData.cannotDrag || disabled || hiddenDrag);\n\n const { pasteData } = usePasteData();\n const handlePasteAddType = usePasteAddType(rowData, onChange, onPaste);\n\n if (config && config.canAddField?.(rowData)) {\n const disabledAdd = extraConfig.disabledAdd ? extraConfig.disabledAdd(rowData) : undefined;\n\n return (\n <KeyViewContainer\n id={getComponentId('key-text')}\n onClick={\n disabled\n ? undefined\n : () => {\n onEditMode();\n }\n }\n >\n {!hiddenDrag && (\n <BaseIcon draggable disabled={!draggable}>\n <IconHandle ref={draggable ? dragSource : undefined} />\n </BaseIcon>\n )}\n\n <WidthIndent width={rowData.level * 16} />\n <KeyViewContent>\n {rowData.childrenCount ? (\n <BaseIcon triangle isRotate={!unOpenKeys[rowData.id]}>\n <IconTreeTriangleDown\n size=\"small\"\n onClick={(e) => {\n onChildrenVisibleChange(rowData.id, !unOpenKeys[rowData.id]);\n e.stopPropagation();\n }}\n />\n </BaseIcon>\n ) : (\n <WidthIndent width={12} />\n )}\n\n {disabled ? (\n <div style={{ flex: 1 }}>\n <Tooltip content={disabled}>{text}</Tooltip>\n </div>\n ) : (\n text\n )}\n\n {!readonly && (\n <>\n {disabledAdd ? (\n <Tooltip content={disabledAdd}>\n <BaseIcon disabled>\n <IconPlus id={getComponentId('add-field')} size=\"small\" />\n </BaseIcon>\n </Tooltip>\n ) : (\n <Tooltip content=\"add child field\">\n <BaseIcon>\n <IconPlus\n size=\"small\"\n onClick={handleAddType}\n id={getComponentId('add-field')}\n />\n </BaseIcon>\n </Tooltip>\n )}\n {disabledAdd || pasteData.type === 'invalid' ? (\n <Tooltip\n content={disabledAdd || 'Please confirm whether the clipboard value is correct'}\n >\n <BaseIcon disabled>\n <IconCopyAdd size=\"small\" />\n </BaseIcon>\n </Tooltip>\n ) : (\n <Tooltip content=\"paste as new child fields\">\n <BaseIcon>\n <IconCopyAdd size=\"small\" onClick={handlePasteAddType} />\n </BaseIcon>\n </Tooltip>\n )}\n </>\n )}\n\n {extraConfig.editorVisible && visibleNode}\n </KeyViewContent>\n </KeyViewContainer>\n );\n }\n\n return (\n <KeyViewContainer\n id={getComponentId('key-text')}\n onClick={\n disabled\n ? undefined\n : () => {\n onEditMode();\n }\n }\n >\n {!hiddenDrag && (\n <BaseIcon draggable disabled={!draggable}>\n <IconHandle ref={draggable ? dragSource : undefined} />\n </BaseIcon>\n )}\n\n <WidthIndent width={(rowData.level + 1) * 16} />\n <KeyViewContent>\n {disabled ? <Tooltip content={disabled}>{text}</Tooltip> : text}\n {extraConfig.editorVisible && visibleNode}\n </KeyViewContent>\n </KeyViewContainer>\n );\n};\n\nconst validate = (value: string, rowData: TypeEditorRowData<IJsonSchema>): string | undefined => {\n const res = rowData.extraConfig?.customValidateName?.(value);\n\n const lastValue = rowData.key;\n\n const parentTypeSchema = rowData.parent;\n\n if (value !== lastValue && parentTypeSchema?.properties?.[value]) {\n return 'The same key exists at the current level.';\n }\n if (res) {\n return res;\n }\n};\n\nconst changeValue = ({\n rowData,\n value,\n}: {\n rowData: TypeEditorRowData<IJsonSchema>;\n value: string;\n}) => {\n const lastValue = rowData.key;\n\n const parentTypeSchema = rowData.parent;\n\n if (value !== lastValue) {\n if (parentTypeSchema && parentTypeSchema.properties) {\n parentTypeSchema.properties[value] = parentTypeSchema.properties[lastValue];\n }\n\n if (parentTypeSchema?.properties) {\n delete parentTypeSchema.properties[lastValue];\n }\n }\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onError,\n onFieldChange,\n onViewMode,\n}) => {\n const [value, setValue] = useState(typeEditorUtils.formateKey(rowData.key));\n\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n return (\n <KeyEditorContainer>\n <WidthIndent\n style={{ background: 'var(--semi-color-fill-0)' }}\n width={\n (rowData.level + 2) * 14 +\n (2 * rowData.level - 1) +\n (rowData.extraConfig.hiddenDrag ? -16 : 0)\n }\n />\n <KeyEditorInput\n id={getComponentId('key-edit')}\n onChange={(v) => {\n setValue(v);\n typeEditor.dataSourceTouchedMap[rowData.id] = true;\n const res = validate(v, rowData);\n typeEditor.setErrorMsg(typeEditor.activePos, res);\n if (onError) {\n onError(res ? [res] : []);\n }\n }}\n autoFocus\n onBlur={(e) => {\n const oldValue = rowData.key;\n\n if (value && validate(value, rowData)) {\n typeEditor.blink.update(true);\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n\n const newVal = typeEditorUtils.deFormateKey(value, oldValue);\n\n changeValue({ rowData, value: newVal });\n\n onFieldChange &&\n onFieldChange({\n type: TypeEditorColumnType.Key,\n oldValue,\n newValue: newVal,\n });\n\n if (onError) {\n onError([]);\n }\n onChange();\n onViewMode();\n }}\n value={value}\n />\n </KeyEditorContainer>\n );\n};\n\nconst dealMove = (\n { rowData, value, onChange, typeEditor }: ShortcutContext<IJsonSchema>,\n cb: () => void\n) => {\n const validateRes = validate(value, rowData);\n if (value && validateRes) {\n typeEditor.blink.update(true);\n } else {\n changeValue({\n value: typeEditorUtils.deFormateKey(value),\n rowData,\n });\n typeEditor.setErrorMsg(typeEditor.activePos);\n onChange();\n cb();\n }\n};\n\nexport const keyColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Key,\n label: 'Key',\n viewRender: ViewRender,\n width: 43,\n validateCell: (rowData, ctx) => {\n const key = typeEditorUtils.formateKey(rowData.key);\n if (!key) {\n return {\n level: 'warning',\n msg: 'Empty lines will not be saved.',\n };\n }\n\n if (ctx.customValidateName) {\n const customValidateRes = ctx.customValidateName(key);\n if (customValidateRes) {\n return {\n level: 'error',\n msg: customValidateRes,\n };\n }\n return;\n }\n\n if (validate(key, rowData)) {\n return {\n level: 'error',\n msg: validate(key, rowData),\n };\n }\n },\n shortcuts: {\n onEnter: (ctx) => {\n dealMove(ctx, () => {\n ctx.typeEditor.moveActivePosToNextLineWithAddLine(ctx.rowData);\n });\n },\n onTab: (ctx) => {\n dealMove(ctx, () => {\n ctx.typeEditor.moveActivePosToNextItem();\n });\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\nimport { type CSSProperties, type FC } from 'react';\n\nexport const Indent: FC<{\n count: number;\n style?: CSSProperties;\n}> = ({ count, style = {} }) => <div style={{ height: '100%', width: count * 12, ...style }} />;\n\nexport const WidthIndent: FC<{\n width: number;\n style?: CSSProperties;\n}> = ({ width, style = {} }) => <div style={{ height: '100%', flexShrink: 0, width, ...style }} />;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useCallback } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconEyeClosed, IconEyeOpened } from '@douyinfe/semi-icons';\n\nimport { BaseIcon } from '../columns/style';\nimport { TypeEditorRowData, TypeEditorSpecialConfig, TypeEditorColumnType } from '../../../types';\nimport { useDisabled } from './disabled';\n\nexport const useKeyVisible = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void,\n extraConfig: TypeEditorSpecialConfig<TypeSchema>\n): React.JSX.Element => {\n const disabled = useDisabled(TypeEditorColumnType.Key, rowData);\n\n const handleVisibleChange = useCallback(\n (e: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n const currentSchema = rowData.self;\n\n if (!currentSchema.extra) {\n currentSchema.extra = {};\n }\n\n currentSchema.extra.hidden = !currentSchema.extra.hidden;\n onChange();\n\n e.stopPropagation();\n e.preventDefault();\n },\n [rowData.self, onChange]\n );\n\n const disableContent =\n disabled || typeof extraConfig.editorVisible === 'string'\n ? disabled || extraConfig.editorVisible\n : undefined;\n\n const visibleNode = (\n <>\n {disableContent ? (\n <Tooltip content={disableContent}>\n <BaseIcon disabled>\n <IconEyeOpened size=\"small\" />\n </BaseIcon>\n </Tooltip>\n ) : rowData.extra?.hidden ? (\n <BaseIcon>\n <IconEyeClosed onClick={handleVisibleChange} size=\"small\" />\n </BaseIcon>\n ) : (\n <BaseIcon>\n <IconEyeOpened onClick={handleVisibleChange} size=\"small\" />\n </BaseIcon>\n )}\n </>\n );\n\n return extraConfig.editorVisible ? visibleNode : <></>;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\n\nimport { useDisabled } from '../hooks';\nimport { TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { KeyEditorContainer, KeyEditorInput, KeyViewContainer, KeyViewText } from './style';\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({ rowData, onEditMode }) => {\n const disabled = useDisabled(TypeEditorColumnType.Description, rowData);\n\n if (disabled) {\n return (\n <KeyViewContainer disabled>\n <Tooltip content={disabled}>\n <KeyViewText>{rowData.description}</KeyViewText>\n </Tooltip>\n </KeyViewContainer>\n );\n }\n\n return (\n <KeyViewContainer onClick={() => onEditMode()}>\n <KeyViewText>{rowData.description}</KeyViewText>\n </KeyViewContainer>\n );\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const [value, setValue] = useState(rowData.description);\n\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n useEffect(() => {\n setValue(rowData.description);\n }, [rowData.description]);\n\n return (\n <KeyEditorContainer>\n <KeyEditorInput\n onChange={setValue}\n autoFocus\n onBlur={() => {\n const { self } = rowData;\n self.description = value;\n onChange();\n\n onViewMode();\n }}\n value={value}\n />\n </KeyEditorContainer>\n );\n};\n\nexport const descriptionColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Description,\n width: 15,\n label: 'Description',\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.description = value;\n onChange();\n typeEditor.moveActivePosToNextLineWithAddLine(rowData);\n },\n onTab: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.description = value;\n onChange();\n typeEditor.moveActivePosToNextItem();\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorProp } from '../type';\nimport { columnConfigs } from '../columns';\nimport { TypeEditorColumnConfig } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\nimport { useTypeEditorHotKey } from './hot-key';\n\nexport const TypeEditorListener = <TypeSchema extends Partial<IJsonSchema>>({\n configs = [],\n children,\n}: React.PropsWithChildren & {\n configs: TypeEditorProp<'type-definition', TypeSchema>['viewConfigs'];\n}) => {\n const dom = useRef();\n\n const lastWidth = useRef(0);\n\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const [init, setInit] = useState(false);\n\n useEffect(() => {\n if (dom.current) {\n const el = dom.current;\n\n const resize = new ResizeObserver((entries) => {\n if (lastWidth.current === 0) {\n lastWidth.current = entries[0].contentRect.width;\n }\n if (entries[0].contentRect.width !== lastWidth.current) {\n typeEditorService.clearActivePos();\n }\n });\n\n resize.observe(el);\n return () => {\n resize.unobserve(el);\n };\n }\n }, [dom.current, typeEditorService]);\n\n useEffect(() => {\n typeEditorService.registerConfigs(\n columnConfigs as unknown as TypeEditorColumnConfig<TypeSchema>[]\n );\n\n configs.forEach(\n (config) => config.config && typeEditorService.addConfigProps(config.type, config.config)\n );\n\n setInit(true);\n }, [typeEditorService, configs]);\n\n const composition = useRef(false);\n\n const hotkeys = useTypeEditorHotKey();\n\n return (\n <div\n style={{ width: '100%' }}\n onCompositionStart={() => (composition.current = true)}\n onCompositionEnd={() => (composition.current = false)}\n onKeyDown={(e) => {\n if (composition.current) return;\n const hotKey = hotkeys.find((item) => item.matcher(e));\n hotKey?.callback();\n if (hotKey?.preventDefault) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n ref={dom as unknown as React.LegacyRef<HTMLDivElement>}\n >\n {init && children}\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorOperationService, TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\n\ninterface HotKeyConfig {\n matcher: (event: React.KeyboardEvent) => boolean;\n callback: () => void;\n preventDefault?: boolean;\n}\n\nexport const useTypeEditorHotKey = () => {\n const typeEditor = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n const operator = useService<TypeEditorOperationService<IJsonSchema>>(TypeEditorOperationService);\n\n const hotKeyConfig: HotKeyConfig[] = useMemo(() => {\n const res: HotKeyConfig[] = [\n {\n matcher: (e) => e.key === 'Enter',\n callback: () => {\n typeEditor.triggerShortcutEvent('enter');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowUp',\n callback: () => {\n typeEditor.triggerShortcutEvent('up');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'Tab',\n callback: () => {\n typeEditor.triggerShortcutEvent('tab');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowLeft',\n callback: () => {\n typeEditor.triggerShortcutEvent('left');\n },\n },\n {\n matcher: (e) => e.key === 'ArrowRight',\n callback: () => {\n typeEditor.triggerShortcutEvent('right');\n },\n },\n {\n matcher: (e) => e.key === 'ArrowDown',\n callback: () => {\n typeEditor.triggerShortcutEvent('down');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.key === 'c',\n callback: () => {\n typeEditor.triggerShortcutEvent('copy');\n },\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.key === 'v',\n callback: () => {\n typeEditor.triggerShortcutEvent('paste');\n },\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.key === 'z',\n callback: () => {\n operator.undo();\n },\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.shiftKey && e.key === 'z',\n callback: () => {\n operator.redo();\n },\n },\n ];\n\n return res;\n }, [typeEditor]);\n\n return hotKeyConfig;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\n\nimport { useDrag, useDrop } from 'react-dnd';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Toast } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { TypeEditorRowData } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\n\nexport const useRowDrag = (\n id: string,\n onChildrenVisibleChange: (rowDataId: string, newVal: boolean) => void\n) => {\n const [{ isDragging }, drag, preview] = useDrag(\n () => ({\n type: 'node-editor-dnd',\n item: () => {\n onChildrenVisibleChange(id, true);\n return {\n id,\n };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n }),\n [id]\n );\n\n return {\n drag,\n isDragging,\n preview,\n };\n};\n\ninterface DragItem {\n id: string;\n}\n\nexport const useCellDrop = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n index: number,\n dataSource: Record<string, TypeEditorRowData<TypeSchema>>,\n onChange: () => void\n) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const typeService = useTypeDefinitionManager();\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'node-editor-dnd',\n drop: (item: DragItem) => {\n if (item.id === rowData.id) {\n typeEditor.clearDropInfo();\n return;\n }\n\n const dragData = dataSource[item.id];\n\n const definition = typeService.getTypeBySchema(rowData.self);\n\n if (definition) {\n const canHasChild = definition.canAddField?.(rowData.self);\n\n let dropParent: IJsonSchema;\n let dropIndex: number;\n if (canHasChild) {\n dropParent = definition.getPropertiesParent?.(rowData.self)! as IJsonSchema;\n dropIndex = -1;\n } else {\n dropParent = rowData.parent! as IJsonSchema;\n dropIndex = (rowData.extra?.index || 0) + 0.1;\n }\n\n if (dropParent?.properties?.[dragData.key] && dropParent !== dragData.parent) {\n Toast.error('drop error: there is a duplicate key in the current object');\n typeEditor.clearDropInfo();\n\n return;\n }\n\n // 删除原来的引用\n if (dragData.parent?.properties) {\n delete dragData.parent.properties[dragData.key];\n }\n\n // 添加到新的节点\n if (!dropParent.properties) {\n dropParent.properties = {};\n }\n dropParent.properties[dragData.key] = dragData.self as IJsonSchema;\n typeEditorUtils.fixFlowIndex(dragData);\n dragData.extra!.index = dropIndex;\n\n // 分别重新 sort dropParent 和 dragParent\n typeEditorUtils.sortProperties(dropParent);\n typeEditorUtils.sortProperties(dragData.parent!);\n onChange();\n }\n\n typeEditor.clearDropInfo();\n },\n hover() {\n typeEditor.setDropInfo({\n indent: rowData.level,\n index,\n rowDataId: rowData.id,\n });\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [rowData]\n );\n\n return {\n drop,\n isOver,\n };\n};\n\nexport const useHeaderDrop = <TypeSchema extends Partial<IJsonSchema>>(\n root: TypeSchema,\n dataSource: Record<string, TypeEditorRowData<TypeSchema>>,\n onChange: () => void\n) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const typeService = useTypeDefinitionManager();\n\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'node-editor-dnd',\n drop: (item: DragItem) => {\n const dragData = dataSource[item.id];\n\n const definition = typeService.getTypeBySchema(root);\n\n if (definition) {\n const canHasChild = definition.canAddField(root);\n\n let dropParent: IJsonSchema;\n let dropIndex: number;\n if (canHasChild) {\n dropParent = definition.getPropertiesParent(root)! as IJsonSchema;\n dropIndex = -1;\n\n if (dropParent?.properties?.[dragData.key] && dropParent !== dragData.parent) {\n Toast.error('drop error: there is a duplicate key in the current object');\n typeEditor.clearDropInfo();\n\n return;\n }\n\n // 删除原来的引用\n if (dragData.parent?.properties) {\n delete dragData.parent.properties[dragData.key];\n }\n\n // 添加到新的节点\n if (!dropParent.properties) {\n dropParent.properties = {};\n }\n dropParent.properties[dragData.key] = dragData.self as IJsonSchema;\n typeEditorUtils.fixFlowIndex(dragData);\n dragData.extra!.index = dropIndex;\n\n // 分别重新 sort dropParent 和 dragParent\n typeEditorUtils.sortProperties(dropParent);\n typeEditorUtils.sortProperties(dragData.parent!);\n onChange();\n }\n\n typeEditor.clearDropInfo();\n }\n },\n hover() {\n typeEditor.setDropInfo({\n indent: 0,\n index: -1,\n rowDataId: 'header',\n });\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [root]\n );\n\n return {\n drop,\n isOver,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip, Typography } from '@douyinfe/semi-ui';\n\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeEditorColumnConfig, TypeEditorColumnType, TypeEditorRowData } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport {\n GlobalSelectStyle,\n KeyEditorContainer,\n KeyViewContainer,\n TypeTextContainer,\n} from './style';\n\nconst useFormatValue = ({\n rowData,\n onChange,\n typeEditor,\n}: {\n rowData: TypeEditorRowData<IJsonSchema>;\n typeEditor: TypeEditorService<IJsonSchema>;\n onChange: () => void;\n}) => {\n const valueRef = useRef(rowData.self.default);\n const [value, setValue] = useState(rowData.self.default);\n\n const typeDefinition = useTypeDefinitionManager();\n\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n useEffect(() => {\n setValue(rowData.self.default);\n valueRef.current = rowData.self.default;\n }, [rowData.self.default]);\n\n const handleSubmit = useCallback(() => {\n rowData.self.default = valueRef.current;\n\n const config = typeDefinition.getTypeBySchema(rowData.self);\n\n if (config?.formatDefault) {\n config.formatDefault(valueRef.current, rowData.self);\n }\n\n const parenConfig = rowData.parent && typeDefinition.getTypeBySchema(rowData.parent);\n\n if (parenConfig?.formatDefault) {\n parenConfig.formatDefault(valueRef.current, rowData.parent!);\n }\n\n onChange();\n\n // onViewMode();\n }, [onChange, rowData, typeDefinition]);\n\n const deFormatValue = useMemo(() => {\n const config = typeDefinition.getTypeBySchema(rowData.self);\n return config?.deFormatDefault ? config.deFormatDefault(value) : value;\n }, [value, rowData]);\n\n const handleChange = useCallback((v: unknown) => {\n valueRef.current = v;\n setValue(v);\n }, []);\n\n return {\n handleChange,\n handleSubmit,\n deFormatValue,\n };\n};\n\nexport const TypeText = <TypeSchema extends Partial<IJsonSchema>>({\n value,\n type,\n}: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value?: any;\n type: TypeSchema;\n}) => {\n const typeDefinition = useTypeDefinitionManager();\n\n const content = useMemo(() => {\n const config = typeDefinition.getTypeBySchema(type);\n\n return config?.getValueText ? config.getValueText(value) : value;\n }, [value, type]);\n\n return (\n <TypeTextContainer>\n <Typography.Text ellipsis={{ showTooltip: true }}>{content}</Typography.Text>\n </TypeTextContainer>\n );\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n typeEditor,\n onEditMode,\n onChange,\n}) => {\n const disabled = useDisabled(TypeEditorColumnType.Default, rowData);\n\n const typeDefinition = useTypeDefinitionManager();\n const { defaultMode = 'default' } = rowData.extraConfig;\n\n const { customDefaultView } = rowData.extraConfig;\n\n const { deFormatValue, handleChange, handleSubmit } = useFormatValue({\n rowData,\n onChange,\n typeEditor,\n });\n\n const customNode =\n customDefaultView &&\n customDefaultView({\n rowData,\n disabled,\n value: deFormatValue,\n onChange: handleChange,\n onSubmit: (v) => {\n handleChange(v);\n handleSubmit();\n },\n });\n\n if (customNode) {\n return <> {customNode}</>;\n }\n\n if (disabled) {\n return (\n <KeyViewContainer disabled>\n <Tooltip content={disabled}>\n <div style={{ width: '100%', height: '100%' }}>\n <TypeText value={deFormatValue} type={rowData.self} />\n </div>\n </Tooltip>\n </KeyViewContainer>\n );\n }\n\n if (defaultMode === 'server') {\n const config = typeDefinition.getTypeBySchema(rowData.self);\n\n return (\n <Tooltip content=\"The default value is not allowed to be modified.\">\n <KeyViewContainer disabled>\n <Typography.Text>{JSON.stringify(config?.getDefaultValue?.())}</Typography.Text>\n </KeyViewContainer>\n </Tooltip>\n );\n }\n\n return (\n <KeyViewContainer onClick={() => onEditMode()}>\n <TypeText value={deFormatValue} type={rowData.self} />\n </KeyViewContainer>\n );\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const { deFormatValue, handleChange, handleSubmit } = useFormatValue({\n rowData,\n onChange,\n typeEditor,\n });\n\n const typeDefinition = useTypeDefinitionManager();\n const config = useMemo(() => typeDefinition.getTypeBySchema(rowData.self), [rowData.self]);\n return (\n <KeyEditorContainer>\n <GlobalSelectStyle />\n {config &&\n config?.getInputNode?.({\n value: deFormatValue,\n onChange: handleChange,\n type: rowData.self,\n onSubmit: () => {\n handleSubmit();\n onViewMode();\n },\n })}\n </KeyEditorContainer>\n );\n};\n\nexport const defaultColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Default,\n width: 15,\n label: 'Default',\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ rowData, onChange, typeEditor, value, typeDefinitionService }) => {\n const config = typeDefinitionService.getTypeBySchema(rowData.self);\n if (config?.typeInputConfig?.canEnter) {\n rowData.self.default = value;\n\n onChange();\n\n typeEditor.moveActivePosToNextLineWithAddLine(rowData);\n }\n },\n onTab: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.default = value;\n onChange();\n typeEditor.moveActivePosToNextItem();\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { valueColumnConfig } from './value';\nimport { typeColumnConfig } from './type';\nimport { requiredColumnConfig } from './required';\nimport { privateColumnConfig } from './private';\nimport { operateColumnConfig } from './operate';\nimport { keyColumnConfig } from './key';\nimport { descriptionColumnConfig } from './description';\nimport { defaultColumnConfig } from './default';\n\nexport const columnConfigs = [\n keyColumnConfig,\n typeColumnConfig,\n requiredColumnConfig,\n descriptionColumnConfig,\n privateColumnConfig,\n valueColumnConfig,\n defaultColumnConfig,\n operateColumnConfig,\n];\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useImperativeHandle, useState } from 'react';\n\nimport { noop } from 'lodash-es';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space } from '@douyinfe/semi-ui';\n\nimport { fixedTSForwardRef } from './utils';\nimport { TypeEditorTable } from './type-editor';\nimport { TypeEditorMode, TypeEditorProp, TypeEditorRef } from './type';\nimport { ToolBar } from './tool-bar';\nexport * from './type';\nexport { columnConfigs as TypeEditorColumnConfigs } from './columns';\n\nconst TypeEditorContainer = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>(\n props: TypeEditorProp<Mode, TypeSchema>,\n ref: React.Ref<TypeEditorRef<Mode, TypeSchema>>\n) => {\n const [instance, setInstance] = useState<TypeEditorRef<Mode, TypeSchema>>();\n\n useImperativeHandle(ref, () => ({\n getContainer: () => instance?.getContainer(),\n setValue: instance?.setValue || noop,\n getService: instance?.getService || (() => undefined),\n undo: instance?.undo || noop,\n redo: instance?.redo || noop,\n getValue() {\n return instance?.getValue();\n },\n getOperator() {\n return instance?.getOperator();\n },\n }));\n\n return (\n <Space spacing={4} vertical>\n {instance && <ToolBar {...props} editor={instance} />}\n <TypeEditorTable\n onInit={(editor) => {\n setInstance(editor.current);\n }}\n {...props}\n />\n </Space>\n );\n};\n\nexport const TypeEditor = fixedTSForwardRef(TypeEditorContainer);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport styled from 'styled-components';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorProvider } from '../../contexts';\nimport { type TypeEditorMode, type TypeEditorProp } from './type';\nimport { Table } from './table';\nimport { TypeEditorListener } from './hooks';\n\nconst Container = styled.div`\n position: relative;\n\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n outline: none;\n\n table {\n table-layout: fixed;\n }\n`;\n\nexport const TypeEditorTable = <\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n>(\n props: TypeEditorProp<Mode, TypeSchema>\n) => (\n <TypeEditorProvider typeRegistryCreators={props.typeRegistryCreators}>\n <TypeEditorListener configs={props.viewConfigs}>\n <Container>\n <Table {...props} />\n </Container>\n </TypeEditorListener>\n </TypeEditorProvider>\n);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\n/* eslint-disable complexity */\n\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { DndProvider } from 'react-dnd';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport React from 'react';\n\nimport { isEqual } from 'lodash-es';\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space } from '@douyinfe/semi-ui';\n\nimport { TypeEditorRowData, TypeEditorColumnType } from '../../types';\nimport { TypeEditorOperationService, TypeEditorService } from '../../services';\nimport { TypeRegistryCreatorsAdapter, useService, useTypeDefinitionManager } from '../../contexts';\nimport { fixedTSForwardRef, typeEditorUtils } from './utils';\nimport { type TypeEditorMode, type TypeEditorProp, TypeEditorRef } from './type';\nimport { EditorTable } from './style';\nimport { useFormatter } from './hooks/formatter-value';\nimport { useActivePos } from './hooks';\nimport { Header } from './header';\nimport { DropTip } from './drop-tip';\nimport { ROOT_FIELD_ID } from './common';\nimport { EditCell } from './cell';\nimport { Body } from './body';\n\nconst TableInner = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n value,\n onChange,\n mode,\n viewConfigs,\n onInit,\n forceUpdate,\n onEditRowDataSource,\n rootLevel = 0,\n customEmptyNode,\n tableClassName,\n onError,\n disableEditColumn,\n readonly,\n onPaste,\n typeRegistryCreators,\n onFieldChange,\n getRootSchema,\n onCustomSetValue,\n extraConfig: originExtraConfig = {},\n}: TypeEditorProp<Mode, TypeSchema>) => {\n const extraConfig = useMemo(\n () => ({\n ...originExtraConfig,\n }),\n [originExtraConfig]\n );\n\n const { deFormatter, formatter } = useFormatter<Mode, TypeSchema>({\n mode,\n extraConfig,\n });\n\n const typeSchema = useMemo(() => formatter(value), [formatter, value]);\n\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n const typeOperator = useService<TypeEditorOperationService<TypeSchema>>(\n TypeEditorOperationService\n );\n\n const [tableDom, setTableDom] = useState<HTMLTableElement>();\n\n const [initialSchema, setInitialSchema] = useState<TypeSchema>(() => {\n const res = typeEditorUtils.clone(typeSchema) || typeEditorUtils.getInitialSchema<TypeSchema>();\n\n typeOperator.storeState(res);\n\n return res;\n });\n\n // const\n const editor = useRef<TypeEditorRef<Mode, TypeSchema>>();\n\n useEffect(() => {\n // editor\n const instance: TypeEditorRef<Mode, TypeSchema> = {\n getService: () => typeEditor,\n setValue(originNewVal) {\n let newVal = originNewVal;\n\n if (onCustomSetValue) {\n newVal = onCustomSetValue(newVal);\n }\n\n const newSchema = formatter(newVal)!;\n\n setInitialSchema(newSchema);\n\n typeOperator.storeState(newSchema);\n\n const final = typeEditorUtils.formateTypeSchema<TypeSchema>(newSchema, extraConfig);\n\n const newValue = deFormatter(final)!;\n\n if (onChange) {\n onChange(newValue);\n }\n },\n getContainer: () => tableDom,\n getValue: () => {\n const rootValue = deFormatter(typeEditor.rootTypeSchema);\n\n return rootValue;\n },\n undo: () => {\n typeOperator.undo();\n typeEditor.onChange(typeOperator.getCurrentState(), {\n storeState: false,\n });\n },\n redo: () => {\n typeOperator.redo();\n typeEditor.onChange(typeOperator.getCurrentState(), {\n storeState: false,\n });\n },\n getOperator() {\n return typeOperator;\n },\n };\n editor.current = instance;\n }, [typeEditor, onChange, tableDom, deFormatter, formatter, extraConfig, onCustomSetValue]);\n\n useEffect(() => {\n onInit?.(editor);\n }, [onInit]);\n\n /**\n * 当前 rowData 的 children 是否不可见\n * 定义为不可见的原因:默认可见\n */\n const [unOpenKeys, setUnOpenKeys] = useState<Record<string, boolean>>({});\n\n useEffect(() => {\n if (\n !isEqual(typeSchema, initialSchema) &&\n typeSchema &&\n (forceUpdate || !typeEditorUtils.isTempState(initialSchema, extraConfig?.customValidateName))\n ) {\n setInitialSchema(typeEditorUtils.clone(typeSchema));\n }\n }, [typeSchema, extraConfig?.customValidateName]);\n\n const typeService = useTypeDefinitionManager();\n\n const displayColumn = useMemo(\n () => viewConfigs.filter((v) => v.visible).map((v) => v.type),\n [viewConfigs]\n );\n\n const { dataSource } = useMemo(() => {\n const res: TypeEditorRowData<TypeSchema>[] = [];\n let index = -1;\n\n const dfs = (\n schema: TypeSchema,\n config: {\n level: number;\n parentId?: string;\n key?: string;\n parent?: TypeSchema;\n canDefaultEditable?: true | string;\n canValueEditable?: true | string;\n path: string[];\n }\n ): void => {\n const {\n parentId,\n level = -1,\n key = ROOT_FIELD_ID,\n path,\n parent,\n canValueEditable = true,\n canDefaultEditable = true,\n } = config;\n\n const id = [parentId, key || new Date().valueOf().toString()].join('-');\n\n const typeConfig = typeService.getTypeBySchema(schema);\n\n const uid = parentId ? id : key;\n\n const rowData: TypeEditorRowData<TypeSchema> = {\n ...schema,\n key,\n index,\n id: uid,\n level,\n self: schema,\n parentId,\n parent,\n deepChildrenCount: 0,\n isRequired: (parent?.required || []).includes(key),\n childrenCount: 0,\n disableEditColumn: [...(disableEditColumn || [])],\n path,\n extraConfig: { ...extraConfig },\n };\n\n index += 1;\n\n typeEditor.dataSourceMap[rowData.id] = rowData;\n\n res.push(rowData);\n\n const customDefaultValidate =\n extraConfig.customDefaultEditable && extraConfig.customDefaultEditable(rowData);\n\n if (typeof customDefaultValidate === 'string') {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: customDefaultValidate,\n });\n }\n\n if (typeof canDefaultEditable === 'string' && level > rootLevel) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: canDefaultEditable,\n });\n }\n\n if (typeof canValueEditable === 'string' && level > rootLevel) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Value,\n reason: canValueEditable,\n });\n }\n\n if (typeConfig) {\n const children =\n typeConfig.getTypeSchemaProperties && typeConfig.getTypeSchemaProperties(schema);\n\n const childrenParent =\n typeConfig.getPropertiesParent && typeConfig.getPropertiesParent(schema);\n const childrenParentConfig = childrenParent && typeService.getTypeBySchema(childrenParent);\n\n if (\n !extraConfig.customDefaultEditable &&\n typeof childrenParentConfig?.defaultEditable === 'string'\n ) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: childrenParentConfig?.defaultEditable,\n });\n }\n\n if (children) {\n const originLen = res.length;\n rowData.childrenCount = Object.keys(children).length;\n\n // 如果不可见,不加子节点\n if (unOpenKeys[uid]) {\n return;\n }\n\n const parentPath = [...path, ...(typeConfig.getJsonPaths?.(schema) || [])];\n\n let idx = 0;\n\n const childCanValueEditable = typeConfig?.childrenValueEditable?.(schema);\n\n Object.keys(children)\n .map((k) => {\n // 对不存在 index 的数据先进行修正,填上默认值\n typeEditorUtils.fixFlowIndex(children[k], idx);\n idx++;\n return k;\n })\n .sort((k1, k2) => (children[k1].extra?.index || 0) - (children[k2].extra?.index || 0))\n .forEach((k) => {\n const canDefaultEditableFromParent = typeConfig.childrenDefaultEditable?.(schema);\n\n dfs(children[k] as unknown as TypeSchema, {\n key: k,\n parentId: id,\n parent: childrenParent as unknown as TypeSchema,\n level: level + 1,\n path: [...parentPath, k],\n canDefaultEditable:\n typeof canDefaultEditableFromParent === 'string'\n ? canDefaultEditableFromParent\n : canDefaultEditable,\n canValueEditable: childCanValueEditable,\n });\n });\n\n rowData.deepChildrenCount = res.length - originLen;\n } else {\n if (\n !extraConfig.customDefaultEditable &&\n typeof typeConfig?.defaultEditable === 'string'\n ) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: typeConfig?.defaultEditable,\n });\n }\n }\n }\n };\n\n if (initialSchema) {\n dfs(initialSchema, { level: -1, path: [] });\n // 不展示 root\n res.shift();\n\n const newData = onEditRowDataSource ? onEditRowDataSource(res) : res;\n\n typeEditor.setDataSource(newData);\n\n return {\n dataSource: newData,\n };\n }\n\n return {\n dataSource: [],\n };\n }, [initialSchema, disableEditColumn, unOpenKeys, onEditRowDataSource]);\n\n const activePos = useActivePos();\n\n useEffect(() => {\n typeEditor.rootTypeSchema = initialSchema;\n }, [initialSchema]);\n\n /**\n * 修改单行数据\n */\n const handleTypeSchemaChange = useCallback(\n (\n type?: TypeSchema,\n ctx: {\n storeState?: boolean;\n } = {}\n ) => {\n const { storeState = true } = ctx;\n\n const newSchema = JSON.parse(JSON.stringify(type || initialSchema)) as TypeSchema;\n\n setInitialSchema({ ...newSchema });\n\n const final = typeEditorUtils.formateTypeSchema(newSchema, extraConfig);\n\n if (storeState) {\n typeOperator.storeState(newSchema);\n }\n\n const newValue = deFormatter(final)!;\n\n if (onChange) {\n onChange(newValue);\n }\n },\n [initialSchema, deFormatter, extraConfig]\n );\n\n /**\n * 添加新数据\n */\n const handleRowDataAdd = useCallback(\n (id: string) => {\n const rowData = typeEditor.dataSourceMap[id];\n\n const currentSchema = rowData.self;\n\n const config = typeService.getTypeBySchema(rowData.self);\n\n if (currentSchema && config) {\n let index = -1;\n const parent = config.getPropertiesParent?.(currentSchema);\n if (!parent) {\n return;\n }\n if (!parent.properties) {\n parent.properties = {};\n }\n\n Object.values(parent.properties).forEach((val) => {\n if (!val.extra) {\n val.extra = {\n index: 0,\n };\n }\n\n index = Math.max(index, val.extra.index || 0);\n });\n\n const [key, schema] = typeEditorUtils.genNewTypeSchema(index + 1);\n\n parent.properties[key] = schema as IJsonSchema;\n\n const newDataSource = typeEditor.getDataSource();\n\n let addIndex = rowData.index + 1;\n for (let i = rowData.index + 1, len = dataSource.length; i < len; i++) {\n if (newDataSource[i].level > rowData.level) {\n addIndex++;\n } else {\n break;\n }\n }\n\n const newPos = {\n x: 0,\n y: addIndex,\n };\n\n typeEditor.setActivePos(newPos);\n\n handleTypeSchemaChange();\n }\n },\n [initialSchema, getRootSchema]\n );\n\n useEffect(() => {\n typeEditor.columnViewConfig = viewConfigs.filter((v) => v.visible);\n typeEditor.onChange = handleTypeSchemaChange;\n typeEditor.onGlobalAdd = handleRowDataAdd;\n\n typeEditor.typeRegistryCreators =\n typeRegistryCreators as unknown as TypeRegistryCreatorsAdapter<TypeSchema>[];\n }, [viewConfigs, handleTypeSchemaChange, typeRegistryCreators]);\n\n /**\n * 展开收起子字段\n */\n const handleChildrenVisibleChange = useCallback(\n (rowDataId: string, newVal: boolean) => {\n const newData = { ...unOpenKeys };\n\n newData[rowDataId] = newVal;\n setUnOpenKeys(newData);\n },\n [unOpenKeys]\n );\n\n return (\n <>\n <DndProvider backend={HTML5Backend}>\n <Space vertical style={{ width: '100%' }}>\n <div style={{ width: '100%' }}>\n <EditorTable\n ref={(dom) => setTableDom(dom as React.SetStateAction<HTMLTableElement | undefined>)}\n className={classNames('semi-table', tableClassName)}\n >\n <Header\n dataSourceMap={typeEditor.dataSourceMap}\n value={initialSchema}\n readonly={readonly}\n onChange={handleTypeSchemaChange}\n displayColumn={displayColumn}\n />\n <Body\n viewConfigs={viewConfigs}\n onFieldChange={onFieldChange}\n onPaste={onPaste}\n customEmptyNode={customEmptyNode}\n readonly={readonly}\n dataSourceMap={typeEditor.dataSourceMap}\n unOpenKeys={unOpenKeys}\n onError={onError}\n onChildrenVisibleChange={handleChildrenVisibleChange}\n onChange={handleTypeSchemaChange}\n dataSource={dataSource}\n displayColumn={displayColumn}\n />\n </EditorTable>\n </div>\n </Space>\n </DndProvider>\n\n {/** 当前编辑的单元格,单独渲染,减少表格的重复渲染 **/}\n {activePos.x !== -1 && activePos.y !== -1 && tableDom && (\n <EditCell\n viewConfigs={viewConfigs}\n unOpenKeys={unOpenKeys}\n onPaste={onPaste}\n onFieldChange={onFieldChange}\n onError={onError}\n onChildrenVisibleChange={handleChildrenVisibleChange}\n onChange={handleTypeSchemaChange}\n tableDom={tableDom}\n dataSource={dataSource}\n displayColumn={displayColumn}\n />\n )}\n {/** 当前拖拽的提示辅助框 **/}\n <DropTip dataSource={typeEditor.dataSourceMap} />\n </>\n );\n};\n\nexport const Table = fixedTSForwardRef(TableInner);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled from 'styled-components';\n\nexport const ErrorMsgContainer = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n transform: translateY(100%);\n width: calc(100% - 6px);\n`;\n\nexport const EditCellContainer = styled.div<{\n error?: boolean;\n blink?: boolean;\n}>`\n position: absolute;\n width: 100%;\n left: 0;\n top: 0;\n background-color: var(--semi-color-bg-0);\n border: 1px solid var(--semi-color-focus-border);\n height: 38px;\n display: flex;\n align-items: center;\n transition: background-color 200ms;\n box-sizing: border-box;\n ${(props) => (props.error ? 'border: 1px solid var(--semi-color-danger);' : '')}\n ${(props) => (props.blink ? 'background-color: rgba(238, 245, 40) !important;' : '')}\n`;\n\nexport const DragRowContainer = styled.tr<{\n dragging?: boolean;\n}>`\n opacity: ${(props) => (props.dragging ? 0.5 : 1)};\n`;\n\nexport const EditorTableHeader = styled.th`\n border-right: 1px solid var(--semi-color-border);\n border-bottom-width: 1px !important;\n height: 37px;\n box-sizing: border-box;\n font-size: 12px;\n`;\n\nexport const EditorTableCell = styled.td`\n border-right: 1px solid var(--semi-color-border) !important;\n position: relative;\n\n padding: 8px !important;\n height: 36px;\n`;\n\nexport const EditorTable = styled.table`\n min-width: 600px;\n border-left-width: 1px;\n border-top-width: 1px;\n box-sizing: border-box;\n border-color: var(--semi-color-border);\n width: 100%;\n position: relative;\n border-style: solid;\n border-bottom: none;\n border-right: none;\n`;\n\nexport const EditorTableTitle = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n`;\n\nexport const BaseIcon = styled.div`\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { ModeValueConfig, TypeEditorMode, TypeEditorProp, TypeEditorValue } from '../type';\nimport { modeValueConfig } from '../mode';\nimport { extraDeFormatter, extraFormatter, Formatter } from '../formatter';\nimport { traverseIJsonSchema } from '../../../services/utils';\n\nexport const useFormatter = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n extraConfig = {},\n mode,\n}: Pick<TypeEditorProp<Mode, TypeSchema>, 'mode' | 'extraConfig'>) => {\n const { useExtra } = extraConfig;\n const modeConfig = useMemo(\n () =>\n modeValueConfig.find((v) => v.mode === mode)! as unknown as ModeValueConfig<Mode, TypeSchema>,\n [mode]\n );\n\n const formatter = useMemo(\n () => (value: TypeEditorValue<Mode, TypeSchema> | undefined) => {\n const originSchema = value && modeConfig.convertValueToSchema(value as any);\n let res = originSchema ? JSON.parse(JSON.stringify(originSchema)) : originSchema;\n\n const formatters: Formatter[] = [];\n if (useExtra) {\n formatters.push(extraFormatter);\n }\n\n if (formatters.length !== 0 && res) {\n traverseIJsonSchema(res, (type) => {\n formatters.forEach((f) => f(type));\n });\n }\n return res;\n },\n [modeConfig, useExtra]\n );\n\n const deFormatter = useMemo(\n () => (originSchema: TypeSchema | undefined) => {\n let schema = originSchema ? JSON.parse(JSON.stringify(originSchema)) : originSchema;\n\n const formatters: Formatter[] = [];\n if (useExtra) {\n formatters.push(extraDeFormatter);\n }\n\n if (formatters.length !== 0 && schema) {\n traverseIJsonSchema(schema, (type) => {\n formatters.forEach((f) => f(type));\n });\n }\n\n return schema && modeConfig.convertSchemaToValue(schema as TypeSchema);\n },\n [modeConfig, useExtra]\n );\n\n return {\n formatter,\n deFormatter,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { typeEditorUtils } from '../utils';\nimport { type ModeValueConfig } from '../type';\nimport { TypeEditorColumnType } from '../../../types';\n\nexport const typeDefinitionConfig: ModeValueConfig<'type-definition', IJsonSchema> = {\n mode: 'type-definition',\n convertSchemaToValue: (val) => val,\n convertValueToSchema: (val) => val,\n commonValueToSubmitValue: (val) => {\n if (val) {\n return typeEditorUtils.valueToTypeSchema(val);\n }\n return {\n type: 'object',\n properties: {},\n };\n },\n\n toolConfig: {\n createByData: {\n viewConfig: [\n {\n type: TypeEditorColumnType.Key,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Type,\n visible: true,\n },\n ],\n genDefaultValue() {\n return {\n type: 'object',\n properties: {},\n };\n },\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { set, get } from 'lodash-es';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { typeEditorUtils } from '../utils';\nimport { type ModeValueConfig } from '../type';\nimport { TypeEditorColumnType, TypeEditorSchema } from '../../../types';\n\nconst traverseIJsonSchema = (\n root: TypeEditorSchema<IJsonSchema> | undefined,\n path: string[],\n cb: (type: TypeEditorSchema<IJsonSchema>, path: string[]) => void\n): void => {\n if (root) {\n cb(root, path);\n\n if (root.properties) {\n Object.keys(root.properties).forEach((k) => {\n traverseIJsonSchema(root.properties![k], [...path, k], cb);\n });\n }\n }\n};\n\nexport const declareAssignConfig: ModeValueConfig<'declare-assign', IJsonSchema> = {\n mode: 'declare-assign',\n convertSchemaToValue: (val) => {\n const data = {};\n const newSchema = JSON.parse(JSON.stringify(val));\n\n traverseIJsonSchema(newSchema, [], (type, path) => {\n if (type.extra?.value !== undefined) {\n set(data, path, type.extra?.value);\n }\n if (type.extra) {\n delete type.extra;\n }\n });\n\n return {\n data,\n definition: { schema: newSchema },\n };\n },\n convertValueToSchema: (schema) => {\n const { data } = schema;\n const newSchema = JSON.parse(JSON.stringify(schema.definition.schema));\n traverseIJsonSchema(newSchema, [], (type, path) => {\n const value = get(data, path);\n if (value !== undefined && type.type !== 'object') {\n type.extra = { value };\n }\n });\n return newSchema;\n },\n commonValueToSubmitValue: (val) => {\n const type: IJsonSchema = val\n ? typeEditorUtils.valueToTypeSchema(val)\n : {\n type: 'object',\n properties: {},\n };\n return {\n data: val || {},\n definition: {\n schema: type,\n },\n };\n },\n\n toolConfig: {\n createByData: {\n viewConfig: [\n {\n type: TypeEditorColumnType.Key,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Type,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Value,\n visible: true,\n },\n ],\n genDefaultValue: () => ({\n data: {},\n definition: {\n schema: {\n type: 'object',\n properties: {},\n },\n },\n }),\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { type ModeValueConfig, type TypeEditorMode } from '../type';\nimport { typeDefinitionConfig } from './type-definition';\nimport { declareAssignConfig } from './declare-assign';\n\nexport const modeValueConfig: ModeValueConfig<TypeEditorMode, IJsonSchema>[] = [\n declareAssignConfig,\n typeDefinitionConfig,\n];\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nexport const traverseIJsonSchema = (\n root: Partial<IJsonSchema> | undefined,\n cb: (type: Partial<IJsonSchema>) => void\n): void => {\n if (root) {\n cb(root);\n\n if (root.items) {\n traverseIJsonSchema(root.items, cb);\n }\n if (root.additionalProperties) {\n traverseIJsonSchema(root.additionalProperties, cb);\n }\n\n if (root.properties) {\n Object.values(root.properties).forEach((v) => {\n traverseIJsonSchema(v, cb);\n });\n }\n }\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconInfoCircle } from '@douyinfe/semi-icons';\n\nimport { TypeEditorColumnType, TypeEditorRowData } from '../../types/type-editor';\nimport { TypeEditorService } from '../../services';\nimport { useService } from '../../contexts';\nimport { EditorTableTitle, EditorTableHeader, BaseIcon } from './style';\nimport { useHeaderDrop } from './hooks';\n\nexport const Header = <TypeSchema extends Partial<IJsonSchema>>({\n displayColumn,\n value,\n readonly,\n dataSourceMap,\n onChange,\n}: {\n displayColumn: TypeEditorColumnType[];\n dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>>;\n onChange: () => void;\n\n readonly?: boolean;\n\n value: TypeSchema;\n}) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const { drop } = useHeaderDrop(value, dataSourceMap, onChange);\n\n return (\n <thead className=\"semi-table-thead\">\n <tr ref={drop} className=\"semi-table-row\">\n {displayColumn.map((v) => {\n const config = typeEditorService.getConfigByType(v);\n\n return (\n <EditorTableHeader\n key={v}\n style={{\n width: config?.width ? `${config.width}%` : undefined,\n paddingLeft: readonly ? '24px !important' : undefined,\n }}\n className=\"semi-table-row-head\"\n scope=\"col\"\n >\n <EditorTableTitle>\n {config?.label}\n {config?.info && (\n <Tooltip content={config.info()}>\n <BaseIcon>\n <IconInfoCircle style={{ marginLeft: 4 }} size=\"small\" />\n </BaseIcon>\n </Tooltip>\n )}\n </EditorTableTitle>\n </EditorTableHeader>\n );\n })}\n </tr>\n </thead>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useMemo, useState } from 'react';\nimport React from 'react';\n\nimport styled from 'styled-components';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRowData } from '../../types';\nimport { TypeEditorService } from '../../services';\nimport { useService, useTypeDefinitionManager } from '../../contexts';\nimport { CELL_HIGHT, CELL_PADDING, HEADER_HIGHT, INDENT_WIDTH, TAB_BRA_HIGHT } from './common';\n\nconst StyledDragTip = styled.div`\n position: absolute;\n height: 1px;\n background-color: var(--semi-color-primary);\n`;\n\nexport const DropTip = <TypeSchema extends Partial<IJsonSchema>>({\n dataSource,\n}: {\n dataSource: Record<string, TypeEditorRowData<TypeSchema>>;\n}) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const [dropInfo, setDropInfo] = useState(typeEditor.dropInfo);\n\n const typeService = useTypeDefinitionManager();\n\n useEffect(() => {\n const dispose = typeEditor.onDropInfoChange.event(setDropInfo);\n return () => {\n dispose.dispose();\n };\n }, []);\n\n const rowData = useMemo(() => dataSource[dropInfo.rowDataId], [dropInfo.rowDataId]);\n\n const rowDataCanHasChildren = useMemo(\n () =>\n rowData && rowData.type && typeService.getTypeByName(rowData.type)?.canAddField?.(rowData),\n [rowData]\n );\n\n return (\n <>\n {(rowData || dropInfo.rowDataId === 'header') && (\n <StyledDragTip\n style={{\n top: HEADER_HIGHT + TAB_BRA_HIGHT + (dropInfo.index + 1) * CELL_HIGHT - 1,\n right: 0,\n width: `calc(100% - ${\n /**\n * 表格 padding\n * 初始 drag icon 占一个缩进\n * rowData 本身 level 个缩进,如果是含有子节点,因为默认添加到子元素内,还需要额外加一个缩进\n */\n CELL_PADDING +\n INDENT_WIDTH +\n (dropInfo.indent + (rowDataCanHasChildren ? 1 : 0) + 1) * INDENT_WIDTH\n }px)`,\n }}\n />\n )}\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type ConnectDragSource } from 'react-dnd';\nimport React, { useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport { NOOP } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { Feedback } from '../feedback';\nimport {\n TypeEditorRowData,\n TypeChangeContext,\n TypeEditorColumnViewConfig,\n TypeEditorColumnType,\n} from '../../types';\nimport { TypeEditorService } from '../../services';\nimport { useService } from '../../contexts';\nimport { EditCellContainer, EditorTableCell, ErrorMsgContainer } from './style';\nimport { useIsBlink } from './hooks/blink';\nimport { useActivePos, useCellDrop, useViewCellErrorMsg, useEditCellErrorMsg } from './hooks';\nimport { ErrorCellBorder } from './error';\nimport { CELL_HIGHT, HEADER_HIGHT, TAB_BRA_HIGHT } from './common';\n\nexport const ViewCell = <TypeSchema extends Partial<IJsonSchema>>({\n rowData,\n rowIndex,\n columnIndex,\n onChange,\n dataSourceMap,\n onError,\n onFieldChange,\n onPaste,\n unOpenKeys,\n viewConfigs,\n readonly,\n onChildrenVisibleChange,\n dragSource,\n columnType,\n}: {\n rowData: TypeEditorRowData<TypeSchema>;\n rowIndex: number;\n onError?: (msg: string[]) => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n onChange: () => void;\n columnIndex: number;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n dragSource?: ConnectDragSource;\n dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>>;\n onChildrenVisibleChange: (rowDataId: string, val: boolean) => void;\n /**\n * 只读态\n */\n readonly?: boolean;\n /**\n * 每个列的配置\n */\n viewConfigs: TypeEditorColumnViewConfig[];\n unOpenKeys: Record<string, boolean>;\n columnType: TypeEditorColumnType;\n}) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const config = typeEditorService.getConfigByType(columnType)!;\n\n const { drop } = useCellDrop(rowData, rowIndex, dataSourceMap, onChange);\n\n const handleEditMode = useCallback(() => {\n if (!readonly) {\n typeEditorService.setActivePos({ x: columnIndex, y: rowIndex });\n }\n }, [columnIndex, readonly, rowIndex]);\n\n const handleViewMode = useCallback(() => {\n typeEditorService.clearActivePos();\n }, []);\n\n const Render = config.viewRender;\n\n const feedbackInfo = useViewCellErrorMsg(rowData, config, {\n x: columnIndex,\n y: rowIndex,\n });\n\n return (\n <EditorTableCell\n ref={config.customDrop ? undefined : drop}\n className={classNames('semi-table-row-cell', 'cell-container')}\n >\n {feedbackInfo && (\n <>\n <ErrorCellBorder level={feedbackInfo.level} />\n <ErrorMsgContainer>\n <Feedback message={feedbackInfo.msg!} level={feedbackInfo.level} layout=\"absolute\" />\n </ErrorMsgContainer>\n </>\n )}\n\n {Render ? (\n <Render\n readonly={readonly}\n config={viewConfigs.find((v) => v.type === columnType) || {}}\n dragSource={dragSource}\n unOpenKeys={unOpenKeys}\n onFieldChange={onFieldChange}\n typeEditor={typeEditorService}\n onPaste={onPaste}\n error={!!feedbackInfo}\n onError={onError}\n onChange={onChange}\n onChildrenVisibleChange={onChildrenVisibleChange}\n onViewMode={handleViewMode}\n onEditMode={handleEditMode}\n rowData={rowData}\n />\n ) : (\n `${(rowData as unknown as Record<string, unknown>)[columnType]}`\n )}\n </EditorTableCell>\n );\n};\n\nexport const EditCell = <TypeSchema extends Partial<IJsonSchema>>({\n displayColumn,\n onFieldChange,\n dataSource,\n onPaste,\n unOpenKeys,\n onError,\n viewConfigs,\n onChildrenVisibleChange,\n tableDom,\n onChange,\n}: {\n displayColumn: TypeEditorColumnType[];\n tableDom: HTMLTableElement;\n onError?: (msg: string[]) => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n\n /**\n * 每个列的配置\n */\n viewConfigs: TypeEditorColumnViewConfig[];\n unOpenKeys: Record<string, boolean>;\n onChildrenVisibleChange: (rowDataId: string, newVal: boolean) => void;\n onChange: () => void;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n dataSource: TypeEditorRowData<TypeSchema>[];\n}) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const activePos = useActivePos();\n\n const handleViewMode = useCallback(() => {\n typeEditorService.clearActivePos();\n }, []);\n\n const columnType = useMemo(() => displayColumn[activePos.x], [displayColumn, activePos.x]);\n\n /**\n * 获取每一列的宽度\n */\n const columnEachWidth = useMemo(() => {\n const headerNodes = tableDom.childNodes?.[0]?.childNodes?.[0];\n const width: number[] = [];\n for (const item of headerNodes.childNodes.values()) {\n // 1px border\n width.push((item as HTMLElement).clientWidth + 1);\n }\n\n return width;\n }, [displayColumn, tableDom, tableDom.clientWidth]);\n\n /**\n * 获取每一列距离 left: 0 的宽度\n */\n const columnAccWidth = useMemo(() => {\n let acc = 0;\n return columnEachWidth.map((width) => {\n acc += width;\n return acc - width;\n });\n }, [columnEachWidth]);\n\n const rowData = useMemo(() => dataSource[activePos.y], [dataSource, activePos.y]);\n\n const config = typeEditorService.getConfigByType(columnType);\n\n const Render = config && (config.editRender || config.viewRender);\n\n const errorMsg = useEditCellErrorMsg(activePos);\n\n const blink = useIsBlink();\n\n if (!config) {\n return <></>;\n }\n\n return (\n <>\n {rowData && (\n <EditCellContainer\n error={!!errorMsg}\n blink={blink}\n key={rowData.key + columnType}\n style={{\n width: columnEachWidth[activePos.x] + 1,\n top: HEADER_HIGHT + TAB_BRA_HIGHT + activePos.y * CELL_HIGHT + 1,\n left: columnAccWidth[activePos.x],\n }}\n >\n {Render ? (\n <Render\n error={!!errorMsg}\n onError={onError}\n config={viewConfigs.find((v) => v.type === columnType) || {}}\n key={rowData.id}\n unOpenKeys={unOpenKeys}\n onChange={onChange}\n onPaste={onPaste}\n typeEditor={typeEditorService}\n onFieldChange={onFieldChange}\n onChildrenVisibleChange={onChildrenVisibleChange}\n onEditMode={NOOP}\n onViewMode={handleViewMode}\n rowData={rowData}\n />\n ) : (\n `${(rowData as unknown as Record<string, unknown>)[columnType]}`\n )}\n {errorMsg && (\n <ErrorMsgContainer style={{ left: -1 }}>\n <Feedback message={errorMsg} level=\"error\" layout=\"absolute\" />\n </ErrorMsgContainer>\n )}\n </EditCellContainer>\n )}\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { type Level } from './types';\nimport { FeedbackStyle, RelativeWrapper } from './style';\n\ninterface FeedbackProps {\n // message 内容\n message: string;\n // 不hover状态下是否占用文档流\n layout: 'relative' | 'absolute';\n // 错误等级: error | warning\n level?: Level;\n // 是否展开:该状态仅适配layout 为relative 的状态\n expanded?: boolean;\n}\n\nexport const Feedback = ({ message, layout, level = 'error', expanded = false }: FeedbackProps) => {\n const feedbackContent = useMemo(\n () => (\n <FeedbackStyle\n expanded={expanded}\n error={level === 'error'}\n warning={level === 'warning'}\n expandable={!expanded}\n >\n {message}\n </FeedbackStyle>\n ),\n [level, message, expanded]\n );\n\n return layout === 'relative' ? (\n <RelativeWrapper expanded={expanded}>{feedbackContent}</RelativeWrapper>\n ) : (\n feedbackContent\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled from 'styled-components';\n\nexport const FeedbackStyle = styled.div<{\n // 是否展开\n expanded?: boolean;\n // 是否错误\n error?: boolean;\n // 是否警告\n warning?: boolean;\n // 是否可展开\n expandable?: boolean;\n}>`\n position: absolute;\n\n ${(props) =>\n props.expanded\n ? `\n position: relative;\n `\n : ''}\n\n color: #fff;\n max-width: 100%;\n width: fit-content;\n padding: 0 4px;\n font-size: 10px;\n line-height: 18px;\n word-break: break-all;\n\n &.expandable {\n }\n\n ${(props) =>\n props.expandable\n ? `\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:hover {\n white-space: normal;\n overflow: visible;\n }\n `\n : ''}\n\n ${(props) =>\n props.error\n ? `\n background-color: var(--semi-color-danger);\n `\n : ''}\n\n\n ${(props) =>\n props.warning\n ? `\n background-color:var(--semi-color-warning);\n `\n : ''}\n\n\n z-index: 1;\n`;\n\nexport const RelativeWrapper = styled.div<{\n // 是否展开\n expanded?: boolean;\n}>`\n position: relative;\n height: 18px;\n\n ${(props) =>\n props.expanded\n ? `\n height: fit-content;\n `\n : ''}\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\n\nexport const useIsBlink = () => {\n const typeEditor = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n\n const blinkData = useMemo(() => typeEditor.blink, [typeEditor.blink]);\n const [blink, setBlink] = useState(blinkData.data);\n\n useEffect(() => {\n const dispose = blinkData.onDataChange(({ next }) => {\n setBlink(next);\n\n if (next) {\n setTimeout(() => {\n blinkData.update(false);\n }, 200);\n }\n });\n\n return () => {\n dispose.dispose();\n };\n }, [blinkData]);\n\n return blink;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type FC } from 'react';\nimport React from 'react';\n\nimport styled from 'styled-components';\n\nconst TopLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n width: 100%;\n height: 1px;\n top: 0;\n left: 0;\n`;\n\nconst BottomLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n width: 100%;\n height: 1px;\n bottom: -1px;\n left: 0;\n`;\n\nconst RightLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n height: calc(100% + 1px);\n width: 1px;\n bottom: -1px;\n right: 0px;\n`;\n\nconst LeftLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n height: calc(100% + 1px);\n width: 1px;\n bottom: -1px;\n left: 0;\n`;\n\nexport const ErrorCellBorder: FC<{\n level?: 'error' | 'warning';\n}> = ({ level }) => (\n <>\n <TopLine level={level} />\n <BottomLine level={level} />\n <LeftLine level={level} />\n <RightLine level={level} />\n </>\n);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Empty } from '@douyinfe/semi-ui';\nimport { IllustrationNoContent, IllustrationNoContentDark } from '@douyinfe/semi-illustrations';\n\nimport {\n TypeEditorColumnType,\n TypeEditorRowData,\n TypeEditorColumnViewConfig,\n TypeChangeContext,\n} from '../../types';\nimport { DragRowContainer } from './style';\nimport { useRowDrag } from './hooks/drag-drop';\nimport { ViewCell } from './cell';\n\ninterface Props<TypeSchema extends Partial<IJsonSchema>> {\n displayColumn: TypeEditorColumnType[];\n dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>>;\n /**\n * 自定义空状态\n */\n customEmptyNode?: React.ReactElement;\n /**\n * 每个列的配置\n */\n viewConfigs: TypeEditorColumnViewConfig[];\n /**\n * 只读态\n */\n readonly?: boolean;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n onChange: () => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n onError?: (msg?: string[]) => void;\n onChildrenVisibleChange: (rowDataId: string, newVal: boolean) => void;\n unOpenKeys: Record<string, boolean>;\n}\n\nconst Row = <TypeSchema extends Partial<IJsonSchema>>({\n displayColumn,\n data,\n ...rest\n}: Props<TypeSchema> & {\n data: TypeEditorRowData<TypeSchema>;\n rowIndex: number;\n}) => {\n const { preview, drag, isDragging } = useRowDrag(data.id, rest.onChildrenVisibleChange);\n\n return (\n <DragRowContainer ref={preview} dragging={isDragging} className={classNames('semi-table-row')}>\n {displayColumn.map((column, columnIndex) => (\n <ViewCell\n dragSource={data.cannotDrag ? undefined : drag}\n key={data.id + column}\n columnType={column}\n columnIndex={columnIndex}\n rowData={data}\n {...rest}\n />\n ))}\n </DragRowContainer>\n );\n};\n\nexport const Body = <TypeSchema extends Partial<IJsonSchema>>({\n dataSource,\n customEmptyNode,\n ...rest\n}: Props<TypeSchema> & {\n dataSource: TypeEditorRowData<TypeSchema>[];\n}) => {\n if (dataSource.length === 0) {\n const rows = rest.displayColumn.length;\n return (\n <tbody>\n <tr>\n <td colSpan={rows}>\n {customEmptyNode ? (\n customEmptyNode\n ) : (\n <Empty\n style={{ marginTop: 40 }}\n image={<IllustrationNoContent style={{ width: 100, height: 100 }} />}\n darkModeImage={<IllustrationNoContentDark style={{ width: 100, height: 100 }} />}\n description=\"No content. Please add.\"\n />\n )}\n </td>\n </tr>\n </tbody>\n );\n }\n\n return (\n <tbody className=\"semi-table-tbody\">\n <>\n {dataSource.map((data, rowIndex) => (\n <Row key={data.id} {...rest} data={data} rowIndex={rowIndex} />\n ))}\n </>\n </tbody>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space, Tooltip } from '@douyinfe/semi-ui';\n\nimport {\n ToolbarConfig,\n ToolbarKey,\n type TypeEditorMode,\n type TypeEditorProp,\n type TypeEditorRef,\n} from './type';\nimport { UndoRedo } from './tools/undo-redo';\nimport { CreateByData } from './tools/create-by-data';\n\nexport const ToolBar = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n mode,\n editor,\n toolbarConfig = [],\n}: TypeEditorProp<Mode, TypeSchema> & {\n editor?: TypeEditorRef<Mode, TypeSchema>;\n}) => {\n const config = useMemo(() => {\n const res = new Map<string, ToolbarConfig>();\n\n toolbarConfig.forEach((tool) => {\n if (typeof tool === 'string') {\n res.set(tool, { type: tool });\n } else {\n res.set(tool.type, tool);\n }\n });\n return res;\n }, [toolbarConfig]);\n\n const importConfig = config.get(ToolbarKey.Import);\n\n return (\n <div style={{ width: '100%' }}>\n {editor && (\n <Space style={{ float: 'right' }}>\n <>\n {importConfig && (\n <>\n {importConfig.disabled ? (\n <Tooltip content={importConfig.disabled}>\n <CreateByData disabled mode={mode} editor={editor} />\n </Tooltip>\n ) : (\n <CreateByData\n mode={mode}\n customInputRender={importConfig.customInputRender}\n editor={editor}\n />\n )}\n </>\n )}\n </>\n {config.has(ToolbarKey.UndoRedo) && <UndoRedo editor={editor} />}\n </Space>\n )}\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type React from 'react';\nimport { FC } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport {\n type TypeEditorSpecialConfig,\n type TypeEditorColumnViewConfig,\n type TypeEditorRowData,\n type TypeChangeContext,\n type TypeEditorColumnType,\n type TypeEditorSchema,\n TypeEditorColumnConfig,\n} from '../../types';\nimport { TypeEditorOperationService, type TypeEditorService } from '../../services';\nimport { TypeRegistryCreatorsAdapter } from '../../contexts';\n\nexport type TypeEditorMode = 'type-definition' | 'declare-assign';\n\nexport interface DeclareAssignValueType<TypeSchema extends Partial<IJsonSchema>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any;\n definition: {\n schema: TypeSchema;\n };\n}\n\nexport type TypeEditorValue<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> = Mode extends 'type-definition'\n ? TypeEditorSchema<TypeSchema>\n : DeclareAssignValueType<TypeSchema>;\n\nexport enum ToolbarKey {\n Import = 'Import',\n UndoRedo = 'UndoRedo',\n}\nexport type ToolbarConfig = {\n /**\n * 工具栏配置\n */\n type: ToolbarKey;\n /**\n * 是否禁用\n */\n disabled?: string;\n\n /**\n * 自定义输入渲染,仅 Import 使用\n */\n customInputRender?: FC<{\n value: string;\n onChange: (newVal: string) => void;\n }>;\n};\n\nexport interface TypeEditorProp<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> {\n /**\n * 菜单栏配置\n */\n toolbarConfig?: (ToolbarKey | ToolbarConfig)[];\n /**\n * type editor 模式类型\n */\n mode: Mode;\n\n /**\n * 只读态\n */\n readonly?: boolean;\n /**\n *\n */\n tableClassName?: string;\n\n /**\n * 各个 cell 的特化配置\n */\n extraConfig?: TypeEditorSpecialConfig<TypeSchema>;\n /**\n * 根节点层级\n */\n rootLevel?: number;\n\n /**\n * 获取全局 add 的 root schema\n */\n getRootSchema?: (schema: TypeSchema) => TypeSchema;\n /**\n *\n */\n typeRegistryCreators?: TypeRegistryCreatorsAdapter<IJsonSchema>[];\n\n /**\n * 每个列的配置\n */\n viewConfigs: (TypeEditorColumnViewConfig & {\n config?: Partial<Omit<TypeEditorColumnConfig<TypeSchema>, 'type'>>;\n })[];\n\n /**\n * 每次设置 DataSource 前调用,最后修改值的钩子\n */\n onEditRowDataSource?: (data: TypeEditorRowData<TypeSchema>[]) => TypeEditorRowData<TypeSchema>[];\n /**\n * 忽略报错强制更新\n */\n forceUpdate?: boolean;\n\n /**\n * onError\n */\n onError?: (msg?: string[]) => void;\n /**\n * value\n */\n value?: TypeEditorValue<Mode, TypeSchema>;\n /**\n * onChange\n */\n onChange?: (newValue: TypeEditorValue<Mode, TypeSchema>) => void;\n /**\n * onPaste\n */\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n\n /**\n * onInit\n */\n onInit?: (editor: React.MutableRefObject<TypeEditorRef<Mode, TypeSchema> | undefined>) => void;\n\n /**\n * 当具体某个 field change\n */\n onFieldChange?: (ctx: TypeChangeContext) => void;\n /**\n * 当执行 setValue\n */\n onCustomSetValue?: (\n newValue: TypeEditorValue<Mode, TypeSchema>\n ) => TypeEditorValue<Mode, TypeSchema>;\n\n /**\n * 自定义空状态\n */\n customEmptyNode?: React.ReactElement;\n\n /**\n * 不能编辑的列\n * 和 TypeSchema 中 editable 的关系\n * editable 为 false,会将 disableEditColumn 每个 column 都填上\n */\n disableEditColumn?: Array<{ column: TypeEditorColumnType; reason: string }>;\n}\n\nexport interface TypeEditorRef<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> {\n setValue: (newVal: TypeEditorValue<Mode, TypeSchema>) => void;\n getValue: () => TypeEditorValue<Mode, TypeSchema> | undefined;\n undo: () => void;\n redo: () => void;\n getService: () => TypeEditorService<TypeSchema> | undefined;\n getOperator: () => TypeEditorOperationService<TypeSchema> | undefined;\n getContainer: () => HTMLDivElement | undefined;\n}\n\nexport interface ModeValueConfig<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> {\n mode: Mode;\n /**\n * 提交值到 typeSchema\n */\n convertValueToSchema: (val: TypeEditorValue<Mode, TypeSchema>) => TypeSchema;\n /**\n * typeSchema 到提交值\n */\n convertSchemaToValue: (val: TypeSchema) => TypeEditorValue<Mode, TypeSchema>;\n /**\n * 常量值生成提交值\n */\n commonValueToSubmitValue: (\n val: Record<string, unknown> | undefined\n ) => TypeEditorValue<Mode, TypeSchema>;\n\n toolConfig: {\n createByData: {\n viewConfig: TypeEditorColumnViewConfig[];\n genDefaultValue: () => TypeEditorValue<Mode, TypeSchema>;\n };\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// import { ShortcutsService, useIDEService } from '@flow-ide/client';\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Button, Tooltip } from '@douyinfe/semi-ui';\nimport { IconRedo, IconUndo } from '@douyinfe/semi-icons';\n// import { TypeEditorCommand, useMonitorData } from '@api-builder/base';\n\nimport { type TypeEditorMode, type TypeEditorRef } from '../type';\nimport { useMonitorData } from '../../../utils';\n\nexport const UndoRedo = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n editor,\n}: {\n editor: TypeEditorRef<Mode, TypeSchema>;\n}) => {\n const { data: canUndo } = useMonitorData(editor.getOperator()?.canUndo);\n const { data: canRedo } = useMonitorData(editor.getOperator()?.canRedo);\n\n return (\n <>\n <Tooltip content=\"Undo\">\n <Button\n disabled={!canUndo}\n icon={<IconUndo />}\n size=\"small\"\n onClick={() => {\n editor?.undo();\n }}\n />\n </Tooltip>\n <Tooltip content=\"Redo\">\n <Button\n size=\"small\"\n icon={<IconRedo />}\n disabled={!canRedo}\n onClick={() => {\n editor?.redo();\n }}\n />\n </Tooltip>\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { FC, useCallback, useMemo, useState } from 'react';\n\nimport { debounce } from 'lodash-es';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Button, Divider, Empty, Modal, Space, TextArea } from '@douyinfe/semi-ui';\nimport { IllustrationFailure, IllustrationFailureDark } from '@douyinfe/semi-illustrations';\n\nimport { typeEditorUtils } from '../utils';\nimport { TypeEditorTable } from '../type-editor';\nimport { type TypeEditorMode, type TypeEditorRef, type TypeEditorValue } from '../type';\nimport { modeValueConfig } from '../mode';\nimport { DataTransform } from './style';\n\nexport const CreateByData = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n mode,\n disabled,\n customInputRender: CustomInputRender,\n editor,\n}: {\n editor: TypeEditorRef<Mode, TypeSchema>;\n mode: Mode;\n disabled?: boolean;\n customInputRender?: FC<{ value: string; onChange: (newVal: string) => void }>;\n}) => {\n const modeConfig = useMemo(() => modeValueConfig.find((v) => v.mode === mode)!, [mode]);\n\n const [visible, setVisible] = useState(false);\n\n const [typeEditorValue, setTypeEditorValue] = useState<TypeEditorValue<Mode, TypeSchema>>(\n modeConfig.toolConfig.createByData.genDefaultValue() as TypeEditorValue<Mode, TypeSchema>\n );\n const [errorEmpty, setErrorEmpty] = useState(false);\n\n const handleClose = useCallback(() => {\n setVisible(false);\n setTypeEditorValue(\n modeConfig.toolConfig.createByData.genDefaultValue() as TypeEditorValue<Mode, TypeSchema>\n );\n }, [modeConfig]);\n\n const handleOk = useCallback(async () => {\n if (editor) {\n editor.setValue(typeEditorValue);\n handleClose();\n }\n }, [handleClose, typeEditorValue, editor]);\n\n const onChange = debounce((newVal: string) => {\n const parsedValue = typeEditorUtils.jsonParse(newVal);\n const error =\n newVal && !(parsedValue && typeof parsedValue === 'object' && !Array.isArray(parsedValue));\n\n if (!error) {\n setTypeEditorValue(\n modeConfig.commonValueToSubmitValue(parsedValue) as TypeEditorValue<Mode, TypeSchema>\n );\n setErrorEmpty(false);\n } else if (parsedValue) {\n setErrorEmpty(true);\n }\n }, 500);\n\n return (\n <div>\n <Button disabled={disabled} size=\"small\" onClick={() => setVisible(true)}>\n Import from JSON\n </Button>\n <Modal\n okText={`Import`}\n width={960}\n okButtonProps={{}}\n cancelText=\"Cancel\"\n title=\"Import from JSON\"\n visible={visible}\n onOk={handleOk}\n onCancel={handleClose}\n >\n <DataTransform>\n <div style={{ height: '100%', flex: 1 }}>\n {CustomInputRender ? (\n <CustomInputRender value=\"{}\" onChange={onChange} />\n ) : (\n <TextArea defaultValue=\"{}\" onChange={onChange} />\n )}\n </div>\n <Divider layout=\"vertical\" style={{ height: '100%' }} />\n <Space align=\"start\" vertical style={{ height: '100%', flex: 1 }}>\n <div style={{ height: '100%', flex: 1, overflowY: 'scroll' }}>\n <TypeEditorTable\n readonly\n mode={mode}\n forceUpdate\n // TODO:\n // tableClassName={s['tool-table']}\n value={errorEmpty ? undefined : typeEditorValue}\n customEmptyNode={\n errorEmpty ? (\n <Empty\n style={{ marginTop: 40 }}\n image={<IllustrationFailure style={{ width: 100, height: 100 }} />}\n darkModeImage={\n <IllustrationFailureDark style={{ width: 100, height: 100 }} />\n }\n description=\"Invalid value\"\n />\n ) : undefined\n }\n viewConfigs={modeConfig.toolConfig.createByData.viewConfig}\n />\n </div>\n </Space>\n </DataTransform>\n </Modal>\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled from 'styled-components';\n\nexport const DataTransform = styled.div`\n height: 406px;\n display: flex;\n gap: 4px;\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorColumnType, TypeEditorColumnViewConfig } from '../../types';\nimport { ToolbarKey, TypeEditor } from '../../components';\n\nconst defaultViewConfigs = [\n {\n type: TypeEditorColumnType.Key,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Type,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Description,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Required,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Default,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Operate,\n visible: true,\n },\n];\n\ninterface PropsType {\n value?: IJsonSchema;\n onChange?: (value?: IJsonSchema) => void;\n readonly?: boolean;\n config?: {\n rootKey?: string;\n viewConfigs?: TypeEditorColumnViewConfig[];\n };\n}\n\nexport function ObjectTypeEditor(props: PropsType) {\n const { value, onChange, config, readonly } = props;\n\n const { rootKey = 'outputs', viewConfigs = defaultViewConfigs } = config || {};\n\n const wrapValue: IJsonSchema = useMemo(\n () => ({\n type: 'object',\n properties: { [rootKey]: value || { type: 'object' } },\n }),\n [value, rootKey]\n );\n\n const disableEditColumn = useMemo(() => {\n const res: any[] = [];\n\n if (readonly) {\n viewConfigs.forEach((v) => {\n res.push({\n column: v.type,\n reason: 'This field is not editable.',\n });\n });\n }\n\n return res;\n }, [readonly, viewConfigs]);\n\n return (\n <div>\n <TypeEditor\n readonly={readonly}\n mode=\"type-definition\"\n toolbarConfig={[ToolbarKey.Import, ToolbarKey.UndoRedo]}\n rootLevel={1}\n value={wrapValue}\n disableEditColumn={disableEditColumn}\n onChange={(_v) => onChange?.(_v?.properties?.[rootKey])}\n onCustomSetValue={(newType) => ({\n type: 'object',\n properties: {\n [rootKey]: newType,\n },\n })}\n getRootSchema={(type) => type.properties![rootKey]}\n viewConfigs={defaultViewConfigs}\n onEditRowDataSource={(dataSource) => {\n // 不允许该行编辑 key、required\n if (dataSource[0]) {\n dataSource[0].disableEditColumn = [\n {\n column: TypeEditorColumnType.Key,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Type,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Required,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Default,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Operate,\n reason: 'This field is not editable.',\n },\n ];\n\n dataSource[0].cannotDrag = true;\n }\n\n return dataSource;\n }}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["import_table","TypeEditorColumnType","import_react","import_inversify","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_inversify","import_utils","import_react","import_utils","import_inversify","import_inversify","React","import_react","import_semi_ui","import_semi_ui","styled","React","import_react","import_utils","import_semi_ui","import_semi_icons","import_react","import_react","import_react","import_semi_ui","import_react","import_semi_ui","import_react","React","import_react","import_react","import_lodash_es","import_styled_components","import_semi_ui","styled","React","classNames","import_react","import_classnames","import_semi_ui","import_react","React","import_react","React","classNames","import_react","import_classnames","import_semi_ui","import_semi_icons","import_react","React","classNames","React","React","ViewRender","React","EditRender","import_react","import_semi_ui","setCellValue","ViewRender","React","import_react","import_semi_ui","setCellValue","ViewRender","React","import_react","import_utils","import_semi_ui","import_semi_icons","import_react","import_semi_ui","import_react","import_react","import_react","setCellValue","React","toast","import_react","import_semi_ui","import_semi_icons","import_react","React","import_react","import_semi_ui","import_semi_icons","React","ViewRender","React","EditRender","import_react","import_semi_ui","import_react","import_react","React","import_semi_ui","ViewRender","React","EditRender","import_react","import_semi_ui","TypeText","React","ViewRender","EditRender","import_react","import_lodash_es","import_semi_ui","import_react","import_styled_components","import_react_dnd","import_react","import_lodash_es","import_classnames","import_semi_ui","import_styled_components","styled","BaseIcon","import_react","import_lodash_es","traverseIJsonSchema","traverseIJsonSchema","traverseIJsonSchema","import_react","import_semi_ui","import_semi_icons","React","BaseIcon","import_react","import_styled_components","styled","React","import_react","import_classnames","import_utils","import_react","import_styled_components","styled","React","import_react","import_react","import_styled_components","styled","React","React","classNames","import_react","import_classnames","import_semi_ui","React","classNames","React","classNames","Container","styled","React","import_react","import_semi_ui","ToolbarKey","import_react","import_semi_ui","import_semi_icons","React","import_react","import_lodash_es","import_semi_ui","import_semi_illustrations","import_styled_components","styled","React","React","React","import_react","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/type-editor.ts","../src/contexts/index.tsx","../src/utils/registry-adapter.tsx","../src/type-registry/string.tsx","../src/type-registry/object.tsx","../src/type-registry/number.tsx","../src/type-registry/integer.tsx","../src/type-registry/boolean.tsx","../src/type-registry/array.tsx","../src/type-registry/index.ts","../src/services/type-registry-manager.ts","../src/services/index.tsx","../src/services/type-editor-service.ts","../src/utils/monitor-data/monitor-data.ts","../src/utils/monitor-data/use-monitor-data.ts","../src/components/type-editor/common.ts","../src/services/clipboard-service.ts","../src/services/shortcut-service.ts","../src/services/type-operation-service.ts","../src/components/type-editor/columns/value.tsx","../src/components/type-editor/hooks/disabled.ts","../src/components/type-editor/columns/style.ts","../src/components/type-editor/columns/type.tsx","../src/components/type-editor/utils.ts","../src/components/type-editor/formatter/index.ts","../src/components/type-selector/index.tsx","../src/components/type-selector/cascader-v2/index.tsx","../src/components/type-selector/cascader-v2/type-search.tsx","../src/components/type-selector/hooks/use-hight-light.tsx","../src/components/type-selector/hooks/option-value.ts","../src/components/type-selector/hooks/focus-item.ts","../src/components/type-selector/cascader-v2/style.ts","../src/components/type-selector/cascader-v2/type-cascader.tsx","../src/components/type-selector/utils/index.tsx","../src/components/type-selector/hooks/root-types.ts","../src/components/type-selector/cascader-v2/trigger.tsx","../src/components/type-selector/hooks/hot-key.ts","../src/components/type-editor/columns/required.tsx","../src/components/type-editor/columns/private.tsx","../src/components/type-editor/columns/operate.tsx","../src/components/type-editor/hooks/type-edit.ts","../src/components/type-editor/hooks/paste-data.ts","../src/components/type-editor/hooks/error-cell.ts","../src/components/type-editor/hooks/active-pos.ts","../src/components/type-editor/columns/key.tsx","../src/components/type-editor/indent.tsx","../src/components/type-editor/hooks/key-visible.tsx","../src/components/type-editor/columns/description.tsx","../src/components/type-editor/hooks/editor-listener.tsx","../src/components/type-editor/hooks/hot-key.ts","../src/components/type-editor/hooks/drag-drop.ts","../src/components/type-editor/columns/default.tsx","../src/components/type-editor/columns/index.ts","../src/components/type-editor/index.tsx","../src/components/type-editor/type-editor.tsx","../src/components/type-editor/table.tsx","../src/components/type-editor/style.ts","../src/components/type-editor/hooks/formatter-value.ts","../src/components/type-editor/mode/type-definition.ts","../src/components/type-editor/mode/declare-assign.ts","../src/components/type-editor/mode/index.ts","../src/services/utils.ts","../src/components/type-editor/header.tsx","../src/components/type-editor/drop-tip.tsx","../src/components/type-editor/cell.tsx","../src/components/feedback/feedback.tsx","../src/components/feedback/style.ts","../src/components/type-editor/hooks/blink.ts","../src/components/type-editor/error.tsx","../src/components/type-editor/body.tsx","../src/components/type-editor/tool-bar.tsx","../src/components/type-editor/type.ts","../src/components/type-editor/tools/undo-redo.tsx","../src/components/type-editor/tools/create-by-data.tsx","../src/components/type-editor/tools/style.ts","../src/preset/object-type-editor/index.tsx"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// Import Table css\nimport '@douyinfe/semi-ui/lib/es/table';\n\nexport * from './types';\nexport { TypeEditorContext } from './contexts';\nexport { columnConfigs as typeEditorColumnConfigs } from './components/type-editor/columns';\nexport * from './components';\nexport * from './services/type-editor-service';\nexport * from './services/type-registry-manager';\nexport * from '@flowgram.ai/json-schema';\nexport * from './preset';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FC, Ref } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRegistryManager } from '../services/type-registry-manager';\nimport { type ShortcutsService, type TypeEditorService } from '../services';\n\nexport interface TypeEditorPos {\n x: number;\n y: number;\n}\n\nexport interface TypeEditorDropInfo {\n rowDataId: string;\n indent: number;\n index: number;\n}\n\nexport interface TypeChangeContext {\n type: TypeEditorColumnType;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface EditorProps {\n keyCheck: boolean;\n}\n\nexport interface RenderProps<TypeSchema extends Partial<IJsonSchema>> {\n rowData: TypeEditorRowData<TypeSchema>;\n readonly?: boolean;\n onViewMode: () => void;\n typeEditor: TypeEditorService<TypeSchema>;\n onChildrenVisibleChange: (rowDataKey: string, newVal: boolean) => void;\n onChange: () => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n onEditMode: () => void;\n dragSource?: Ref<HTMLSpanElement>;\n error: boolean;\n onError?: (msg: string[]) => void;\n unOpenKeys: Record<string, boolean>;\n config: Omit<TypeEditorColumnViewConfig, 'type' | 'visible'>;\n}\n\nexport interface ShortcutContext<TypeSchema extends Partial<IJsonSchema>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n rowData: TypeEditorRowData<TypeSchema>;\n onChange: () => void;\n onRemoveEmptyLine: (id: string) => void;\n typeEditor: TypeEditorService<TypeSchema>;\n onError?: (msg?: string) => void;\n typeDefinitionService: TypeEditorRegistryManager<TypeSchema>;\n}\n\nexport interface InfoContext {\n shortcuts: ShortcutsService;\n}\nexport interface TypeEditorColumnConfig<TypeSchema extends Partial<IJsonSchema>> {\n /**\n * type\n */\n type: TypeEditorColumnType;\n /**\n * 标题\n */\n label: string;\n /**\n * 百分比\n */\n width?: number;\n /**\n * 是否可 focus\n */\n focusable?: boolean;\n /**\n * label ❓ 提示\n */\n info?: () => string;\n /**\n * 只读态 render\n */\n viewRender?: FC<RenderProps<TypeSchema>>;\n /**\n * 编辑态 render\n */\n editRender?: FC<RenderProps<TypeSchema>>;\n /**\n * 是否自定义拖拽\n */\n customDrop?: boolean;\n\n /**\n * 校验该行是否存在错误\n */\n validateCell?: (\n rowData: TypeEditorRowData<TypeSchema>,\n extra: TypeEditorSpecialConfig<TypeSchema>\n ) =>\n | {\n level: 'error' | 'warning';\n msg?: string;\n }\n | undefined;\n\n /**\n * 快捷键响应\n */\n shortcuts?: {\n onEnter?: (ctx: ShortcutContext<TypeSchema>) => void;\n onTab?: (ctx: ShortcutContext<TypeSchema>) => void;\n onUp?: (ctx: ShortcutContext<TypeSchema>) => void;\n onDown?: (ctx: ShortcutContext<TypeSchema>) => void;\n onLeft?: (ctx: ShortcutContext<TypeSchema>) => void;\n onRight?: (ctx: ShortcutContext<TypeSchema>) => void;\n onCopy?: (ctx: ShortcutContext<TypeSchema>) => void;\n onPaste?: (ctx: ShortcutContext<TypeSchema>) => void;\n onDelete?: (ctx: ShortcutContext<TypeSchema>) => void;\n };\n}\n\nexport interface TypeEditorColumnViewConfig {\n /**\n * 类型\n */\n type: TypeEditorColumnType;\n /**\n * 是否可见\n */\n visible: boolean;\n}\n\nexport interface DisableTypeInfo {\n type: string;\n reason: string;\n}\n\nexport interface TypeEditorColumnViewConfig {\n /**\n * 类型\n */\n type: TypeEditorColumnType;\n /**\n * 是否可见\n */\n visible: boolean;\n}\n\nexport enum TypeEditorColumnType {\n /**\n *\n */\n Key = 'key',\n Type = 'type',\n Required = 'required',\n Description = 'description',\n Default = 'default',\n Operate = 'operate',\n Value = 'value',\n Private = 'private',\n}\n\nexport interface TypeEditorExtraInfo {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value?: any;\n}\n\nexport type TypeEditorSchema<TypeSchema extends Partial<IJsonSchema>> = TypeSchema & {\n extra?: TypeEditorExtraInfo;\n};\n\nexport interface TypeEditorSpecialConfig<TypeSchema extends Partial<IJsonSchema>> {\n /**\n * 默认值展示模式\n *\n * default 默认编辑模式\n * server 为展示后端兜底默认值\n */\n defaultMode?: 'default' | 'server';\n /**\n * 支持自定义校验 Name 函数\n */\n customValidateName?: (name: string) => string;\n /**\n * 关闭自动修复 index\n */\n disableFixIndex?: boolean;\n\n /**\n * 是否可以编辑 key 的可见\n */\n editorVisible?: boolean | string;\n /**\n * 隐藏拖拽\n */\n hiddenDrag?: boolean;\n /**\n * 使用 extra 字段,而非 flow 字段\n */\n useExtra?: boolean;\n /**\n * type-selector 禁用类型\n */\n customDisabledTypes?: Array<DisableTypeInfo>;\n /**\n * 是否禁用 add\n */\n disabledAdd?: (rowData: TypeEditorRowData<TypeSchema>) => string;\n /**\n * 自定义默认值展示\n */\n customDefaultView?: (ctx: {\n rowData: TypeEditorRowData<TypeSchema>;\n value: unknown;\n disabled?: string;\n onChange: (value: unknown) => void;\n onSubmit: (value: unknown) => void;\n }) => JSX.Element;\n /**\n * 自定义 default 禁用规则\n */\n customDefaultEditable?: (rowData: TypeEditorRowData<TypeSchema>) => true | string;\n}\n\nexport type TypeEditorRowData<TypeSchema extends Partial<IJsonSchema>> = TypeSchema & {\n /**\n * 当前行的唯一值\n */\n id: string;\n /**\n * key 值\n */\n key: string;\n /**\n * 是否必填\n */\n isRequired: boolean;\n /**\n * 层数\n */\n level: number;\n /**\n * rowData 关联的 IJsonSchema\n */\n self: TypeEditorSchema<TypeSchema>;\n /**\n * 父节点 IJsonSchema\n */\n parent?: TypeEditorSchema<TypeSchema>;\n /**\n * 子节点个数,只包括子类型\n */\n childrenCount: number;\n /**\n * 子节点个数,包括子类型嵌套类型\n */\n deepChildrenCount: number;\n /**\n * 不能编辑的列\n * 和 IJsonSchema 中 editable 的关系\n * editable 为 false,会将 disableEditColumn 每个 column 都填上\n */\n disableEditColumn?: Array<{ column: TypeEditorColumnType; reason: string }>;\n /**\n * 是否不能拖拽\n */\n cannotDrag?: boolean;\n /**\n * 行\n */\n index: number;\n /**\n *\n */\n extraConfig: TypeEditorSpecialConfig<TypeSchema>;\n\n /**\n * 父节点 rowId\n */\n parentId?: string;\n /**\n * path\n */\n path: string[];\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { createContext, useContext, useEffect, useMemo } from 'react';\n\nimport { Container, interfaces } from 'inversify';\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\n\nimport {\n getTypeDefinitionAdapter,\n ITypeDefinitionAdapter,\n registryFormatter,\n} from '../utils/registry-adapter';\nimport { TypeEditorRegistry } from '../types';\nimport { defaultTypeRegistryCreators } from '../type-registry';\nimport { TypeEditorRegistryManager } from '../services/type-registry-manager';\nimport {\n ClipboardService,\n ShortcutsService,\n TypeEditorOperationService,\n TypeEditorService,\n} from '../services';\n\nexport type TypeRegistryCreatorsAdapter<TypeSchema extends Partial<IJsonSchema>> = (\n param: Parameters<JsonSchemaTypeRegistryCreator<TypeSchema, TypeEditorRegistry<TypeSchema>>>[0] &\n ITypeDefinitionAdapter<TypeSchema>\n) => ReturnType<JsonSchemaTypeRegistryCreator<TypeSchema, TypeEditorRegistry<TypeSchema>>>;\n\nexport const TypeEditorContext = createContext<{\n /**\n * @deprecated\n */\n typeRegistryCreators?: TypeRegistryCreatorsAdapter<IJsonSchema>[];\n}>({});\n\ninterface Context {\n container: Container;\n}\n\nconst TypeContext = createContext<Context>({\n container: new Container(),\n});\n\nexport function useService<T>(identifier: interfaces.ServiceIdentifier): T {\n const container = useContext(TypeContext).container;\n\n return container.get(identifier) as T;\n}\n\nexport const TypeEditorProvider = <TypeSchema extends Partial<IJsonSchema>>({\n children,\n typeRegistryCreators = [],\n onInit,\n}: Parameters<\n React.FunctionComponent<{\n children: JSX.Element;\n onInit?: () => void;\n typeRegistryCreators?: TypeRegistryCreatorsAdapter<TypeSchema>[];\n }>\n>[0]) => {\n const container = useMemo(() => {\n const res = new Container();\n\n res.bind(TypeEditorService).toSelf().inSingletonScope();\n res.bind(TypeEditorOperationService).toSelf().inSingletonScope();\n res.bind(TypeEditorRegistryManager).toSelf().inSingletonScope();\n res.bind(ShortcutsService).toSelf().inSingletonScope();\n res.bind(ClipboardService).toSelf().inSingletonScope();\n\n return res;\n }, []);\n\n useEffect(() => {\n const typeManager =\n container.get<TypeEditorRegistryManager<TypeSchema>>(TypeEditorRegistryManager);\n\n [...defaultTypeRegistryCreators].forEach((creator) => {\n typeManager.register(\n creator as unknown as JsonSchemaTypeRegistryCreator<\n TypeSchema,\n TypeEditorRegistry<TypeSchema>\n >\n );\n });\n }, [container]);\n\n useEffect(() => {\n const typeManager =\n container.get<TypeEditorRegistryManager<TypeSchema>>(TypeEditorRegistryManager);\n\n const adapter = getTypeDefinitionAdapter(typeManager);\n\n typeRegistryCreators.forEach((creator) => {\n typeManager.register(creator({ typeManager, ...adapter }));\n });\n\n typeManager.getAllTypeRegistries().forEach((registry) => {\n const res = registryFormatter(registry, typeManager);\n typeManager.register(res);\n });\n\n typeManager.triggerChanges();\n onInit?.();\n }, [typeRegistryCreators, onInit, container]);\n\n return <TypeContext.Provider value={{ container }}>{children}</TypeContext.Provider>;\n};\n\nexport const useTypeDefinitionManager = <TypeSchema extends Partial<IJsonSchema>>() =>\n useService<TypeEditorRegistryManager<TypeSchema>>(TypeEditorRegistryManager);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space, Typography } from '@douyinfe/semi-ui';\n\nimport { TypeEditorRegistry } from '../types';\nimport { TypeEditorRegistryManager } from '../services/type-registry-manager';\n\nexport const registryFormatter = <TypeSchema extends Partial<IJsonSchema>>(\n registry: Partial<TypeEditorRegistry<TypeSchema>>,\n manager: TypeEditorRegistryManager<TypeSchema>\n): Partial<TypeEditorRegistry<TypeSchema>> => {\n const res: Record<string, unknown> = {\n ...registry,\n };\n\n const apiMap: Record<string, string> = {\n getItemTypes: 'getSupportedItemTypes',\n getIJsonSchemaByStringValue: 'getTypeSchemaByStringValue',\n getStringValue: 'getStringValueByTypeSchema',\n getIJsonSchemaProperties: 'getTypeSchemaProperties',\n getIJsonSchemaPropertiesParent: 'getPropertiesParent',\n getChildrenExtraJsonPaths: 'getJsonPaths',\n getDefaultIJsonSchema: 'getDefaultSchema',\n };\n\n Object.keys(apiMap).forEach((api) => {\n if (res[api]) {\n res[apiMap[api]] = res[api];\n }\n if (res[apiMap[api]]) {\n res[api] = res[apiMap[api]];\n }\n });\n\n return {\n ...res,\n getDisplayLabel: (type: IJsonSchema) => (\n <Space style={{ width: '100%' }}>\n {manager?.getDisplayIcon(type as TypeSchema)}\n <div style={{ flex: 1, width: 0, display: 'flex' }}>\n <Typography.Text size=\"small\" ellipsis={{ showTooltip: true }}>\n {manager.getComplexText(type as TypeSchema)}\n </Typography.Text>\n </div>\n </Space>\n ),\n getIJsonSchemaDeepField: (type: TypeSchema) => manager.getTypeSchemaDeepChildField(type),\n } as unknown as TypeEditorRegistry<TypeSchema>;\n};\n\ninterface ITypeDefinitionManager<TypeSchema extends Partial<IJsonSchema>> {\n getDefinitionByIJsonSchema: (\n typeSchema?: TypeSchema\n ) => TypeEditorRegistry<TypeSchema> | undefined;\n getAllTypeDefinitions: () => TypeEditorRegistry<TypeSchema>[];\n getDefinitionByType: (type: string) => TypeEditorRegistry<TypeSchema> | undefined;\n getUndefinedIJsonSchema: () => TypeSchema;\n}\n\nexport interface ITypeDefinitionAdapter<TypeSchema extends Partial<IJsonSchema>> {\n /**\n * @deprecated 兼容旧接口,已废弃,请使用 typeRegistryManager\n */\n typeDefinitionManager: ITypeDefinitionManager<TypeSchema>;\n /**\n * @deprecated 兼容旧接口,已废弃,请使用 typeRegistryManager 的 getComplexText 方法\n */\n utils: {\n getComposedLabel: (type: TypeSchema) => string;\n };\n}\n\nexport const getTypeDefinitionAdapter = <TypeSchema extends Partial<IJsonSchema>>(\n manager: TypeEditorRegistryManager<TypeSchema>\n): ITypeDefinitionAdapter<TypeSchema> => {\n const typeDefinitionManager: ITypeDefinitionManager<TypeSchema> = {\n getDefinitionByIJsonSchema: (typeSchema?: TypeSchema) =>\n typeSchema ? manager.getTypeBySchema(typeSchema) : undefined,\n getAllTypeDefinitions: () => manager.getTypeRegistriesWithParentType(),\n getDefinitionByType: (type) => manager.getTypeByName(type),\n getUndefinedIJsonSchema: () => manager.getTypeByName('unknown')!.getDefaultSchema(),\n };\n\n return {\n typeDefinitionManager,\n utils: {\n getComposedLabel: (type: TypeSchema) => manager.getComplexText(type),\n },\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Input } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const stringRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'string',\n getInputNode: ({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>) => (\n <Input\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n }}\n autoFocus\n value={value}\n onChange={onChange}\n onBlur={onSubmit}\n />\n ),\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Typography } from '@douyinfe/semi-ui';\n\nexport const objectRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'object',\n getInputNode: (): React.JSX.Element => (\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: '0 8px',\n }}\n >\n <Typography.Text>Not Supported</Typography.Text>\n </div>\n ),\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { InputNumber } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const numberRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'number',\n getInputNode({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>): React.JSX.Element {\n return (\n <InputNumber\n autoFocus\n value={value}\n style={{ width: '100%', height: '100%' }}\n onChange={onChange}\n onBlur={onSubmit}\n />\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { InputNumber } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const integerRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'integer',\n getInputNode({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>): React.JSX.Element {\n return (\n <InputNumber\n autoFocus\n value={value}\n style={{ width: '100%', height: '100%' }}\n onChange={onChange}\n onBlur={onSubmit}\n />\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Select } from '@douyinfe/semi-ui';\n\nimport { TypeInputContext } from '../types';\n\nexport const booleanRegistryCreator: JsonSchemaTypeRegistryCreator = () => ({\n type: 'boolean',\n\n getInputNode({ value, onChange, onSubmit }: TypeInputContext<IJsonSchema>): React.JSX.Element {\n return (\n <Select\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n background: 'var(--semi-color-bg-0)',\n }}\n optionList={[\n {\n value: 1,\n label: 'True',\n },\n {\n value: 0,\n label: 'False',\n },\n ]}\n className={'flow-type-select'}\n value={Number(value)}\n onSelect={(v) => {\n onChange(Boolean(v));\n onSubmit();\n }}\n />\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema, JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\nimport { Space, Typography } from '@douyinfe/semi-ui';\n\nexport const arrayRegistryCreator: JsonSchemaTypeRegistryCreator = ({ typeManager }) => ({\n type: 'array',\n\n getDisplayLabel: (type: IJsonSchema) => {\n const config = typeManager.getTypeBySchema(type);\n\n return (\n <Space style={{ width: '100%' }}>\n {config?.getDisplayIcon(type) || config?.icon}\n <div style={{ flex: 1, width: 0, display: 'flex' }}>\n <Typography.Text size=\"small\" ellipsis={{ showTooltip: true }}>\n {typeManager.getComplexText(type)}\n </Typography.Text>\n </div>\n </Space>\n );\n },\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// import { TypeDefinitionRegistryCreator } from '@flow-ide-editor/flow-schema-type-definitions';\n\nimport { JsonSchemaTypeRegistryCreator } from '@flowgram.ai/json-schema';\n\nimport { stringRegistryCreator } from './string';\nimport { objectRegistryCreator } from './object';\nimport { numberRegistryCreator } from './number';\nimport { integerRegistryCreator } from './integer';\nimport { booleanRegistryCreator } from './boolean';\nimport { arrayRegistryCreator } from './array';\n\nexport const defaultTypeRegistryCreators: JsonSchemaTypeRegistryCreator[] = [\n stringRegistryCreator,\n numberRegistryCreator,\n integerRegistryCreator,\n booleanRegistryCreator,\n objectRegistryCreator,\n arrayRegistryCreator,\n];\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { JsonSchemaTypeManager, IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRegistry } from '../types';\n\nexport class TypeEditorRegistryManager<\n TypeSchema extends Partial<IJsonSchema>\n> extends JsonSchemaTypeManager<TypeSchema, TypeEditorRegistry<TypeSchema>> {}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable import/no-unresolved */\nimport 'reflect-metadata';\nexport * from './type-editor-service';\nexport * from './shortcut-service';\nexport * from './clipboard-service';\nexport * from './type-operation-service';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { inject, injectable } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { MonitorData } from '../utils';\nimport {\n type TypeEditorColumnType,\n type TypeEditorRowData,\n TypeEditorDropInfo,\n TypeEditorColumnConfig,\n TypeEditorPos,\n TypeEditorColumnViewConfig,\n ShortcutContext,\n} from '../types';\nimport { TypeRegistryCreatorsAdapter } from '../contexts';\nimport { ROOT_FIELD_ID } from '../components/type-editor/common';\nimport { TypeEditorRegistryManager } from './type-registry-manager';\nimport { ClipboardService } from './clipboard-service';\n\n@injectable()\nexport class TypeEditorService<TypeSchema extends Partial<IJsonSchema>> {\n private _configs: Map<TypeEditorColumnType, TypeEditorColumnConfig<TypeSchema>> = new Map();\n\n private _activePos: TypeEditorPos = { x: -1, y: -1 };\n\n // -1 为 header\n private _dropInfo: TypeEditorDropInfo = {\n rowDataId: '',\n indent: -1,\n index: -2,\n };\n\n public errorMsgs = new MonitorData<{ pos: TypeEditorPos; msg?: string }[]>([]);\n\n public editValue: unknown;\n\n public onChange: (\n typeSchema?: TypeSchema,\n ctx?: {\n storeState?: boolean;\n }\n ) => void;\n\n public onRemoveEmptyLine: (id: string) => void;\n\n public onGlobalAdd: ((id: string) => void) | undefined;\n\n public typeRegistryCreators?: TypeRegistryCreatorsAdapter<TypeSchema>[];\n\n private dataSource: TypeEditorRowData<TypeSchema>[] = [];\n\n public dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>> = {};\n\n public dataSourceTouchedMap: Record<string, boolean> = {};\n\n public blink = new MonitorData(false);\n\n public columnViewConfig: TypeEditorColumnViewConfig[] = [];\n\n public onActivePosChange = new Emitter<TypeEditorPos>();\n\n public onDropInfoChange = new Emitter<TypeEditorDropInfo>();\n\n @inject(ClipboardService)\n public clipboard: ClipboardService;\n\n @inject(TypeEditorRegistryManager)\n public typeDefinition: TypeEditorRegistryManager<TypeSchema>;\n\n public rootTypeSchema: TypeSchema;\n\n public setErrorMsg = (pos: TypeEditorPos, msg?: string) => {\n const newMsgs = [...this.errorMsgs.data];\n const item = newMsgs.find((v) => v.pos.x === pos.x && v.pos.y === pos.y);\n if (item) {\n item.msg = msg;\n } else {\n newMsgs.push({ pos, msg });\n }\n this.errorMsgs.update(newMsgs);\n };\n\n public refreshErrorMsgAfterRemove = (index: number) => {\n // 删除被删去那行的 errorMsgs\n const newMsgs = this.errorMsgs.data.filter((msg) => msg.pos.y !== index);\n\n newMsgs.forEach((msg) => {\n if (msg.pos.y > index) {\n msg.pos.y = msg.pos.y - 1;\n }\n });\n\n this.errorMsgs.update(newMsgs);\n };\n\n public checkActivePosError = () => {\n const pos = this.activePos;\n\n return !!this.errorMsgs.data.find((v) => v.pos.x === pos.x && v.pos.y === pos.y && v.msg);\n };\n\n public setEditValue = (val: unknown) => {\n this.editValue = val;\n };\n\n public registerConfigs(\n config: TypeEditorColumnConfig<TypeSchema> | TypeEditorColumnConfig<TypeSchema>[]\n ): void {\n const configs = Array.isArray(config) ? config : [config];\n\n configs.map((c) => {\n this._configs.set(c.type, c);\n });\n }\n\n public addConfigProps(\n type: TypeEditorColumnType,\n config: Partial<Omit<TypeEditorColumnConfig<TypeSchema>, 'type'>>\n ): void {\n const configByType = this.getConfigByType(type);\n\n if (!configByType) {\n return;\n }\n\n const newConfig = {\n ...configByType,\n ...config,\n };\n\n this._configs.set(type, newConfig);\n }\n\n public getConfigs = (): TypeEditorColumnConfig<TypeSchema>[] =>\n Array.from(this._configs.values());\n\n public getConfigByType(\n type: TypeEditorColumnType\n ): TypeEditorColumnConfig<TypeSchema> | undefined {\n return this._configs.get(type);\n }\n\n public triggerShortcutEvent(\n event: 'enter' | 'tab' | 'left' | 'right' | 'up' | 'down' | 'copy' | 'paste' | 'delete'\n ): void {\n const column = this.columnViewConfig[this.activePos.x];\n\n const columnConfig = this.getConfigByType(column?.type);\n if (!columnConfig) {\n return;\n }\n\n const ctx: ShortcutContext<TypeSchema> = {\n value: this.editValue,\n rowData: this.dataSource[this.activePos.y],\n onRemoveEmptyLine: this.onRemoveEmptyLine,\n onChange: this.onChange,\n typeEditor: this,\n typeDefinitionService: this.typeDefinition,\n };\n\n switch (event) {\n case 'enter': {\n columnConfig.shortcuts?.onEnter?.(ctx);\n return;\n }\n case 'tab': {\n columnConfig.shortcuts?.onTab?.(ctx);\n return;\n }\n case 'down': {\n columnConfig.shortcuts?.onDown?.(ctx);\n return;\n }\n case 'up': {\n columnConfig.shortcuts?.onUp?.(ctx);\n return;\n }\n case 'left': {\n columnConfig.shortcuts?.onLeft?.(ctx);\n return;\n }\n case 'right': {\n columnConfig.shortcuts?.onRight?.(ctx);\n return;\n }\n case 'copy': {\n columnConfig.shortcuts?.onCopy?.(ctx);\n return;\n }\n case 'paste': {\n columnConfig.shortcuts?.onPaste?.(ctx);\n return;\n }\n case 'delete': {\n columnConfig.shortcuts?.onDelete?.(ctx);\n return;\n }\n\n default: {\n return;\n }\n }\n }\n\n public get activePos(): TypeEditorPos {\n return this._activePos;\n }\n\n private checkRowDataColumnCanEdit = (\n rowData: TypeEditorRowData<TypeSchema>,\n column: TypeEditorColumnType\n ): boolean =>\n !(rowData.disableEditColumn || []).map((v) => v.column).includes(column) &&\n this.getConfigByType(column)?.focusable !== false;\n\n /**\n * 获取可编辑的下一列/上一列\n */\n private getCanEditColumn(originPos: TypeEditorPos, direction: 'next' | 'last'): TypeEditorPos {\n const newX =\n (originPos.x + this.columnViewConfig.length + (direction === 'next' ? 1 : -1)) %\n this.columnViewConfig.length;\n\n const newPos = {\n y: originPos.y,\n x: newX,\n };\n\n if (\n this.checkRowDataColumnCanEdit(\n this.dataSource[newPos.y],\n this.columnViewConfig[newPos.x].type\n )\n ) {\n return newPos;\n }\n\n return this.getCanEditColumn(newPos, direction);\n }\n\n /**\n * 获取可编辑的下一行/上一行\n */\n private getCanEditLine(originPos: TypeEditorPos, direction: 'next' | 'last'): TypeEditorPos {\n const newY =\n (originPos.y + this.dataSource.length + (direction === 'next' ? 1 : -1)) %\n this.dataSource.length;\n\n const newPos = {\n y: newY,\n x: originPos.x,\n };\n\n if (\n this.checkRowDataColumnCanEdit(\n this.dataSource[newPos.y],\n this.columnViewConfig[newPos.x].type\n )\n ) {\n return newPos;\n }\n\n return this.getCanEditLine(newPos, direction);\n }\n\n /**\n * 获取下一个可编辑的\n */\n private getNextEditItem = (pos: TypeEditorPos): TypeEditorPos => {\n const newPos = { ...pos };\n\n if (newPos.x === this.columnViewConfig.length - 1) {\n newPos.y = (1 + newPos.y) % this.dataSource.length;\n newPos.x = 0;\n } else {\n newPos.x = newPos.x + 1;\n }\n\n if (\n this.checkRowDataColumnCanEdit(\n this.dataSource[newPos.y],\n this.columnViewConfig[newPos.x].type\n )\n ) {\n return newPos;\n }\n\n return this.getNextEditItem(newPos);\n };\n\n public moveActivePosToNextLine(): void {\n const newPos = this.getCanEditLine(this.activePos, 'next');\n\n this.setActivePos(newPos);\n }\n\n public moveActivePosToNextLineWithAddLine(rowData: TypeEditorRowData<TypeSchema>): void {\n const newPos = { ...this.activePos };\n\n if (!rowData.parentId) {\n return;\n }\n\n const parentData = this.dataSourceMap[rowData.parentId] || this.dataSourceMap[ROOT_FIELD_ID];\n\n const id = this.dataSourceMap[rowData.parentId] ? rowData.parentId : ROOT_FIELD_ID;\n const addChild = parentData.index + parentData.deepChildrenCount === rowData.index;\n\n if (addChild) {\n if (this.onGlobalAdd) {\n this.onGlobalAdd(id);\n newPos.y = newPos.y + 1;\n } else {\n newPos.y = -1;\n }\n } else {\n newPos.y = newPos.y + 1;\n }\n this.setActivePos(newPos);\n }\n\n public moveActivePosToLastLine(): void {\n const newPos = this.getCanEditLine(this.activePos, 'last');\n\n this.setActivePos(newPos);\n }\n\n public moveActivePosToLastColumn(): void {\n const newPos = this.getCanEditColumn(this.activePos, 'last');\n this.setActivePos(newPos);\n }\n\n public moveActivePosToNextColumn(): void {\n const newPos = this.getCanEditColumn(this.activePos, 'next');\n\n this.setActivePos(newPos);\n }\n\n public moveActivePosToNextItem(): void {\n const newPos = this.getNextEditItem(this.activePos);\n\n this.setActivePos(newPos);\n }\n\n public setActivePos(pos: TypeEditorPos): void {\n if (this.checkActivePosError()) {\n return;\n }\n this._activePos = pos;\n\n this.onActivePosChange.fire(this._activePos);\n }\n\n public clearActivePos(): void {\n this._activePos = { x: -1, y: -1 };\n this.onActivePosChange.fire(this._activePos);\n }\n\n public setDataSource(newData: TypeEditorRowData<TypeSchema>[]): void {\n this.dataSource = newData;\n }\n\n public getDataSource(): TypeEditorRowData<TypeSchema>[] {\n return this.dataSource;\n }\n\n public setColumnViewConfig(config: TypeEditorColumnViewConfig[]): void {\n this.columnViewConfig = config;\n }\n\n public get dropInfo(): TypeEditorDropInfo {\n return this._dropInfo;\n }\n\n public setDropInfo(dropInfo: TypeEditorDropInfo): void {\n if (\n dropInfo.indent === this.dropInfo.indent &&\n this.dropInfo.rowDataId === dropInfo.rowDataId &&\n this.dropInfo.index === dropInfo.index\n ) {\n return;\n }\n this._dropInfo = dropInfo;\n this.onDropInfoChange.fire(dropInfo);\n }\n\n public clearDropInfo(): void {\n this.setDropInfo({ rowDataId: '', indent: -1, index: -2 });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { Emitter, type Event } from '@flowgram.ai/utils';\n\n/**\n * 定义用于在 service 的一些需要被监听 onChange 的 data\n * 搭配 useMonitorData 使用\n */\nexport class MonitorData<Type> {\n private _data: Type;\n\n protected readonly onDataChangeEmitter = new Emitter<{\n prev: Type;\n next: Type;\n }>();\n\n readonly onDataChange: Event<{\n prev: Type;\n next: Type;\n }> = this.onDataChangeEmitter.event;\n\n public get data(): Type {\n return this._data;\n }\n\n public constructor(initialValue?: Type) {\n if (initialValue !== undefined) {\n this._data = initialValue;\n }\n }\n\n public update(data: Type) {\n const prev = this._data;\n this._data = data;\n this.onDataChangeEmitter.fire({\n prev,\n next: data,\n });\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { type MonitorData } from './monitor-data';\n\nexport const useMonitorData = <Type>(\n monitorData: MonitorData<Type> | undefined\n): { data: Type | undefined } => {\n const [data, setData] = useState(monitorData?.data);\n\n useEffect(() => {\n const dispose = monitorData?.onDataChange(({ prev, next }) => {\n setData(next);\n });\n return () => {\n dispose?.dispose();\n };\n }, [monitorData]);\n\n return {\n data,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * empty key 前缀\n */\nexport const SUFFIX = '___empty___';\n\n/**\n * 表格 header 高度\n */\nexport const HEADER_HIGHT = 36;\n/**\n * 表格 cell 高度\n * 36 高度 + 1px border\n */\nexport const CELL_HIGHT = 36 + 1;\n\n/**\n * cell padding 宽度\n */\nexport const CELL_PADDING = 8;\n\n/**\n * 单个缩进的宽度\n */\nexport const INDENT_WIDTH = 16;\n\n/**\n * 操作栏高度\n */\nexport const TAB_BRA_HIGHT = 0;\n\n/**\n * test id 前缀\n */\nexport const COMPONENT_ID_PREFIX = 'type-editor-component-id';\n\n/**\n * root 字段 id\n */\nexport const ROOT_FIELD_ID = 'root';\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\nimport { Event, Emitter } from '@flowgram.ai/utils';\n\n@injectable()\nexport class ClipboardService {\n public readonly onClipboardChangedEmitter = new Emitter<string>();\n\n readonly onClipboardChanged: Event<string> = this.onClipboardChangedEmitter.event;\n\n /**\n * 读取浏览器数据\n */\n private get data(): Promise<string> {\n return navigator.clipboard.readText();\n }\n\n private async saveReadData(): Promise<{\n error?: string;\n data?: string;\n }> {\n try {\n const data = await this.data;\n return {\n data,\n };\n } catch (error) {\n return {\n error: error as string,\n };\n }\n }\n\n /**\n * 设置剪切板数据\n */\n public async writeData(newStrData: string): Promise<void> {\n const oldSaveData = await this.saveReadData();\n\n // 读取错误可能是没有读取权限,此时不校验是否相等,直接写入剪切板\n if (oldSaveData.error || oldSaveData.data !== newStrData) {\n if (navigator.clipboard && window.isSecureContext) {\n await navigator.clipboard.writeText(newStrData);\n const event = document.createEvent('Event');\n event.initEvent('onchange');\n (event as unknown as { value: string }).value = newStrData;\n navigator.clipboard.dispatchEvent(event);\n } else {\n const textarea = document.createElement('textarea');\n textarea.value = newStrData;\n\n // 视区以外渲染 dom,无法 display none,否则无文本 copy\n textarea.style.display = 'absolute';\n textarea.style.left = '-99999999px';\n\n document.body.prepend(textarea);\n\n // highlight the content of the textarea element\n textarea.select();\n\n try {\n document.execCommand('copy');\n } catch (err) {\n console.log(err);\n } finally {\n textarea.remove();\n }\n }\n\n this.onClipboardChangedEmitter.fire(newStrData);\n }\n }\n\n /**\n * 获取剪切板数据\n */\n\n public async readData(): Promise<string> {\n const res = await this.saveReadData();\n if (res.error) {\n throw Error(res.error);\n }\n return res.data || '';\n }\n\n public clearData(): void {\n this.writeData('');\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { injectable } from 'inversify';\n\n@injectable()\nexport class ShortcutsService {}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { isEqual } from 'lodash-es';\nimport { injectable } from 'inversify';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { MonitorData } from '../utils';\n\ninterface StackItem {\n id: string;\n value: string;\n}\n\n// 操作注册\n@injectable()\nexport class TypeEditorOperationService<TypeSchema extends Partial<IJsonSchema>> {\n public undoStack: StackItem[] = [];\n\n public redoStack: StackItem[] = [];\n\n private _id_idx = 0;\n\n private _getNewId(): string {\n return `${this._id_idx++}`;\n }\n\n public _storeState = (value: TypeSchema) => {\n if (this.redoStack.length > 0) {\n this.redoStack.splice(0);\n }\n\n this.undoStack.push({\n id: this._getNewId(),\n value: JSON.stringify(value),\n });\n this.refreshUndoRedoStatus();\n };\n\n public canUndo = new MonitorData(false);\n\n public canRedo = new MonitorData(false);\n\n public constructor() {\n this.refreshUndoRedoStatus();\n }\n\n public refreshUndoRedoStatus() {\n this.canRedo.update(this.redoStack.length !== 0);\n this.canUndo.update(this.undoStack.length > 1);\n }\n\n public getCurrentState(): TypeSchema | undefined {\n const top = this.undoStack[this.undoStack.length - 1];\n\n if (top) {\n return JSON.parse(top.value);\n }\n return;\n }\n\n public clear(): void {\n this.undoStack = [];\n this.redoStack = [];\n }\n\n public storeState(value: TypeSchema): void {\n if (isEqual(this.getCurrentState(), value)) {\n return;\n }\n\n this._storeState(value);\n }\n\n public async undo(): Promise<void> {\n const top = this.undoStack.pop();\n if (top) {\n this.redoStack.push(top);\n }\n\n this.refreshUndoRedoStatus();\n }\n\n public async redo(): Promise<void> {\n const top = this.redoStack.pop();\n\n if (top) {\n this.undoStack.push(top);\n }\n\n this.refreshUndoRedoStatus();\n }\n\n public debugger(): void {\n console.log('getCurrentState - debugger', this.getCurrentState());\n }\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip, Typography } from '@douyinfe/semi-ui';\n// import { TypeInput, TypeText } from '@api-builder/base-type-definition';\n\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport {\n GlobalSelectStyle,\n KeyEditorContainer,\n KeyViewContainer,\n TypeTextContainer,\n} from './style';\n\nexport const TypeText: FC<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value?: any;\n type: IJsonSchema;\n}> = ({ value, type }) => {\n const typeDefinition = useTypeDefinitionManager();\n\n const content = useMemo(() => {\n const config = typeDefinition.getTypeBySchema(type);\n\n return config?.getValueText ? config.getValueText(value) : value || '';\n }, [value, type]);\n\n return (\n <TypeTextContainer>\n <Typography.Text ellipsis={{ showTooltip: true }}>{content}</Typography.Text>\n </TypeTextContainer>\n );\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({ rowData, onEditMode }) => {\n const disabled = useDisabled(TypeEditorColumnType.Value, rowData);\n\n if (disabled) {\n return (\n <KeyViewContainer disabled>\n <Tooltip content={disabled}>\n <div style={{ width: '100%', height: '100%' }}>\n <TypeText value={rowData.self?.extra?.value} type={rowData.self} />\n </div>\n </Tooltip>\n </KeyViewContainer>\n );\n }\n\n return (\n <KeyViewContainer onClick={() => onEditMode()}>\n <TypeText value={rowData.self?.extra?.value} type={rowData.self} />\n </KeyViewContainer>\n );\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const valueRef = useRef(rowData.self.extra?.value);\n const [value, setValue] = useState(rowData.self.extra?.value);\n const typeDefinition = useTypeDefinitionManager();\n const config = useMemo(() => typeDefinition.getTypeBySchema(rowData.self), [rowData.self]);\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n useEffect(() => {\n setValue(rowData.self.extra?.value);\n valueRef.current = rowData.self.extra?.value;\n }, [rowData.self.extra?.value]);\n\n const handleSubmit = useCallback(() => {\n if (!rowData.self.extra) {\n rowData.self.extra = {};\n }\n\n rowData.self.extra.value = valueRef.current;\n onChange();\n\n onViewMode();\n }, [onChange, rowData]);\n\n return (\n <KeyEditorContainer>\n <GlobalSelectStyle />\n {config &&\n config?.getInputNode?.({\n value: value,\n onChange: (v: unknown) => {\n valueRef.current = v;\n setValue(v);\n },\n type: rowData.self,\n onSubmit: () => {\n handleSubmit();\n onViewMode();\n },\n })}\n </KeyEditorContainer>\n );\n};\n\nexport const valueColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Value,\n width: 15,\n label: 'Value',\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ rowData, onChange, typeEditor, value, typeDefinitionService }) => {\n const config = typeDefinitionService.getTypeBySchema(rowData.self);\n if (config?.typeInputConfig?.canEnter) {\n rowData.self.description = value;\n\n onChange();\n typeEditor.moveActivePosToNextLine();\n }\n },\n onTab: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.description = value;\n onChange();\n typeEditor.moveActivePosToNextItem();\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorColumnType, TypeEditorRowData } from '../../../types';\n\nexport const useDisabled = <TypeSchema extends Partial<IJsonSchema>>(\n type: TypeEditorColumnType,\n rowData: TypeEditorRowData<TypeSchema>\n): string | undefined => {\n const disabled = (rowData.disableEditColumn || []).find((r) => r.column === type);\n\n if (disabled?.reason) {\n return disabled?.reason;\n }\n\n if (typeof rowData.extra?.editable === 'string') {\n return rowData.extra?.editable;\n }\n\n return rowData.extra?.editable === false ? `${type} is not editable.` : undefined;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { Input, Typography } from '@douyinfe/semi-ui';\n\nexport const KeyViewContainer = styled.div<{\n disabled?: boolean;\n}>`\n width: 100%;\n display: flex;\n align-items: center;\n height: 20px;\n ${(props) => (props.disabled ? 'cursor: not-allowed !important;' : '')}\n svg {\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n }\n`;\n\nexport const KeyViewContent = styled.div`\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n width: 0;\n flex: 1;\n`;\n\nexport const KeyEditorContainer = styled.div`\n height: 100%;\n width: 100%;\n display: flex;\n\n svg {\n flex-shrink: 0;\n }\n\n .semi-input-wrapper-focus {\n border-color: transparent !important;\n }\n\n .semi-input-wrapper:hover {\n background-color: var(--semi-color-fill-0);\n }\n\n .semi-cascader:hover {\n background-color: var(--semi-color-fill-0);\n }\n\n .semi-cascader:focus {\n border-color: transparent !important;\n }\n\n .semi-cascader-focus {\n border-color: transparent !important;\n }\n`;\n\nexport const KeyEditorInput = styled(Input)`\n flex: 1;\n height: 100%;\n display: flex;\n align-items: center;\n input {\n font-size: 12px !important;\n }\n`;\n\nexport const KeyViewText = styled(Typography.Text)<{\n disabled?: boolean;\n}>`\n flex: 1;\n cursor: text;\n font-size: 12px;\n height: 100%;\n ${(props) =>\n props.disabled\n ? `\n cursor: not-allowed !important;\n `\n : ''}\n`;\n\nexport const BaseIcon = styled.div<{\n draggable?: boolean;\n triangle?: boolean;\n disabled?: boolean;\n primary?: boolean;\n isRotate?: boolean;\n}>`\n color: var(--semi-color-text-2);\n cursor: pointer;\n\n ${(props) =>\n props.draggable\n ? `\n cursor: grab;\n margin-right: 4px;\n `\n : ''}\n\n ${(props) =>\n props.triangle\n ? `\n transform: rotate(270deg);\n\n `\n : ''}\n\n ${(props) =>\n props.isRotate\n ? `\n transform: rotate(360deg);\n\n `\n : ''}\n\n ${(props) =>\n props.disabled\n ? `\n opacity: 0.5;\n cursor: not-allowed;\n `\n : ''}\n\n ${(props) =>\n props.primary\n ? `\n color: var(--semi-color-primary) !important;\n `\n : ''}\n\n &:hover {\n color: var(--semi-color-primary);\n }\n`;\n\nexport const CenterContainer = styled.div`\n width: 100%;\n height: 20px;\n display: flex;\n align-items: center;\n gap: 12px;\n justify-content: center;\n`;\n\nexport const TypeDisableViewContainer = styled(KeyViewContainer)`\n color: var(--semi-color-disabled-text) !important;\n cursor: not-allowed;\n font-size: 12px;\n\n :global {\n .semi-typography {\n color: var(--semi-color-disabled-text) !important;\n }\n }\n`;\n\nexport const TypeTextContainer = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n box-sizing: border-box;\n align-items: center;\n padding: 1px 5px;\n`;\n\nexport const GlobalSelectStyle = createGlobalStyle`\n .semi-select {\n border: none !important\n }\n\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { pick } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Toast, Tooltip } from '@douyinfe/semi-ui';\nimport { IconHelpCircle } from '@douyinfe/semi-icons';\n\nimport { typeEditorUtils } from '../utils';\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeSelector } from '../../type-selector';\nimport { TypeEditorColumnConfig, TypeEditorColumnType, TypeEditorRowData } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { BaseIcon, KeyEditorContainer, KeyViewContainer, TypeDisableViewContainer } from './style';\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({ rowData, onEditMode }) => {\n const typeService = useTypeDefinitionManager();\n\n const disabled = useDisabled(TypeEditorColumnType.Type, rowData);\n const [refresh, setRefresh] = useState(0);\n\n useEffect(() => {\n typeService.onTypeRegistryChange(() => {\n setRefresh((v) => v + 1);\n });\n }, [typeService]);\n\n const typeConfig = useMemo(() => typeService.getTypeBySchema(rowData.self), [refresh, rowData]);\n\n const unknownNode = (\n <BaseIcon>\n <IconHelpCircle style={{ marginRight: 4 }} />\n Unknown\n </BaseIcon>\n );\n\n return disabled ? (\n <>\n <TypeDisableViewContainer>\n <Tooltip content={disabled}>\n {typeConfig?.getDisplayLabel?.(rowData) || unknownNode}\n </Tooltip>\n </TypeDisableViewContainer>\n </>\n ) : (\n <KeyViewContainer\n onClick={() => {\n onEditMode();\n }}\n >\n {typeConfig?.getDisplayLabel?.(rowData) || unknownNode}\n </KeyViewContainer>\n );\n};\n\nconst setCellValue = (rowData: TypeEditorRowData<IJsonSchema>, newData: IJsonSchema): void => {\n const othersProps = pick(rowData.self, ['required', 'description', 'flow']);\n\n if (rowData.parent?.properties) {\n rowData.parent.properties[rowData.key] = {\n ...newData,\n ...othersProps,\n };\n }\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const [value, setValue] = useState(rowData.self);\n const typeService = useTypeDefinitionManager();\n\n return (\n <KeyEditorContainer>\n <TypeSelector\n value={value}\n typeRegistryCreators={typeEditor.typeRegistryCreators}\n disableTypes={rowData.extraConfig?.customDisabledTypes}\n onDropdownVisibleChange={(vis) => {\n if (!vis) {\n onViewMode();\n }\n }}\n onChange={(newData, ctx) => {\n if (!newData) {\n return;\n }\n\n setCellValue(rowData, newData);\n\n setValue(newData);\n onChange();\n\n let unClose = false;\n\n typeEditorUtils.traverseIJsonSchema(newData, (type) => {\n const def = typeService.getTypeBySchema(type);\n if (def?.typeCascaderConfig?.unClosePanelAfterSelect) {\n unClose = true;\n }\n });\n\n if (ctx.source === 'type-selector' && !unClose) {\n onViewMode();\n }\n }}\n defaultOpen\n onBlur={() => {\n onViewMode();\n }}\n />\n </KeyEditorContainer>\n );\n};\nexport const typeColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Type,\n label: 'Type',\n width: 20,\n viewRender: ViewRender,\n shortcuts: {\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n onCopy: (ctx) => {\n const {\n typeEditor: { typeDefinition, clipboard },\n rowData,\n } = ctx;\n const config = typeDefinition.getTypeBySchema(rowData.self);\n if (config) {\n const optionValue = config.getStringValueByTypeSchema?.(rowData.self);\n const type =\n optionValue && config.getTypeSchemaByStringValue\n ? config.getTypeSchemaByStringValue(optionValue)\n : config.getDefaultSchema();\n type.properties = rowData.properties;\n type.required = rowData.required;\n clipboard.writeData(JSON.stringify(type));\n Toast.success('Copy type success!');\n } else {\n Toast.error('Copy type failed: this type undefined');\n }\n },\n\n onPaste: (ctx) => {\n const {\n typeEditor: { typeDefinition, clipboard, onChange },\n rowData,\n } = ctx;\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data) as IJsonSchema;\n const originIndex = rowData.extra?.index || 0;\n const config = parseData && typeDefinition.getTypeBySchema(parseData);\n if (config && typeof parseData === 'object') {\n typeEditorUtils.fixFlowIndex(parseData);\n if (parseData.extra) {\n parseData.extra.index = originIndex;\n }\n setCellValue(rowData, parseData);\n onChange();\n } else {\n Toast.warning('Please paste the correct type schema!');\n }\n });\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { forwardRef } from 'react';\n\nimport { nanoid } from 'nanoid';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorSpecialConfig } from '../../types';\nimport { disableFixIndexFormatter, emptyKeyFormatter } from './formatter';\nimport { SUFFIX, COMPONENT_ID_PREFIX } from './common';\n\nconst genNewTypeSchema = <TypeSchema extends Partial<IJsonSchema>>(\n index: number\n): [string, TypeSchema] => {\n const newKey = genEmptyKey();\n\n return [\n newKey,\n {\n type: 'string',\n extra: {\n index,\n },\n } as TypeSchema,\n ];\n};\n\nconst traverseIJsonSchema = <TypeSchema extends Partial<IJsonSchema>>(\n root: TypeSchema | undefined,\n cb: (type: TypeSchema) => void\n): void => {\n if (root) {\n cb(root);\n\n if (root.items) {\n traverseIJsonSchema(root.items as TypeSchema, cb);\n }\n if (root.additionalProperties) {\n traverseIJsonSchema(root.additionalProperties as TypeSchema, cb);\n }\n\n if (root.properties) {\n Object.values(root.properties).forEach((v) => {\n traverseIJsonSchema(v as TypeSchema, cb);\n });\n }\n }\n};\n\nexport const jsonParse = (jsonString?: string) => {\n try {\n return JSON.parse(jsonString || '');\n } catch (error) {\n // todo 兼容错误形态JSON\n return undefined;\n }\n};\n\nconst sortProperties = <TypeSchema extends Partial<IJsonSchema>>(typeSchema: TypeSchema) => {\n const { properties = {} } = typeSchema;\n const originKeys = Object.keys(properties);\n\n const sortKeys = originKeys.sort(\n (a, b) => (properties[a].extra?.index || 0) - (properties[b].extra?.index || 0)\n );\n\n for (let i = 0; i < sortKeys.length; i++) {\n const key = sortKeys[i];\n\n fixFlowIndex(properties[key]);\n\n properties[key].extra!.index = i;\n }\n};\n\nconst fixFlowIndex = <TypeSchema extends Partial<IJsonSchema>>(type: TypeSchema, idx = 0): void => {\n if (!type) {\n return;\n }\n\n if (!type.extra) {\n type.extra = {};\n }\n\n if (type.extra.index === undefined) {\n type.extra.index = idx;\n }\n};\n\nconst getInitialSchema = <TypeSchema extends Partial<IJsonSchema>>(): TypeSchema => {\n const res: IJsonSchema = {\n type: 'object',\n properties: {},\n };\n return res as TypeSchema;\n};\n\nconst clone = <T>(val: T): T => (val ? JSON.parse(JSON.stringify(val)) : val);\n\nconst isTempState = <TypeSchema extends Partial<IJsonSchema>>(\n type: TypeSchema,\n customValidateName?: (value: string) => string\n): boolean => {\n let error = false;\n\n traverseIJsonSchema(type, (c) => {\n if (c.properties) {\n Object.keys(c.properties).forEach((key) => {\n const res = isEmptyKey(key) || customValidateName?.(key);\n if (res) {\n error = true;\n }\n });\n }\n });\n\n return error;\n};\n\nconst genEmptyKey = () => SUFFIX + nanoid();\n\nconst isEmptyKey = (key: string) => key.startsWith(SUFFIX);\n\nconst formateKey = (key: string) => (isEmptyKey(key) ? '' : key);\n\nconst deFormateKey = (key: string, originKey?: string) => (!key ? originKey || genEmptyKey() : key);\n\nconst formateTypeSchema = <TypeSchema extends Partial<IJsonSchema>>(\n typeSchema: TypeSchema,\n config: TypeEditorSpecialConfig<TypeSchema>\n): TypeSchema => {\n const newSchema = JSON.parse(JSON.stringify(typeSchema));\n\n const formatters = [emptyKeyFormatter];\n if (config.disableFixIndex) {\n formatters.push(disableFixIndexFormatter);\n }\n\n traverseIJsonSchema(newSchema, (type) => {\n formatters.forEach((formatter) => {\n formatter(type);\n });\n });\n\n return newSchema;\n};\n\nconst valueToTypeSchema = <TypeSchema extends Partial<IJsonSchema>>(value: unknown): TypeSchema => {\n // return\n\n switch (typeof value) {\n case 'string': {\n return {\n type: 'string',\n } as TypeSchema;\n }\n case 'bigint':\n case 'number': {\n return {\n type: 'number',\n } as TypeSchema;\n }\n case 'boolean': {\n return {\n type: 'boolean',\n } as TypeSchema;\n }\n case 'object': {\n if (value) {\n if (Array.isArray(value)) {\n return {\n type: 'array',\n items: valueToTypeSchema(value[0]),\n } as TypeSchema;\n } else {\n const object: IJsonSchema = {\n type: 'object',\n properties: {},\n };\n Object.keys(value).forEach((k) => {\n object.properties![k] = valueToTypeSchema((value as any)[k]);\n });\n return object as TypeSchema;\n }\n }\n break;\n }\n default:\n break;\n }\n return { type: 'string' } as TypeSchema;\n};\n\nexport const typeEditorUtils = {\n genNewTypeSchema,\n sortProperties,\n traverseIJsonSchema,\n fixFlowIndex,\n genEmptyKey,\n jsonParse,\n clone,\n formateTypeSchema,\n isTempState,\n valueToTypeSchema,\n deFormateKey,\n formateKey,\n getInitialSchema,\n};\n\nexport function fixedTSForwardRef<T, P = object>(\n render: (props: P, ref: React.Ref<T>) => JSX.Element\n): (props: P & React.RefAttributes<T>) => JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return forwardRef(render as any) as any;\n}\n\nexport const getComponentId = (id: string): string => `${COMPONENT_ID_PREFIX}-${id}`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { SUFFIX } from '../common';\nexport type Formatter = (typeSchema: Partial<IJsonSchema>) => void;\n\nexport const extraFormatter: Formatter = (type) => {\n if (type.extra !== undefined) {\n type.extra = type.extra;\n\n delete type.extra;\n }\n};\n\nexport const extraDeFormatter: Formatter = (type) => {\n if (type.extra !== undefined) {\n type.extra = type.extra;\n delete type.extra;\n }\n};\n\nexport const emptyKeyFormatter: Formatter = (type) => {\n if (type.properties) {\n Object.keys(type.properties).forEach((k) => {\n if (k.startsWith(SUFFIX)) {\n delete type.properties![k];\n }\n });\n }\n};\n\nexport const disableFixIndexFormatter: Formatter = (type) => {\n if (type.extra) {\n delete type.extra.index;\n\n if (Object.keys(type.extra).length === 0) {\n delete type.extra;\n }\n }\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorProvider } from '../../contexts';\nimport { type Props } from './type';\nimport { CascaderV2 } from './cascader-v2';\n\nexport const TypeSelector = <TypeSchema extends Partial<IJsonSchema>>(props: Props<TypeSchema>) => {\n const [init, setInit] = useState(false);\n return (\n <TypeEditorProvider\n typeRegistryCreators={props.typeRegistryCreators}\n onInit={() => setInit(true)}\n >\n {init ? <CascaderV2 {...(props as unknown as Props<IJsonSchema>)} /> : <></>}\n </TypeEditorProvider>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Popover } from '@douyinfe/semi-ui';\n\nimport { TypeSelectorRef, type Props } from '../type';\nimport { FlowSchemaInitCtx } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { TypeSearchPanel } from './type-search';\nimport { TypeCascader } from './type-cascader';\nimport { Trigger } from './trigger';\nimport { CascaderContainer, CustomCascaderContainer } from './style';\n\nexport const CascaderV2 = (\n props: Props<IJsonSchema> & {\n onInit?: (typeEditorRef: TypeSelectorRef) => void;\n }\n) => {\n const {\n triggerRender,\n disabled,\n defaultOpen,\n onInit,\n value,\n onDropdownVisibleChange,\n getPopupContainer = () => document.body,\n } = props;\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const typeSelectorRef = useRef<TypeSelectorRef>(null);\n\n const [searchValue, setSearchValue] = useState('');\n\n const typeService = useTypeDefinitionManager();\n\n useEffect(() => {\n if (typeSelectorRef.current) {\n onInit?.(typeSelectorRef.current);\n }\n }, [typeSelectorRef.current, onInit]);\n\n const [rePosKey, setReposKey] = useState(0);\n const [context, setContext] = useState<FlowSchemaInitCtx>(\n (value && typeService.getTypeBySchema(value)?.typeCascaderConfig?.generateInitCtx?.(value)) ||\n {}\n );\n\n const [visible, setVisible] = useState(defaultOpen);\n\n if (disabled) {\n return (\n <>\n {triggerRender ? (\n <CustomCascaderContainer>{triggerRender()}</CustomCascaderContainer>\n ) : (\n <CascaderContainer>\n <Trigger\n typeSelectorRef={typeSelectorRef}\n triggerRef={triggerRef}\n searchValue={searchValue}\n onSearchChange={setSearchValue}\n ctx={context}\n {...props}\n />\n </CascaderContainer>\n )}\n </>\n );\n }\n\n return (\n <>\n <Popover\n rePosKey={rePosKey}\n visible={visible}\n onVisibleChange={(v) => {\n setVisible(v);\n if (onDropdownVisibleChange) {\n onDropdownVisibleChange(v);\n }\n if (v) {\n setReposKey((key) => key + 1);\n }\n }}\n autoAdjustOverflow\n trigger=\"click\"\n position=\"bottomLeft\"\n getPopupContainer={getPopupContainer}\n content={\n !searchValue ? (\n <TypeCascader\n ref={typeSelectorRef}\n onContextChange={setContext}\n onRePos={() => setReposKey((pre) => pre + 1)}\n {...props}\n />\n ) : (\n <TypeSearchPanel\n onSearchChange={setSearchValue}\n ref={typeSelectorRef}\n triggerRef={triggerRef}\n query={searchValue}\n {...props}\n />\n )\n }\n >\n {triggerRender ? (\n <CustomCascaderContainer>{triggerRender()}</CustomCascaderContainer>\n ) : (\n <CascaderContainer>\n <Trigger\n triggerRef={triggerRef}\n searchValue={searchValue}\n onSearchChange={setSearchValue}\n typeSelectorRef={typeSelectorRef}\n ctx={context}\n {...props}\n />\n </CascaderContainer>\n )}\n </Popover>\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, {\n type FC,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Typography } from '@douyinfe/semi-ui';\n\nimport { type SearchResultItem, type Props, TypeSelectorRef } from '../type';\nimport { useHighlightKeyword } from '../hooks/use-hight-light';\nimport { useTypeTransform } from '../hooks/option-value';\nimport { useFocusItemSearch } from '../hooks/focus-item';\nimport { TypeEditorRegistry } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { SearchIcon, SearchText, StyledSearchList, TextGlobalStyle, TypeSearchText } from './style';\n\nconst defaultDeep = 2;\n\ninterface CacheItem {\n /** array-array-string **/\n key: string;\n type: string;\n disabled?: string;\n}\n\nconst SearchItem: FC<{\n item: SearchResultItem;\n query: string;\n focusValue: string;\n selectValue: string;\n onSelect: (item: SearchResultItem, value: IJsonSchema) => void;\n}> = ({ item, query, focusValue, onSelect, selectValue }) => {\n const typeService = useTypeDefinitionManager();\n\n const { convertOptionValueToModeValue } = useTypeTransform();\n\n const config = typeService.getTypeByName(item.type);\n\n const typeSchema = useMemo(\n () => convertOptionValueToModeValue(item.value) as IJsonSchema,\n [item.value]\n );\n\n const text = useMemo(() => config?.getDisplayText(typeSchema), [typeSchema, config]);\n\n const label = useHighlightKeyword(\n text || '',\n query,\n {\n color: 'var(--semi-color-primary)',\n fontWeight: 600,\n },\n item.value\n );\n\n return (\n <li\n key={item.value}\n onClick={() => (item.disabled ? undefined : onSelect(item, typeSchema))}\n style={{\n minWidth: 'unset',\n background: focusValue === item.value ? 'var(--semi-color-fill-0)' : undefined,\n }}\n className={classNames(\n 'semi-cascader-option',\n item.disabled && 'semi-cascader-option-disabled',\n selectValue === item.value && 'semi-cascader-option-select'\n )}\n >\n <TextGlobalStyle />\n <SearchText disabled={!!item.disabled}>\n <SearchIcon>{config?.getDisplayIcon?.(typeSchema)}</SearchIcon>\n <Typography.Text ellipsis={{ showTooltip: true }}>\n <span>{label}</span>\n </Typography.Text>\n </SearchText>\n </li>\n );\n};\n// eslint-disable-next-line react/display-name\nexport const TypeSearchPanel = forwardRef<\n TypeSelectorRef,\n Props<IJsonSchema> & {\n query: string;\n triggerRef: React.RefObject<HTMLDivElement | null>;\n onSearchChange: (query: string) => void;\n }\n>(({ query, disableTypes = [], onChange, triggerRef, value, onSearchChange }, ref) => {\n const typeService = useTypeDefinitionManager();\n const {\n convertValueToOptionValue,\n checkHasChildren,\n convertOptionValueToModeValue,\n getModeOptionChildrenType,\n } = useTypeTransform();\n\n const customDisableType = useMemo(() => {\n const map = new Map<string, string>();\n\n disableTypes.forEach((v) => {\n map.set(v.type, v.reason);\n });\n return map;\n }, [disableTypes]);\n\n const selectValue = useMemo(() => convertValueToOptionValue(value), [value]);\n\n const [searchResult, setSearchResult] = useState<SearchResultItem[]>([]);\n\n const levelCache = useRef<CacheItem[][]>([]);\n\n const handleGenLevelInfo = useCallback(\n (level: number) => {\n for (let i = 0; i < level; i++) {\n if (levelCache.current[i]) {\n continue;\n }\n\n if (i === 0) {\n const newRootTypes = typeService.getTypeRegistriesWithParentType();\n levelCache.current[i] = newRootTypes.map((type) => ({\n key: type.type,\n type: type.type,\n parentLabels: [],\n disabled: customDisableType.get(type.type),\n }));\n } else {\n const lastLevelCache = levelCache.current[i - 1];\n const newCacheTypes: CacheItem[] = [];\n levelCache.current[i] = newCacheTypes;\n lastLevelCache.forEach((type) => {\n // disabled 的就不用下钻了\n if (type.disabled) {\n return;\n }\n const config = typeService.getTypeByName(type.type);\n\n const parentTypes = type.key.split('-');\n if (\n config &&\n checkHasChildren(config as TypeEditorRegistry<IJsonSchema>, {\n level: i,\n })\n ) {\n const childrenTypes = getModeOptionChildrenType(\n config as TypeEditorRegistry<IJsonSchema>,\n {\n parentType: type.type,\n level: i,\n parentTypes,\n }\n );\n\n childrenTypes.forEach((child) => {\n const childConfig = typeService.getTypeByName(child.type);\n\n newCacheTypes.push({\n type: child.type,\n key: [...parentTypes, child.type].join('-'),\n disabled:\n child.disabled ||\n (childConfig?.customDisabled\n ? childConfig.customDisabled({\n level: i + 1,\n parentType: type.type,\n parentTypes,\n })\n : undefined),\n });\n });\n }\n });\n }\n }\n },\n [customDisableType]\n );\n\n const handleGenSearchResult = useCallback(() => {\n const len = levelCache.current.length;\n if (!query) {\n setSearchResult([]);\n return;\n }\n\n const newSearchResult: SearchResultItem[] = [];\n for (let i = 0; i < len; i++) {\n const cacheTypes = levelCache.current[i] || [];\n\n cacheTypes.forEach((type) => {\n const config = typeService.getTypeByName(type.type);\n\n if (config && config.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) > -1) {\n newSearchResult.push({\n value: type.key,\n icon: config.icon,\n disabled: type.disabled,\n level: i,\n type: type.type,\n });\n }\n });\n }\n\n setSearchResult(newSearchResult);\n }, [query]);\n\n useEffect(() => {\n handleGenLevelInfo(defaultDeep);\n }, [handleGenLevelInfo]);\n\n useEffect(() => {\n handleGenSearchResult();\n }, [query]);\n\n const viewValue = useMemo(\n () =>\n searchResult.filter((item) => {\n const config = typeService.getTypeByName(item.type);\n return (\n config &&\n !checkHasChildren(config as TypeEditorRegistry<IJsonSchema>, {\n level: item.level,\n })\n );\n }),\n [searchResult, typeService]\n );\n\n const { focusValue } = useFocusItemSearch({\n ref,\n viewValue,\n onChange: (v) => {\n const newVal = convertOptionValueToModeValue(v);\n onChange?.(newVal as IJsonSchema, { source: 'custom-panel' });\n onSearchChange('');\n },\n });\n\n return (\n <div\n className={classNames('semi-cascader-option-lists')}\n style={triggerRef.current ? { width: Math.max(triggerRef.current.clientWidth, 150) } : {}}\n >\n <StyledSearchList className={classNames('semi-cascader-option-list')}>\n <>\n {viewValue.length === 0 ? (\n <TypeSearchText type=\"secondary\">No results.</TypeSearchText>\n ) : (\n <>\n {viewValue.map((item) => (\n <SearchItem\n selectValue={selectValue}\n key={item.value}\n query={query}\n focusValue={focusValue}\n item={item}\n onSelect={(_, v) => onChange?.(v, { source: 'type-selector' })}\n />\n ))}\n </>\n )}\n </>\n </StyledSearchList>\n </div>\n );\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { type CSSProperties } from 'react';\n/**\n * 搜索结果高亮\n */\nexport const useHighlightKeyword = (\n label: string,\n keyword?: string,\n hightLightStyle: CSSProperties = {},\n id?: string\n // color = 'rgba(var(--semi-orange-5), 1)',\n): (string | React.JSX.Element)[] => {\n if (label && keyword) {\n return label.split(new RegExp(`(${keyword})`, 'gi')).map((c, i) =>\n c.toLocaleLowerCase() === keyword.toLocaleLowerCase() ? (\n <span\n key={c + i + id}\n style={{\n color: 'rgba(var(--semi-orange-5), 1)',\n ...hightLightStyle,\n }}\n >\n {c}\n </span>\n ) : (\n <span key={c + i + id}>{c}</span>\n )\n );\n }\n return [label];\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRegistry } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\n\nexport const useTypeTransform = () => {\n const typeService = useTypeDefinitionManager();\n\n /**\n * 根据提交值获取选项值\n * 正常和 OptionValue 一致,不用特殊转化\n * 但是在 IJsonSchema 的场景,这两个值会不同\n * 级联场景也会不一样,因为 级联场景会 type-type\n */\n const convertValueToOptionValue = useMemo(\n () => (originValue: IJsonSchema | undefined) => {\n const type = originValue && typeService.getTypeBySchema(originValue);\n\n return (originValue && type?.getStringValueByTypeSchema?.(originValue)) || '';\n },\n [typeService]\n );\n\n /**\n * 根据选项值获取提交值\n * 正常和 OptionValue 一致,不用特殊转化\n * 但是在 IJsonSchema 的场景,这两个值会不同\n * 级联场景也会不一样,因为 级联场景会 type-type\n */\n const convertOptionValueToModeValue = useMemo(\n () => (optionValue: string | undefined) => {\n const [root, ...rest] = (optionValue || '').split('-');\n\n const rooType = typeService.getTypeByName(root);\n\n if (rooType?.getTypeSchemaByStringValue) {\n return rooType.getTypeSchemaByStringValue(rest.join('-'));\n }\n\n return rooType?.getDefaultSchema();\n },\n [typeService]\n );\n\n /**\n * 判断是否有子类型\n */\n const checkHasChildren = useMemo(\n () =>\n (\n typeDef: TypeEditorRegistry<IJsonSchema>,\n ctx: {\n level: number;\n }\n ): boolean =>\n (typeDef?.getSupportedItemTypes && typeDef.getSupportedItemTypes(ctx).length !== 0) ||\n !!typeDef.container,\n [typeService]\n );\n\n const getModeOptionChildrenType = useMemo(\n () =>\n (\n typeDef: TypeEditorRegistry<IJsonSchema> | undefined,\n ctx: {\n parentType: string;\n level: number;\n parentTypes?: string[];\n }\n ) => {\n const getSupportType = (parentType = ''): TypeEditorRegistry<IJsonSchema>[] =>\n typeService.getTypeRegistriesWithParentType(\n parentType\n ) as TypeEditorRegistry<IJsonSchema>[];\n\n const support = new Set(getSupportType(ctx.parentType).map((v) => v.type));\n return (\n (typeDef?.getSupportedItemTypes && typeDef.getSupportedItemTypes(ctx)) ||\n []\n ).filter((v) => support.has(v.type));\n },\n [typeService]\n );\n\n return {\n convertOptionValueToModeValue,\n convertValueToOptionValue,\n checkHasChildren,\n getModeOptionChildrenType,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useImperativeHandle, useMemo, useState } from 'react';\n\nimport { noop } from 'lodash-es';\n\nimport { TypeSelectorRef, type CascaderOption, type SearchResultItem } from '../type';\n\ninterface Pos {\n x: number;\n y: number;\n}\n\nconst validatePos = (pos: Pos): boolean => pos.x >= 0 && pos.y >= 0;\n\nexport const useFocusItemCascader = ({\n rootTypes,\n renderData,\n cascaderTypes,\n ref,\n onCollapse,\n onChange,\n}: {\n rootTypes: CascaderOption[];\n cascaderTypes: string[];\n onChange: (newVal: string) => void;\n renderData: { item: string; options: CascaderOption[] }[];\n ref: React.ForwardedRef<TypeSelectorRef>;\n onCollapse: (type: string, level: number) => void;\n}) => {\n const [focusPos, setFocusPos] = useState<Pos>({ x: -1, y: -1 });\n\n const allOptions = useMemo(\n () => [rootTypes, ...renderData.map((item) => item.options)],\n [rootTypes, renderData]\n );\n\n const initPos = useCallback(() => {\n setFocusPos({\n x: 0,\n y: 0,\n });\n }, []);\n\n const focusItem = useMemo(() => allOptions[focusPos.x]?.[focusPos.y], [focusPos, allOptions]);\n\n const focusValue = useMemo(\n () => allOptions[focusPos.x]?.[focusPos.y]?.value,\n [focusPos, allOptions]\n );\n\n useImperativeHandle(\n ref,\n (): TypeSelectorRef => ({\n initFocusItem() {\n initPos();\n },\n clearFocusItem() {\n setFocusPos({\n x: -1,\n y: -1,\n });\n },\n moveFocusItemUp() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n const { x, y } = focusPos;\n\n if (!allOptions[x]?.[y]) {\n return;\n }\n\n // 向上查找,直到找到一个 disabled not 的 item\n let newY = (y - 1 + allOptions[x].length) % allOptions[x].length;\n let item = allOptions[x]?.[newY];\n\n while (item?.disabled && newY !== y) {\n newY = (newY - 1 + allOptions[x].length) % allOptions[x].length;\n item = allOptions[x]?.[newY];\n }\n\n if (newY !== y) {\n setFocusPos({\n x,\n y: newY,\n });\n }\n },\n moveFocusItemDown() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n\n const { x, y } = focusPos;\n\n if (!allOptions[x]?.[y]) {\n return;\n }\n\n // 向上查找,直到找到一个 disabled not 的 item\n let newY = (y + 1) % allOptions[x].length;\n let item = allOptions[x]?.[newY];\n\n while (item?.disabled && newY !== y) {\n newY = (newY + 1) % allOptions[x].length;\n item = allOptions[x]?.[newY];\n }\n\n if (newY !== y) {\n setFocusPos({\n x,\n y: newY,\n });\n }\n },\n moveFocusItemLeft() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n\n const childrenPanelLen = cascaderTypes.length;\n\n if (childrenPanelLen > 0) {\n const lastParentType = cascaderTypes[childrenPanelLen - 1];\n\n const newY = allOptions[childrenPanelLen - 1]?.findIndex(\n (v) => v.type === lastParentType\n );\n\n onCollapse(lastParentType, childrenPanelLen - 1);\n\n setFocusPos({\n x: focusPos.x - 1,\n y: newY || 0,\n });\n }\n },\n moveFocusItemRight() {\n if (!validatePos(focusPos)) {\n initPos();\n return;\n }\n\n if (focusItem && !focusItem.isLeaf && cascaderTypes[focusPos.x] !== focusItem.type) {\n onCollapse(focusItem.type, focusPos.x);\n setFocusPos({\n x: focusPos.x + 1,\n y: 0,\n });\n }\n },\n\n selectFocusItem() {\n if (!validatePos(focusPos)) {\n return;\n }\n if (focusItem?.isLeaf) {\n onChange(focusValue);\n }\n },\n })\n );\n\n return {\n focusValue,\n };\n};\nexport const useFocusItemSearch = ({\n ref,\n onChange,\n viewValue,\n}: {\n viewValue: SearchResultItem[];\n onChange: (newVal: string) => void;\n\n ref: React.ForwardedRef<TypeSelectorRef>;\n}) => {\n const [focusPos, setFocusPos] = useState(-1);\n\n const focusValue = useMemo(() => viewValue[focusPos]?.value, [viewValue, focusPos]);\n\n const focusItem = useMemo(() => viewValue[focusPos], [viewValue, focusPos]);\n\n useImperativeHandle(ref, () => ({\n selectFocusItem() {\n if (!focusItem.disabled) {\n onChange(focusValue);\n }\n },\n moveFocusItemDown() {\n if (focusPos < 0) {\n setFocusPos(0);\n return;\n }\n\n let newPos = (focusPos + 1) % viewValue.length;\n\n while (viewValue[newPos]?.disabled && newPos !== focusPos) {\n newPos = (newPos + 1) % viewValue.length;\n }\n\n setFocusPos(newPos);\n },\n moveFocusItemLeft: noop,\n moveFocusItemRight: noop,\n moveFocusItemUp() {\n if (focusPos < 0) {\n setFocusPos(0);\n return;\n }\n\n let newPos = (focusPos - 1 + viewValue.length) % viewValue.length;\n\n while (viewValue[newPos]?.disabled && newPos !== focusPos) {\n newPos = (newPos - 1 + viewValue.length) % viewValue.length;\n }\n\n setFocusPos(newPos);\n },\n initFocusItem() {\n setFocusPos(0);\n },\n clearFocusItem() {\n setFocusPos(-1);\n },\n }));\n\n return {\n focusValue,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { Typography } from '@douyinfe/semi-ui';\n\nexport const StyledFullContainer = styled.div`\n width: 100%;\n height: 100%;\n`;\n\nexport const CustomCascaderContainer = styled.span`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\n\nexport const CascaderContainer = styled(StyledFullContainer)`\n position: relative;\n`;\n\nexport const TriggerText = styled.div`\n display: flex;\n width: 100%;\n`;\n\nexport const CascaderDropdown = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n`;\n\nexport const TriggerGlobalStyle = createGlobalStyle`\n .semi-cascader-selection {\n font-size: 12px !important;\n\n svg {\n width: 12px;\n height: 12px;\n }\n }\n`;\n\nexport const CascaderOptionItem = styled.li<{ focus?: boolean }>`\n ${(props) => (props.focus ? 'background-color: var(--semi-color-fill-0)' : '')}\n`;\n\nexport const DropdownGlobalStyle = createGlobalStyle`\n .semi-cascader-option-lists {\n max-width: 510px;\n overflow-x: auto;\n height: auto;\n\n\n .semi-cascader-option-list {\n width: 150px;\n flex-shrink: 0;\n border-left: none;\n border-right: 1px solid var(--semi-color-fill-0);\n\n max-height: 50vh;\n\n ::-webkit-scrollbar {\n width: 0;\n height: 0;\n }\n\n .semi-cascader-option {\n font-size: 12px !important;\n width: 100%;\n padding: 6px 12px;\n cursor: pointer;\n box-sizing: border-box;\n\n svg {\n width: 12px;\n height: 12px;\n }\n }\n }\n\n\n .semi-cascader-option-disabled {\n cursor: not-allowed;\n }\n\n }\n\n .semi-cascader-option-icon {\n margin-right:8px;\n }\n\n .semi-cascader-option-icon-empty {\n margin-right: 0;\n }\n\n`;\n\nexport const StyledSearchList = styled.ul`\n &::-webkit-scrollbar {\n display: none;\n }\n width: 100%;\n height: 100%;\n`;\n\nexport const TypeSearchText = styled(Typography.Text)`\n padding: 8px 12px;\n`;\n\nexport const TextGlobalStyle = createGlobalStyle`\n .semi-typography {\n color: unset !important;\n }\n\n`;\nexport const SearchText = styled.span<{\n disabled?: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n width: 100%;\n gap: 8px;\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n ${(props) => (props.disabled ? 'color: var(--semi-color-disabled-text);' : '')};\n`;\n\nexport const SearchIcon = styled.span`\n display: inline-flex;\n align-items: center;\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { type FC, forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconCheckboxTick, IconChevronRight } from '@douyinfe/semi-icons';\n\nimport { typeSelectorUtils } from '../utils';\nimport { TypeSelectorRef, type CascaderOption, type Props } from '../type';\nimport { useTypeTransform } from '../hooks/option-value';\nimport { useFocusItemCascader } from '../hooks/focus-item';\nimport { useCascaderRootTypes } from '../hooks';\nimport { FlowSchemaInitCtx, TypeEditorRegistry } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { CascaderDropdown, CascaderOptionItem, DropdownGlobalStyle } from './style';\ninterface OptionListProps {\n options: Array<CascaderOption>;\n\n /**\n * 蓝色背景,用于父类型展开/收起\n */\n activeType?: string;\n /**\n * 蓝色字体,用于表示选中的值\n */\n selectValue?: string;\n /**\n * 灰色背景,当前 focus 的类型\n */\n focusValue?: string;\n onCollapse?: (val: string) => void;\n onSelect?: (\n value: string,\n source?: Parameters<Required<Props<IJsonSchema>>['onChange']>[1]['source']\n ) => void;\n}\n\nconst OptionList: FC<OptionListProps> = ({\n options,\n activeType,\n selectValue,\n onCollapse,\n onSelect,\n focusValue,\n}) => (\n <ul className=\"semi-cascader-option-list\">\n {options.map((opt) => {\n const child = (\n <CascaderOptionItem\n focus={focusValue === opt.value}\n onClick={\n !opt.disabled\n ? () =>\n opt.isLeaf\n ? onSelect?.(\n opt.value,\n opt.source as Parameters<\n Required<Props<IJsonSchema>>['onChange']\n >[1]['source']\n )\n : onCollapse?.(opt.type)\n : undefined\n }\n key={opt.value}\n className={classNames(\n 'semi-cascader-option',\n activeType === opt.type && 'semi-cascader-option-active',\n selectValue === opt.value && 'semi-cascader-option-select',\n\n opt.disabled && 'semi-cascader-option-disabled'\n )}\n >\n <span className=\"semi-cascader-option-label\">\n {selectValue === opt.value ? (\n <IconCheckboxTick\n className={classNames('semi-cascader-option-icon')}\n style={{\n color: selectValue === opt.value ? 'var(--semi-color-primary)' : undefined,\n }}\n />\n ) : (\n <span className=\"semi-cascader-option-icon semi-cascader-option-icon-empty\" />\n )}\n {typeof opt.label === 'string' ? <span>{opt.label}</span> : opt.label}\n </span>\n {!opt.isLeaf && <IconChevronRight />}\n </CascaderOptionItem>\n );\n\n return opt.disabled ? <Tooltip content={opt.disabled}>{child}</Tooltip> : child;\n })}\n </ul>\n);\n\nconst useGenerateCascaderTypes = () => {\n const typeService = useTypeDefinitionManager();\n\n const generateCascaderTypes = useCallback(\n (value?: string) => {\n const res: string[] = [];\n\n const types = value?.split('-') || [];\n const arr = types.splice(0, types.length - 1) || [];\n\n while (arr.length > 0) {\n const type = arr.shift();\n if (type) {\n const config = type ? typeService.getTypeByName(type) : undefined;\n\n if (config?.customChildOptionValue) {\n const extras = config.customChildOptionValue();\n arr.splice(0, extras.length);\n }\n res.push(type);\n }\n }\n\n return res;\n },\n [typeService]\n );\n\n return generateCascaderTypes;\n};\n\nconst generateCustomPanelType = (value?: string) => (value?.split('-') || []).pop() || '';\n\n// eslint-disable-next-line react/display-name\nexport const TypeCascader = forwardRef<\n TypeSelectorRef,\n Props<IJsonSchema> & {\n onContextChange: (ctx: FlowSchemaInitCtx) => void;\n onRePos: () => void;\n }\n>(({ value: originValue, onChange, onContextChange, onRePos, disableTypes = [] }, ref) => {\n const typeService = useTypeDefinitionManager();\n\n const {\n convertOptionValueToModeValue,\n convertValueToOptionValue,\n\n getModeOptionChildrenType,\n } = useTypeTransform();\n\n const customDisableType = useMemo(() => {\n const map = new Map<string, string>();\n\n disableTypes.forEach((v) => {\n map.set(v.type, v.reason);\n });\n return map;\n }, [disableTypes]);\n\n const rootTypes = useCascaderRootTypes(customDisableType);\n\n const generateCascaderTypes = useGenerateCascaderTypes();\n\n const value = useMemo(() => convertValueToOptionValue(originValue), [originValue]);\n\n const [cascaderTypes, setCascaderLTypes] = useState<string[]>(generateCascaderTypes(value));\n\n const [customPanelType, setCustomPanelType] = useState(generateCustomPanelType(value));\n\n const handleChange = useCallback(\n (\n newOptionValue: string,\n source: Parameters<Required<Props<IJsonSchema>>['onChange']>[1]['source'] = 'type-selector'\n ) => {\n if (newOptionValue === value) {\n setCascaderLTypes(generateCascaderTypes(newOptionValue));\n setCustomPanelType(generateCustomPanelType(newOptionValue));\n onRePos();\n\n return;\n }\n const newValue = convertOptionValueToModeValue(newOptionValue);\n\n if (onChange) {\n onChange(newValue as IJsonSchema, {\n source,\n });\n }\n\n setCascaderLTypes(generateCascaderTypes(newOptionValue));\n\n setCustomPanelType(generateCustomPanelType(newOptionValue));\n\n const newCtx =\n (newValue &&\n typeService.getTypeBySchema(newValue)?.typeCascaderConfig?.generateInitCtx?.(newValue)) ||\n {};\n\n onContextChange(newCtx);\n },\n [onChange, onContextChange, value]\n );\n\n const renderData = useMemo(\n () =>\n cascaderTypes.map((item, level) => {\n const parentDef = typeService.getTypeByName(item);\n\n const childrenType = getModeOptionChildrenType(\n parentDef as TypeEditorRegistry<IJsonSchema>,\n {\n parentType: item,\n level: level + 1,\n parentTypes: [...cascaderTypes].splice(0, level),\n }\n );\n\n const prefix = [...cascaderTypes]\n .splice(0, level + 1)\n .map((type) => {\n const config = typeService.getTypeByName(type);\n if (config?.customChildOptionValue) {\n return [type, config.customChildOptionValue()];\n }\n return type;\n })\n .flat()\n .join('-');\n\n const options: CascaderOption[] = childrenType\n .map((child) => {\n const def = typeService.getTypeByName(child.type);\n if (def) {\n return typeSelectorUtils.definitionToCascaderOption({\n config: def,\n customDisableType,\n prefix,\n // parentConfig: parentDef,\n level: level + 1,\n disabled: child.disabled,\n parentType: item,\n parentTypes: [...cascaderTypes].splice(0, level + 1),\n });\n }\n })\n .filter(Boolean) as CascaderOption[];\n\n return {\n item,\n options,\n };\n }),\n [cascaderTypes, customDisableType]\n );\n\n const handleCollapse = useCallback(\n (type: string, level: number) => {\n const newCascaderTypes = [...cascaderTypes];\n\n if (cascaderTypes[level] !== type) {\n newCascaderTypes.splice(level);\n newCascaderTypes.push(type);\n } else {\n newCascaderTypes.splice(level);\n }\n setCustomPanelType('');\n onRePos();\n setCascaderLTypes(newCascaderTypes);\n },\n [cascaderTypes]\n );\n\n const { focusValue } = useFocusItemCascader({\n rootTypes,\n onCollapse: handleCollapse,\n renderData,\n cascaderTypes,\n onChange: (v) => handleChange(v, 'type-selector'),\n ref,\n });\n\n return (\n <CascaderDropdown>\n <DropdownGlobalStyle />\n <div className=\"semi-cascader-option-lists\">\n <OptionList\n activeType={cascaderTypes[0]}\n selectValue={value}\n options={rootTypes}\n focusValue={focusValue}\n onSelect={handleChange}\n onCollapse={(type) => handleCollapse(type, 0)}\n />\n\n {renderData.map(({ item, options }, level) => (\n <OptionList\n onSelect={handleChange}\n key={item + level}\n focusValue={focusValue}\n activeType={cascaderTypes[level + 1]}\n selectValue={value}\n options={options}\n onCollapse={(type) => handleCollapse(type, level + 1)}\n />\n ))}\n\n {(originValue &&\n typeService.getTypeByName(customPanelType)?.typeCascaderConfig?.customCascaderPanel?.({\n typeSchema: originValue,\n onChange: ((newVal: IJsonSchema) => {\n onChange?.(newVal, {\n source: 'custom-panel',\n });\n const newCtx =\n typeService\n .getTypeBySchema(newVal)\n ?.typeCascaderConfig?.generateInitCtx?.(newVal) || {};\n\n onContextChange(newCtx);\n }) as (typeSchema: Partial<IJsonSchema>) => void,\n })) ||\n null}\n </div>\n </CascaderDropdown>\n );\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\n\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { type CascaderOption } from '../type';\nimport { TypeEditorRegistry } from '../../../types';\n\n// import s from '../index.module.less';\n\nconst definitionToCascaderOption = <TypeSchema extends Partial<IJsonSchema>>({\n config,\n customDisableType = new Map(),\n prefix,\n parentTypes,\n disabled,\n parentType,\n level,\n}: {\n level: number;\n config: TypeEditorRegistry<TypeSchema>;\n parentType?: string;\n customDisableType?: Map<string, string>;\n parentTypes: string[];\n prefix?: string;\n disabled?: string;\n}): CascaderOption => {\n const typeValue = config.type;\n\n const optionValue = prefix ? [prefix, typeValue].join('-') : typeValue;\n\n const label = (\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n {config.icon}\n <span>{config.label}</span>\n </div>\n );\n\n const customDisabled =\n config.customDisabled && config.customDisabled({ level, parentType: parentType!, parentTypes });\n\n const reason = disabled || customDisableType.get(typeValue) || customDisabled;\n\n return {\n disabled: reason,\n value: optionValue,\n label,\n type: typeValue,\n source: config.typeCascaderConfig?.unClosePanelAfterSelect ? 'custom-panel' : 'type-selector',\n isLeaf: reason\n ? true\n : !(\n (config.getSupportedItemTypes && config.getSupportedItemTypes({ level }).length !== 0) ||\n config.container\n ),\n };\n};\n\nexport const typeSelectorUtils = {\n definitionToCascaderOption,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { typeSelectorUtils } from '../utils';\nimport { type CascaderOption } from '../type';\nimport { useTypeDefinitionManager } from '../../../contexts';\n\nconst genId = (options: CascaderOption[]): string =>\n options.map((v) => `${v.disabled}${v.label}`).join('-');\n\nexport const useCascaderRootTypes = (customDisableType: Map<string, string>) => {\n const [rootTypes, setRootTypes] = useState<CascaderOption[]>([]);\n const typeService = useTypeDefinitionManager();\n\n useEffect(() => {\n const init = () => {\n const newRootTypes = typeService.getTypeRegistriesWithParentType().map((config) => {\n const res = typeSelectorUtils.definitionToCascaderOption({\n customDisableType,\n config,\n level: 0,\n parentTypes: [],\n });\n return res;\n });\n\n if (genId(newRootTypes) !== genId(rootTypes)) {\n setRootTypes(newRootTypes);\n }\n };\n init();\n const dispose = typeService.onTypeRegistryChange(init);\n return () => {\n dispose.dispose();\n };\n }, [rootTypes, customDisableType]);\n\n return rootTypes;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo, useState } from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Input } from '@douyinfe/semi-ui';\nimport { IconChevronDown } from '@douyinfe/semi-icons';\n\nimport { TypeSelectorRef, type Props } from '../type';\nimport { useTypeSelectorHotKey } from '../hooks/hot-key';\nimport { FlowSchemaInitCtx } from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport { TriggerGlobalStyle, StyledFullContainer, TriggerText } from './style';\n\nexport const Trigger = ({\n value: originValue,\n ctx,\n typeSelectorRef,\n triggerRef,\n searchValue,\n onSearchChange,\n}: Props<IJsonSchema> & {\n ctx: FlowSchemaInitCtx;\n searchValue: string;\n triggerRef: React.RefObject<HTMLDivElement | null>;\n typeSelectorRef: React.MutableRefObject<TypeSelectorRef | null>;\n onSearchChange: (query: string) => void;\n}) => {\n const typeService = useTypeDefinitionManager();\n\n const value = useMemo(() => {\n if (!originValue) {\n return;\n }\n const type = typeService.getTypeBySchema(originValue);\n\n return type?.getStringValueByTypeSchema?.(originValue) || '';\n }, [originValue]);\n\n const [focus, setFocus] = useState(false);\n\n const hotkeys = useTypeSelectorHotKey(typeSelectorRef);\n\n const reverseLabel = useMemo(() => {\n if (!value || !originValue) {\n return;\n }\n\n const def = typeService.getTypeBySchema(originValue);\n\n return def ? def.getDisplayLabel(originValue) : <>{value}</>;\n }, [originValue, value]);\n\n return (\n <StyledFullContainer\n ref={triggerRef as React.RefObject<HTMLDivElement>}\n className={classNames(\n 'semi-cascader semi-cascader-focus semi-cascader-single semi-cascader-filterable'\n )}\n >\n <TriggerGlobalStyle />\n <div className=\"semi-cascader-selection\">\n <div className=\"semi-cascader-search-wrapper\">\n {!searchValue && (\n <TriggerText\n style={{\n opacity: focus ? 0.5 : 1,\n }}\n className={classNames('semi-cascader-selection-text-inactive')}\n >\n <>{reverseLabel}</>\n </TriggerText>\n )}\n\n <div className=\"semi-input-wrapper semi-input-wrapper-focus semi-input-wrapper-default\">\n <Input\n autoFocus\n onFocus={() => {\n setFocus(true);\n }}\n onKeyDown={(e) => {\n const hotKey = hotkeys.find((item) => item.matcher(e));\n hotKey?.callback();\n if (hotKey?.preventDefault) {\n e.preventDefault();\n }\n }}\n value={searchValue}\n onChange={(newVal) => {\n onSearchChange(newVal);\n }}\n className=\"semi-cascader-input\"\n onBlur={() => {\n setFocus(false);\n }}\n />\n </div>\n </div>\n </div>\n <div className=\"semi-cascader-arrow\">\n <IconChevronDown />\n </div>\n </StyledFullContainer>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { TypeSelectorRef } from '../type';\n\ninterface HotKeyConfig {\n matcher: (event: React.KeyboardEvent) => boolean;\n callback: () => void;\n preventDefault?: boolean;\n}\n\nexport const useTypeSelectorHotKey = (selector: React.MutableRefObject<TypeSelectorRef | null>) => {\n const hotKeyConfig: HotKeyConfig[] = useMemo(() => {\n const res: HotKeyConfig[] = [\n {\n matcher: (e) => e.key === 'Enter',\n callback: () => {\n selector.current?.selectFocusItem();\n },\n },\n {\n matcher: (e) => e.key === 'ArrowUp',\n callback: () => {\n selector.current?.moveFocusItemUp();\n },\n preventDefault: true,\n },\n\n {\n matcher: (e) => e.key === 'ArrowLeft',\n callback: () => {\n selector.current?.moveFocusItemLeft();\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowRight',\n callback: () => {\n selector.current?.moveFocusItemRight();\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowDown',\n callback: () => {\n selector.current?.moveFocusItemDown();\n },\n preventDefault: true,\n },\n ];\n\n return res;\n }, []);\n\n return hotKeyConfig;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Checkbox, Toast, Tooltip } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeEditorRowData, TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { CenterContainer } from './style';\n\nconst setCellValue = (rowData: TypeEditorRowData<IJsonSchema>) => {\n const { parent } = rowData;\n\n if (!parent) {\n return;\n }\n\n if (!parent.required) {\n parent.required = [];\n }\n\n const idx = parent.required.findIndex((key) => key === rowData.key);\n if (idx !== -1) {\n parent.required.splice(idx, 1);\n } else {\n parent.required.push(rowData.key);\n }\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n onChange,\n onEditMode,\n}) => {\n const disabled = useDisabled(TypeEditorColumnType.Required, rowData);\n\n const child = (\n <Checkbox\n disabled={!!disabled}\n checked={!!rowData.isRequired}\n onChange={() => {\n setCellValue(rowData);\n onChange();\n\n onEditMode();\n }}\n />\n );\n\n return (\n <CenterContainer onClick={!disabled ? () => onEditMode() : undefined}>\n {disabled ? <Tooltip content={disabled}>{child}</Tooltip> : child}\n </CenterContainer>\n );\n};\n\nexport const requiredColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Required,\n label: 'Required',\n width: 11,\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ onChange, rowData, typeEditor }) => {\n setCellValue(rowData);\n onChange();\n typeEditor.moveActivePosToNextLine();\n },\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n\n onCopy: (ctx) => {\n const {\n rowData,\n typeEditor: { clipboard },\n } = ctx;\n\n clipboard.writeData(\n JSON.stringify({\n required: rowData.isRequired,\n })\n );\n\n Toast.success('Copy required success!');\n },\n\n onPaste: (ctx) => {\n const {\n typeEditor: { clipboard, onChange },\n rowData,\n } = ctx;\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data);\n const disabled = (rowData.disableEditColumn || []).find(\n (r) => r.column === TypeEditorColumnType.Required\n );\n if (disabled) {\n Toast.warning('The current cell does not support editing!');\n return;\n }\n if (parseData && typeof parseData === 'object' && parseData.required !== undefined) {\n const { parent } = rowData;\n if (!parent) {\n return;\n }\n if (!parent.required) {\n parent.required = [];\n }\n const idx = parent.required.findIndex((key) => key === rowData.key);\n const originRequired = idx !== -1;\n // 值不一致才更新\n if (originRequired !== parseData.required) {\n if (idx !== -1) {\n parent.required.splice(idx, 1);\n } else {\n parent.required.push(rowData.key);\n }\n onChange();\n }\n } else {\n Toast.warning('Please paste the correct info!');\n }\n });\n },\n\n onDown: (ctx) => {\n ctx.typeEditor.moveActivePosToNextLine();\n },\n onLeft: (ctx) => {\n ctx.typeEditor.moveActivePosToLastColumn();\n },\n onUp: (ctx) => {\n ctx.typeEditor.moveActivePosToLastLine();\n },\n onRight: (ctx) => {\n ctx.typeEditor.moveActivePosToNextColumn();\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable react/prop-types */\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Checkbox, Toast, Tooltip } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { useDisabled } from '../hooks/disabled';\n\n// import s from './index.module.less';\nimport { TypeEditorColumnConfig, TypeEditorColumnType, TypeEditorRowData } from '../../../types';\nimport { CenterContainer } from './style';\n\nconst setCellValue = (rowData: TypeEditorRowData<IJsonSchema>) => {\n if (!rowData.extra) {\n rowData.extra = {};\n }\n rowData.extra.private = !rowData.extra.private;\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n onChange,\n onEditMode,\n}) => {\n const disabled = useDisabled(TypeEditorColumnType.Required, rowData);\n\n const child = (\n <Checkbox\n disabled={!!disabled}\n checked={!!rowData.extra?.private}\n onChange={() => {\n setCellValue(rowData);\n onChange();\n onEditMode();\n }}\n />\n );\n\n return (\n <CenterContainer onClick={!disabled ? () => onEditMode() : undefined}>\n {disabled ? <Tooltip content={disabled}>{child}</Tooltip> : child}\n </CenterContainer>\n );\n};\n\nexport const privateColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Private,\n label: 'Private',\n width: 11,\n viewRender: ViewRender,\n info: () => 'Private under the current project.',\n shortcuts: {\n onEnter: ({ onChange, rowData, typeEditor }) => {\n setCellValue(rowData);\n onChange();\n typeEditor.moveActivePosToNextLine();\n },\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n\n onCopy: (ctx) => {\n const {\n rowData,\n typeEditor: { clipboard },\n } = ctx;\n\n clipboard.writeData(\n JSON.stringify({\n private: !!rowData.extra?.private,\n })\n );\n\n Toast.success('Copy required success!');\n },\n\n onPaste: (ctx) => {\n const {\n typeEditor: { clipboard, onChange },\n rowData,\n } = ctx;\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data);\n const disabled = (rowData.disableEditColumn || []).find(\n (r) => r.column === TypeEditorColumnType.Private\n );\n if (disabled) {\n Toast.warning('The current cell does not support editing!');\n return;\n }\n if (parseData && typeof parseData === 'object' && parseData.private !== undefined) {\n if (!rowData.extra) {\n rowData.extra = {};\n }\n rowData.extra.private = parseData.private;\n onChange();\n } else {\n Toast.warning('Please paste the correct info!');\n }\n });\n },\n\n onDown: (ctx) => {\n ctx.typeEditor.moveActivePosToNextLine();\n },\n onLeft: (ctx) => {\n ctx.typeEditor.moveActivePosToLastColumn();\n },\n onUp: (ctx) => {\n ctx.typeEditor.moveActivePosToLastLine();\n },\n onRight: (ctx) => {\n ctx.typeEditor.moveActivePosToNextColumn();\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { pick } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport toast from '@douyinfe/semi-ui/lib/es/toast';\nimport { Toast, Tooltip } from '@douyinfe/semi-ui';\nimport { IconCopy, IconCopyAdd, IconDelete } from '@douyinfe/semi-icons';\n\nimport { getComponentId, typeEditorUtils } from '../utils';\nimport { useRemoveType } from '../hooks/type-edit';\nimport { type PasteDataType, usePasteData } from '../hooks/paste-data';\nimport { useHasErrorCell } from '../hooks/error-cell';\nimport { useDisabled } from '../hooks/disabled';\n\n// import s from './index.module.less';\nimport { TypeEditorRowData, TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { ClipboardService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\nimport { BaseIcon, CenterContainer } from './style';\n\nconst pasteTooltipsMap: Record<PasteDataType<IJsonSchema>['type'], string | undefined> = {\n invalid: 'Please confirm whether the clipboard value is correct',\n multiple: 'Multiple fields are not supported to be pasted into this field.',\n single: undefined,\n};\n\nconst setCellValue = (\n rowData: TypeEditorRowData<IJsonSchema>,\n newData: IJsonSchema & {\n extra?: {\n key: string;\n required: boolean;\n };\n },\n onPaste?: (typeSchema?: IJsonSchema) => IJsonSchema | undefined\n): void => {\n const othersProps = pick(rowData.self, ['required', 'description', 'flow', 'extra']);\n\n if (rowData.parent?.properties) {\n const { parent } = rowData;\n // const key = newDat\n if (newData.extra) {\n let { key } = newData.extra;\n const { required } = newData.extra;\n\n // key !== rowData.key 处理重复对某个字段进行 paste\n while (parent.properties![key] && key !== rowData.key) {\n key = `${key}__copy`;\n }\n\n delete parent.properties![rowData.key];\n\n delete newData.extra;\n let newPasteData = {\n ...newData,\n ...othersProps,\n };\n if (onPaste) {\n newPasteData = onPaste(newPasteData) || newPasteData;\n }\n\n parent.properties![key] = newPasteData;\n\n if (!parent.required) {\n parent.required = [];\n }\n\n const idx = parent.required.findIndex((v) => v === rowData.key);\n\n if (idx !== -1) {\n parent.required.splice(idx, 1);\n }\n if (required) {\n parent.required.push(key);\n }\n } else {\n let newPasteData = {\n ...newData,\n ...othersProps,\n };\n if (onPaste) {\n newPasteData = onPaste(newPasteData) || newPasteData;\n }\n parent.properties![rowData.key] = newPasteData;\n }\n }\n};\n\nexport const operateColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Operate,\n label: 'Operate',\n width: 11,\n focusable: false,\n viewRender: ({ rowData, onChange, typeEditor, onPaste }) => {\n const disabled = useDisabled(TypeEditorColumnType.Operate, rowData);\n\n const clipboard = useService<ClipboardService>(ClipboardService);\n\n const { pasteData } = usePasteData();\n\n const typeDefinition = useTypeDefinitionManager();\n\n const hasError = useHasErrorCell(rowData, typeEditor);\n\n const handleRemove = useRemoveType(rowData, onChange);\n\n const pasteErrorTips = pasteTooltipsMap[pasteData.type];\n\n return (\n <CenterContainer>\n <Tooltip content={disabled || 'Remove'}>\n <BaseIcon primary disabled={!!disabled}>\n <IconDelete\n id={getComponentId('remove-field')}\n onClick={disabled ? undefined : handleRemove}\n size=\"small\"\n />\n </BaseIcon>\n </Tooltip>\n <Tooltip\n content={\n hasError\n ? 'The current field is incorrect and does not support copying.'\n : 'Copy this field'\n }\n >\n <BaseIcon primary disabled={!!hasError}>\n <IconCopy\n onClick={() => {\n if (hasError) {\n return;\n }\n const copyData = {\n ...rowData.self,\n extra: {\n key: rowData.key,\n required: rowData.isRequired,\n ...(rowData.self.extra || {}),\n },\n };\n\n clipboard.writeData(JSON.stringify(copyData));\n toast.success('copy this field success!');\n }}\n size=\"small\"\n />\n </BaseIcon>\n </Tooltip>\n <Tooltip\n content={disabled ? disabled : !pasteErrorTips ? 'Paste field here' : pasteErrorTips}\n >\n <BaseIcon primary disabled={!!(pasteErrorTips || disabled)}>\n <IconCopyAdd\n size=\"small\"\n onClick={() => {\n if (pasteErrorTips || disabled) {\n return;\n }\n clipboard.readData().then((data) => {\n const parseData = typeEditorUtils.jsonParse(data) as IJsonSchema;\n\n const originIndex = rowData.extra?.index || 0;\n\n const config = parseData && typeDefinition.getTypeBySchema(parseData);\n if (config && typeof parseData === 'object') {\n typeEditorUtils.fixFlowIndex(parseData);\n parseData.extra!.index = originIndex;\n setCellValue(rowData, parseData as any, onPaste);\n\n onChange();\n } else {\n Toast.warning('Please paste the correct type schema!');\n }\n });\n }}\n />\n </BaseIcon>\n </Tooltip>\n </CenterContainer>\n );\n },\n\n shortcuts: {\n onEnter: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextLine();\n },\n onTab: ({ typeEditor }) => {\n typeEditor.moveActivePosToNextItem();\n },\n\n onDown: (ctx) => {\n ctx.typeEditor.moveActivePosToNextLine();\n },\n onLeft: (ctx) => {\n ctx.typeEditor.moveActivePosToLastColumn();\n },\n onUp: (ctx) => {\n ctx.typeEditor.moveActivePosToLastLine();\n },\n onRight: (ctx) => {\n ctx.typeEditor.moveActivePosToNextColumn();\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useCallback } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Toast } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { TypeEditorRowData } from '../../../types';\nimport { TypeEditorService, ClipboardService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\nimport { usePasteData } from './paste-data';\n\nexport const useAddType = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void\n) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const typeService = useTypeDefinitionManager();\n\n const config = typeService.getTypeBySchema(rowData.self);\n\n const handleAddType = useCallback(\n (e: React.MouseEvent) => {\n if (!config) {\n return;\n }\n const currentSchema = rowData.self;\n if (currentSchema) {\n let index = -1;\n\n const parent = config.getPropertiesParent?.(currentSchema);\n\n if (!parent) {\n return false;\n }\n\n if (!parent.properties) {\n parent.properties = {};\n }\n\n Object.values(parent.properties).forEach((val) => {\n if (!val.extra) {\n val.extra = {\n index: 0,\n };\n }\n\n index = Math.max(index, val.extra?.index || 0);\n });\n\n const [key, schema] = typeEditorUtils.genNewTypeSchema(index + 1);\n\n parent.properties[key] = schema as IJsonSchema;\n\n const dataSource = typeEditor.getDataSource();\n\n let addIndex = rowData.index + 1;\n for (let i = rowData.index + 1, len = dataSource.length; i < len; i++) {\n if (dataSource[i].level > rowData.level) {\n addIndex++;\n } else {\n break;\n }\n }\n\n const newPos = {\n x: 0,\n y: addIndex,\n };\n onChange();\n typeEditor.setActivePos(newPos);\n }\n\n e.stopPropagation();\n e.preventDefault();\n },\n [rowData, config, onChange]\n );\n\n return handleAddType;\n};\n\nexport const usePasteAddType = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void,\n onPaste?: (type?: TypeSchema) => TypeSchema | undefined\n) => {\n const typeService = useTypeDefinitionManager();\n\n const clipboard = useService<ClipboardService>(ClipboardService);\n\n const { pasteDataFormate } = usePasteData<TypeSchema>();\n\n const handlePasteAddType = useCallback(\n (e: React.MouseEvent) => {\n clipboard.readData().then((data) => {\n const parseData = pasteDataFormate(data);\n if (parseData.type === 'invalid') {\n Toast.warning('Please paste the correct type schema!');\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n const currentSchema = rowData.self;\n let index = -1;\n const pasteDataItems =\n parseData.type === 'single' ? [parseData.value] : [...parseData.value];\n const config = typeService.getTypeBySchema(currentSchema);\n const parent = config?.getPropertiesParent?.(currentSchema);\n if (!parent) {\n return;\n }\n if (!parent.properties) {\n parent.properties = {};\n }\n Object.values(parent.properties).forEach((val) => {\n if (!val.extra) {\n val.extra = {\n index: 0,\n };\n }\n index = Math.max(index, val.extra.index || 0);\n });\n pasteDataItems.forEach((item) => {\n let itemKey =\n (item as { extra?: { key?: string } })?.extra?.key || typeEditorUtils.genEmptyKey();\n // key !== rowData.key 处理重复对某个字段进行 paste\n while (parent.properties![itemKey]) {\n itemKey = `${itemKey}__copy`;\n }\n if (!(item as { extra?: { value?: unknown } })?.extra?.value) {\n delete (item as { extra?: { value?: string } }).extra;\n }\n item.extra = { index: ++index };\n if (onPaste) {\n item = onPaste(item) || item;\n }\n parent.properties![itemKey] = item as IJsonSchema;\n });\n onChange();\n });\n e.stopPropagation();\n e.preventDefault();\n },\n\n [rowData, onChange]\n );\n\n return handlePasteAddType;\n};\n\nexport const useRemoveType = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void\n) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n return useCallback(() => {\n const { parent } = rowData;\n if (!parent) {\n return;\n }\n const { properties = {} } = parent;\n\n delete properties[rowData.key];\n typeEditorUtils.sortProperties(rowData.parent!);\n\n if (typeEditorService.activePos.y === rowData.index) {\n typeEditorService.clearActivePos();\n }\n typeEditorService.refreshErrorMsgAfterRemove(rowData.index);\n\n onChange();\n }, [onChange, rowData]);\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { typeEditorUtils } from '../utils';\nimport { ClipboardService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\n\nexport type PasteDataType<TypeSchema> =\n | {\n type: 'single';\n value: TypeSchema;\n }\n | {\n type: 'multiple';\n value: TypeSchema[];\n }\n | {\n type: 'invalid';\n };\n\nexport const usePasteData = <TypeSchema extends Partial<IJsonSchema>>() => {\n const clipboard = useService<ClipboardService>(ClipboardService);\n\n const [pasteData, setPasteData] = useState<PasteDataType<TypeSchema>>({\n type: 'invalid',\n });\n\n const typeDefinition = useTypeDefinitionManager();\n\n const pasteDataFormate = useMemo(\n () =>\n (data: string): PasteDataType<TypeSchema> => {\n const parseData = typeEditorUtils.jsonParse(data);\n\n if (!parseData || typeof parseData !== 'object') {\n return {\n type: 'invalid',\n };\n }\n\n if (Array.isArray(parseData)) {\n const isValid = parseData.every((item) => {\n const config = typeDefinition.getTypeBySchema(item);\n return !!config;\n });\n\n if (isValid) {\n return {\n type: 'multiple',\n value: parseData,\n };\n } else {\n return {\n type: 'invalid',\n };\n }\n } else {\n const config = typeDefinition.getTypeBySchema(parseData);\n\n if (config) {\n return {\n type: 'single',\n value: parseData,\n };\n } else {\n return {\n type: 'invalid',\n };\n }\n }\n },\n [typeDefinition]\n );\n\n useEffect(() => {\n clipboard.readData().then(\n (v) => {\n if (v !== undefined) {\n setPasteData(pasteDataFormate(v));\n }\n },\n (error) => {\n // console.log(error);\n }\n );\n\n const dispose = clipboard.onClipboardChanged((newData) => {\n setPasteData(pasteDataFormate(newData));\n });\n\n return () => {\n dispose.dispose();\n };\n }, [pasteDataFormate]);\n\n return {\n pasteDataFormate,\n pasteData,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\nimport { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { useMonitorData } from '../../../utils';\nimport { TypeEditorPos, TypeEditorRowData, TypeEditorColumnConfig } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\nimport { useActivePos } from './active-pos';\n\nexport const useEditCellErrorMsg = (pos: TypeEditorPos): string | undefined => {\n const typeEditor = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n\n const { data: errorMsgs } = useMonitorData(typeEditor.errorMsgs);\n\n const msg = useMemo(\n () => errorMsgs?.find((v) => v.pos.x === pos.x && v.pos.y === pos.y)?.msg,\n [pos, errorMsgs]\n );\n\n return msg;\n};\n\nexport const useViewCellErrorMsg = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n config: TypeEditorColumnConfig<TypeSchema>,\n pos: TypeEditorPos\n) => {\n const activePos = useActivePos();\n\n const res = useMemo(\n () =>\n (activePos.x !== pos.x || activePos.y !== pos.y) && config.validateCell\n ? config.validateCell(rowData, rowData.extraConfig)\n : undefined,\n [rowData, config, activePos, pos]\n );\n\n return res;\n};\n\nexport const useHasErrorCell = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n\n typeEditor: TypeEditorService<TypeSchema>\n): boolean => {\n const res = useMemo(() => {\n const configs = typeEditor.columnViewConfig.map((v) => typeEditor.getConfigByType(v.type));\n\n return (\n configs\n .map((config) =>\n config?.validateCell ? config.validateCell(rowData, rowData.extraConfig) : undefined\n )\n .filter(Boolean).length !== 0\n );\n }, [rowData, typeEditor]);\n\n return res;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\n\nexport const useActivePos = (): TypeEditorService<IJsonSchema>['activePos'] => {\n const typeEditorService = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n\n const [activePos, setActivePos] = useState<{ x: number; y: number }>(typeEditorService.activePos);\n\n useEffect(() => {\n const dispose = typeEditorService.onActivePosChange.event((v) => {\n setActivePos(v);\n });\n return () => {\n dispose.dispose();\n };\n }, []);\n\n return activePos;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable complexity */\n\nimport React, { useEffect, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconCopyAdd, IconHandle, IconPlus, IconTreeTriangleDown } from '@douyinfe/semi-icons';\n\nimport { getComponentId, typeEditorUtils } from '../utils';\nimport { WidthIndent } from '../indent';\nimport { useAddType, usePasteAddType } from '../hooks/type-edit';\nimport { usePasteData } from '../hooks/paste-data';\nimport { useKeyVisible } from '../hooks/key-visible';\nimport { useDisabled } from '../hooks/disabled';\nimport {\n ShortcutContext,\n TypeEditorColumnConfig,\n TypeEditorColumnType,\n TypeEditorRowData,\n} from '../../../types';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport {\n BaseIcon,\n KeyEditorContainer,\n KeyEditorInput,\n KeyViewContainer,\n KeyViewContent,\n KeyViewText,\n} from './style';\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n onEditMode,\n readonly,\n onChange,\n onPaste,\n unOpenKeys,\n onChildrenVisibleChange,\n dragSource,\n}) => {\n const { extraConfig } = rowData;\n\n const typeService = useTypeDefinitionManager();\n\n const config = typeService.getTypeBySchema(rowData.self);\n\n const disabled = useDisabled(TypeEditorColumnType.Key, rowData);\n\n const { hiddenDrag: originHiddenDrag } = extraConfig;\n\n const hiddenDrag = originHiddenDrag || readonly;\n\n const text = (\n <KeyViewText disabled={!!disabled} ellipsis={{ showTooltip: true }}>\n {typeEditorUtils.formateKey(rowData.key)}\n </KeyViewText>\n );\n\n const visibleNode = useKeyVisible(rowData, onChange, extraConfig);\n\n const handleAddType = useAddType(rowData, onChange);\n\n const draggable = !(rowData.cannotDrag || disabled || hiddenDrag);\n\n const { pasteData } = usePasteData();\n const handlePasteAddType = usePasteAddType(rowData, onChange, onPaste);\n\n if (config && config.canAddField?.(rowData)) {\n const disabledAdd = extraConfig.disabledAdd ? extraConfig.disabledAdd(rowData) : undefined;\n\n return (\n <KeyViewContainer\n id={getComponentId('key-text')}\n onClick={\n disabled\n ? undefined\n : () => {\n onEditMode();\n }\n }\n >\n {!hiddenDrag && (\n <BaseIcon draggable disabled={!draggable}>\n <IconHandle ref={draggable ? dragSource : undefined} />\n </BaseIcon>\n )}\n\n <WidthIndent width={rowData.level * 16} />\n <KeyViewContent>\n {rowData.childrenCount ? (\n <BaseIcon triangle isRotate={!unOpenKeys[rowData.id]}>\n <IconTreeTriangleDown\n size=\"small\"\n onClick={(e) => {\n onChildrenVisibleChange(rowData.id, !unOpenKeys[rowData.id]);\n e.stopPropagation();\n }}\n />\n </BaseIcon>\n ) : (\n <WidthIndent width={12} />\n )}\n\n {disabled ? (\n <div style={{ flex: 1 }}>\n <Tooltip content={disabled}>{text}</Tooltip>\n </div>\n ) : (\n text\n )}\n\n {!readonly && (\n <>\n {disabledAdd ? (\n <Tooltip content={disabledAdd}>\n <BaseIcon disabled>\n <IconPlus id={getComponentId('add-field')} size=\"small\" />\n </BaseIcon>\n </Tooltip>\n ) : (\n <Tooltip content=\"add child field\">\n <BaseIcon>\n <IconPlus\n size=\"small\"\n onClick={handleAddType}\n id={getComponentId('add-field')}\n />\n </BaseIcon>\n </Tooltip>\n )}\n {disabledAdd || pasteData.type === 'invalid' ? (\n <Tooltip\n content={disabledAdd || 'Please confirm whether the clipboard value is correct'}\n >\n <BaseIcon disabled>\n <IconCopyAdd size=\"small\" />\n </BaseIcon>\n </Tooltip>\n ) : (\n <Tooltip content=\"paste as new child fields\">\n <BaseIcon>\n <IconCopyAdd size=\"small\" onClick={handlePasteAddType} />\n </BaseIcon>\n </Tooltip>\n )}\n </>\n )}\n\n {extraConfig.editorVisible && visibleNode}\n </KeyViewContent>\n </KeyViewContainer>\n );\n }\n\n return (\n <KeyViewContainer\n id={getComponentId('key-text')}\n onClick={\n disabled\n ? undefined\n : () => {\n onEditMode();\n }\n }\n >\n {!hiddenDrag && (\n <BaseIcon draggable disabled={!draggable}>\n <IconHandle ref={draggable ? dragSource : undefined} />\n </BaseIcon>\n )}\n\n <WidthIndent width={(rowData.level + 1) * 16} />\n <KeyViewContent>\n {disabled ? <Tooltip content={disabled}>{text}</Tooltip> : text}\n {extraConfig.editorVisible && visibleNode}\n </KeyViewContent>\n </KeyViewContainer>\n );\n};\n\nconst validate = (value: string, rowData: TypeEditorRowData<IJsonSchema>): string | undefined => {\n const res = rowData.extraConfig?.customValidateName?.(value);\n\n const lastValue = rowData.key;\n\n const parentTypeSchema = rowData.parent;\n\n if (value !== lastValue && parentTypeSchema?.properties?.[value]) {\n return 'The same key exists at the current level.';\n }\n if (res) {\n return res;\n }\n};\n\nconst changeValue = ({\n rowData,\n value,\n}: {\n rowData: TypeEditorRowData<IJsonSchema>;\n value: string;\n}) => {\n const lastValue = rowData.key;\n\n const parentTypeSchema = rowData.parent;\n\n if (value !== lastValue) {\n if (parentTypeSchema && parentTypeSchema.properties) {\n parentTypeSchema.properties[value] = parentTypeSchema.properties[lastValue];\n }\n\n if (parentTypeSchema?.properties) {\n delete parentTypeSchema.properties[lastValue];\n }\n }\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onError,\n onFieldChange,\n onViewMode,\n}) => {\n const [value, setValue] = useState(typeEditorUtils.formateKey(rowData.key));\n\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n return (\n <KeyEditorContainer>\n <WidthIndent\n style={{ background: 'var(--semi-color-fill-0)' }}\n width={\n (rowData.level + 2) * 14 +\n (2 * rowData.level - 1) +\n (rowData.extraConfig.hiddenDrag ? -16 : 0)\n }\n />\n <KeyEditorInput\n id={getComponentId('key-edit')}\n onChange={(v) => {\n setValue(v);\n typeEditor.dataSourceTouchedMap[rowData.id] = true;\n const res = validate(v, rowData);\n typeEditor.setErrorMsg(typeEditor.activePos, res);\n if (onError) {\n onError(res ? [res] : []);\n }\n }}\n autoFocus\n onBlur={(e) => {\n const oldValue = rowData.key;\n\n if (value && validate(value, rowData)) {\n typeEditor.blink.update(true);\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n\n const newVal = typeEditorUtils.deFormateKey(value, oldValue);\n\n changeValue({ rowData, value: newVal });\n\n onFieldChange &&\n onFieldChange({\n type: TypeEditorColumnType.Key,\n oldValue,\n newValue: newVal,\n });\n\n if (onError) {\n onError([]);\n }\n onChange();\n onViewMode();\n }}\n value={value}\n />\n </KeyEditorContainer>\n );\n};\n\nconst dealMove = (\n { rowData, value, onChange, typeEditor }: ShortcutContext<IJsonSchema>,\n cb: () => void\n) => {\n const validateRes = validate(value, rowData);\n if (value && validateRes) {\n typeEditor.blink.update(true);\n } else {\n changeValue({\n value: typeEditorUtils.deFormateKey(value),\n rowData,\n });\n typeEditor.setErrorMsg(typeEditor.activePos);\n onChange();\n cb();\n }\n};\n\nexport const keyColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Key,\n label: 'Key',\n viewRender: ViewRender,\n width: 43,\n validateCell: (rowData, ctx) => {\n const key = typeEditorUtils.formateKey(rowData.key);\n if (!key) {\n return {\n level: 'warning',\n msg: 'Empty lines will not be saved.',\n };\n }\n\n if (ctx.customValidateName) {\n const customValidateRes = ctx.customValidateName(key);\n if (customValidateRes) {\n return {\n level: 'error',\n msg: customValidateRes,\n };\n }\n return;\n }\n\n if (validate(key, rowData)) {\n return {\n level: 'error',\n msg: validate(key, rowData),\n };\n }\n },\n shortcuts: {\n onEnter: (ctx) => {\n dealMove(ctx, () => {\n ctx.typeEditor.moveActivePosToNextLineWithAddLine(ctx.rowData);\n });\n },\n onTab: (ctx) => {\n dealMove(ctx, () => {\n ctx.typeEditor.moveActivePosToNextItem();\n });\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\nimport { type CSSProperties, type FC } from 'react';\n\nexport const Indent: FC<{\n count: number;\n style?: CSSProperties;\n}> = ({ count, style = {} }) => <div style={{ height: '100%', width: count * 12, ...style }} />;\n\nexport const WidthIndent: FC<{\n width: number;\n style?: CSSProperties;\n}> = ({ width, style = {} }) => <div style={{ height: '100%', flexShrink: 0, width, ...style }} />;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useCallback } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconEyeClosed, IconEyeOpened } from '@douyinfe/semi-icons';\n\nimport { BaseIcon } from '../columns/style';\nimport { TypeEditorRowData, TypeEditorSpecialConfig, TypeEditorColumnType } from '../../../types';\nimport { useDisabled } from './disabled';\n\nexport const useKeyVisible = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n onChange: () => void,\n extraConfig: TypeEditorSpecialConfig<TypeSchema>\n): React.JSX.Element => {\n const disabled = useDisabled(TypeEditorColumnType.Key, rowData);\n\n const handleVisibleChange = useCallback(\n (e: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {\n const currentSchema = rowData.self;\n\n if (!currentSchema.extra) {\n currentSchema.extra = {};\n }\n\n currentSchema.extra.hidden = !currentSchema.extra.hidden;\n onChange();\n\n e.stopPropagation();\n e.preventDefault();\n },\n [rowData.self, onChange]\n );\n\n const disableContent =\n disabled || typeof extraConfig.editorVisible === 'string'\n ? disabled || extraConfig.editorVisible\n : undefined;\n\n const visibleNode = (\n <>\n {disableContent ? (\n <Tooltip content={disableContent}>\n <BaseIcon disabled>\n <IconEyeOpened size=\"small\" />\n </BaseIcon>\n </Tooltip>\n ) : rowData.extra?.hidden ? (\n <BaseIcon>\n <IconEyeClosed onClick={handleVisibleChange} size=\"small\" />\n </BaseIcon>\n ) : (\n <BaseIcon>\n <IconEyeOpened onClick={handleVisibleChange} size=\"small\" />\n </BaseIcon>\n )}\n </>\n );\n\n return extraConfig.editorVisible ? visibleNode : <></>;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useState } from 'react';\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\n\nimport { useDisabled } from '../hooks';\nimport { TypeEditorColumnConfig, TypeEditorColumnType } from '../../../types';\nimport { KeyEditorContainer, KeyEditorInput, KeyViewContainer, KeyViewText } from './style';\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({ rowData, onEditMode }) => {\n const disabled = useDisabled(TypeEditorColumnType.Description, rowData);\n\n if (disabled) {\n return (\n <KeyViewContainer disabled>\n <Tooltip content={disabled}>\n <KeyViewText>{rowData.description}</KeyViewText>\n </Tooltip>\n </KeyViewContainer>\n );\n }\n\n return (\n <KeyViewContainer onClick={() => onEditMode()}>\n <KeyViewText>{rowData.description}</KeyViewText>\n </KeyViewContainer>\n );\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const [value, setValue] = useState(rowData.description);\n\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n useEffect(() => {\n setValue(rowData.description);\n }, [rowData.description]);\n\n return (\n <KeyEditorContainer>\n <KeyEditorInput\n onChange={setValue}\n autoFocus\n onBlur={() => {\n const { self } = rowData;\n self.description = value;\n onChange();\n\n onViewMode();\n }}\n value={value}\n />\n </KeyEditorContainer>\n );\n};\n\nexport const descriptionColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Description,\n width: 15,\n label: 'Description',\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.description = value;\n onChange();\n typeEditor.moveActivePosToNextLineWithAddLine(rowData);\n },\n onTab: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.description = value;\n onChange();\n typeEditor.moveActivePosToNextItem();\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorProp } from '../type';\nimport { columnConfigs } from '../columns';\nimport { TypeEditorColumnConfig } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\nimport { useTypeEditorHotKey } from './hot-key';\n\nexport const TypeEditorListener = <TypeSchema extends Partial<IJsonSchema>>({\n configs = [],\n children,\n}: React.PropsWithChildren & {\n configs: TypeEditorProp<'type-definition', TypeSchema>['viewConfigs'];\n}) => {\n const dom = useRef();\n\n const lastWidth = useRef(0);\n\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const [init, setInit] = useState(false);\n\n useEffect(() => {\n if (dom.current) {\n const el = dom.current;\n\n const resize = new ResizeObserver((entries) => {\n if (lastWidth.current === 0) {\n lastWidth.current = entries[0].contentRect.width;\n }\n if (entries[0].contentRect.width !== lastWidth.current) {\n typeEditorService.clearActivePos();\n }\n });\n\n resize.observe(el);\n return () => {\n resize.unobserve(el);\n };\n }\n }, [dom.current, typeEditorService]);\n\n useEffect(() => {\n typeEditorService.registerConfigs(\n columnConfigs as unknown as TypeEditorColumnConfig<TypeSchema>[]\n );\n\n configs.forEach(\n (config) => config.config && typeEditorService.addConfigProps(config.type, config.config)\n );\n\n setInit(true);\n }, [typeEditorService, configs]);\n\n const composition = useRef(false);\n\n const hotkeys = useTypeEditorHotKey();\n\n return (\n <div\n style={{ width: '100%' }}\n onCompositionStart={() => (composition.current = true)}\n onCompositionEnd={() => (composition.current = false)}\n onKeyDown={(e) => {\n if (composition.current) return;\n const hotKey = hotkeys.find((item) => item.matcher(e));\n hotKey?.callback();\n if (hotKey?.preventDefault) {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n ref={dom as unknown as React.LegacyRef<HTMLDivElement>}\n >\n {init && children}\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorOperationService, TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\n\ninterface HotKeyConfig {\n matcher: (event: React.KeyboardEvent) => boolean;\n callback: () => void;\n preventDefault?: boolean;\n}\n\nexport const useTypeEditorHotKey = () => {\n const typeEditor = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n const operator = useService<TypeEditorOperationService<IJsonSchema>>(TypeEditorOperationService);\n\n const hotKeyConfig: HotKeyConfig[] = useMemo(() => {\n const res: HotKeyConfig[] = [\n {\n matcher: (e) => e.key === 'Enter',\n callback: () => {\n typeEditor.triggerShortcutEvent('enter');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowUp',\n callback: () => {\n typeEditor.triggerShortcutEvent('up');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'Tab',\n callback: () => {\n typeEditor.triggerShortcutEvent('tab');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => e.key === 'ArrowLeft',\n callback: () => {\n typeEditor.triggerShortcutEvent('left');\n },\n },\n {\n matcher: (e) => e.key === 'ArrowRight',\n callback: () => {\n typeEditor.triggerShortcutEvent('right');\n },\n },\n {\n matcher: (e) => e.key === 'ArrowDown',\n callback: () => {\n typeEditor.triggerShortcutEvent('down');\n },\n preventDefault: true,\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.key === 'c',\n callback: () => {\n typeEditor.triggerShortcutEvent('copy');\n },\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.key === 'v',\n callback: () => {\n typeEditor.triggerShortcutEvent('paste');\n },\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.key === 'z',\n callback: () => {\n operator.undo();\n },\n },\n {\n matcher: (e) => (e.metaKey || e.ctrlKey) && e.shiftKey && e.key === 'z',\n callback: () => {\n operator.redo();\n },\n },\n ];\n\n return res;\n }, [typeEditor]);\n\n return hotKeyConfig;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\n\nimport { useDrag, useDrop } from 'react-dnd';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Toast } from '@douyinfe/semi-ui';\n\nimport { typeEditorUtils } from '../utils';\nimport { TypeEditorRowData } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useService, useTypeDefinitionManager } from '../../../contexts';\n\nexport const useRowDrag = (\n id: string,\n onChildrenVisibleChange: (rowDataId: string, newVal: boolean) => void\n) => {\n const [{ isDragging }, drag, preview] = useDrag(\n () => ({\n type: 'node-editor-dnd',\n item: () => {\n onChildrenVisibleChange(id, true);\n return {\n id,\n };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n }),\n [id]\n );\n\n return {\n drag,\n isDragging,\n preview,\n };\n};\n\ninterface DragItem {\n id: string;\n}\n\nexport const useCellDrop = <TypeSchema extends Partial<IJsonSchema>>(\n rowData: TypeEditorRowData<TypeSchema>,\n index: number,\n dataSource: Record<string, TypeEditorRowData<TypeSchema>>,\n onChange: () => void\n) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const typeService = useTypeDefinitionManager();\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'node-editor-dnd',\n drop: (item: DragItem) => {\n if (item.id === rowData.id) {\n typeEditor.clearDropInfo();\n return;\n }\n\n const dragData = dataSource[item.id];\n\n const definition = typeService.getTypeBySchema(rowData.self);\n\n if (definition) {\n const canHasChild = definition.canAddField?.(rowData.self);\n\n let dropParent: IJsonSchema;\n let dropIndex: number;\n if (canHasChild) {\n dropParent = definition.getPropertiesParent?.(rowData.self)! as IJsonSchema;\n dropIndex = -1;\n } else {\n dropParent = rowData.parent! as IJsonSchema;\n dropIndex = (rowData.extra?.index || 0) + 0.1;\n }\n\n if (dropParent?.properties?.[dragData.key] && dropParent !== dragData.parent) {\n Toast.error('drop error: there is a duplicate key in the current object');\n typeEditor.clearDropInfo();\n\n return;\n }\n\n // 删除原来的引用\n if (dragData.parent?.properties) {\n delete dragData.parent.properties[dragData.key];\n }\n\n // 添加到新的节点\n if (!dropParent.properties) {\n dropParent.properties = {};\n }\n dropParent.properties[dragData.key] = dragData.self as IJsonSchema;\n typeEditorUtils.fixFlowIndex(dragData);\n dragData.extra!.index = dropIndex;\n\n // 分别重新 sort dropParent 和 dragParent\n typeEditorUtils.sortProperties(dropParent);\n typeEditorUtils.sortProperties(dragData.parent!);\n onChange();\n }\n\n typeEditor.clearDropInfo();\n },\n hover() {\n typeEditor.setDropInfo({\n indent: rowData.level,\n index,\n rowDataId: rowData.id,\n });\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [rowData]\n );\n\n return {\n drop,\n isOver,\n };\n};\n\nexport const useHeaderDrop = <TypeSchema extends Partial<IJsonSchema>>(\n root: TypeSchema,\n dataSource: Record<string, TypeEditorRowData<TypeSchema>>,\n onChange: () => void\n) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const typeService = useTypeDefinitionManager();\n\n const [{ isOver }, drop] = useDrop(\n () => ({\n accept: 'node-editor-dnd',\n drop: (item: DragItem) => {\n const dragData = dataSource[item.id];\n\n const definition = typeService.getTypeBySchema(root);\n\n if (definition) {\n const canHasChild = definition.canAddField(root);\n\n let dropParent: IJsonSchema;\n let dropIndex: number;\n if (canHasChild) {\n dropParent = definition.getPropertiesParent(root)! as IJsonSchema;\n dropIndex = -1;\n\n if (dropParent?.properties?.[dragData.key] && dropParent !== dragData.parent) {\n Toast.error('drop error: there is a duplicate key in the current object');\n typeEditor.clearDropInfo();\n\n return;\n }\n\n // 删除原来的引用\n if (dragData.parent?.properties) {\n delete dragData.parent.properties[dragData.key];\n }\n\n // 添加到新的节点\n if (!dropParent.properties) {\n dropParent.properties = {};\n }\n dropParent.properties[dragData.key] = dragData.self as IJsonSchema;\n typeEditorUtils.fixFlowIndex(dragData);\n dragData.extra!.index = dropIndex;\n\n // 分别重新 sort dropParent 和 dragParent\n typeEditorUtils.sortProperties(dropParent);\n typeEditorUtils.sortProperties(dragData.parent!);\n onChange();\n }\n\n typeEditor.clearDropInfo();\n }\n },\n hover() {\n typeEditor.setDropInfo({\n indent: 0,\n index: -1,\n rowDataId: 'header',\n });\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n }),\n }),\n [root]\n );\n\n return {\n drop,\n isOver,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip, Typography } from '@douyinfe/semi-ui';\n\nimport { useDisabled } from '../hooks/disabled';\nimport { TypeEditorColumnConfig, TypeEditorColumnType, TypeEditorRowData } from '../../../types';\nimport { TypeEditorService } from '../../../services';\nimport { useTypeDefinitionManager } from '../../../contexts';\nimport {\n GlobalSelectStyle,\n KeyEditorContainer,\n KeyViewContainer,\n TypeTextContainer,\n} from './style';\n\nconst useFormatValue = ({\n rowData,\n onChange,\n typeEditor,\n}: {\n rowData: TypeEditorRowData<IJsonSchema>;\n typeEditor: TypeEditorService<IJsonSchema>;\n onChange: () => void;\n}) => {\n const valueRef = useRef(rowData.self.default);\n const [value, setValue] = useState(rowData.self.default);\n\n const typeDefinition = useTypeDefinitionManager();\n\n useEffect(() => {\n typeEditor.editValue = value;\n }, [typeEditor, value]);\n\n useEffect(() => {\n setValue(rowData.self.default);\n valueRef.current = rowData.self.default;\n }, [rowData.self.default]);\n\n const handleSubmit = useCallback(() => {\n rowData.self.default = valueRef.current;\n\n const config = typeDefinition.getTypeBySchema(rowData.self);\n\n if (config?.formatDefault) {\n config.formatDefault(valueRef.current, rowData.self);\n }\n\n const parenConfig = rowData.parent && typeDefinition.getTypeBySchema(rowData.parent);\n\n if (parenConfig?.formatDefault) {\n parenConfig.formatDefault(valueRef.current, rowData.parent!);\n }\n\n onChange();\n\n // onViewMode();\n }, [onChange, rowData, typeDefinition]);\n\n const deFormatValue = useMemo(() => {\n const config = typeDefinition.getTypeBySchema(rowData.self);\n return config?.deFormatDefault ? config.deFormatDefault(value) : value;\n }, [value, rowData]);\n\n const handleChange = useCallback((v: unknown) => {\n valueRef.current = v;\n setValue(v);\n }, []);\n\n return {\n handleChange,\n handleSubmit,\n deFormatValue,\n };\n};\n\nexport const TypeText = <TypeSchema extends Partial<IJsonSchema>>({\n value,\n type,\n}: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value?: any;\n type: TypeSchema;\n}) => {\n const typeDefinition = useTypeDefinitionManager();\n\n const content = useMemo(() => {\n const config = typeDefinition.getTypeBySchema(type);\n\n return config?.getValueText ? config.getValueText(value) : value;\n }, [value, type]);\n\n return (\n <TypeTextContainer>\n <Typography.Text ellipsis={{ showTooltip: true }}>{content}</Typography.Text>\n </TypeTextContainer>\n );\n};\n\nconst ViewRender: TypeEditorColumnConfig<IJsonSchema>['viewRender'] = ({\n rowData,\n typeEditor,\n onEditMode,\n onChange,\n}) => {\n const disabled = useDisabled(TypeEditorColumnType.Default, rowData);\n\n const typeDefinition = useTypeDefinitionManager();\n const { defaultMode = 'default' } = rowData.extraConfig;\n\n const { customDefaultView } = rowData.extraConfig;\n\n const { deFormatValue, handleChange, handleSubmit } = useFormatValue({\n rowData,\n onChange,\n typeEditor,\n });\n\n const customNode =\n customDefaultView &&\n customDefaultView({\n rowData,\n disabled,\n value: deFormatValue,\n onChange: handleChange,\n onSubmit: (v) => {\n handleChange(v);\n handleSubmit();\n },\n });\n\n if (customNode) {\n return <> {customNode}</>;\n }\n\n if (disabled) {\n return (\n <KeyViewContainer disabled>\n <Tooltip content={disabled}>\n <div style={{ width: '100%', height: '100%' }}>\n <TypeText value={deFormatValue} type={rowData.self} />\n </div>\n </Tooltip>\n </KeyViewContainer>\n );\n }\n\n if (defaultMode === 'server') {\n const config = typeDefinition.getTypeBySchema(rowData.self);\n\n return (\n <Tooltip content=\"The default value is not allowed to be modified.\">\n <KeyViewContainer disabled>\n <Typography.Text>{JSON.stringify(config?.getDefaultValue?.())}</Typography.Text>\n </KeyViewContainer>\n </Tooltip>\n );\n }\n\n return (\n <KeyViewContainer onClick={() => onEditMode()}>\n <TypeText value={deFormatValue} type={rowData.self} />\n </KeyViewContainer>\n );\n};\n\nconst EditRender: TypeEditorColumnConfig<IJsonSchema>['editRender'] = ({\n rowData,\n onChange,\n typeEditor,\n onViewMode,\n}) => {\n const { deFormatValue, handleChange, handleSubmit } = useFormatValue({\n rowData,\n onChange,\n typeEditor,\n });\n\n const typeDefinition = useTypeDefinitionManager();\n const config = useMemo(() => typeDefinition.getTypeBySchema(rowData.self), [rowData.self]);\n return (\n <KeyEditorContainer>\n <GlobalSelectStyle />\n {config &&\n config?.getInputNode?.({\n value: deFormatValue,\n onChange: handleChange,\n type: rowData.self,\n onSubmit: () => {\n handleSubmit();\n onViewMode();\n },\n })}\n </KeyEditorContainer>\n );\n};\n\nexport const defaultColumnConfig: TypeEditorColumnConfig<IJsonSchema> = {\n type: TypeEditorColumnType.Default,\n width: 15,\n label: 'Default',\n viewRender: ViewRender,\n shortcuts: {\n onEnter: ({ rowData, onChange, typeEditor, value, typeDefinitionService }) => {\n const config = typeDefinitionService.getTypeBySchema(rowData.self);\n if (config?.typeInputConfig?.canEnter) {\n rowData.self.default = value;\n\n onChange();\n\n typeEditor.moveActivePosToNextLineWithAddLine(rowData);\n }\n },\n onTab: ({ rowData, value, onChange, typeEditor }) => {\n rowData.self.default = value;\n onChange();\n typeEditor.moveActivePosToNextItem();\n },\n },\n editRender: EditRender,\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { valueColumnConfig } from './value';\nimport { typeColumnConfig } from './type';\nimport { requiredColumnConfig } from './required';\nimport { privateColumnConfig } from './private';\nimport { operateColumnConfig } from './operate';\nimport { keyColumnConfig } from './key';\nimport { descriptionColumnConfig } from './description';\nimport { defaultColumnConfig } from './default';\n\nexport const columnConfigs = [\n keyColumnConfig,\n typeColumnConfig,\n requiredColumnConfig,\n descriptionColumnConfig,\n privateColumnConfig,\n valueColumnConfig,\n defaultColumnConfig,\n operateColumnConfig,\n];\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useImperativeHandle, useState } from 'react';\n\nimport { noop } from 'lodash-es';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space } from '@douyinfe/semi-ui';\n\nimport { fixedTSForwardRef } from './utils';\nimport { TypeEditorTable } from './type-editor';\nimport { TypeEditorMode, TypeEditorProp, TypeEditorRef } from './type';\nimport { ToolBar } from './tool-bar';\nexport * from './type';\nexport { columnConfigs as TypeEditorColumnConfigs } from './columns';\n\nconst TypeEditorContainer = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>(\n props: TypeEditorProp<Mode, TypeSchema>,\n ref: React.Ref<TypeEditorRef<Mode, TypeSchema>>\n) => {\n const [instance, setInstance] = useState<TypeEditorRef<Mode, TypeSchema>>();\n\n useImperativeHandle(ref, () => ({\n getContainer: () => instance?.getContainer(),\n setValue: instance?.setValue || noop,\n getService: instance?.getService || (() => undefined),\n undo: instance?.undo || noop,\n redo: instance?.redo || noop,\n getValue() {\n return instance?.getValue();\n },\n getOperator() {\n return instance?.getOperator();\n },\n }));\n\n return (\n <Space spacing={4} vertical>\n {instance && <ToolBar {...props} editor={instance} />}\n <TypeEditorTable\n onInit={(editor) => {\n setInstance(editor.current);\n }}\n {...props}\n />\n </Space>\n );\n};\n\nexport const TypeEditor = fixedTSForwardRef(TypeEditorContainer);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport styled from 'styled-components';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorProvider } from '../../contexts';\nimport { type TypeEditorMode, type TypeEditorProp } from './type';\nimport { Table } from './table';\nimport { TypeEditorListener } from './hooks';\n\nconst Container = styled.div`\n position: relative;\n\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n outline: none;\n\n table {\n table-layout: fixed;\n }\n`;\n\nexport const TypeEditorTable = <\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n>(\n props: TypeEditorProp<Mode, TypeSchema>\n) => (\n <TypeEditorProvider typeRegistryCreators={props.typeRegistryCreators}>\n <TypeEditorListener configs={props.viewConfigs}>\n <Container>\n <Table {...props} />\n </Container>\n </TypeEditorListener>\n </TypeEditorProvider>\n);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable max-params */\n/* eslint-disable complexity */\n\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { DndProvider } from 'react-dnd';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport React from 'react';\n\nimport { isEqual } from 'lodash-es';\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space } from '@douyinfe/semi-ui';\n\nimport { TypeEditorRowData, TypeEditorColumnType } from '../../types';\nimport { TypeEditorOperationService, TypeEditorService } from '../../services';\nimport { TypeRegistryCreatorsAdapter, useService, useTypeDefinitionManager } from '../../contexts';\nimport { fixedTSForwardRef, typeEditorUtils } from './utils';\nimport { type TypeEditorMode, type TypeEditorProp, TypeEditorRef } from './type';\nimport { EditorTable } from './style';\nimport { useFormatter } from './hooks/formatter-value';\nimport { useActivePos } from './hooks';\nimport { Header } from './header';\nimport { DropTip } from './drop-tip';\nimport { ROOT_FIELD_ID } from './common';\nimport { EditCell } from './cell';\nimport { Body } from './body';\n\nconst TableInner = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n value,\n onChange,\n mode,\n viewConfigs,\n onInit,\n forceUpdate,\n onEditRowDataSource,\n rootLevel = 0,\n customEmptyNode,\n tableClassName,\n onError,\n disableEditColumn,\n readonly,\n onPaste,\n typeRegistryCreators,\n onFieldChange,\n getRootSchema,\n onCustomSetValue,\n extraConfig: originExtraConfig = {},\n}: TypeEditorProp<Mode, TypeSchema>) => {\n const extraConfig = useMemo(\n () => ({\n ...originExtraConfig,\n }),\n [originExtraConfig]\n );\n\n const { deFormatter, formatter } = useFormatter<Mode, TypeSchema>({\n mode,\n extraConfig,\n });\n\n const typeSchema = useMemo(() => formatter(value), [formatter, value]);\n\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n const typeOperator = useService<TypeEditorOperationService<TypeSchema>>(\n TypeEditorOperationService\n );\n\n const [tableDom, setTableDom] = useState<HTMLTableElement>();\n\n const [initialSchema, setInitialSchema] = useState<TypeSchema>(() => {\n const res = typeEditorUtils.clone(typeSchema) || typeEditorUtils.getInitialSchema<TypeSchema>();\n\n typeOperator.storeState(res);\n\n return res;\n });\n\n // const\n const editor = useRef<TypeEditorRef<Mode, TypeSchema>>();\n\n useEffect(() => {\n // editor\n const instance: TypeEditorRef<Mode, TypeSchema> = {\n getService: () => typeEditor,\n setValue(originNewVal) {\n let newVal = originNewVal;\n\n if (onCustomSetValue) {\n newVal = onCustomSetValue(newVal);\n }\n\n const newSchema = formatter(newVal)!;\n\n setInitialSchema(newSchema);\n\n typeOperator.storeState(newSchema);\n\n const final = typeEditorUtils.formateTypeSchema<TypeSchema>(newSchema, extraConfig);\n\n const newValue = deFormatter(final)!;\n\n if (onChange) {\n onChange(newValue);\n }\n },\n getContainer: () => tableDom,\n getValue: () => {\n const rootValue = deFormatter(typeEditor.rootTypeSchema);\n\n return rootValue;\n },\n undo: () => {\n typeOperator.undo();\n typeEditor.onChange(typeOperator.getCurrentState(), {\n storeState: false,\n });\n },\n redo: () => {\n typeOperator.redo();\n typeEditor.onChange(typeOperator.getCurrentState(), {\n storeState: false,\n });\n },\n getOperator() {\n return typeOperator;\n },\n };\n editor.current = instance;\n }, [typeEditor, onChange, tableDom, deFormatter, formatter, extraConfig, onCustomSetValue]);\n\n useEffect(() => {\n onInit?.(editor);\n }, [onInit]);\n\n /**\n * 当前 rowData 的 children 是否不可见\n * 定义为不可见的原因:默认可见\n */\n const [unOpenKeys, setUnOpenKeys] = useState<Record<string, boolean>>({});\n\n useEffect(() => {\n if (\n !isEqual(typeSchema, initialSchema) &&\n typeSchema &&\n (forceUpdate || !typeEditorUtils.isTempState(initialSchema, extraConfig?.customValidateName))\n ) {\n setInitialSchema(typeEditorUtils.clone(typeSchema));\n }\n }, [typeSchema, extraConfig?.customValidateName]);\n\n const typeService = useTypeDefinitionManager();\n\n const displayColumn = useMemo(\n () => viewConfigs.filter((v) => v.visible).map((v) => v.type),\n [viewConfigs]\n );\n\n const { dataSource } = useMemo(() => {\n const res: TypeEditorRowData<TypeSchema>[] = [];\n let index = -1;\n\n const dfs = (\n schema: TypeSchema,\n config: {\n level: number;\n parentId?: string;\n key?: string;\n parent?: TypeSchema;\n canDefaultEditable?: true | string;\n canValueEditable?: true | string;\n path: string[];\n }\n ): void => {\n const {\n parentId,\n level = -1,\n key = ROOT_FIELD_ID,\n path,\n parent,\n canValueEditable = true,\n canDefaultEditable = true,\n } = config;\n\n const id = [parentId, key || new Date().valueOf().toString()].join('-');\n\n const typeConfig = typeService.getTypeBySchema(schema);\n\n const uid = parentId ? id : key;\n\n const rowData: TypeEditorRowData<TypeSchema> = {\n ...schema,\n key,\n index,\n id: uid,\n level,\n self: schema,\n parentId,\n parent,\n deepChildrenCount: 0,\n isRequired: (parent?.required || []).includes(key),\n childrenCount: 0,\n disableEditColumn: [...(disableEditColumn || [])],\n path,\n extraConfig: { ...extraConfig },\n };\n\n index += 1;\n\n typeEditor.dataSourceMap[rowData.id] = rowData;\n\n res.push(rowData);\n\n const customDefaultValidate =\n extraConfig.customDefaultEditable && extraConfig.customDefaultEditable(rowData);\n\n if (typeof customDefaultValidate === 'string') {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: customDefaultValidate,\n });\n }\n\n if (typeof canDefaultEditable === 'string' && level > rootLevel) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: canDefaultEditable,\n });\n }\n\n if (typeof canValueEditable === 'string' && level > rootLevel) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Value,\n reason: canValueEditable,\n });\n }\n\n if (typeConfig) {\n const children =\n typeConfig.getTypeSchemaProperties && typeConfig.getTypeSchemaProperties(schema);\n\n const childrenParent =\n typeConfig.getPropertiesParent && typeConfig.getPropertiesParent(schema);\n const childrenParentConfig = childrenParent && typeService.getTypeBySchema(childrenParent);\n\n if (\n !extraConfig.customDefaultEditable &&\n typeof childrenParentConfig?.defaultEditable === 'string'\n ) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: childrenParentConfig?.defaultEditable,\n });\n }\n\n if (children) {\n const originLen = res.length;\n rowData.childrenCount = Object.keys(children).length;\n\n // 如果不可见,不加子节点\n if (unOpenKeys[uid]) {\n return;\n }\n\n const parentPath = [...path, ...(typeConfig.getJsonPaths?.(schema) || [])];\n\n let idx = 0;\n\n const childCanValueEditable = typeConfig?.childrenValueEditable?.(schema);\n\n Object.keys(children)\n .map((k) => {\n // 对不存在 index 的数据先进行修正,填上默认值\n typeEditorUtils.fixFlowIndex(children[k], idx);\n idx++;\n return k;\n })\n .sort((k1, k2) => (children[k1].extra?.index || 0) - (children[k2].extra?.index || 0))\n .forEach((k) => {\n const canDefaultEditableFromParent = typeConfig.childrenDefaultEditable?.(schema);\n\n dfs(children[k] as unknown as TypeSchema, {\n key: k,\n parentId: id,\n parent: childrenParent as unknown as TypeSchema,\n level: level + 1,\n path: [...parentPath, k],\n canDefaultEditable:\n typeof canDefaultEditableFromParent === 'string'\n ? canDefaultEditableFromParent\n : canDefaultEditable,\n canValueEditable: childCanValueEditable,\n });\n });\n\n rowData.deepChildrenCount = res.length - originLen;\n } else {\n if (\n !extraConfig.customDefaultEditable &&\n typeof typeConfig?.defaultEditable === 'string'\n ) {\n rowData.disableEditColumn!.push({\n column: TypeEditorColumnType.Default,\n reason: typeConfig?.defaultEditable,\n });\n }\n }\n }\n };\n\n if (initialSchema) {\n dfs(initialSchema, { level: -1, path: [] });\n // 不展示 root\n res.shift();\n\n const newData = onEditRowDataSource ? onEditRowDataSource(res) : res;\n\n typeEditor.setDataSource(newData);\n\n return {\n dataSource: newData,\n };\n }\n\n return {\n dataSource: [],\n };\n }, [initialSchema, disableEditColumn, unOpenKeys, onEditRowDataSource]);\n\n const activePos = useActivePos();\n\n useEffect(() => {\n typeEditor.rootTypeSchema = initialSchema;\n }, [initialSchema]);\n\n /**\n * 修改单行数据\n */\n const handleTypeSchemaChange = useCallback(\n (\n type?: TypeSchema,\n ctx: {\n storeState?: boolean;\n } = {}\n ) => {\n const { storeState = true } = ctx;\n\n const newSchema = JSON.parse(JSON.stringify(type || initialSchema)) as TypeSchema;\n\n setInitialSchema({ ...newSchema });\n\n const final = typeEditorUtils.formateTypeSchema(newSchema, extraConfig);\n\n if (storeState) {\n typeOperator.storeState(newSchema);\n }\n\n const newValue = deFormatter(final)!;\n\n if (onChange) {\n onChange(newValue);\n }\n },\n [initialSchema, deFormatter, extraConfig]\n );\n\n /**\n * 添加新数据\n */\n const handleRowDataAdd = useCallback(\n (id: string) => {\n const rowData = typeEditor.dataSourceMap[id];\n\n const currentSchema = rowData.self;\n\n const config = typeService.getTypeBySchema(rowData.self);\n\n if (currentSchema && config) {\n let index = -1;\n const parent = config.getPropertiesParent?.(currentSchema);\n if (!parent) {\n return;\n }\n if (!parent.properties) {\n parent.properties = {};\n }\n\n Object.values(parent.properties).forEach((val) => {\n if (!val.extra) {\n val.extra = {\n index: 0,\n };\n }\n\n index = Math.max(index, val.extra.index || 0);\n });\n\n const [key, schema] = typeEditorUtils.genNewTypeSchema(index + 1);\n\n parent.properties[key] = schema as IJsonSchema;\n\n const newDataSource = typeEditor.getDataSource();\n\n let addIndex = rowData.index + 1;\n for (let i = rowData.index + 1, len = dataSource.length; i < len; i++) {\n if (newDataSource[i].level > rowData.level) {\n addIndex++;\n } else {\n break;\n }\n }\n\n const newPos = {\n x: 0,\n y: addIndex,\n };\n\n typeEditor.setActivePos(newPos);\n\n handleTypeSchemaChange();\n }\n },\n [initialSchema, getRootSchema]\n );\n\n useEffect(() => {\n typeEditor.columnViewConfig = viewConfigs.filter((v) => v.visible);\n typeEditor.onChange = handleTypeSchemaChange;\n typeEditor.onGlobalAdd = handleRowDataAdd;\n\n typeEditor.typeRegistryCreators =\n typeRegistryCreators as unknown as TypeRegistryCreatorsAdapter<TypeSchema>[];\n }, [viewConfigs, handleTypeSchemaChange, typeRegistryCreators]);\n\n /**\n * 展开收起子字段\n */\n const handleChildrenVisibleChange = useCallback(\n (rowDataId: string, newVal: boolean) => {\n const newData = { ...unOpenKeys };\n\n newData[rowDataId] = newVal;\n setUnOpenKeys(newData);\n },\n [unOpenKeys]\n );\n\n return (\n <>\n <DndProvider backend={HTML5Backend}>\n <Space vertical style={{ width: '100%' }}>\n <div style={{ width: '100%' }}>\n <EditorTable\n ref={(dom) => setTableDom(dom as React.SetStateAction<HTMLTableElement | undefined>)}\n className={classNames('semi-table', tableClassName)}\n >\n <Header\n dataSourceMap={typeEditor.dataSourceMap}\n value={initialSchema}\n readonly={readonly}\n onChange={handleTypeSchemaChange}\n displayColumn={displayColumn}\n />\n <Body\n viewConfigs={viewConfigs}\n onFieldChange={onFieldChange}\n onPaste={onPaste}\n customEmptyNode={customEmptyNode}\n readonly={readonly}\n dataSourceMap={typeEditor.dataSourceMap}\n unOpenKeys={unOpenKeys}\n onError={onError}\n onChildrenVisibleChange={handleChildrenVisibleChange}\n onChange={handleTypeSchemaChange}\n dataSource={dataSource}\n displayColumn={displayColumn}\n />\n </EditorTable>\n </div>\n </Space>\n </DndProvider>\n\n {/** 当前编辑的单元格,单独渲染,减少表格的重复渲染 **/}\n {activePos.x !== -1 && activePos.y !== -1 && tableDom && (\n <EditCell\n viewConfigs={viewConfigs}\n unOpenKeys={unOpenKeys}\n onPaste={onPaste}\n onFieldChange={onFieldChange}\n onError={onError}\n onChildrenVisibleChange={handleChildrenVisibleChange}\n onChange={handleTypeSchemaChange}\n tableDom={tableDom}\n dataSource={dataSource}\n displayColumn={displayColumn}\n />\n )}\n {/** 当前拖拽的提示辅助框 **/}\n <DropTip dataSource={typeEditor.dataSourceMap} />\n </>\n );\n};\n\nexport const Table = fixedTSForwardRef(TableInner);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled from 'styled-components';\n\nexport const ErrorMsgContainer = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n transform: translateY(100%);\n width: calc(100% - 6px);\n`;\n\nexport const EditCellContainer = styled.div<{\n error?: boolean;\n blink?: boolean;\n}>`\n position: absolute;\n width: 100%;\n left: 0;\n top: 0;\n background-color: var(--semi-color-bg-0);\n border: 1px solid var(--semi-color-focus-border);\n height: 38px;\n display: flex;\n align-items: center;\n transition: background-color 200ms;\n box-sizing: border-box;\n ${(props) => (props.error ? 'border: 1px solid var(--semi-color-danger);' : '')}\n ${(props) => (props.blink ? 'background-color: rgba(238, 245, 40) !important;' : '')}\n`;\n\nexport const DragRowContainer = styled.tr<{\n dragging?: boolean;\n}>`\n opacity: ${(props) => (props.dragging ? 0.5 : 1)};\n`;\n\nexport const EditorTableHeader = styled.th`\n border-right: 1px solid var(--semi-color-border);\n border-bottom-width: 1px !important;\n height: 37px;\n box-sizing: border-box;\n font-size: 12px;\n`;\n\nexport const EditorTableCell = styled.td`\n border-right: 1px solid var(--semi-color-border) !important;\n position: relative;\n\n padding: 8px !important;\n height: 36px;\n`;\n\nexport const EditorTable = styled.table`\n min-width: 600px;\n border-left-width: 1px;\n border-top-width: 1px;\n box-sizing: border-box;\n border-color: var(--semi-color-border);\n width: 100%;\n position: relative;\n border-style: solid;\n border-bottom: none;\n border-right: none;\n`;\n\nexport const EditorTableTitle = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n`;\n\nexport const BaseIcon = styled.div`\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { ModeValueConfig, TypeEditorMode, TypeEditorProp, TypeEditorValue } from '../type';\nimport { modeValueConfig } from '../mode';\nimport { extraDeFormatter, extraFormatter, Formatter } from '../formatter';\nimport { traverseIJsonSchema } from '../../../services/utils';\n\nexport const useFormatter = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n extraConfig = {},\n mode,\n}: Pick<TypeEditorProp<Mode, TypeSchema>, 'mode' | 'extraConfig'>) => {\n const { useExtra } = extraConfig;\n const modeConfig = useMemo(\n () =>\n modeValueConfig.find((v) => v.mode === mode)! as unknown as ModeValueConfig<Mode, TypeSchema>,\n [mode]\n );\n\n const formatter = useMemo(\n () => (value: TypeEditorValue<Mode, TypeSchema> | undefined) => {\n const originSchema = value && modeConfig.convertValueToSchema(value as any);\n let res = originSchema ? JSON.parse(JSON.stringify(originSchema)) : originSchema;\n\n const formatters: Formatter[] = [];\n if (useExtra) {\n formatters.push(extraFormatter);\n }\n\n if (formatters.length !== 0 && res) {\n traverseIJsonSchema(res, (type) => {\n formatters.forEach((f) => f(type));\n });\n }\n return res;\n },\n [modeConfig, useExtra]\n );\n\n const deFormatter = useMemo(\n () => (originSchema: TypeSchema | undefined) => {\n let schema = originSchema ? JSON.parse(JSON.stringify(originSchema)) : originSchema;\n\n const formatters: Formatter[] = [];\n if (useExtra) {\n formatters.push(extraDeFormatter);\n }\n\n if (formatters.length !== 0 && schema) {\n traverseIJsonSchema(schema, (type) => {\n formatters.forEach((f) => f(type));\n });\n }\n\n return schema && modeConfig.convertSchemaToValue(schema as TypeSchema);\n },\n [modeConfig, useExtra]\n );\n\n return {\n formatter,\n deFormatter,\n };\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { typeEditorUtils } from '../utils';\nimport { type ModeValueConfig } from '../type';\nimport { TypeEditorColumnType } from '../../../types';\n\nexport const typeDefinitionConfig: ModeValueConfig<'type-definition', IJsonSchema> = {\n mode: 'type-definition',\n convertSchemaToValue: (val) => val,\n convertValueToSchema: (val) => val,\n commonValueToSubmitValue: (val) => {\n if (val) {\n return typeEditorUtils.valueToTypeSchema(val);\n }\n return {\n type: 'object',\n properties: {},\n };\n },\n\n toolConfig: {\n createByData: {\n viewConfig: [\n {\n type: TypeEditorColumnType.Key,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Type,\n visible: true,\n },\n ],\n genDefaultValue() {\n return {\n type: 'object',\n properties: {},\n };\n },\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { set, get } from 'lodash-es';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { typeEditorUtils } from '../utils';\nimport { type ModeValueConfig } from '../type';\nimport { TypeEditorColumnType, TypeEditorSchema } from '../../../types';\n\nconst traverseIJsonSchema = (\n root: TypeEditorSchema<IJsonSchema> | undefined,\n path: string[],\n cb: (type: TypeEditorSchema<IJsonSchema>, path: string[]) => void\n): void => {\n if (root) {\n cb(root, path);\n\n if (root.properties) {\n Object.keys(root.properties).forEach((k) => {\n traverseIJsonSchema(root.properties![k], [...path, k], cb);\n });\n }\n }\n};\n\nexport const declareAssignConfig: ModeValueConfig<'declare-assign', IJsonSchema> = {\n mode: 'declare-assign',\n convertSchemaToValue: (val) => {\n const data = {};\n const newSchema = JSON.parse(JSON.stringify(val));\n\n traverseIJsonSchema(newSchema, [], (type, path) => {\n if (type.extra?.value !== undefined) {\n set(data, path, type.extra?.value);\n }\n if (type.extra) {\n delete type.extra;\n }\n });\n\n return {\n data,\n definition: { schema: newSchema },\n };\n },\n convertValueToSchema: (schema) => {\n const { data } = schema;\n const newSchema = JSON.parse(JSON.stringify(schema.definition.schema));\n traverseIJsonSchema(newSchema, [], (type, path) => {\n const value = get(data, path);\n if (value !== undefined && type.type !== 'object') {\n type.extra = { value };\n }\n });\n return newSchema;\n },\n commonValueToSubmitValue: (val) => {\n const type: IJsonSchema = val\n ? typeEditorUtils.valueToTypeSchema(val)\n : {\n type: 'object',\n properties: {},\n };\n return {\n data: val || {},\n definition: {\n schema: type,\n },\n };\n },\n\n toolConfig: {\n createByData: {\n viewConfig: [\n {\n type: TypeEditorColumnType.Key,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Type,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Value,\n visible: true,\n },\n ],\n genDefaultValue: () => ({\n data: {},\n definition: {\n schema: {\n type: 'object',\n properties: {},\n },\n },\n }),\n },\n },\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { type ModeValueConfig, type TypeEditorMode } from '../type';\nimport { typeDefinitionConfig } from './type-definition';\nimport { declareAssignConfig } from './declare-assign';\n\nexport const modeValueConfig: ModeValueConfig<TypeEditorMode, IJsonSchema>[] = [\n declareAssignConfig,\n typeDefinitionConfig,\n];\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nexport const traverseIJsonSchema = (\n root: Partial<IJsonSchema> | undefined,\n cb: (type: Partial<IJsonSchema>) => void\n): void => {\n if (root) {\n cb(root);\n\n if (root.items) {\n traverseIJsonSchema(root.items, cb);\n }\n if (root.additionalProperties) {\n traverseIJsonSchema(root.additionalProperties, cb);\n }\n\n if (root.properties) {\n Object.values(root.properties).forEach((v) => {\n traverseIJsonSchema(v, cb);\n });\n }\n }\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Tooltip } from '@douyinfe/semi-ui';\nimport { IconInfoCircle } from '@douyinfe/semi-icons';\n\nimport { TypeEditorColumnType, TypeEditorRowData } from '../../types/type-editor';\nimport { TypeEditorService } from '../../services';\nimport { useService } from '../../contexts';\nimport { EditorTableTitle, EditorTableHeader, BaseIcon } from './style';\nimport { useHeaderDrop } from './hooks';\n\nexport const Header = <TypeSchema extends Partial<IJsonSchema>>({\n displayColumn,\n value,\n readonly,\n dataSourceMap,\n onChange,\n}: {\n displayColumn: TypeEditorColumnType[];\n dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>>;\n onChange: () => void;\n\n readonly?: boolean;\n\n value: TypeSchema;\n}) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const { drop } = useHeaderDrop(value, dataSourceMap, onChange);\n\n return (\n <thead className=\"semi-table-thead\">\n <tr ref={drop} className=\"semi-table-row\">\n {displayColumn.map((v) => {\n const config = typeEditorService.getConfigByType(v);\n\n return (\n <EditorTableHeader\n key={v}\n style={{\n width: config?.width ? `${config.width}%` : undefined,\n paddingLeft: readonly ? '24px !important' : undefined,\n }}\n className=\"semi-table-row-head\"\n scope=\"col\"\n >\n <EditorTableTitle>\n {config?.label}\n {config?.info && (\n <Tooltip content={config.info()}>\n <BaseIcon>\n <IconInfoCircle style={{ marginLeft: 4 }} size=\"small\" />\n </BaseIcon>\n </Tooltip>\n )}\n </EditorTableTitle>\n </EditorTableHeader>\n );\n })}\n </tr>\n </thead>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useMemo, useState } from 'react';\nimport React from 'react';\n\nimport styled from 'styled-components';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorRowData } from '../../types';\nimport { TypeEditorService } from '../../services';\nimport { useService, useTypeDefinitionManager } from '../../contexts';\nimport { CELL_HIGHT, CELL_PADDING, HEADER_HIGHT, INDENT_WIDTH, TAB_BRA_HIGHT } from './common';\n\nconst StyledDragTip = styled.div`\n position: absolute;\n height: 1px;\n background-color: var(--semi-color-primary);\n`;\n\nexport const DropTip = <TypeSchema extends Partial<IJsonSchema>>({\n dataSource,\n}: {\n dataSource: Record<string, TypeEditorRowData<TypeSchema>>;\n}) => {\n const typeEditor = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const [dropInfo, setDropInfo] = useState(typeEditor.dropInfo);\n\n const typeService = useTypeDefinitionManager();\n\n useEffect(() => {\n const dispose = typeEditor.onDropInfoChange.event(setDropInfo);\n return () => {\n dispose.dispose();\n };\n }, []);\n\n const rowData = useMemo(() => dataSource[dropInfo.rowDataId], [dropInfo.rowDataId]);\n\n const rowDataCanHasChildren = useMemo(\n () =>\n rowData && rowData.type && typeService.getTypeByName(rowData.type)?.canAddField?.(rowData),\n [rowData]\n );\n\n return (\n <>\n {(rowData || dropInfo.rowDataId === 'header') && (\n <StyledDragTip\n style={{\n top: HEADER_HIGHT + TAB_BRA_HIGHT + (dropInfo.index + 1) * CELL_HIGHT - 1,\n right: 0,\n width: `calc(100% - ${\n /**\n * 表格 padding\n * 初始 drag icon 占一个缩进\n * rowData 本身 level 个缩进,如果是含有子节点,因为默认添加到子元素内,还需要额外加一个缩进\n */\n CELL_PADDING +\n INDENT_WIDTH +\n (dropInfo.indent + (rowDataCanHasChildren ? 1 : 0) + 1) * INDENT_WIDTH\n }px)`,\n }}\n />\n )}\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type ConnectDragSource } from 'react-dnd';\nimport React, { useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport { NOOP } from '@flowgram.ai/utils';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { Feedback } from '../feedback';\nimport {\n TypeEditorRowData,\n TypeChangeContext,\n TypeEditorColumnViewConfig,\n TypeEditorColumnType,\n} from '../../types';\nimport { TypeEditorService } from '../../services';\nimport { useService } from '../../contexts';\nimport { EditCellContainer, EditorTableCell, ErrorMsgContainer } from './style';\nimport { useIsBlink } from './hooks/blink';\nimport { useActivePos, useCellDrop, useViewCellErrorMsg, useEditCellErrorMsg } from './hooks';\nimport { ErrorCellBorder } from './error';\nimport { CELL_HIGHT, HEADER_HIGHT, TAB_BRA_HIGHT } from './common';\n\nexport const ViewCell = <TypeSchema extends Partial<IJsonSchema>>({\n rowData,\n rowIndex,\n columnIndex,\n onChange,\n dataSourceMap,\n onError,\n onFieldChange,\n onPaste,\n unOpenKeys,\n viewConfigs,\n readonly,\n onChildrenVisibleChange,\n dragSource,\n columnType,\n}: {\n rowData: TypeEditorRowData<TypeSchema>;\n rowIndex: number;\n onError?: (msg: string[]) => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n onChange: () => void;\n columnIndex: number;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n dragSource?: ConnectDragSource;\n dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>>;\n onChildrenVisibleChange: (rowDataId: string, val: boolean) => void;\n /**\n * 只读态\n */\n readonly?: boolean;\n /**\n * 每个列的配置\n */\n viewConfigs: TypeEditorColumnViewConfig[];\n unOpenKeys: Record<string, boolean>;\n columnType: TypeEditorColumnType;\n}) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const config = typeEditorService.getConfigByType(columnType)!;\n\n const { drop } = useCellDrop(rowData, rowIndex, dataSourceMap, onChange);\n\n const handleEditMode = useCallback(() => {\n if (!readonly) {\n typeEditorService.setActivePos({ x: columnIndex, y: rowIndex });\n }\n }, [columnIndex, readonly, rowIndex]);\n\n const handleViewMode = useCallback(() => {\n typeEditorService.clearActivePos();\n }, []);\n\n const Render = config.viewRender;\n\n const feedbackInfo = useViewCellErrorMsg(rowData, config, {\n x: columnIndex,\n y: rowIndex,\n });\n\n return (\n <EditorTableCell\n ref={config.customDrop ? undefined : drop}\n className={classNames('semi-table-row-cell', 'cell-container')}\n >\n {feedbackInfo && (\n <>\n <ErrorCellBorder level={feedbackInfo.level} />\n <ErrorMsgContainer>\n <Feedback message={feedbackInfo.msg!} level={feedbackInfo.level} layout=\"absolute\" />\n </ErrorMsgContainer>\n </>\n )}\n\n {Render ? (\n <Render\n readonly={readonly}\n config={viewConfigs.find((v) => v.type === columnType) || {}}\n dragSource={dragSource}\n unOpenKeys={unOpenKeys}\n onFieldChange={onFieldChange}\n typeEditor={typeEditorService}\n onPaste={onPaste}\n error={!!feedbackInfo}\n onError={onError}\n onChange={onChange}\n onChildrenVisibleChange={onChildrenVisibleChange}\n onViewMode={handleViewMode}\n onEditMode={handleEditMode}\n rowData={rowData}\n />\n ) : (\n `${(rowData as unknown as Record<string, unknown>)[columnType]}`\n )}\n </EditorTableCell>\n );\n};\n\nexport const EditCell = <TypeSchema extends Partial<IJsonSchema>>({\n displayColumn,\n onFieldChange,\n dataSource,\n onPaste,\n unOpenKeys,\n onError,\n viewConfigs,\n onChildrenVisibleChange,\n tableDom,\n onChange,\n}: {\n displayColumn: TypeEditorColumnType[];\n tableDom: HTMLTableElement;\n onError?: (msg: string[]) => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n\n /**\n * 每个列的配置\n */\n viewConfigs: TypeEditorColumnViewConfig[];\n unOpenKeys: Record<string, boolean>;\n onChildrenVisibleChange: (rowDataId: string, newVal: boolean) => void;\n onChange: () => void;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n dataSource: TypeEditorRowData<TypeSchema>[];\n}) => {\n const typeEditorService = useService<TypeEditorService<TypeSchema>>(TypeEditorService);\n\n const activePos = useActivePos();\n\n const handleViewMode = useCallback(() => {\n typeEditorService.clearActivePos();\n }, []);\n\n const columnType = useMemo(() => displayColumn[activePos.x], [displayColumn, activePos.x]);\n\n /**\n * 获取每一列的宽度\n */\n const columnEachWidth = useMemo(() => {\n const headerNodes = tableDom.childNodes?.[0]?.childNodes?.[0];\n const width: number[] = [];\n for (const item of headerNodes.childNodes.values()) {\n // 1px border\n width.push((item as HTMLElement).clientWidth + 1);\n }\n\n return width;\n }, [displayColumn, tableDom, tableDom.clientWidth]);\n\n /**\n * 获取每一列距离 left: 0 的宽度\n */\n const columnAccWidth = useMemo(() => {\n let acc = 0;\n return columnEachWidth.map((width) => {\n acc += width;\n return acc - width;\n });\n }, [columnEachWidth]);\n\n const rowData = useMemo(() => dataSource[activePos.y], [dataSource, activePos.y]);\n\n const config = typeEditorService.getConfigByType(columnType);\n\n const Render = config && (config.editRender || config.viewRender);\n\n const errorMsg = useEditCellErrorMsg(activePos);\n\n const blink = useIsBlink();\n\n if (!config) {\n return <></>;\n }\n\n return (\n <>\n {rowData && (\n <EditCellContainer\n error={!!errorMsg}\n blink={blink}\n key={rowData.key + columnType}\n style={{\n width: columnEachWidth[activePos.x] + 1,\n top: HEADER_HIGHT + TAB_BRA_HIGHT + activePos.y * CELL_HIGHT + 1,\n left: columnAccWidth[activePos.x],\n }}\n >\n {Render ? (\n <Render\n error={!!errorMsg}\n onError={onError}\n config={viewConfigs.find((v) => v.type === columnType) || {}}\n key={rowData.id}\n unOpenKeys={unOpenKeys}\n onChange={onChange}\n onPaste={onPaste}\n typeEditor={typeEditorService}\n onFieldChange={onFieldChange}\n onChildrenVisibleChange={onChildrenVisibleChange}\n onEditMode={NOOP}\n onViewMode={handleViewMode}\n rowData={rowData}\n />\n ) : (\n `${(rowData as unknown as Record<string, unknown>)[columnType]}`\n )}\n {errorMsg && (\n <ErrorMsgContainer style={{ left: -1 }}>\n <Feedback message={errorMsg} level=\"error\" layout=\"absolute\" />\n </ErrorMsgContainer>\n )}\n </EditCellContainer>\n )}\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { type Level } from './types';\nimport { FeedbackStyle, RelativeWrapper } from './style';\n\ninterface FeedbackProps {\n // message 内容\n message: string;\n // 不hover状态下是否占用文档流\n layout: 'relative' | 'absolute';\n // 错误等级: error | warning\n level?: Level;\n // 是否展开:该状态仅适配layout 为relative 的状态\n expanded?: boolean;\n}\n\nexport const Feedback = ({ message, layout, level = 'error', expanded = false }: FeedbackProps) => {\n const feedbackContent = useMemo(\n () => (\n <FeedbackStyle\n expanded={expanded}\n error={level === 'error'}\n warning={level === 'warning'}\n expandable={!expanded}\n >\n {message}\n </FeedbackStyle>\n ),\n [level, message, expanded]\n );\n\n return layout === 'relative' ? (\n <RelativeWrapper expanded={expanded}>{feedbackContent}</RelativeWrapper>\n ) : (\n feedbackContent\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled from 'styled-components';\n\nexport const FeedbackStyle = styled.div<{\n // 是否展开\n expanded?: boolean;\n // 是否错误\n error?: boolean;\n // 是否警告\n warning?: boolean;\n // 是否可展开\n expandable?: boolean;\n}>`\n position: absolute;\n\n ${(props) =>\n props.expanded\n ? `\n position: relative;\n `\n : ''}\n\n color: #fff;\n max-width: 100%;\n width: fit-content;\n padding: 0 4px;\n font-size: 10px;\n line-height: 18px;\n word-break: break-all;\n\n &.expandable {\n }\n\n ${(props) =>\n props.expandable\n ? `\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:hover {\n white-space: normal;\n overflow: visible;\n }\n `\n : ''}\n\n ${(props) =>\n props.error\n ? `\n background-color: var(--semi-color-danger);\n `\n : ''}\n\n\n ${(props) =>\n props.warning\n ? `\n background-color:var(--semi-color-warning);\n `\n : ''}\n\n\n z-index: 1;\n`;\n\nexport const RelativeWrapper = styled.div<{\n // 是否展开\n expanded?: boolean;\n}>`\n position: relative;\n height: 18px;\n\n ${(props) =>\n props.expanded\n ? `\n height: fit-content;\n `\n : ''}\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorService } from '../../../services';\nimport { useService } from '../../../contexts';\n\nexport const useIsBlink = () => {\n const typeEditor = useService<TypeEditorService<IJsonSchema>>(TypeEditorService);\n\n const blinkData = useMemo(() => typeEditor.blink, [typeEditor.blink]);\n const [blink, setBlink] = useState(blinkData.data);\n\n useEffect(() => {\n const dispose = blinkData.onDataChange(({ next }) => {\n setBlink(next);\n\n if (next) {\n setTimeout(() => {\n blinkData.update(false);\n }, 200);\n }\n });\n\n return () => {\n dispose.dispose();\n };\n }, [blinkData]);\n\n return blink;\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { type FC } from 'react';\nimport React from 'react';\n\nimport styled from 'styled-components';\n\nconst TopLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n width: 100%;\n height: 1px;\n top: 0;\n left: 0;\n`;\n\nconst BottomLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n width: 100%;\n height: 1px;\n bottom: -1px;\n left: 0;\n`;\n\nconst RightLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n height: calc(100% + 1px);\n width: 1px;\n bottom: -1px;\n right: 0px;\n`;\n\nconst LeftLine = styled.div<{\n level?: 'error' | 'warning';\n}>`\n position: absolute;\n background-color: ${(props) =>\n props.level === 'warning' ? 'var(--semi-color-warning)' : 'var(--semi-color-danger)'};\n height: calc(100% + 1px);\n width: 1px;\n bottom: -1px;\n left: 0;\n`;\n\nexport const ErrorCellBorder: FC<{\n level?: 'error' | 'warning';\n}> = ({ level }) => (\n <>\n <TopLine level={level} />\n <BottomLine level={level} />\n <LeftLine level={level} />\n <RightLine level={level} />\n </>\n);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React from 'react';\n\nimport classNames from 'classnames';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Empty } from '@douyinfe/semi-ui';\nimport { IllustrationNoContent, IllustrationNoContentDark } from '@douyinfe/semi-illustrations';\n\nimport {\n TypeEditorColumnType,\n TypeEditorRowData,\n TypeEditorColumnViewConfig,\n TypeChangeContext,\n} from '../../types';\nimport { DragRowContainer } from './style';\nimport { useRowDrag } from './hooks/drag-drop';\nimport { ViewCell } from './cell';\n\ninterface Props<TypeSchema extends Partial<IJsonSchema>> {\n displayColumn: TypeEditorColumnType[];\n dataSourceMap: Record<string, TypeEditorRowData<TypeSchema>>;\n /**\n * 自定义空状态\n */\n customEmptyNode?: React.ReactElement;\n /**\n * 每个列的配置\n */\n viewConfigs: TypeEditorColumnViewConfig[];\n /**\n * 只读态\n */\n readonly?: boolean;\n onFieldChange?: (ctx: TypeChangeContext) => void;\n onChange: () => void;\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n onError?: (msg?: string[]) => void;\n onChildrenVisibleChange: (rowDataId: string, newVal: boolean) => void;\n unOpenKeys: Record<string, boolean>;\n}\n\nconst Row = <TypeSchema extends Partial<IJsonSchema>>({\n displayColumn,\n data,\n ...rest\n}: Props<TypeSchema> & {\n data: TypeEditorRowData<TypeSchema>;\n rowIndex: number;\n}) => {\n const { preview, drag, isDragging } = useRowDrag(data.id, rest.onChildrenVisibleChange);\n\n return (\n <DragRowContainer ref={preview} dragging={isDragging} className={classNames('semi-table-row')}>\n {displayColumn.map((column, columnIndex) => (\n <ViewCell\n dragSource={data.cannotDrag ? undefined : drag}\n key={data.id + column}\n columnType={column}\n columnIndex={columnIndex}\n rowData={data}\n {...rest}\n />\n ))}\n </DragRowContainer>\n );\n};\n\nexport const Body = <TypeSchema extends Partial<IJsonSchema>>({\n dataSource,\n customEmptyNode,\n ...rest\n}: Props<TypeSchema> & {\n dataSource: TypeEditorRowData<TypeSchema>[];\n}) => {\n if (dataSource.length === 0) {\n const rows = rest.displayColumn.length;\n return (\n <tbody>\n <tr>\n <td colSpan={rows}>\n {customEmptyNode ? (\n customEmptyNode\n ) : (\n <Empty\n style={{ marginTop: 40 }}\n image={<IllustrationNoContent style={{ width: 100, height: 100 }} />}\n darkModeImage={<IllustrationNoContentDark style={{ width: 100, height: 100 }} />}\n description=\"No content. Please add.\"\n />\n )}\n </td>\n </tr>\n </tbody>\n );\n }\n\n return (\n <tbody className=\"semi-table-tbody\">\n <>\n {dataSource.map((data, rowIndex) => (\n <Row key={data.id} {...rest} data={data} rowIndex={rowIndex} />\n ))}\n </>\n </tbody>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Space, Tooltip } from '@douyinfe/semi-ui';\n\nimport {\n ToolbarConfig,\n ToolbarKey,\n type TypeEditorMode,\n type TypeEditorProp,\n type TypeEditorRef,\n} from './type';\nimport { UndoRedo } from './tools/undo-redo';\nimport { CreateByData } from './tools/create-by-data';\n\nexport const ToolBar = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n mode,\n editor,\n toolbarConfig = [],\n}: TypeEditorProp<Mode, TypeSchema> & {\n editor?: TypeEditorRef<Mode, TypeSchema>;\n}) => {\n const config = useMemo(() => {\n const res = new Map<string, ToolbarConfig>();\n\n toolbarConfig.forEach((tool) => {\n if (typeof tool === 'string') {\n res.set(tool, { type: tool });\n } else {\n res.set(tool.type, tool);\n }\n });\n return res;\n }, [toolbarConfig]);\n\n const importConfig = config.get(ToolbarKey.Import);\n\n return (\n <div style={{ width: '100%' }}>\n {editor && (\n <Space style={{ float: 'right' }}>\n <>\n {importConfig && (\n <>\n {importConfig.disabled ? (\n <Tooltip content={importConfig.disabled}>\n <CreateByData disabled mode={mode} editor={editor} />\n </Tooltip>\n ) : (\n <CreateByData\n mode={mode}\n customInputRender={importConfig.customInputRender}\n editor={editor}\n />\n )}\n </>\n )}\n </>\n {config.has(ToolbarKey.UndoRedo) && <UndoRedo editor={editor} />}\n </Space>\n )}\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport type React from 'react';\nimport { FC } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport {\n type TypeEditorSpecialConfig,\n type TypeEditorColumnViewConfig,\n type TypeEditorRowData,\n type TypeChangeContext,\n type TypeEditorColumnType,\n type TypeEditorSchema,\n TypeEditorColumnConfig,\n} from '../../types';\nimport { TypeEditorOperationService, type TypeEditorService } from '../../services';\nimport { TypeRegistryCreatorsAdapter } from '../../contexts';\n\nexport type TypeEditorMode = 'type-definition' | 'declare-assign';\n\nexport interface DeclareAssignValueType<TypeSchema extends Partial<IJsonSchema>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: any;\n definition: {\n schema: TypeSchema;\n };\n}\n\nexport type TypeEditorValue<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> = Mode extends 'type-definition'\n ? TypeEditorSchema<TypeSchema>\n : DeclareAssignValueType<TypeSchema>;\n\nexport enum ToolbarKey {\n Import = 'Import',\n UndoRedo = 'UndoRedo',\n}\nexport type ToolbarConfig = {\n /**\n * 工具栏配置\n */\n type: ToolbarKey;\n /**\n * 是否禁用\n */\n disabled?: string;\n\n /**\n * 自定义输入渲染,仅 Import 使用\n */\n customInputRender?: FC<{\n value: string;\n onChange: (newVal: string) => void;\n }>;\n};\n\nexport interface TypeEditorProp<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> {\n /**\n * 菜单栏配置\n */\n toolbarConfig?: (ToolbarKey | ToolbarConfig)[];\n /**\n * type editor 模式类型\n */\n mode: Mode;\n\n /**\n * 只读态\n */\n readonly?: boolean;\n /**\n *\n */\n tableClassName?: string;\n\n /**\n * 各个 cell 的特化配置\n */\n extraConfig?: TypeEditorSpecialConfig<TypeSchema>;\n /**\n * 根节点层级\n */\n rootLevel?: number;\n\n /**\n * 获取全局 add 的 root schema\n */\n getRootSchema?: (schema: TypeSchema) => TypeSchema;\n /**\n *\n */\n typeRegistryCreators?: TypeRegistryCreatorsAdapter<IJsonSchema>[];\n\n /**\n * 每个列的配置\n */\n viewConfigs: (TypeEditorColumnViewConfig & {\n config?: Partial<Omit<TypeEditorColumnConfig<TypeSchema>, 'type'>>;\n })[];\n\n /**\n * 每次设置 DataSource 前调用,最后修改值的钩子\n */\n onEditRowDataSource?: (data: TypeEditorRowData<TypeSchema>[]) => TypeEditorRowData<TypeSchema>[];\n /**\n * 忽略报错强制更新\n */\n forceUpdate?: boolean;\n\n /**\n * onError\n */\n onError?: (msg?: string[]) => void;\n /**\n * value\n */\n value?: TypeEditorValue<Mode, TypeSchema>;\n /**\n * onChange\n */\n onChange?: (newValue: TypeEditorValue<Mode, TypeSchema>) => void;\n /**\n * onPaste\n */\n onPaste?: (typeSchema?: TypeSchema) => TypeSchema | undefined;\n\n /**\n * onInit\n */\n onInit?: (editor: React.MutableRefObject<TypeEditorRef<Mode, TypeSchema> | undefined>) => void;\n\n /**\n * 当具体某个 field change\n */\n onFieldChange?: (ctx: TypeChangeContext) => void;\n /**\n * 当执行 setValue\n */\n onCustomSetValue?: (\n newValue: TypeEditorValue<Mode, TypeSchema>\n ) => TypeEditorValue<Mode, TypeSchema>;\n\n /**\n * 自定义空状态\n */\n customEmptyNode?: React.ReactElement;\n\n /**\n * 不能编辑的列\n * 和 TypeSchema 中 editable 的关系\n * editable 为 false,会将 disableEditColumn 每个 column 都填上\n */\n disableEditColumn?: Array<{ column: TypeEditorColumnType; reason: string }>;\n}\n\nexport interface TypeEditorRef<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> {\n setValue: (newVal: TypeEditorValue<Mode, TypeSchema>) => void;\n getValue: () => TypeEditorValue<Mode, TypeSchema> | undefined;\n undo: () => void;\n redo: () => void;\n getService: () => TypeEditorService<TypeSchema> | undefined;\n getOperator: () => TypeEditorOperationService<TypeSchema> | undefined;\n getContainer: () => HTMLDivElement | undefined;\n}\n\nexport interface ModeValueConfig<\n Mode extends TypeEditorMode,\n TypeSchema extends Partial<IJsonSchema>\n> {\n mode: Mode;\n /**\n * 提交值到 typeSchema\n */\n convertValueToSchema: (val: TypeEditorValue<Mode, TypeSchema>) => TypeSchema;\n /**\n * typeSchema 到提交值\n */\n convertSchemaToValue: (val: TypeSchema) => TypeEditorValue<Mode, TypeSchema>;\n /**\n * 常量值生成提交值\n */\n commonValueToSubmitValue: (\n val: Record<string, unknown> | undefined\n ) => TypeEditorValue<Mode, TypeSchema>;\n\n toolConfig: {\n createByData: {\n viewConfig: TypeEditorColumnViewConfig[];\n genDefaultValue: () => TypeEditorValue<Mode, TypeSchema>;\n };\n };\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\n// import { ShortcutsService, useIDEService } from '@flow-ide/client';\nimport React from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Button, Tooltip } from '@douyinfe/semi-ui';\nimport { IconRedo, IconUndo } from '@douyinfe/semi-icons';\n// import { TypeEditorCommand, useMonitorData } from '@api-builder/base';\n\nimport { type TypeEditorMode, type TypeEditorRef } from '../type';\nimport { useMonitorData } from '../../../utils';\n\nexport const UndoRedo = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n editor,\n}: {\n editor: TypeEditorRef<Mode, TypeSchema>;\n}) => {\n const { data: canUndo } = useMonitorData(editor.getOperator()?.canUndo);\n const { data: canRedo } = useMonitorData(editor.getOperator()?.canRedo);\n\n return (\n <>\n <Tooltip content=\"Undo\">\n <Button\n disabled={!canUndo}\n icon={<IconUndo />}\n size=\"small\"\n onClick={() => {\n editor?.undo();\n }}\n />\n </Tooltip>\n <Tooltip content=\"Redo\">\n <Button\n size=\"small\"\n icon={<IconRedo />}\n disabled={!canRedo}\n onClick={() => {\n editor?.redo();\n }}\n />\n </Tooltip>\n </>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { FC, useCallback, useMemo, useState } from 'react';\n\nimport { debounce } from 'lodash-es';\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\nimport { Button, Divider, Empty, Modal, Space, TextArea } from '@douyinfe/semi-ui';\nimport { IllustrationFailure, IllustrationFailureDark } from '@douyinfe/semi-illustrations';\n\nimport { typeEditorUtils } from '../utils';\nimport { TypeEditorTable } from '../type-editor';\nimport { type TypeEditorMode, type TypeEditorRef, type TypeEditorValue } from '../type';\nimport { modeValueConfig } from '../mode';\nimport { DataTransform } from './style';\n\nexport const CreateByData = <Mode extends TypeEditorMode, TypeSchema extends Partial<IJsonSchema>>({\n mode,\n disabled,\n customInputRender: CustomInputRender,\n editor,\n}: {\n editor: TypeEditorRef<Mode, TypeSchema>;\n mode: Mode;\n disabled?: boolean;\n customInputRender?: FC<{ value: string; onChange: (newVal: string) => void }>;\n}) => {\n const modeConfig = useMemo(() => modeValueConfig.find((v) => v.mode === mode)!, [mode]);\n\n const [visible, setVisible] = useState(false);\n\n const [typeEditorValue, setTypeEditorValue] = useState<TypeEditorValue<Mode, TypeSchema>>(\n modeConfig.toolConfig.createByData.genDefaultValue() as TypeEditorValue<Mode, TypeSchema>\n );\n const [errorEmpty, setErrorEmpty] = useState(false);\n\n const handleClose = useCallback(() => {\n setVisible(false);\n setTypeEditorValue(\n modeConfig.toolConfig.createByData.genDefaultValue() as TypeEditorValue<Mode, TypeSchema>\n );\n }, [modeConfig]);\n\n const handleOk = useCallback(async () => {\n if (editor) {\n editor.setValue(typeEditorValue);\n handleClose();\n }\n }, [handleClose, typeEditorValue, editor]);\n\n const onChange = debounce((newVal: string) => {\n const parsedValue = typeEditorUtils.jsonParse(newVal);\n const error =\n newVal && !(parsedValue && typeof parsedValue === 'object' && !Array.isArray(parsedValue));\n\n if (!error) {\n setTypeEditorValue(\n modeConfig.commonValueToSubmitValue(parsedValue) as TypeEditorValue<Mode, TypeSchema>\n );\n setErrorEmpty(false);\n } else if (parsedValue) {\n setErrorEmpty(true);\n }\n }, 500);\n\n return (\n <div>\n <Button disabled={disabled} size=\"small\" onClick={() => setVisible(true)}>\n Import from JSON\n </Button>\n <Modal\n okText={`Import`}\n width={960}\n okButtonProps={{}}\n cancelText=\"Cancel\"\n title=\"Import from JSON\"\n visible={visible}\n onOk={handleOk}\n onCancel={handleClose}\n >\n <DataTransform>\n <div style={{ height: '100%', flex: 1 }}>\n {CustomInputRender ? (\n <CustomInputRender value=\"{}\" onChange={onChange} />\n ) : (\n <TextArea defaultValue=\"{}\" onChange={onChange} />\n )}\n </div>\n <Divider layout=\"vertical\" style={{ height: '100%' }} />\n <Space align=\"start\" vertical style={{ height: '100%', flex: 1 }}>\n <div style={{ height: '100%', flex: 1, overflowY: 'scroll' }}>\n <TypeEditorTable\n readonly\n mode={mode}\n forceUpdate\n // TODO:\n // tableClassName={s['tool-table']}\n value={errorEmpty ? undefined : typeEditorValue}\n customEmptyNode={\n errorEmpty ? (\n <Empty\n style={{ marginTop: 40 }}\n image={<IllustrationFailure style={{ width: 100, height: 100 }} />}\n darkModeImage={\n <IllustrationFailureDark style={{ width: 100, height: 100 }} />\n }\n description=\"Invalid value\"\n />\n ) : undefined\n }\n viewConfigs={modeConfig.toolConfig.createByData.viewConfig}\n />\n </div>\n </Space>\n </DataTransform>\n </Modal>\n </div>\n );\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport styled from 'styled-components';\n\nexport const DataTransform = styled.div`\n height: 406px;\n display: flex;\n gap: 4px;\n`;\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useMemo } from 'react';\n\nimport { IJsonSchema } from '@flowgram.ai/json-schema';\n\nimport { TypeEditorColumnType, TypeEditorColumnViewConfig } from '../../types';\nimport { ToolbarKey, TypeEditor } from '../../components';\n\nconst defaultViewConfigs = [\n {\n type: TypeEditorColumnType.Key,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Type,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Description,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Required,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Default,\n visible: true,\n },\n {\n type: TypeEditorColumnType.Operate,\n visible: true,\n },\n];\n\ninterface PropsType {\n value?: IJsonSchema;\n onChange?: (value?: IJsonSchema) => void;\n readonly?: boolean;\n config?: {\n rootKey?: string;\n viewConfigs?: TypeEditorColumnViewConfig[];\n };\n}\n\nexport function ObjectTypeEditor(props: PropsType) {\n const { value, onChange, config, readonly } = props;\n\n const { rootKey = 'outputs', viewConfigs = defaultViewConfigs } = config || {};\n\n const wrapValue: IJsonSchema = useMemo(\n () => ({\n type: 'object',\n properties: { [rootKey]: value || { type: 'object' } },\n }),\n [value, rootKey]\n );\n\n const disableEditColumn = useMemo(() => {\n const res: any[] = [];\n\n if (readonly) {\n viewConfigs.forEach((v) => {\n res.push({\n column: v.type,\n reason: 'This field is not editable.',\n });\n });\n }\n\n return res;\n }, [readonly, viewConfigs]);\n\n return (\n <div>\n <TypeEditor\n readonly={readonly}\n mode=\"type-definition\"\n toolbarConfig={[ToolbarKey.Import, ToolbarKey.UndoRedo]}\n rootLevel={1}\n value={wrapValue}\n disableEditColumn={disableEditColumn}\n onChange={(_v) => onChange?.(_v?.properties?.[rootKey])}\n onCustomSetValue={(newType) => ({\n type: 'object',\n properties: {\n [rootKey]: newType,\n },\n })}\n getRootSchema={(type) => type.properties![rootKey]}\n viewConfigs={defaultViewConfigs}\n onEditRowDataSource={(dataSource) => {\n // 不允许该行编辑 key、required\n if (dataSource[0]) {\n dataSource[0].disableEditColumn = [\n {\n column: TypeEditorColumnType.Key,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Type,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Required,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Default,\n reason: 'This field is not editable.',\n },\n {\n column: TypeEditorColumnType.Operate,\n reason: 'This field is not editable.',\n },\n ];\n\n dataSource[0].cannotDrag = true;\n }\n\n return dataSource;\n }}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["import_table","TypeEditorColumnType","import_react","import_inversify","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_react","import_semi_ui","React","import_inversify","import_utils","import_react","import_utils","import_inversify","import_inversify","React","import_react","import_semi_ui","import_semi_ui","styled","React","import_react","import_utils","import_semi_ui","import_semi_icons","import_react","import_react","import_react","import_semi_ui","import_react","import_semi_ui","import_react","React","import_react","import_react","import_lodash_es","import_styled_components","import_semi_ui","styled","React","classNames","import_react","import_classnames","import_semi_ui","import_react","React","import_react","React","classNames","import_react","import_classnames","import_semi_ui","import_semi_icons","import_react","React","classNames","React","React","ViewRender","React","EditRender","import_react","import_semi_ui","setCellValue","ViewRender","React","import_react","import_semi_ui","setCellValue","ViewRender","React","import_react","import_utils","import_semi_ui","import_semi_icons","import_react","import_semi_ui","import_react","import_react","import_react","setCellValue","React","toast","import_react","import_semi_ui","import_semi_icons","import_react","React","import_react","import_semi_ui","import_semi_icons","React","ViewRender","React","EditRender","import_react","import_semi_ui","import_react","import_react","React","import_semi_ui","ViewRender","React","EditRender","import_react","import_semi_ui","TypeText","React","ViewRender","EditRender","import_react","import_lodash_es","import_semi_ui","import_react","import_styled_components","import_react_dnd","import_react","import_lodash_es","import_classnames","import_semi_ui","import_styled_components","styled","BaseIcon","import_react","import_lodash_es","traverseIJsonSchema","traverseIJsonSchema","traverseIJsonSchema","import_react","import_semi_ui","import_semi_icons","React","BaseIcon","import_react","import_styled_components","styled","React","import_react","import_classnames","import_utils","import_react","import_styled_components","styled","React","import_react","import_react","import_styled_components","styled","React","React","classNames","import_react","import_classnames","import_semi_ui","React","classNames","React","classNames","Container","styled","React","import_react","import_semi_ui","ToolbarKey","import_react","import_semi_ui","import_semi_icons","React","import_react","import_lodash_es","import_semi_ui","import_semi_illustrations","import_styled_components","styled","React","React","React","import_react","React"]}
|