@flowgram.ai/form-core 0.1.0-alpha.7 → 0.1.0-alpha.8

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 CHANGED
@@ -54,7 +54,10 @@ var NodeManager = class {
54
54
  return this.materialRenderRegistry.get("Material_CustomNodeError" /* CustomNodeError */);
55
55
  }
56
56
  init() {
57
- this.nodeContributions.forEach((contrib) => contrib.onRegister?.(this));
57
+ this.nodeContributions.forEach((contrib) => {
58
+ var _a;
59
+ return (_a = contrib.onRegister) == null ? void 0 : _a.call(contrib, this);
60
+ });
58
61
  }
59
62
  };
60
63
  __decorateClass([
@@ -239,7 +242,7 @@ var FormContextMaker = class {
239
242
  form: formItem.formModel,
240
243
  node: formItem.formModel.flowNodeEntity,
241
244
  playgroundContext: this.playgroundContext,
242
- index: options?.getIndex()
245
+ index: options == null ? void 0 : options.getIndex()
243
246
  };
244
247
  }
245
248
  };
@@ -492,14 +495,16 @@ var FormManager = class {
492
495
  this.onFormModelWillInit = this.onFormModelWillInitEmitter.event;
493
496
  }
494
497
  get components() {
498
+ var _a;
495
499
  return mapValues(
496
- this.extensionRegistryMap.get(SetterAbility.type)?.objectMap || {},
500
+ ((_a = this.extensionRegistryMap.get(SetterAbility.type)) == null ? void 0 : _a.objectMap) || {},
497
501
  (setter) => setter.component
498
502
  );
499
503
  }
500
504
  get decorators() {
505
+ var _a;
501
506
  return mapValues(
502
- this.extensionRegistryMap.get(DecoratorAbility.type)?.objectMap || {},
507
+ ((_a = this.extensionRegistryMap.get(DecoratorAbility.type)) == null ? void 0 : _a.objectMap) || {},
503
508
  (decorator) => decorator.component
504
509
  );
505
510
  }
@@ -514,7 +519,8 @@ var FormManager = class {
514
519
  registry.register(extension);
515
520
  }
516
521
  getAbilityExtension(abilityType, extensionKey) {
517
- return this.extensionRegistryMap.get(abilityType)?.get(extensionKey);
522
+ var _a;
523
+ return (_a = this.extensionRegistryMap.get(abilityType)) == null ? void 0 : _a.get(extensionKey);
518
524
  }
519
525
  registerAbility(Ability) {
520
526
  const ability = new Ability();
@@ -544,7 +550,10 @@ var FormManager = class {
544
550
  this.onFormModelWillInitEmitter.dispose();
545
551
  }
546
552
  init() {
547
- this.formContributions.forEach((contrib) => contrib.onRegister?.(this));
553
+ this.formContributions.forEach((contrib) => {
554
+ var _a;
555
+ return (_a = contrib.onRegister) == null ? void 0 : _a.call(contrib, this);
556
+ });
548
557
  }
549
558
  };
550
559
  __decorateClass([
@@ -615,6 +624,9 @@ var FlowNodeFormData = class extends EntityData2 {
615
624
  errorData.setError(e);
616
625
  }
617
626
  }
627
+ updateFormValues(value) {
628
+ this.formModel.updateFormValues(value);
629
+ }
618
630
  recreateForm(formMetaOrFormMetaGenerator, initialValue) {
619
631
  this.createForm(formMetaOrFormMetaGenerator, initialValue);
620
632
  }
@@ -636,20 +648,21 @@ FlowNodeFormData.type = "FlowNodeEntityFormData";
636
648
 
637
649
  // src/form/form-render.tsx
638
650
  function getFormModelFromNode(node) {
639
- return node.getData(FlowNodeFormData)?.getFormModel();
651
+ var _a;
652
+ return (_a = node.getData(FlowNodeFormData)) == null ? void 0 : _a.getFormModel();
640
653
  }
641
654
  function FormRender({ node }) {
642
655
  const refresh = useRefresh2();
643
656
  const formModel = getFormModelFromNode(node);
644
657
  useEffect2(() => {
645
- const disposable = formModel?.onInitialized(() => {
658
+ const disposable = formModel == null ? void 0 : formModel.onInitialized(() => {
646
659
  refresh();
647
660
  });
648
661
  return () => {
649
662
  disposable.dispose();
650
663
  };
651
664
  }, [formModel]);
652
- return formModel?.initialized ? formModel.render() : null;
665
+ return (formModel == null ? void 0 : formModel.initialized) ? formModel.render() : null;
653
666
  }
654
667
  var formPluginRender = (props) => /* @__PURE__ */ React3.createElement(FormRender, { ...props });
655
668
 
@@ -775,7 +788,7 @@ var PureNodeRender = ({ node }) => {
775
788
  if (isFormReady) {
776
789
  return nodeFormRender({ node, playgroundContext });
777
790
  }
778
- return nodePlaceholderRender?.({ node, playgroundContext }) || null;
791
+ return (nodePlaceholderRender == null ? void 0 : nodePlaceholderRender({ node, playgroundContext })) || null;
779
792
  }, [
780
793
  isNodeError,
781
794
  isFormReady,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/node/node-contribution.ts","../../src/node/node-container-module.ts","../../src/node/node-manager.ts","../../src/node/node-engine-context.ts","../../src/node/node-engine.ts","../../src/node/core-plugins.ts","../../src/node/core-materials.ts","../../src/error/flow-node-error-data.ts","../../src/error/error-container-module.ts","../../src/error/error-node-contribution.ts","../../src/error/renders/error-render.tsx","../../src/error/renders/default-error-render.tsx","../../src/error/client.ts","../../src/form/form-core-container-module.ts","../../src/form/services/form-context-maker.ts","../../src/form/services/form-path-service.ts","../../src/form/services/form-manager.ts","../../src/form/models/form-model.ts","../../src/form/models/form-item.ts","../../src/form/models/form-meta.ts","../../src/form/models/form-ability-extension-registry.ts","../../src/form/form-contribution.ts","../../src/form/abilities/setter-ability/setter-ability.ts","../../src/form/abilities/decorator-ability/decorator-ability.ts","../../src/form/abilities/visibility-ability/visibility-ability.ts","../../src/form/abilities/effect-ability/effect-ability.ts","../../src/form/abilities/default-ability/default-ability.ts","../../src/form/abilities/validation-ability/validation-ability.ts","../../src/form/form-node-contribution.ts","../../src/form/form-render.tsx","../../src/form/flow-node-form-data.ts","../../src/form/types/form-model.types.ts","../../src/form/types/form-meta.types.ts","../../src/form/client/index.ts","../../src/client/create-node-container-modules.ts","../../src/client/node-render.tsx","../../src/node-react/context/node-engine-react-context.ts","../../src/node-react/hooks/use-node-engine-context.ts","../../src/node-react/hooks/use-form-Item.ts","../../src/client/node-material-client.ts","../../src/client/create-node-entity-datas.ts"],"sourcesContent":["import { type NodeManager } from './node-manager';\n\nexport const NodeContribution = Symbol('NodeContribution');\n\nexport interface NodeContribution {\n onRegister?(nodeManager: NodeManager): void;\n}\n","import { ContainerModule } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\nimport { NodeEngine } from './node-engine';\n\nexport const NodeContainerModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n bind(NodeEngine).toSelf().inSingletonScope();\n bind(NodeManager).toSelf().inSingletonScope();\n bind(NodeEngineContext).toSelf().inSingletonScope();\n});\n","import { flow } from 'lodash';\nimport { injectable, multiInject, optional, postConstruct } from 'inversify';\n\nimport { NodeErrorRenderProps } from '../error';\nimport { NodePluginRender, NodeRenderHoc, Render } from './types';\nimport { NodeContribution } from './node-contribution';\n\nexport enum MaterialRenderKey {\n CustomNodeError = 'Material_CustomNodeError',\n}\n\n@injectable()\nexport class NodeManager {\n readonly materialRenderRegistry: Map<string, Render> = new Map();\n\n readonly pluginRenderRegistry: Map<string, Render> = new Map();\n\n readonly nodeRenderHocs: NodeRenderHoc[] = [];\n\n @multiInject(NodeContribution) @optional() protected nodeContributions: NodeContribution[] = [];\n\n registerMaterialRender(key: string, render: Render) {\n this.materialRenderRegistry.set(key, render);\n }\n\n getMaterialRender(key: string): Render | undefined {\n return this.materialRenderRegistry.get(key);\n }\n\n registerPluginRender(key: string, render: NodePluginRender): void {\n this.pluginRenderRegistry.set(key, render);\n }\n\n getPluginRender(key: string): NodePluginRender | undefined {\n return this.pluginRenderRegistry.get(key);\n }\n\n registerNodeErrorRender(render: Render<NodeErrorRenderProps>) {\n this.registerMaterialRender(MaterialRenderKey.CustomNodeError, render);\n }\n\n get nodeRenderHoc() {\n return flow(this.nodeRenderHocs);\n }\n\n registerNodeRenderHoc(hoc: NodeRenderHoc) {\n this.nodeRenderHocs.push(hoc);\n }\n\n get nodeErrorRender() {\n return this.materialRenderRegistry.get(MaterialRenderKey.CustomNodeError);\n }\n\n @postConstruct()\n protected init(): void {\n this.nodeContributions.forEach(contrib => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\n\nexport interface INodeEngineContext {\n readonly: boolean;\n}\n\n/**\n * NodeEngineContext 在 Node Engine 中为全局单例, 它的作用是让Node之间共享数据。\n * context 分为内置context(如 readonly) 和 自定义context(业务可以按需注入)\n */\n@injectable()\nexport class NodeEngineContext {\n static DEFAULT_READONLY = false;\n\n static DEFAULT_JSON = { readonly: NodeEngineContext.DEFAULT_READONLY };\n\n readonly onChangeEmitter = new Emitter<NodeEngineContext>();\n\n readonly onChange = this.onChangeEmitter.event;\n\n private _readonly: boolean = NodeEngineContext.DEFAULT_READONLY;\n\n private _json: INodeEngineContext = NodeEngineContext.DEFAULT_JSON;\n\n get json(): INodeEngineContext {\n return this._json;\n }\n\n get readonly(): boolean {\n return this._readonly;\n }\n\n set readonly(value: boolean) {\n this._readonly = value;\n this.fireChange();\n }\n\n private fireChange(): void {\n this.updateJSON();\n this.onChangeEmitter.fire(this);\n }\n\n private updateJSON(): void {\n this._json = {\n readonly: this._readonly,\n };\n }\n}\n","import { injectable, inject } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\n\n@injectable()\nexport class NodeEngine {\n @inject(NodeManager) nodeManager: NodeManager;\n\n @inject(NodeEngineContext) context: NodeEngineContext;\n}\n","export const PLUGIN_KEY = {\n FORM: 'Plugin_Form',\n ERROR: 'Plugin_Error',\n};\n","export const MATERIAL_KEY = {\n NODE_ERROR_RENDER: 'node_error_render',\n NODE_PLACEHOLDER_RENDER: 'node_placeholder_render',\n};\n","import { EntityData } from '@flowgram.ai/core';\n\nexport interface ErrorData {\n error: Error | null;\n}\n\nexport class FlowNodeErrorData extends EntityData {\n static type = 'FlowNodeErrorData';\n\n getDefaultData(): ErrorData {\n return { error: null };\n }\n\n setError(e: ErrorData['error']) {\n this.update({ error: e });\n }\n\n getError(): Error {\n return this.data.error;\n }\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { NodeContribution } from '../node';\nimport { ErrorNodeContribution } from './error-node-contribution';\n\nexport const ErrorContainerModule = new ContainerModule(bind => {\n bindContributions(bind, ErrorNodeContribution, [NodeContribution]);\n});\n","import { injectable } from 'inversify';\n\nimport { NodeContribution } from '../node';\nimport { NodeManager, PLUGIN_KEY } from '../node';\nimport { errorPluginRender } from './renders';\n\n@injectable()\nexport class ErrorNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.ERROR, errorPluginRender);\n }\n}\n","import React, { useCallback, useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../flow-node-error-data';\nimport { MATERIAL_KEY, NodeManager, NodePluginRender } from '../../node';\nimport { defaultErrorRender } from './default-error-render';\n\ninterface NodeRenderProps {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport const ErrorRender = ({ node, playgroundContext }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const nodeError = nodeErrorData.getError();\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeErrorRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER);\n\n const renderError = useCallback(() => {\n if (!nodeErrorRender) {\n return defaultErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }\n return nodeErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }, [nodeError, node, playgroundContext]);\n\n useEffect(() => {\n const disposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeError ? renderError() : null;\n};\n\nexport const errorPluginRender: NodePluginRender = (props) => <ErrorRender {...props} />;\n","import React from 'react';\n\nimport { NodeErrorRenderProps } from '../types';\n\nconst ERROR_STYLE = {\n color: '#f54a45',\n};\n\nexport const defaultErrorRender = ({ error }: NodeErrorRenderProps) => (\n <div style={ERROR_STYLE}>{error.message}</div>\n);\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeErrorData } from './flow-node-error-data';\n\nexport function getNodeError(node: FlowNodeEntity) {\n return node.getData<FlowNodeErrorData>(FlowNodeErrorData).getError();\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FormContextMaker } from './services/form-context-maker';\nimport { NodeContribution } from '../node';\nimport { FormManager, FormPathService } from './services';\nimport { FormNodeContribution } from './form-node-contribution';\n\nexport const FormCoreContainerModule = new ContainerModule((bind) => {\n bind(FormManager).toSelf().inSingletonScope();\n bind(FormPathService).toSelf().inSingletonScope();\n bind(FormContextMaker).toSelf().inSingletonScope();\n bindContributions(bind, FormNodeContribution, [NodeContribution]);\n});\n","import { inject, injectable } from 'inversify';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\nimport { FormItem, FormItemMaterialContext } from '..';\n\n@injectable()\nexport class FormContextMaker {\n @inject(NodeEngineContext) readonly nodeEngineContext: NodeEngineContext;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n makeFormItemMaterialContext(\n formItem: FormItem,\n options?: { getIndex: () => number | undefined }\n ): FormItemMaterialContext {\n return {\n meta: formItem.meta,\n path: formItem.path,\n readonly: this.nodeEngineContext.readonly,\n getFormItemValueByPath: formItem.formModel.getFormItemValueByPath.bind(formItem.formModel),\n onFormValidate: formItem.formModel.onValidate.bind(formItem.formModel),\n form: formItem.formModel,\n node: formItem.formModel.flowNodeEntity,\n playgroundContext: this.playgroundContext,\n index: options?.getIndex(),\n };\n }\n}\n","import { injectable } from 'inversify';\n\n@injectable()\nexport class FormPathService {\n static readonly ROOT = '/';\n\n static readonly DIVIDER = '/';\n\n static readonly RELATIVE_PARENT = '..';\n\n static readonly RELATIVE_CURRENT = '.';\n\n static readonly ARRAY = '[]';\n\n static normalize(path: string) {\n if (path === FormPathService.ROOT) {\n return path;\n }\n // 去掉末尾的斜杠\n if (path.endsWith(FormPathService.DIVIDER)) {\n path = path.slice(0, -1);\n }\n return path;\n }\n\n static join(paths: string[]): string {\n if (paths[1].startsWith(FormPathService.ROOT)) {\n throw new Error(\n `FormPathService Error: join failed, invalid paths[1], paths[1]= ${paths[1]}`,\n );\n }\n if (paths[0].endsWith(FormPathService.DIVIDER)) {\n return `${paths[0]}${paths[1]}`;\n }\n return paths.join(FormPathService.DIVIDER);\n }\n\n static toArrayPath(path: string): string {\n return FormPathService.join([path, FormPathService.ARRAY]);\n }\n\n static parseArrayItemPath(path: string) {\n const names = path.split('/');\n\n let i = 0;\n while (i < names.length) {\n const itemIndex = parseInt(names[i]);\n\n if (!isNaN(itemIndex)) {\n const arrayPath = FormPathService.toArrayPath(\n names.slice(0, i).join(FormPathService.DIVIDER),\n );\n const restPath = names.slice(i + 1).join(FormPathService.DIVIDER);\n const itemMetaPath = FormPathService.join([arrayPath, restPath]);\n return { itemIndex, arrayPath, itemMetaPath };\n }\n i = i + 1;\n }\n return null;\n }\n\n simplify(path: string) {\n const segments = path.split(FormPathService.DIVIDER);\n const resSegments: string[] = [];\n\n for (let i = 0; i < segments.length; i++) {\n if (!segments[i]) {\n throw new Error('FormPathService: join failed');\n }\n\n if (segments[i] === FormPathService.RELATIVE_CURRENT) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (segments[i] === FormPathService.RELATIVE_PARENT) {\n resSegments.pop();\n }\n resSegments.push(segments[i]);\n }\n return resSegments.join(FormPathService.DIVIDER);\n }\n}\n","import { mapValues } from 'lodash';\nimport { inject, injectable, multiInject, optional, postConstruct } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { AbilityClass, FormItemAbility } from '../models/form-item-ability';\nimport { FormAbilityExtensionRegistry, FormModel } from '../models';\nimport { FormContribution } from '../form-contribution';\nimport {\n DecoratorAbility,\n DecoratorExtension,\n SetterAbility,\n SetterExtension,\n SetterHoc,\n} from '../abilities';\nimport { FormContextMaker, FormPathService } from './index';\n\n@injectable()\nexport class FormManager {\n readonly abilityRegistry: Map<string, FormItemAbility> = new Map();\n\n readonly setterHocs: SetterHoc[] = [];\n\n readonly extensionRegistryMap: Map<string, FormAbilityExtensionRegistry> = new Map();\n\n @inject(FormPathService) readonly pathManager: FormPathService;\n\n @inject(FormContextMaker) readonly formContextMaker: FormContextMaker;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n @multiInject(FormContribution) @optional() protected formContributions: FormContribution[] = [];\n\n private readonly onFormModelWillInitEmitter = new Emitter<{\n model: FormModel;\n data: any;\n }>();\n\n readonly onFormModelWillInit = this.onFormModelWillInitEmitter.event;\n\n get components(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(SetterAbility.type)?.objectMap || {},\n (setter: SetterExtension) => setter.component\n );\n }\n\n get decorators(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(DecoratorAbility.type)?.objectMap || {},\n (decorator: DecoratorExtension) => decorator.component\n );\n }\n\n registerAbilityExtension(type: string, extension: any): void {\n if (!this.extensionRegistryMap.get(type)) {\n this.extensionRegistryMap.set(type, new FormAbilityExtensionRegistry());\n }\n const registry = this.extensionRegistryMap.get(type);\n if (!registry) {\n return;\n }\n registry.register(extension);\n }\n\n getAbilityExtension(abilityType: string, extensionKey: string): any {\n return this.extensionRegistryMap.get(abilityType)?.get(extensionKey);\n }\n\n registerAbility(Ability: AbilityClass): void {\n const ability = new Ability();\n this.abilityRegistry.set(ability.type, ability);\n }\n\n registerAbilities(Abilities: AbilityClass[]): void {\n Abilities.forEach(this.registerAbility.bind(this));\n }\n\n getAbility<ExtendAbility>(type: string): (FormItemAbility & ExtendAbility) | undefined {\n return this.abilityRegistry.get(type) as FormItemAbility & ExtendAbility;\n }\n\n /**\n * @deprecated\n * Setter Hoc and setter are no longer supported in NodeEngineV2\n * @param hoc\n */\n registerSetterHoc(hoc: SetterHoc): void {\n this.setterHocs.push(hoc);\n }\n\n fireFormModelWillInit(model: FormModel, data: any) {\n this.onFormModelWillInitEmitter.fire({\n model,\n data,\n });\n }\n\n dispose() {\n this.onFormModelWillInitEmitter.dispose();\n }\n\n @postConstruct()\n protected init(): void {\n this.formContributions.forEach((contrib) => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { DisposableCollection, Event, MaybePromise } from '@flowgram.ai/utils';\nimport { type FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FormFeedback, FormModelValid, IFormItem, IFormMeta } from '../types';\nimport { FormManager } from '../services/form-manager';\nimport { type FormItem } from '.';\n\nexport type FormModelFactory = (entity: FlowNodeEntity) => FormModel;\nexport const FormModelFactory = Symbol('FormModelFactory');\nexport const FormModelEntity = Symbol('FormModelEntity');\n\n@injectable()\nexport abstract class FormModel {\n readonly onValidate: Event<FormModel>;\n\n readonly onValidChange: Event<FormModelValid>;\n\n readonly onFeedbacksChange: Event<FormFeedback[]>;\n\n readonly onInitialized: Event<FormModel>;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n /**\n * @deprecated\n * use `formModel.node` instead in FormModelV2\n */\n abstract get flowNodeEntity(): FlowNodeEntity;\n\n /**\n * @deprecated\n */\n abstract get formManager(): FormManager;\n\n abstract get formMeta(): IFormMeta;\n\n abstract get initialized(): boolean;\n\n abstract get valid(): FormModelValid;\n\n /**\n * @deprecated\n * use `formModel.getFieldIn` instead in FormModelV2 to get the model of a form field\n * do not use this in FormModelV2 since it only return an empty Map.\n */\n abstract get formItemPathMap(): Map<string, IFormItem>;\n\n /**\n * @deprecated\n */\n abstract clearValid(): void;\n\n abstract validate(): Promise<boolean>;\n\n abstract validateWithFeedbacks(): Promise<FormFeedback[]>;\n\n abstract init(formMetaOrFormMetaGenerator: any, initialValue?: any): MaybePromise<void>;\n\n abstract toJSON(): any;\n\n /**\n * @deprecated\n * use `formModel.getField` instead in FormModelV2\n */\n abstract getFormItemByPath(path: string): FormItem | undefined;\n\n /**\n * @deprecated\n * use `formModel.getFieldValue` instead in FormModelV2 to get the model of a form field by path\n */\n abstract getFormItemValueByPath<T = any>(path: string): any | undefined;\n\n abstract render(): any;\n\n abstract dispose(): void;\n}\n","import { DisposableCollection, Emitter } from '@flowgram.ai/utils';\n\nimport { FormItemDomRef, type IFormItemMeta } from '..';\nimport { type FormModel } from '.';\n\nexport abstract class FormItem {\n readonly meta: IFormItemMeta;\n\n readonly path: string;\n\n readonly formModel: FormModel;\n\n readonly onInitEventEmitter = new Emitter<FormItem>();\n\n readonly onInit = this.onInitEventEmitter.event;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n readonly onDispose = this.toDispose.onDispose;\n\n // todo(heyuan): 将dom 相关逻辑拆到form item插件里\n private _domRef: FormItemDomRef;\n\n protected constructor(meta: IFormItemMeta, path: string, formModel: FormModel) {\n this.meta = meta;\n this.path = path;\n this.formModel = formModel;\n this.toDispose.push(this.onInitEventEmitter);\n }\n\n abstract get value(): any;\n\n abstract set value(value: any);\n\n abstract validate(): void;\n\n set domRef(domRef: FormItemDomRef) {\n this._domRef = domRef;\n }\n\n get domRef() {\n return this._domRef;\n }\n\n dispose(): void {\n this.toDispose.dispose();\n }\n}\n","import { type IFormItemMeta, type IFormMeta, type IFormMetaOptions } from '../types';\nimport { FormPathService } from '../services';\n\nexport interface FormMetaTraverseParams {\n formItemMeta: IFormItemMeta;\n parentPath?: string;\n handle: (params: { formItemMeta: IFormItemMeta; path: string }) => any;\n}\n\nexport class FormMeta implements IFormMeta {\n constructor(root: IFormItemMeta, options: IFormMetaOptions) {\n this._root = root;\n this._options = options;\n }\n\n protected _root: IFormItemMeta;\n\n get root(): IFormItemMeta {\n return this._root;\n }\n\n protected _options: IFormMetaOptions;\n\n get options(): IFormMetaOptions {\n return this._options;\n }\n\n static traverse({ formItemMeta, parentPath = '', handle }: FormMetaTraverseParams): void {\n if (!formItemMeta) {\n return;\n }\n\n const isRoot = !parentPath;\n\n const path = isRoot\n ? FormPathService.ROOT\n : formItemMeta.name\n ? FormPathService.join([parentPath, formItemMeta.name])\n : parentPath;\n\n handle({ formItemMeta, path });\n\n if (formItemMeta.items) {\n this.traverse({\n formItemMeta: formItemMeta.items,\n handle,\n parentPath: FormPathService.toArrayPath(path),\n });\n }\n\n if (formItemMeta.children && formItemMeta.children.length) {\n formItemMeta.children.forEach((child) => {\n this.traverse({ formItemMeta: child, handle, parentPath: path });\n });\n }\n }\n}\n","import { injectable } from 'inversify';\n\nexport interface Extension {\n key: string;\n}\n@injectable()\nexport class FormAbilityExtensionRegistry {\n protected registry = new Map<string, Extension>();\n\n register(extension: Extension): void {\n this.registry.set(extension.key, extension);\n }\n\n get<T extends Extension>(key: string): T | undefined {\n return this.registry.get(key) as T | undefined;\n }\n\n get objectMap(): Record<string, Extension> {\n return Object.fromEntries(this.registry);\n }\n\n get collection(): Extension[] {\n return Array.from(this.registry.values());\n }\n}\n","import { type FormManager } from './services/form-manager';\n\nexport const FormContribution = Symbol('FormContribution');\n\nexport interface FormContribution {\n onRegister?(formManager: FormManager): void;\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class SetterAbility implements FormItemAbility {\n static readonly type = 'setter';\n\n get type(): string {\n return SetterAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DecoratorAbility implements FormItemAbility {\n static readonly type = 'decorator';\n\n get type(): string {\n return DecoratorAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport interface VisibilityAbilityOptions {\n /**\n * 是否隐藏\n */\n hidden: string | boolean;\n /**\n * 隐藏是否要清空表单值, 默认为false\n */\n clearWhenHidden?: boolean;\n}\n\nexport class VisibilityAbility implements FormItemAbility {\n static readonly type = 'visibility';\n\n get type(): string {\n return VisibilityAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class EffectAbility implements FormItemAbility {\n static readonly type = 'effect';\n\n get type(): string {\n return EffectAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DefaultAbility implements FormItemAbility {\n static readonly type = 'default';\n\n get type(): string {\n return DefaultAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class ValidationAbility implements FormItemAbility {\n static readonly type = 'validation';\n\n get type(): string {\n return ValidationAbility.type;\n }\n}\n","import { injectable } from 'inversify';\n\nimport { NodeContribution, NodeManager, PLUGIN_KEY } from '../node';\nimport { formPluginRender } from './form-render';\n\n@injectable()\nexport class FormNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.FORM, formPluginRender);\n }\n}\n","import React, { useEffect } from 'react';\n\nimport { useRefresh } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeContext } from '../node';\nimport { FormModel } from './models';\nimport { FlowNodeFormData } from './flow-node-form-data';\n\ninterface FormRenderProps {\n node: FlowNodeEntity;\n playgroundContext?: PlaygroundContext;\n}\n\nfunction getFormModelFromNode(node: FlowNodeEntity) {\n return node.getData(FlowNodeFormData)?.getFormModel<FormModel>();\n}\n\nexport function FormRender({ node }: FormRenderProps): any {\n const refresh = useRefresh();\n\n const formModel = getFormModelFromNode(node);\n\n useEffect(() => {\n const disposable = formModel?.onInitialized(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, [formModel]);\n\n return formModel?.initialized ? formModel.render() : null;\n}\n\nexport const formPluginRender = (props: NodeContext) => <FormRender {...props} />;\n","import { Disposable, Emitter } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { EntityData } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../error';\nimport { FormMetaOrFormMetaGenerator } from './types';\nimport { FormModel, type FormModelFactory } from './models';\n\ninterface Options {\n formModelFactory: FormModelFactory;\n}\n\nexport interface DetailChangeEvent {\n path: string;\n oldValue: any;\n value: any;\n initialized: boolean;\n}\n\nexport interface OnFormValuesChangePayload {\n values: any;\n prevValues: any;\n name: string;\n}\n\nexport class FlowNodeFormData extends EntityData {\n static type = 'FlowNodeEntityFormData';\n\n readonly formModel: FormModel;\n\n protected flowNodeEntity: FlowNodeEntity;\n\n /**\n * @deprecated rehaje 版表单form Values change 事件\n * @protected\n */\n protected onDetailChangeEmitter = new Emitter<DetailChangeEvent>();\n\n /**\n * @deprecated 该方法为旧版引擎(rehaje)表单数据变更事件, 新版节点引擎请使用\n * this.getFormModel<FormModelV2>().onFormValuesChange.\n * @protected\n */\n readonly onDetailChange = this.onDetailChangeEmitter.event;\n\n constructor(entity: FlowNodeEntity, opts: Options) {\n super(entity);\n\n this.flowNodeEntity = entity;\n this.formModel = opts.formModelFactory(entity);\n\n this.toDispose.push(this.onDetailChangeEmitter);\n\n this.toDispose.push(\n Disposable.create(() => {\n this.formModel.dispose();\n })\n );\n }\n\n getFormModel<TFormModel>(): TFormModel {\n // @ts-ignore\n return this.formModel as TFormModel;\n }\n\n getDefaultData(): any {\n return {};\n }\n\n createForm(formMetaOrFormMetaGenerator: any, initialValue?: any): void {\n const errorData = this.flowNodeEntity.getData<FlowNodeErrorData>(FlowNodeErrorData);\n\n errorData.setError(null);\n try {\n this.formModel.init(formMetaOrFormMetaGenerator, initialValue);\n } catch (e) {\n errorData.setError(e as Error);\n }\n }\n\n recreateForm(formMetaOrFormMetaGenerator: FormMetaOrFormMetaGenerator, initialValue?: any): void {\n this.createForm(formMetaOrFormMetaGenerator, initialValue);\n }\n\n toJSON(): any {\n return this.formModel.toJSON();\n }\n\n dispose(): void {\n super.dispose();\n }\n\n /**\n * @deprecated rehaje 版表单form Values change 事件触发函数\n * @protected\n */\n fireDetaiChange(detailChangeEvent: DetailChangeEvent) {\n this.onDetailChangeEmitter.fire(detailChangeEvent);\n }\n}\n","export interface IFormItem<T = any> {\n value: T;\n}\n\nexport enum FormItemEventName {\n onFormValueChange = 'onFormValueChange',\n onFormItemInit = 'onFormItemInit',\n}\n\nexport type FormModelValid = boolean | null;\n\nexport type FeedbackStatus = 'error' | 'warning' | 'pending';\nexport type FeedbackText = string;\n\nexport interface FormItemFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n}\n\nexport interface FormFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n path: string;\n}\n\nexport interface FormItemDomRef {\n current: HTMLElement | null;\n}\n","import { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\nimport { MaybePromise } from '@flowgram.ai/utils';\n\nimport { type FormItemAbilityMeta } from './form-ability.types';\n\nexport type FormDataTypeName =\n | 'string'\n | 'number'\n | 'integer'\n | 'boolean'\n | 'object'\n | 'array'\n | 'null';\n\nexport type FormDataType =\n | string //\n | number\n | boolean\n | FormDataObject\n | DataArray\n | null;\n\nexport interface FormDataObject {\n [key: string]: FormDataType;\n}\n\nexport type DataArray = Array<FormDataType>;\n\nexport const FORM_VOID = 'form-void' as const;\n\nexport interface TreeNode<T> {\n name: string;\n children?: TreeNode<T>[];\n}\n\nexport interface IFormItemMeta extends TreeNode<IFormItemMeta> {\n /**\n * 表单项名称\n */\n name: string;\n /**\n * 数据类型\n */\n type: FormDataTypeName | typeof FORM_VOID;\n /**\n * 枚举值\n */\n enum?: FormDataType[];\n /**\n * 数组类型item的数据类型描述\n */\n items?: IFormItemMeta;\n /**\n * 表单项标题\n */\n title?: string;\n /**\n * 表单项描述\n */\n description?: string;\n /**\n * 表单项默认值\n */\n default?: FormDataType;\n /**\n * 是否必填\n */\n required?: boolean;\n /**\n * 扩展能力\n */\n abilities?: FormItemAbilityMeta[];\n\n /**\n * 子表单项\n */\n children?: IFormItemMeta[];\n}\n\nexport interface IFormMeta {\n /**\n * 表单树结构root\n */\n root: IFormItemMeta;\n /**\n * 表单全局配置\n */\n options?: IFormMetaOptions;\n}\n\nexport interface NodeFormContext {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport interface IFormMetaOptions {\n formatOnInit?: (value: any, context: NodeFormContext) => any;\n\n formatOnSubmit?: (value: any, context: NodeFormContext) => any;\n\n [key: string]: any;\n}\n\nexport interface FormMetaGeneratorParams<PlaygroundContext, FormValue = any> {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n initialValue?: FormValue;\n}\n\nexport type FormMetaGenerator<PlaygroundContext = any, FormValue = any> = (\n params: FormMetaGeneratorParams<FormValue, FormValue>,\n) => MaybePromise<IFormMeta>;\n\nexport type FormMetaOrFormMetaGenerator = FormMetaGenerator | IFormMeta;\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeFormData } from '../flow-node-form-data';\nimport { FormModel } from '..';\n\nexport function isNodeFormReady(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).getFormModel<FormModel>().initialized;\n}\n\nexport function getFormModel(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).formModel;\n}\n","import { NodeContainerModule } from '../node/node-container-module';\nimport { FormCoreContainerModule } from '../form';\nimport { ErrorContainerModule } from '../error';\n\nexport function createNodeContainerModules() {\n return [NodeContainerModule, FormCoreContainerModule, ErrorContainerModule];\n}\n","import React, { memo, useCallback, useEffect } from 'react';\n\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { NodeEngineReactContext } from '../node-react/context/node-engine-react-context';\nimport { useNodeEngineContext } from '../node-react';\nimport { NodeManager } from '../node/node-manager';\nimport { PLUGIN_KEY } from '../node/core-plugins';\nimport { MATERIAL_KEY, type NodeRenderProps } from '../node';\nimport { getFormModel, isNodeFormReady } from '../form';\nimport { FlowNodeErrorData } from '../error/flow-node-error-data';\nimport { getNodeError } from '../error';\n\nconst PureNodeRender = ({ node }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const formModel = getFormModel(node);\n const isNodeError = !!getNodeError(node);\n const isFormReady = isNodeFormReady(node);\n const playgroundContext = useService<PlaygroundContext>(PlaygroundContext);\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeFormRender = nodeManager.getPluginRender(PLUGIN_KEY.FORM);\n const nodeErrorRender = nodeManager.getPluginRender(PLUGIN_KEY.ERROR);\n const nodePlaceholderRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER);\n\n const nodeEngineContext = useNodeEngineContext();\n\n useEffect(() => {\n const errorDisposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n const formDisposable = formModel.onInitialized(() => {\n refresh();\n });\n return () => {\n errorDisposable.dispose();\n formDisposable.dispose();\n };\n }, []);\n\n const renderContent = useCallback(() => {\n if (isNodeError) {\n return nodeErrorRender!({ node, playgroundContext });\n }\n if (!formModel.formMeta) {\n return null;\n }\n if (isFormReady) {\n return nodeFormRender!({ node, playgroundContext });\n }\n return nodePlaceholderRender?.({ node, playgroundContext }) || null;\n }, [\n isNodeError,\n isFormReady,\n nodeErrorRender,\n nodeFormRender,\n nodePlaceholderRender,\n node,\n playgroundContext,\n ]);\n\n return (\n <NodeEngineReactContext.Provider value={nodeEngineContext.json}>\n {nodeManager.nodeRenderHoc(renderContent)()}\n </NodeEngineReactContext.Provider>\n );\n};\n\nexport const NodeRender = memo(PureNodeRender);\n","import React from 'react';\n\nimport { INodeEngineContext, NodeEngineContext } from '../../node';\n\nexport const NodeEngineReactContext = React.createContext<INodeEngineContext>(\n NodeEngineContext.DEFAULT_JSON,\n);\n","import { useEffect } from 'react';\n\nimport { useService, useRefresh } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\n\nexport function useNodeEngineContext(): NodeEngineContext {\n const refresh = useRefresh();\n const nodeEngineContext = useService<NodeEngineContext>(NodeEngineContext);\n\n useEffect(() => {\n const disposable = nodeEngineContext.onChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeEngineContext;\n}\n","import { useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { useEntityFromContext, useRefresh } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData, FormModel, IFormItem } from '../../form';\n\nexport function useFormItem(path: string): IFormItem | undefined {\n const refresh = useRefresh();\n const node = useEntityFromContext<FlowNodeEntity>();\n const formData = node.getData<FlowNodeFormData>(FlowNodeFormData);\n const formItem = formData.getFormModel<FormModel>().getFormItemByPath(path);\n\n useEffect(() => {\n const disposable = formData.onDataChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return formItem;\n}\n","import { MATERIAL_KEY } from '../node/core-materials';\nimport { NodeManager, NodePlaceholderRender, Render } from '../node';\n\nexport function registerNodeErrorRender(nodeManager: NodeManager, render: Render): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER, render);\n}\n\nexport function registerNodePlaceholderRender(\n nodeManager: NodeManager,\n render: NodePlaceholderRender,\n): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER, render);\n}\n","import { EntityDataRegistry } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData } from '../form';\nimport { FlowNodeErrorData } from '../error';\n\nexport function createNodeEntityDatas(): EntityDataRegistry[] {\n return [FlowNodeFormData, FlowNodeErrorData];\n}\n"],"mappings":"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","names":["MaterialRenderKey","injectable","injectable","injectable","injectable","ContainerModule","injectable","React","React","injectable","ContainerModule","ContainerModule","bindContributions","inject","injectable","inject","injectable","injectable","injectable","inject","injectable","multiInject","optional","postConstruct","Emitter","injectPlaygroundContext","injectable","injectable","DisposableCollection","Emitter","injectable","injectable","Emitter","inject","injectPlaygroundContext","multiInject","optional","postConstruct","injectable","injectable","React","useEffect","useRefresh","Emitter","EntityData","EntityData","Emitter","useRefresh","useEffect","React","injectable","ContainerModule","bindContributions","FormItemEventName","React","useCallback","useEffect","PlaygroundContext","useRefresh","useService","React","React","useEffect","useService","useRefresh","useRefresh","useService","useEffect","useEffect","useRefresh","useRefresh","useEffect","useRefresh","useService","PlaygroundContext","useEffect","useCallback","React"]}
1
+ {"version":3,"sources":["../../src/node/node-contribution.ts","../../src/node/node-container-module.ts","../../src/node/node-manager.ts","../../src/node/node-engine-context.ts","../../src/node/node-engine.ts","../../src/node/core-plugins.ts","../../src/node/core-materials.ts","../../src/error/flow-node-error-data.ts","../../src/error/error-container-module.ts","../../src/error/error-node-contribution.ts","../../src/error/renders/error-render.tsx","../../src/error/renders/default-error-render.tsx","../../src/error/client.ts","../../src/form/form-core-container-module.ts","../../src/form/services/form-context-maker.ts","../../src/form/services/form-path-service.ts","../../src/form/services/form-manager.ts","../../src/form/models/form-model.ts","../../src/form/models/form-item.ts","../../src/form/models/form-meta.ts","../../src/form/models/form-ability-extension-registry.ts","../../src/form/form-contribution.ts","../../src/form/abilities/setter-ability/setter-ability.ts","../../src/form/abilities/decorator-ability/decorator-ability.ts","../../src/form/abilities/visibility-ability/visibility-ability.ts","../../src/form/abilities/effect-ability/effect-ability.ts","../../src/form/abilities/default-ability/default-ability.ts","../../src/form/abilities/validation-ability/validation-ability.ts","../../src/form/form-node-contribution.ts","../../src/form/form-render.tsx","../../src/form/flow-node-form-data.ts","../../src/form/types/form-model.types.ts","../../src/form/types/form-meta.types.ts","../../src/form/client/index.ts","../../src/client/create-node-container-modules.ts","../../src/client/node-render.tsx","../../src/node-react/context/node-engine-react-context.ts","../../src/node-react/hooks/use-node-engine-context.ts","../../src/node-react/hooks/use-form-Item.ts","../../src/client/node-material-client.ts","../../src/client/create-node-entity-datas.ts"],"sourcesContent":["import { type NodeManager } from './node-manager';\n\nexport const NodeContribution = Symbol('NodeContribution');\n\nexport interface NodeContribution {\n onRegister?(nodeManager: NodeManager): void;\n}\n","import { ContainerModule } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\nimport { NodeEngine } from './node-engine';\n\nexport const NodeContainerModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n bind(NodeEngine).toSelf().inSingletonScope();\n bind(NodeManager).toSelf().inSingletonScope();\n bind(NodeEngineContext).toSelf().inSingletonScope();\n});\n","import { flow } from 'lodash';\nimport { injectable, multiInject, optional, postConstruct } from 'inversify';\n\nimport { NodeErrorRenderProps } from '../error';\nimport { NodePluginRender, NodeRenderHoc, Render } from './types';\nimport { NodeContribution } from './node-contribution';\n\nexport enum MaterialRenderKey {\n CustomNodeError = 'Material_CustomNodeError',\n}\n\n@injectable()\nexport class NodeManager {\n readonly materialRenderRegistry: Map<string, Render> = new Map();\n\n readonly pluginRenderRegistry: Map<string, Render> = new Map();\n\n readonly nodeRenderHocs: NodeRenderHoc[] = [];\n\n @multiInject(NodeContribution) @optional() protected nodeContributions: NodeContribution[] = [];\n\n registerMaterialRender(key: string, render: Render) {\n this.materialRenderRegistry.set(key, render);\n }\n\n getMaterialRender(key: string): Render | undefined {\n return this.materialRenderRegistry.get(key);\n }\n\n registerPluginRender(key: string, render: NodePluginRender): void {\n this.pluginRenderRegistry.set(key, render);\n }\n\n getPluginRender(key: string): NodePluginRender | undefined {\n return this.pluginRenderRegistry.get(key);\n }\n\n registerNodeErrorRender(render: Render<NodeErrorRenderProps>) {\n this.registerMaterialRender(MaterialRenderKey.CustomNodeError, render);\n }\n\n get nodeRenderHoc() {\n return flow(this.nodeRenderHocs);\n }\n\n registerNodeRenderHoc(hoc: NodeRenderHoc) {\n this.nodeRenderHocs.push(hoc);\n }\n\n get nodeErrorRender() {\n return this.materialRenderRegistry.get(MaterialRenderKey.CustomNodeError);\n }\n\n @postConstruct()\n protected init(): void {\n this.nodeContributions.forEach(contrib => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\n\nexport interface INodeEngineContext {\n readonly: boolean;\n}\n\n/**\n * NodeEngineContext 在 Node Engine 中为全局单例, 它的作用是让Node之间共享数据。\n * context 分为内置context(如 readonly) 和 自定义context(业务可以按需注入)\n */\n@injectable()\nexport class NodeEngineContext {\n static DEFAULT_READONLY = false;\n\n static DEFAULT_JSON = { readonly: NodeEngineContext.DEFAULT_READONLY };\n\n readonly onChangeEmitter = new Emitter<NodeEngineContext>();\n\n readonly onChange = this.onChangeEmitter.event;\n\n private _readonly: boolean = NodeEngineContext.DEFAULT_READONLY;\n\n private _json: INodeEngineContext = NodeEngineContext.DEFAULT_JSON;\n\n get json(): INodeEngineContext {\n return this._json;\n }\n\n get readonly(): boolean {\n return this._readonly;\n }\n\n set readonly(value: boolean) {\n this._readonly = value;\n this.fireChange();\n }\n\n private fireChange(): void {\n this.updateJSON();\n this.onChangeEmitter.fire(this);\n }\n\n private updateJSON(): void {\n this._json = {\n readonly: this._readonly,\n };\n }\n}\n","import { injectable, inject } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\n\n@injectable()\nexport class NodeEngine {\n @inject(NodeManager) nodeManager: NodeManager;\n\n @inject(NodeEngineContext) context: NodeEngineContext;\n}\n","export const PLUGIN_KEY = {\n FORM: 'Plugin_Form',\n ERROR: 'Plugin_Error',\n};\n","export const MATERIAL_KEY = {\n NODE_ERROR_RENDER: 'node_error_render',\n NODE_PLACEHOLDER_RENDER: 'node_placeholder_render',\n};\n","import { EntityData } from '@flowgram.ai/core';\n\nexport interface ErrorData {\n error: Error | null;\n}\n\nexport class FlowNodeErrorData extends EntityData {\n static type = 'FlowNodeErrorData';\n\n getDefaultData(): ErrorData {\n return { error: null };\n }\n\n setError(e: ErrorData['error']) {\n this.update({ error: e });\n }\n\n getError(): Error {\n return this.data.error;\n }\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { NodeContribution } from '../node';\nimport { ErrorNodeContribution } from './error-node-contribution';\n\nexport const ErrorContainerModule = new ContainerModule(bind => {\n bindContributions(bind, ErrorNodeContribution, [NodeContribution]);\n});\n","import { injectable } from 'inversify';\n\nimport { NodeContribution } from '../node';\nimport { NodeManager, PLUGIN_KEY } from '../node';\nimport { errorPluginRender } from './renders';\n\n@injectable()\nexport class ErrorNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.ERROR, errorPluginRender);\n }\n}\n","import React, { useCallback, useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../flow-node-error-data';\nimport { MATERIAL_KEY, NodeManager, NodePluginRender } from '../../node';\nimport { defaultErrorRender } from './default-error-render';\n\ninterface NodeRenderProps {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport const ErrorRender = ({ node, playgroundContext }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const nodeError = nodeErrorData.getError();\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeErrorRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER);\n\n const renderError = useCallback(() => {\n if (!nodeErrorRender) {\n return defaultErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }\n return nodeErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }, [nodeError, node, playgroundContext]);\n\n useEffect(() => {\n const disposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeError ? renderError() : null;\n};\n\nexport const errorPluginRender: NodePluginRender = (props) => <ErrorRender {...props} />;\n","import React from 'react';\n\nimport { NodeErrorRenderProps } from '../types';\n\nconst ERROR_STYLE = {\n color: '#f54a45',\n};\n\nexport const defaultErrorRender = ({ error }: NodeErrorRenderProps) => (\n <div style={ERROR_STYLE}>{error.message}</div>\n);\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeErrorData } from './flow-node-error-data';\n\nexport function getNodeError(node: FlowNodeEntity) {\n return node.getData<FlowNodeErrorData>(FlowNodeErrorData).getError();\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FormContextMaker } from './services/form-context-maker';\nimport { NodeContribution } from '../node';\nimport { FormManager, FormPathService } from './services';\nimport { FormNodeContribution } from './form-node-contribution';\n\nexport const FormCoreContainerModule = new ContainerModule((bind) => {\n bind(FormManager).toSelf().inSingletonScope();\n bind(FormPathService).toSelf().inSingletonScope();\n bind(FormContextMaker).toSelf().inSingletonScope();\n bindContributions(bind, FormNodeContribution, [NodeContribution]);\n});\n","import { inject, injectable } from 'inversify';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\nimport { FormItem, FormItemMaterialContext } from '..';\n\n@injectable()\nexport class FormContextMaker {\n @inject(NodeEngineContext) readonly nodeEngineContext: NodeEngineContext;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n makeFormItemMaterialContext(\n formItem: FormItem,\n options?: { getIndex: () => number | undefined }\n ): FormItemMaterialContext {\n return {\n meta: formItem.meta,\n path: formItem.path,\n readonly: this.nodeEngineContext.readonly,\n getFormItemValueByPath: formItem.formModel.getFormItemValueByPath.bind(formItem.formModel),\n onFormValidate: formItem.formModel.onValidate.bind(formItem.formModel),\n form: formItem.formModel,\n node: formItem.formModel.flowNodeEntity,\n playgroundContext: this.playgroundContext,\n index: options?.getIndex(),\n };\n }\n}\n","import { injectable } from 'inversify';\n\n@injectable()\nexport class FormPathService {\n static readonly ROOT = '/';\n\n static readonly DIVIDER = '/';\n\n static readonly RELATIVE_PARENT = '..';\n\n static readonly RELATIVE_CURRENT = '.';\n\n static readonly ARRAY = '[]';\n\n static normalize(path: string) {\n if (path === FormPathService.ROOT) {\n return path;\n }\n // 去掉末尾的斜杠\n if (path.endsWith(FormPathService.DIVIDER)) {\n path = path.slice(0, -1);\n }\n return path;\n }\n\n static join(paths: string[]): string {\n if (paths[1].startsWith(FormPathService.ROOT)) {\n throw new Error(\n `FormPathService Error: join failed, invalid paths[1], paths[1]= ${paths[1]}`,\n );\n }\n if (paths[0].endsWith(FormPathService.DIVIDER)) {\n return `${paths[0]}${paths[1]}`;\n }\n return paths.join(FormPathService.DIVIDER);\n }\n\n static toArrayPath(path: string): string {\n return FormPathService.join([path, FormPathService.ARRAY]);\n }\n\n static parseArrayItemPath(path: string) {\n const names = path.split('/');\n\n let i = 0;\n while (i < names.length) {\n const itemIndex = parseInt(names[i]);\n\n if (!isNaN(itemIndex)) {\n const arrayPath = FormPathService.toArrayPath(\n names.slice(0, i).join(FormPathService.DIVIDER),\n );\n const restPath = names.slice(i + 1).join(FormPathService.DIVIDER);\n const itemMetaPath = FormPathService.join([arrayPath, restPath]);\n return { itemIndex, arrayPath, itemMetaPath };\n }\n i = i + 1;\n }\n return null;\n }\n\n simplify(path: string) {\n const segments = path.split(FormPathService.DIVIDER);\n const resSegments: string[] = [];\n\n for (let i = 0; i < segments.length; i++) {\n if (!segments[i]) {\n throw new Error('FormPathService: join failed');\n }\n\n if (segments[i] === FormPathService.RELATIVE_CURRENT) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (segments[i] === FormPathService.RELATIVE_PARENT) {\n resSegments.pop();\n }\n resSegments.push(segments[i]);\n }\n return resSegments.join(FormPathService.DIVIDER);\n }\n}\n","import { mapValues } from 'lodash';\nimport { inject, injectable, multiInject, optional, postConstruct } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { AbilityClass, FormItemAbility } from '../models/form-item-ability';\nimport { FormAbilityExtensionRegistry, FormModel } from '../models';\nimport { FormContribution } from '../form-contribution';\nimport {\n DecoratorAbility,\n DecoratorExtension,\n SetterAbility,\n SetterExtension,\n SetterHoc,\n} from '../abilities';\nimport { FormContextMaker, FormPathService } from './index';\n\n@injectable()\nexport class FormManager {\n readonly abilityRegistry: Map<string, FormItemAbility> = new Map();\n\n readonly setterHocs: SetterHoc[] = [];\n\n readonly extensionRegistryMap: Map<string, FormAbilityExtensionRegistry> = new Map();\n\n @inject(FormPathService) readonly pathManager: FormPathService;\n\n @inject(FormContextMaker) readonly formContextMaker: FormContextMaker;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n @multiInject(FormContribution) @optional() protected formContributions: FormContribution[] = [];\n\n private readonly onFormModelWillInitEmitter = new Emitter<{\n model: FormModel;\n data: any;\n }>();\n\n readonly onFormModelWillInit = this.onFormModelWillInitEmitter.event;\n\n get components(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(SetterAbility.type)?.objectMap || {},\n (setter: SetterExtension) => setter.component\n );\n }\n\n get decorators(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(DecoratorAbility.type)?.objectMap || {},\n (decorator: DecoratorExtension) => decorator.component\n );\n }\n\n registerAbilityExtension(type: string, extension: any): void {\n if (!this.extensionRegistryMap.get(type)) {\n this.extensionRegistryMap.set(type, new FormAbilityExtensionRegistry());\n }\n const registry = this.extensionRegistryMap.get(type);\n if (!registry) {\n return;\n }\n registry.register(extension);\n }\n\n getAbilityExtension(abilityType: string, extensionKey: string): any {\n return this.extensionRegistryMap.get(abilityType)?.get(extensionKey);\n }\n\n registerAbility(Ability: AbilityClass): void {\n const ability = new Ability();\n this.abilityRegistry.set(ability.type, ability);\n }\n\n registerAbilities(Abilities: AbilityClass[]): void {\n Abilities.forEach(this.registerAbility.bind(this));\n }\n\n getAbility<ExtendAbility>(type: string): (FormItemAbility & ExtendAbility) | undefined {\n return this.abilityRegistry.get(type) as FormItemAbility & ExtendAbility;\n }\n\n /**\n * @deprecated\n * Setter Hoc and setter are no longer supported in NodeEngineV2\n * @param hoc\n */\n registerSetterHoc(hoc: SetterHoc): void {\n this.setterHocs.push(hoc);\n }\n\n fireFormModelWillInit(model: FormModel, data: any) {\n this.onFormModelWillInitEmitter.fire({\n model,\n data,\n });\n }\n\n dispose() {\n this.onFormModelWillInitEmitter.dispose();\n }\n\n @postConstruct()\n protected init(): void {\n this.formContributions.forEach((contrib) => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { DisposableCollection, Event, MaybePromise } from '@flowgram.ai/utils';\nimport { type FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FormFeedback, FormModelValid, IFormItem, IFormMeta } from '../types';\nimport { FormManager } from '../services/form-manager';\nimport { type FormItem } from '.';\n\nexport type FormModelFactory = (entity: FlowNodeEntity) => FormModel;\nexport const FormModelFactory = Symbol('FormModelFactory');\nexport const FormModelEntity = Symbol('FormModelEntity');\n\n@injectable()\nexport abstract class FormModel {\n readonly onValidate: Event<FormModel>;\n\n readonly onValidChange: Event<FormModelValid>;\n\n readonly onFeedbacksChange: Event<FormFeedback[]>;\n\n readonly onInitialized: Event<FormModel>;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n /**\n * @deprecated\n * use `formModel.node` instead in FormModelV2\n */\n abstract get flowNodeEntity(): FlowNodeEntity;\n\n /**\n * @deprecated\n */\n abstract get formManager(): FormManager;\n\n abstract get formMeta(): IFormMeta;\n\n abstract get initialized(): boolean;\n\n abstract get valid(): FormModelValid;\n\n abstract updateFormValues(value: any): void;\n\n /**\n * @deprecated\n * use `formModel.getFieldIn` instead in FormModelV2 to get the model of a form field\n * do not use this in FormModelV2 since it only return an empty Map.\n */\n abstract get formItemPathMap(): Map<string, IFormItem>;\n\n /**\n * @deprecated\n */\n abstract clearValid(): void;\n\n abstract validate(): Promise<boolean>;\n\n abstract validateWithFeedbacks(): Promise<FormFeedback[]>;\n\n abstract init(formMetaOrFormMetaGenerator: any, initialValue?: any): MaybePromise<void>;\n\n abstract toJSON(): any;\n\n /**\n * @deprecated\n * use `formModel.getField` instead in FormModelV2\n */\n abstract getFormItemByPath(path: string): FormItem | undefined;\n\n /**\n * @deprecated\n * use `formModel.getFieldValue` instead in FormModelV2 to get the model of a form field by path\n */\n abstract getFormItemValueByPath<T = any>(path: string): any | undefined;\n\n abstract render(): any;\n\n abstract dispose(): void;\n}\n","import { DisposableCollection, Emitter } from '@flowgram.ai/utils';\n\nimport { FormItemDomRef, type IFormItemMeta } from '..';\nimport { type FormModel } from '.';\n\nexport abstract class FormItem {\n readonly meta: IFormItemMeta;\n\n readonly path: string;\n\n readonly formModel: FormModel;\n\n readonly onInitEventEmitter = new Emitter<FormItem>();\n\n readonly onInit = this.onInitEventEmitter.event;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n readonly onDispose = this.toDispose.onDispose;\n\n // todo(heyuan): 将dom 相关逻辑拆到form item插件里\n private _domRef: FormItemDomRef;\n\n protected constructor(meta: IFormItemMeta, path: string, formModel: FormModel) {\n this.meta = meta;\n this.path = path;\n this.formModel = formModel;\n this.toDispose.push(this.onInitEventEmitter);\n }\n\n abstract get value(): any;\n\n abstract set value(value: any);\n\n abstract validate(): void;\n\n set domRef(domRef: FormItemDomRef) {\n this._domRef = domRef;\n }\n\n get domRef() {\n return this._domRef;\n }\n\n dispose(): void {\n this.toDispose.dispose();\n }\n}\n","import { type IFormItemMeta, type IFormMeta, type IFormMetaOptions } from '../types';\nimport { FormPathService } from '../services';\n\nexport interface FormMetaTraverseParams {\n formItemMeta: IFormItemMeta;\n parentPath?: string;\n handle: (params: { formItemMeta: IFormItemMeta; path: string }) => any;\n}\n\nexport class FormMeta implements IFormMeta {\n constructor(root: IFormItemMeta, options: IFormMetaOptions) {\n this._root = root;\n this._options = options;\n }\n\n protected _root: IFormItemMeta;\n\n get root(): IFormItemMeta {\n return this._root;\n }\n\n protected _options: IFormMetaOptions;\n\n get options(): IFormMetaOptions {\n return this._options;\n }\n\n static traverse({ formItemMeta, parentPath = '', handle }: FormMetaTraverseParams): void {\n if (!formItemMeta) {\n return;\n }\n\n const isRoot = !parentPath;\n\n const path = isRoot\n ? FormPathService.ROOT\n : formItemMeta.name\n ? FormPathService.join([parentPath, formItemMeta.name])\n : parentPath;\n\n handle({ formItemMeta, path });\n\n if (formItemMeta.items) {\n this.traverse({\n formItemMeta: formItemMeta.items,\n handle,\n parentPath: FormPathService.toArrayPath(path),\n });\n }\n\n if (formItemMeta.children && formItemMeta.children.length) {\n formItemMeta.children.forEach((child) => {\n this.traverse({ formItemMeta: child, handle, parentPath: path });\n });\n }\n }\n}\n","import { injectable } from 'inversify';\n\nexport interface Extension {\n key: string;\n}\n@injectable()\nexport class FormAbilityExtensionRegistry {\n protected registry = new Map<string, Extension>();\n\n register(extension: Extension): void {\n this.registry.set(extension.key, extension);\n }\n\n get<T extends Extension>(key: string): T | undefined {\n return this.registry.get(key) as T | undefined;\n }\n\n get objectMap(): Record<string, Extension> {\n return Object.fromEntries(this.registry);\n }\n\n get collection(): Extension[] {\n return Array.from(this.registry.values());\n }\n}\n","import { type FormManager } from './services/form-manager';\n\nexport const FormContribution = Symbol('FormContribution');\n\nexport interface FormContribution {\n onRegister?(formManager: FormManager): void;\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class SetterAbility implements FormItemAbility {\n static readonly type = 'setter';\n\n get type(): string {\n return SetterAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DecoratorAbility implements FormItemAbility {\n static readonly type = 'decorator';\n\n get type(): string {\n return DecoratorAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport interface VisibilityAbilityOptions {\n /**\n * 是否隐藏\n */\n hidden: string | boolean;\n /**\n * 隐藏是否要清空表单值, 默认为false\n */\n clearWhenHidden?: boolean;\n}\n\nexport class VisibilityAbility implements FormItemAbility {\n static readonly type = 'visibility';\n\n get type(): string {\n return VisibilityAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class EffectAbility implements FormItemAbility {\n static readonly type = 'effect';\n\n get type(): string {\n return EffectAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DefaultAbility implements FormItemAbility {\n static readonly type = 'default';\n\n get type(): string {\n return DefaultAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class ValidationAbility implements FormItemAbility {\n static readonly type = 'validation';\n\n get type(): string {\n return ValidationAbility.type;\n }\n}\n","import { injectable } from 'inversify';\n\nimport { NodeContribution, NodeManager, PLUGIN_KEY } from '../node';\nimport { formPluginRender } from './form-render';\n\n@injectable()\nexport class FormNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.FORM, formPluginRender);\n }\n}\n","import React, { useEffect } from 'react';\n\nimport { useRefresh } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeContext } from '../node';\nimport { FormModel } from './models';\nimport { FlowNodeFormData } from './flow-node-form-data';\n\ninterface FormRenderProps {\n node: FlowNodeEntity;\n playgroundContext?: PlaygroundContext;\n}\n\nfunction getFormModelFromNode(node: FlowNodeEntity) {\n return node.getData(FlowNodeFormData)?.getFormModel<FormModel>();\n}\n\nexport function FormRender({ node }: FormRenderProps): any {\n const refresh = useRefresh();\n\n const formModel = getFormModelFromNode(node);\n\n useEffect(() => {\n const disposable = formModel?.onInitialized(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, [formModel]);\n\n return formModel?.initialized ? formModel.render() : null;\n}\n\nexport const formPluginRender = (props: NodeContext) => <FormRender {...props} />;\n","import { Disposable, Emitter } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { EntityData } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../error';\nimport { FormMetaOrFormMetaGenerator } from './types';\nimport { FormModel, type FormModelFactory } from './models';\n\ninterface Options {\n formModelFactory: FormModelFactory;\n}\n\nexport interface DetailChangeEvent {\n path: string;\n oldValue: any;\n value: any;\n initialized: boolean;\n}\n\nexport interface OnFormValuesChangePayload {\n values: any;\n prevValues: any;\n name: string;\n}\n\nexport class FlowNodeFormData extends EntityData {\n static type = 'FlowNodeEntityFormData';\n\n readonly formModel: FormModel;\n\n protected flowNodeEntity: FlowNodeEntity;\n\n /**\n * @deprecated rehaje 版表单form Values change 事件\n * @protected\n */\n protected onDetailChangeEmitter = new Emitter<DetailChangeEvent>();\n\n /**\n * @deprecated 该方法为旧版引擎(rehaje)表单数据变更事件, 新版节点引擎请使用\n * this.getFormModel<FormModelV2>().onFormValuesChange.\n * @protected\n */\n readonly onDetailChange = this.onDetailChangeEmitter.event;\n\n constructor(entity: FlowNodeEntity, opts: Options) {\n super(entity);\n\n this.flowNodeEntity = entity;\n this.formModel = opts.formModelFactory(entity);\n\n this.toDispose.push(this.onDetailChangeEmitter);\n\n this.toDispose.push(\n Disposable.create(() => {\n this.formModel.dispose();\n })\n );\n }\n\n getFormModel<TFormModel>(): TFormModel {\n // @ts-ignore\n return this.formModel as TFormModel;\n }\n\n getDefaultData(): any {\n return {};\n }\n\n createForm(formMetaOrFormMetaGenerator: any, initialValue?: any): void {\n const errorData = this.flowNodeEntity.getData<FlowNodeErrorData>(FlowNodeErrorData);\n\n errorData.setError(null);\n try {\n this.formModel.init(formMetaOrFormMetaGenerator, initialValue);\n } catch (e) {\n errorData.setError(e as Error);\n }\n }\n\n updateFormValues(value: any) {\n this.formModel.updateFormValues(value);\n }\n\n recreateForm(formMetaOrFormMetaGenerator: FormMetaOrFormMetaGenerator, initialValue?: any): void {\n this.createForm(formMetaOrFormMetaGenerator, initialValue);\n }\n\n toJSON(): any {\n return this.formModel.toJSON();\n }\n\n dispose(): void {\n super.dispose();\n }\n\n /**\n * @deprecated rehaje 版表单form Values change 事件触发函数\n * @protected\n */\n fireDetaiChange(detailChangeEvent: DetailChangeEvent) {\n this.onDetailChangeEmitter.fire(detailChangeEvent);\n }\n}\n","export interface IFormItem<T = any> {\n value: T;\n}\n\nexport enum FormItemEventName {\n onFormValueChange = 'onFormValueChange',\n onFormItemInit = 'onFormItemInit',\n}\n\nexport type FormModelValid = boolean | null;\n\nexport type FeedbackStatus = 'error' | 'warning' | 'pending';\nexport type FeedbackText = string;\n\nexport interface FormItemFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n}\n\nexport interface FormFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n path: string;\n}\n\nexport interface FormItemDomRef {\n current: HTMLElement | null;\n}\n","import { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\nimport { MaybePromise } from '@flowgram.ai/utils';\n\nimport { type FormItemAbilityMeta } from './form-ability.types';\n\nexport type FormDataTypeName =\n | 'string'\n | 'number'\n | 'integer'\n | 'boolean'\n | 'object'\n | 'array'\n | 'null';\n\nexport type FormDataType =\n | string //\n | number\n | boolean\n | FormDataObject\n | DataArray\n | null;\n\nexport interface FormDataObject {\n [key: string]: FormDataType;\n}\n\nexport type DataArray = Array<FormDataType>;\n\nexport const FORM_VOID = 'form-void' as const;\n\nexport interface TreeNode<T> {\n name: string;\n children?: TreeNode<T>[];\n}\n\nexport interface IFormItemMeta extends TreeNode<IFormItemMeta> {\n /**\n * 表单项名称\n */\n name: string;\n /**\n * 数据类型\n */\n type: FormDataTypeName | typeof FORM_VOID;\n /**\n * 枚举值\n */\n enum?: FormDataType[];\n /**\n * 数组类型item的数据类型描述\n */\n items?: IFormItemMeta;\n /**\n * 表单项标题\n */\n title?: string;\n /**\n * 表单项描述\n */\n description?: string;\n /**\n * 表单项默认值\n */\n default?: FormDataType;\n /**\n * 是否必填\n */\n required?: boolean;\n /**\n * 扩展能力\n */\n abilities?: FormItemAbilityMeta[];\n\n /**\n * 子表单项\n */\n children?: IFormItemMeta[];\n}\n\nexport interface IFormMeta {\n /**\n * 表单树结构root\n */\n root: IFormItemMeta;\n /**\n * 表单全局配置\n */\n options?: IFormMetaOptions;\n}\n\nexport interface NodeFormContext {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport interface IFormMetaOptions {\n formatOnInit?: (value: any, context: NodeFormContext) => any;\n\n formatOnSubmit?: (value: any, context: NodeFormContext) => any;\n\n [key: string]: any;\n}\n\nexport interface FormMetaGeneratorParams<PlaygroundContext, FormValue = any> {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n initialValue?: FormValue;\n}\n\nexport type FormMetaGenerator<PlaygroundContext = any, FormValue = any> = (\n params: FormMetaGeneratorParams<FormValue, FormValue>,\n) => MaybePromise<IFormMeta>;\n\nexport type FormMetaOrFormMetaGenerator = FormMetaGenerator | IFormMeta;\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeFormData } from '../flow-node-form-data';\nimport { FormModel } from '..';\n\nexport function isNodeFormReady(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).getFormModel<FormModel>().initialized;\n}\n\nexport function getFormModel(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).formModel;\n}\n","import { NodeContainerModule } from '../node/node-container-module';\nimport { FormCoreContainerModule } from '../form';\nimport { ErrorContainerModule } from '../error';\n\nexport function createNodeContainerModules() {\n return [NodeContainerModule, FormCoreContainerModule, ErrorContainerModule];\n}\n","import React, { memo, useCallback, useEffect } from 'react';\n\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { NodeEngineReactContext } from '../node-react/context/node-engine-react-context';\nimport { useNodeEngineContext } from '../node-react';\nimport { NodeManager } from '../node/node-manager';\nimport { PLUGIN_KEY } from '../node/core-plugins';\nimport { MATERIAL_KEY, type NodeRenderProps } from '../node';\nimport { getFormModel, isNodeFormReady } from '../form';\nimport { FlowNodeErrorData } from '../error/flow-node-error-data';\nimport { getNodeError } from '../error';\n\nconst PureNodeRender = ({ node }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const formModel = getFormModel(node);\n const isNodeError = !!getNodeError(node);\n const isFormReady = isNodeFormReady(node);\n const playgroundContext = useService<PlaygroundContext>(PlaygroundContext);\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeFormRender = nodeManager.getPluginRender(PLUGIN_KEY.FORM);\n const nodeErrorRender = nodeManager.getPluginRender(PLUGIN_KEY.ERROR);\n const nodePlaceholderRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER);\n\n const nodeEngineContext = useNodeEngineContext();\n\n useEffect(() => {\n const errorDisposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n const formDisposable = formModel.onInitialized(() => {\n refresh();\n });\n return () => {\n errorDisposable.dispose();\n formDisposable.dispose();\n };\n }, []);\n\n const renderContent = useCallback(() => {\n if (isNodeError) {\n return nodeErrorRender!({ node, playgroundContext });\n }\n if (!formModel.formMeta) {\n return null;\n }\n if (isFormReady) {\n return nodeFormRender!({ node, playgroundContext });\n }\n return nodePlaceholderRender?.({ node, playgroundContext }) || null;\n }, [\n isNodeError,\n isFormReady,\n nodeErrorRender,\n nodeFormRender,\n nodePlaceholderRender,\n node,\n playgroundContext,\n ]);\n\n return (\n <NodeEngineReactContext.Provider value={nodeEngineContext.json}>\n {nodeManager.nodeRenderHoc(renderContent)()}\n </NodeEngineReactContext.Provider>\n );\n};\n\nexport const NodeRender = memo(PureNodeRender);\n","import React from 'react';\n\nimport { INodeEngineContext, NodeEngineContext } from '../../node';\n\nexport const NodeEngineReactContext = React.createContext<INodeEngineContext>(\n NodeEngineContext.DEFAULT_JSON,\n);\n","import { useEffect } from 'react';\n\nimport { useService, useRefresh } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\n\nexport function useNodeEngineContext(): NodeEngineContext {\n const refresh = useRefresh();\n const nodeEngineContext = useService<NodeEngineContext>(NodeEngineContext);\n\n useEffect(() => {\n const disposable = nodeEngineContext.onChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeEngineContext;\n}\n","import { useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { useEntityFromContext, useRefresh } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData, FormModel, IFormItem } from '../../form';\n\nexport function useFormItem(path: string): IFormItem | undefined {\n const refresh = useRefresh();\n const node = useEntityFromContext<FlowNodeEntity>();\n const formData = node.getData<FlowNodeFormData>(FlowNodeFormData);\n const formItem = formData.getFormModel<FormModel>().getFormItemByPath(path);\n\n useEffect(() => {\n const disposable = formData.onDataChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return formItem;\n}\n","import { MATERIAL_KEY } from '../node/core-materials';\nimport { NodeManager, NodePlaceholderRender, Render } from '../node';\n\nexport function registerNodeErrorRender(nodeManager: NodeManager, render: Render): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER, render);\n}\n\nexport function registerNodePlaceholderRender(\n nodeManager: NodeManager,\n render: NodePlaceholderRender,\n): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER, render);\n}\n","import { EntityDataRegistry } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData } from '../form';\nimport { FlowNodeErrorData } from '../error';\n\nexport function createNodeEntityDatas(): EntityDataRegistry[] {\n return [FlowNodeFormData, FlowNodeErrorData];\n}\n"],"mappings":"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","names":["MaterialRenderKey","injectable","injectable","injectable","injectable","ContainerModule","injectable","React","React","injectable","ContainerModule","ContainerModule","bindContributions","inject","injectable","inject","injectable","injectable","injectable","inject","injectable","multiInject","optional","postConstruct","Emitter","injectPlaygroundContext","injectable","injectable","DisposableCollection","Emitter","injectable","injectable","Emitter","inject","injectPlaygroundContext","multiInject","optional","postConstruct","injectable","injectable","React","useEffect","useRefresh","Emitter","EntityData","EntityData","Emitter","useRefresh","useEffect","React","injectable","ContainerModule","bindContributions","FormItemEventName","React","useCallback","useEffect","PlaygroundContext","useRefresh","useService","React","React","useEffect","useService","useRefresh","useRefresh","useService","useEffect","useEffect","useRefresh","useRefresh","useEffect","useRefresh","useService","PlaygroundContext","useEffect","useCallback","React"]}
package/dist/index.d.mts CHANGED
@@ -291,6 +291,7 @@ declare abstract class FormModel {
291
291
  abstract get formMeta(): IFormMeta;
292
292
  abstract get initialized(): boolean;
293
293
  abstract get valid(): FormModelValid;
294
+ abstract updateFormValues(value: any): void;
294
295
  /**
295
296
  * @deprecated
296
297
  * use `formModel.getFieldIn` instead in FormModelV2 to get the model of a form field
@@ -653,6 +654,7 @@ declare class FlowNodeFormData extends EntityData {
653
654
  getFormModel<TFormModel>(): TFormModel;
654
655
  getDefaultData(): any;
655
656
  createForm(formMetaOrFormMetaGenerator: any, initialValue?: any): void;
657
+ updateFormValues(value: any): void;
656
658
  recreateForm(formMetaOrFormMetaGenerator: FormMetaOrFormMetaGenerator, initialValue?: any): void;
657
659
  toJSON(): any;
658
660
  dispose(): void;
package/dist/index.d.ts CHANGED
@@ -291,6 +291,7 @@ declare abstract class FormModel {
291
291
  abstract get formMeta(): IFormMeta;
292
292
  abstract get initialized(): boolean;
293
293
  abstract get valid(): FormModelValid;
294
+ abstract updateFormValues(value: any): void;
294
295
  /**
295
296
  * @deprecated
296
297
  * use `formModel.getFieldIn` instead in FormModelV2 to get the model of a form field
@@ -653,6 +654,7 @@ declare class FlowNodeFormData extends EntityData {
653
654
  getFormModel<TFormModel>(): TFormModel;
654
655
  getDefaultData(): any;
655
656
  createForm(formMetaOrFormMetaGenerator: any, initialValue?: any): void;
657
+ updateFormValues(value: any): void;
656
658
  recreateForm(formMetaOrFormMetaGenerator: FormMetaOrFormMetaGenerator, initialValue?: any): void;
657
659
  toJSON(): any;
658
660
  dispose(): void;
package/dist/index.js CHANGED
@@ -127,7 +127,10 @@ var NodeManager = class {
127
127
  return this.materialRenderRegistry.get("Material_CustomNodeError" /* CustomNodeError */);
128
128
  }
129
129
  init() {
130
- this.nodeContributions.forEach((contrib) => contrib.onRegister?.(this));
130
+ this.nodeContributions.forEach((contrib) => {
131
+ var _a;
132
+ return (_a = contrib.onRegister) == null ? void 0 : _a.call(contrib, this);
133
+ });
131
134
  }
132
135
  };
133
136
  __decorateClass([
@@ -312,7 +315,7 @@ var FormContextMaker = class {
312
315
  form: formItem.formModel,
313
316
  node: formItem.formModel.flowNodeEntity,
314
317
  playgroundContext: this.playgroundContext,
315
- index: options?.getIndex()
318
+ index: options == null ? void 0 : options.getIndex()
316
319
  };
317
320
  }
318
321
  };
@@ -565,14 +568,16 @@ var FormManager = class {
565
568
  this.onFormModelWillInit = this.onFormModelWillInitEmitter.event;
566
569
  }
567
570
  get components() {
571
+ var _a;
568
572
  return (0, import_lodash2.mapValues)(
569
- this.extensionRegistryMap.get(SetterAbility.type)?.objectMap || {},
573
+ ((_a = this.extensionRegistryMap.get(SetterAbility.type)) == null ? void 0 : _a.objectMap) || {},
570
574
  (setter) => setter.component
571
575
  );
572
576
  }
573
577
  get decorators() {
578
+ var _a;
574
579
  return (0, import_lodash2.mapValues)(
575
- this.extensionRegistryMap.get(DecoratorAbility.type)?.objectMap || {},
580
+ ((_a = this.extensionRegistryMap.get(DecoratorAbility.type)) == null ? void 0 : _a.objectMap) || {},
576
581
  (decorator) => decorator.component
577
582
  );
578
583
  }
@@ -587,7 +592,8 @@ var FormManager = class {
587
592
  registry.register(extension);
588
593
  }
589
594
  getAbilityExtension(abilityType, extensionKey) {
590
- return this.extensionRegistryMap.get(abilityType)?.get(extensionKey);
595
+ var _a;
596
+ return (_a = this.extensionRegistryMap.get(abilityType)) == null ? void 0 : _a.get(extensionKey);
591
597
  }
592
598
  registerAbility(Ability) {
593
599
  const ability = new Ability();
@@ -617,7 +623,10 @@ var FormManager = class {
617
623
  this.onFormModelWillInitEmitter.dispose();
618
624
  }
619
625
  init() {
620
- this.formContributions.forEach((contrib) => contrib.onRegister?.(this));
626
+ this.formContributions.forEach((contrib) => {
627
+ var _a;
628
+ return (_a = contrib.onRegister) == null ? void 0 : _a.call(contrib, this);
629
+ });
621
630
  }
622
631
  };
623
632
  __decorateClass([
@@ -688,6 +697,9 @@ var FlowNodeFormData = class extends import_core5.EntityData {
688
697
  errorData.setError(e);
689
698
  }
690
699
  }
700
+ updateFormValues(value) {
701
+ this.formModel.updateFormValues(value);
702
+ }
691
703
  recreateForm(formMetaOrFormMetaGenerator, initialValue) {
692
704
  this.createForm(formMetaOrFormMetaGenerator, initialValue);
693
705
  }
@@ -709,20 +721,21 @@ FlowNodeFormData.type = "FlowNodeEntityFormData";
709
721
 
710
722
  // src/form/form-render.tsx
711
723
  function getFormModelFromNode(node) {
712
- return node.getData(FlowNodeFormData)?.getFormModel();
724
+ var _a;
725
+ return (_a = node.getData(FlowNodeFormData)) == null ? void 0 : _a.getFormModel();
713
726
  }
714
727
  function FormRender({ node }) {
715
728
  const refresh = (0, import_utils7.useRefresh)();
716
729
  const formModel = getFormModelFromNode(node);
717
730
  (0, import_react3.useEffect)(() => {
718
- const disposable = formModel?.onInitialized(() => {
731
+ const disposable = formModel == null ? void 0 : formModel.onInitialized(() => {
719
732
  refresh();
720
733
  });
721
734
  return () => {
722
735
  disposable.dispose();
723
736
  };
724
737
  }, [formModel]);
725
- return formModel?.initialized ? formModel.render() : null;
738
+ return (formModel == null ? void 0 : formModel.initialized) ? formModel.render() : null;
726
739
  }
727
740
  var formPluginRender = (props) => /* @__PURE__ */ import_react3.default.createElement(FormRender, { ...props });
728
741
 
@@ -848,7 +861,7 @@ var PureNodeRender = ({ node }) => {
848
861
  if (isFormReady) {
849
862
  return nodeFormRender({ node, playgroundContext });
850
863
  }
851
- return nodePlaceholderRender?.({ node, playgroundContext }) || null;
864
+ return (nodePlaceholderRender == null ? void 0 : nodePlaceholderRender({ node, playgroundContext })) || null;
852
865
  }, [
853
866
  isNodeError,
854
867
  isFormReady,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/node/node-contribution.ts","../src/node/node-container-module.ts","../src/node/node-manager.ts","../src/node/node-engine-context.ts","../src/node/node-engine.ts","../src/node/core-plugins.ts","../src/node/core-materials.ts","../src/error/flow-node-error-data.ts","../src/error/error-container-module.ts","../src/error/error-node-contribution.ts","../src/error/renders/error-render.tsx","../src/error/renders/default-error-render.tsx","../src/error/client.ts","../src/form/form-core-container-module.ts","../src/form/services/form-context-maker.ts","../src/form/services/form-path-service.ts","../src/form/services/form-manager.ts","../src/form/models/form-model.ts","../src/form/models/form-item.ts","../src/form/models/form-meta.ts","../src/form/models/form-ability-extension-registry.ts","../src/form/form-contribution.ts","../src/form/abilities/setter-ability/setter-ability.ts","../src/form/abilities/decorator-ability/decorator-ability.ts","../src/form/abilities/visibility-ability/visibility-ability.ts","../src/form/abilities/effect-ability/effect-ability.ts","../src/form/abilities/default-ability/default-ability.ts","../src/form/abilities/validation-ability/validation-ability.ts","../src/form/form-node-contribution.ts","../src/form/form-render.tsx","../src/form/flow-node-form-data.ts","../src/form/types/form-model.types.ts","../src/form/types/form-meta.types.ts","../src/form/client/index.ts","../src/client/create-node-container-modules.ts","../src/client/node-render.tsx","../src/node-react/context/node-engine-react-context.ts","../src/node-react/hooks/use-node-engine-context.ts","../src/node-react/hooks/use-form-Item.ts","../src/client/node-material-client.ts","../src/client/create-node-entity-datas.ts"],"sourcesContent":["export * from './node';\nexport * from './error';\nexport * from './form';\nexport * from './client';\nexport * from './node-react';\n","import { type NodeManager } from './node-manager';\n\nexport const NodeContribution = Symbol('NodeContribution');\n\nexport interface NodeContribution {\n onRegister?(nodeManager: NodeManager): void;\n}\n","import { ContainerModule } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\nimport { NodeEngine } from './node-engine';\n\nexport const NodeContainerModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n bind(NodeEngine).toSelf().inSingletonScope();\n bind(NodeManager).toSelf().inSingletonScope();\n bind(NodeEngineContext).toSelf().inSingletonScope();\n});\n","import { flow } from 'lodash';\nimport { injectable, multiInject, optional, postConstruct } from 'inversify';\n\nimport { NodeErrorRenderProps } from '../error';\nimport { NodePluginRender, NodeRenderHoc, Render } from './types';\nimport { NodeContribution } from './node-contribution';\n\nexport enum MaterialRenderKey {\n CustomNodeError = 'Material_CustomNodeError',\n}\n\n@injectable()\nexport class NodeManager {\n readonly materialRenderRegistry: Map<string, Render> = new Map();\n\n readonly pluginRenderRegistry: Map<string, Render> = new Map();\n\n readonly nodeRenderHocs: NodeRenderHoc[] = [];\n\n @multiInject(NodeContribution) @optional() protected nodeContributions: NodeContribution[] = [];\n\n registerMaterialRender(key: string, render: Render) {\n this.materialRenderRegistry.set(key, render);\n }\n\n getMaterialRender(key: string): Render | undefined {\n return this.materialRenderRegistry.get(key);\n }\n\n registerPluginRender(key: string, render: NodePluginRender): void {\n this.pluginRenderRegistry.set(key, render);\n }\n\n getPluginRender(key: string): NodePluginRender | undefined {\n return this.pluginRenderRegistry.get(key);\n }\n\n registerNodeErrorRender(render: Render<NodeErrorRenderProps>) {\n this.registerMaterialRender(MaterialRenderKey.CustomNodeError, render);\n }\n\n get nodeRenderHoc() {\n return flow(this.nodeRenderHocs);\n }\n\n registerNodeRenderHoc(hoc: NodeRenderHoc) {\n this.nodeRenderHocs.push(hoc);\n }\n\n get nodeErrorRender() {\n return this.materialRenderRegistry.get(MaterialRenderKey.CustomNodeError);\n }\n\n @postConstruct()\n protected init(): void {\n this.nodeContributions.forEach(contrib => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\n\nexport interface INodeEngineContext {\n readonly: boolean;\n}\n\n/**\n * NodeEngineContext 在 Node Engine 中为全局单例, 它的作用是让Node之间共享数据。\n * context 分为内置context(如 readonly) 和 自定义context(业务可以按需注入)\n */\n@injectable()\nexport class NodeEngineContext {\n static DEFAULT_READONLY = false;\n\n static DEFAULT_JSON = { readonly: NodeEngineContext.DEFAULT_READONLY };\n\n readonly onChangeEmitter = new Emitter<NodeEngineContext>();\n\n readonly onChange = this.onChangeEmitter.event;\n\n private _readonly: boolean = NodeEngineContext.DEFAULT_READONLY;\n\n private _json: INodeEngineContext = NodeEngineContext.DEFAULT_JSON;\n\n get json(): INodeEngineContext {\n return this._json;\n }\n\n get readonly(): boolean {\n return this._readonly;\n }\n\n set readonly(value: boolean) {\n this._readonly = value;\n this.fireChange();\n }\n\n private fireChange(): void {\n this.updateJSON();\n this.onChangeEmitter.fire(this);\n }\n\n private updateJSON(): void {\n this._json = {\n readonly: this._readonly,\n };\n }\n}\n","import { injectable, inject } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\n\n@injectable()\nexport class NodeEngine {\n @inject(NodeManager) nodeManager: NodeManager;\n\n @inject(NodeEngineContext) context: NodeEngineContext;\n}\n","export const PLUGIN_KEY = {\n FORM: 'Plugin_Form',\n ERROR: 'Plugin_Error',\n};\n","export const MATERIAL_KEY = {\n NODE_ERROR_RENDER: 'node_error_render',\n NODE_PLACEHOLDER_RENDER: 'node_placeholder_render',\n};\n","import { EntityData } from '@flowgram.ai/core';\n\nexport interface ErrorData {\n error: Error | null;\n}\n\nexport class FlowNodeErrorData extends EntityData {\n static type = 'FlowNodeErrorData';\n\n getDefaultData(): ErrorData {\n return { error: null };\n }\n\n setError(e: ErrorData['error']) {\n this.update({ error: e });\n }\n\n getError(): Error {\n return this.data.error;\n }\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { NodeContribution } from '../node';\nimport { ErrorNodeContribution } from './error-node-contribution';\n\nexport const ErrorContainerModule = new ContainerModule(bind => {\n bindContributions(bind, ErrorNodeContribution, [NodeContribution]);\n});\n","import { injectable } from 'inversify';\n\nimport { NodeContribution } from '../node';\nimport { NodeManager, PLUGIN_KEY } from '../node';\nimport { errorPluginRender } from './renders';\n\n@injectable()\nexport class ErrorNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.ERROR, errorPluginRender);\n }\n}\n","import React, { useCallback, useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../flow-node-error-data';\nimport { MATERIAL_KEY, NodeManager, NodePluginRender } from '../../node';\nimport { defaultErrorRender } from './default-error-render';\n\ninterface NodeRenderProps {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport const ErrorRender = ({ node, playgroundContext }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const nodeError = nodeErrorData.getError();\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeErrorRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER);\n\n const renderError = useCallback(() => {\n if (!nodeErrorRender) {\n return defaultErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }\n return nodeErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }, [nodeError, node, playgroundContext]);\n\n useEffect(() => {\n const disposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeError ? renderError() : null;\n};\n\nexport const errorPluginRender: NodePluginRender = (props) => <ErrorRender {...props} />;\n","import React from 'react';\n\nimport { NodeErrorRenderProps } from '../types';\n\nconst ERROR_STYLE = {\n color: '#f54a45',\n};\n\nexport const defaultErrorRender = ({ error }: NodeErrorRenderProps) => (\n <div style={ERROR_STYLE}>{error.message}</div>\n);\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeErrorData } from './flow-node-error-data';\n\nexport function getNodeError(node: FlowNodeEntity) {\n return node.getData<FlowNodeErrorData>(FlowNodeErrorData).getError();\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FormContextMaker } from './services/form-context-maker';\nimport { NodeContribution } from '../node';\nimport { FormManager, FormPathService } from './services';\nimport { FormNodeContribution } from './form-node-contribution';\n\nexport const FormCoreContainerModule = new ContainerModule((bind) => {\n bind(FormManager).toSelf().inSingletonScope();\n bind(FormPathService).toSelf().inSingletonScope();\n bind(FormContextMaker).toSelf().inSingletonScope();\n bindContributions(bind, FormNodeContribution, [NodeContribution]);\n});\n","import { inject, injectable } from 'inversify';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\nimport { FormItem, FormItemMaterialContext } from '..';\n\n@injectable()\nexport class FormContextMaker {\n @inject(NodeEngineContext) readonly nodeEngineContext: NodeEngineContext;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n makeFormItemMaterialContext(\n formItem: FormItem,\n options?: { getIndex: () => number | undefined }\n ): FormItemMaterialContext {\n return {\n meta: formItem.meta,\n path: formItem.path,\n readonly: this.nodeEngineContext.readonly,\n getFormItemValueByPath: formItem.formModel.getFormItemValueByPath.bind(formItem.formModel),\n onFormValidate: formItem.formModel.onValidate.bind(formItem.formModel),\n form: formItem.formModel,\n node: formItem.formModel.flowNodeEntity,\n playgroundContext: this.playgroundContext,\n index: options?.getIndex(),\n };\n }\n}\n","import { injectable } from 'inversify';\n\n@injectable()\nexport class FormPathService {\n static readonly ROOT = '/';\n\n static readonly DIVIDER = '/';\n\n static readonly RELATIVE_PARENT = '..';\n\n static readonly RELATIVE_CURRENT = '.';\n\n static readonly ARRAY = '[]';\n\n static normalize(path: string) {\n if (path === FormPathService.ROOT) {\n return path;\n }\n // 去掉末尾的斜杠\n if (path.endsWith(FormPathService.DIVIDER)) {\n path = path.slice(0, -1);\n }\n return path;\n }\n\n static join(paths: string[]): string {\n if (paths[1].startsWith(FormPathService.ROOT)) {\n throw new Error(\n `FormPathService Error: join failed, invalid paths[1], paths[1]= ${paths[1]}`,\n );\n }\n if (paths[0].endsWith(FormPathService.DIVIDER)) {\n return `${paths[0]}${paths[1]}`;\n }\n return paths.join(FormPathService.DIVIDER);\n }\n\n static toArrayPath(path: string): string {\n return FormPathService.join([path, FormPathService.ARRAY]);\n }\n\n static parseArrayItemPath(path: string) {\n const names = path.split('/');\n\n let i = 0;\n while (i < names.length) {\n const itemIndex = parseInt(names[i]);\n\n if (!isNaN(itemIndex)) {\n const arrayPath = FormPathService.toArrayPath(\n names.slice(0, i).join(FormPathService.DIVIDER),\n );\n const restPath = names.slice(i + 1).join(FormPathService.DIVIDER);\n const itemMetaPath = FormPathService.join([arrayPath, restPath]);\n return { itemIndex, arrayPath, itemMetaPath };\n }\n i = i + 1;\n }\n return null;\n }\n\n simplify(path: string) {\n const segments = path.split(FormPathService.DIVIDER);\n const resSegments: string[] = [];\n\n for (let i = 0; i < segments.length; i++) {\n if (!segments[i]) {\n throw new Error('FormPathService: join failed');\n }\n\n if (segments[i] === FormPathService.RELATIVE_CURRENT) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (segments[i] === FormPathService.RELATIVE_PARENT) {\n resSegments.pop();\n }\n resSegments.push(segments[i]);\n }\n return resSegments.join(FormPathService.DIVIDER);\n }\n}\n","import { mapValues } from 'lodash';\nimport { inject, injectable, multiInject, optional, postConstruct } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { AbilityClass, FormItemAbility } from '../models/form-item-ability';\nimport { FormAbilityExtensionRegistry, FormModel } from '../models';\nimport { FormContribution } from '../form-contribution';\nimport {\n DecoratorAbility,\n DecoratorExtension,\n SetterAbility,\n SetterExtension,\n SetterHoc,\n} from '../abilities';\nimport { FormContextMaker, FormPathService } from './index';\n\n@injectable()\nexport class FormManager {\n readonly abilityRegistry: Map<string, FormItemAbility> = new Map();\n\n readonly setterHocs: SetterHoc[] = [];\n\n readonly extensionRegistryMap: Map<string, FormAbilityExtensionRegistry> = new Map();\n\n @inject(FormPathService) readonly pathManager: FormPathService;\n\n @inject(FormContextMaker) readonly formContextMaker: FormContextMaker;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n @multiInject(FormContribution) @optional() protected formContributions: FormContribution[] = [];\n\n private readonly onFormModelWillInitEmitter = new Emitter<{\n model: FormModel;\n data: any;\n }>();\n\n readonly onFormModelWillInit = this.onFormModelWillInitEmitter.event;\n\n get components(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(SetterAbility.type)?.objectMap || {},\n (setter: SetterExtension) => setter.component\n );\n }\n\n get decorators(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(DecoratorAbility.type)?.objectMap || {},\n (decorator: DecoratorExtension) => decorator.component\n );\n }\n\n registerAbilityExtension(type: string, extension: any): void {\n if (!this.extensionRegistryMap.get(type)) {\n this.extensionRegistryMap.set(type, new FormAbilityExtensionRegistry());\n }\n const registry = this.extensionRegistryMap.get(type);\n if (!registry) {\n return;\n }\n registry.register(extension);\n }\n\n getAbilityExtension(abilityType: string, extensionKey: string): any {\n return this.extensionRegistryMap.get(abilityType)?.get(extensionKey);\n }\n\n registerAbility(Ability: AbilityClass): void {\n const ability = new Ability();\n this.abilityRegistry.set(ability.type, ability);\n }\n\n registerAbilities(Abilities: AbilityClass[]): void {\n Abilities.forEach(this.registerAbility.bind(this));\n }\n\n getAbility<ExtendAbility>(type: string): (FormItemAbility & ExtendAbility) | undefined {\n return this.abilityRegistry.get(type) as FormItemAbility & ExtendAbility;\n }\n\n /**\n * @deprecated\n * Setter Hoc and setter are no longer supported in NodeEngineV2\n * @param hoc\n */\n registerSetterHoc(hoc: SetterHoc): void {\n this.setterHocs.push(hoc);\n }\n\n fireFormModelWillInit(model: FormModel, data: any) {\n this.onFormModelWillInitEmitter.fire({\n model,\n data,\n });\n }\n\n dispose() {\n this.onFormModelWillInitEmitter.dispose();\n }\n\n @postConstruct()\n protected init(): void {\n this.formContributions.forEach((contrib) => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { DisposableCollection, Event, MaybePromise } from '@flowgram.ai/utils';\nimport { type FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FormFeedback, FormModelValid, IFormItem, IFormMeta } from '../types';\nimport { FormManager } from '../services/form-manager';\nimport { type FormItem } from '.';\n\nexport type FormModelFactory = (entity: FlowNodeEntity) => FormModel;\nexport const FormModelFactory = Symbol('FormModelFactory');\nexport const FormModelEntity = Symbol('FormModelEntity');\n\n@injectable()\nexport abstract class FormModel {\n readonly onValidate: Event<FormModel>;\n\n readonly onValidChange: Event<FormModelValid>;\n\n readonly onFeedbacksChange: Event<FormFeedback[]>;\n\n readonly onInitialized: Event<FormModel>;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n /**\n * @deprecated\n * use `formModel.node` instead in FormModelV2\n */\n abstract get flowNodeEntity(): FlowNodeEntity;\n\n /**\n * @deprecated\n */\n abstract get formManager(): FormManager;\n\n abstract get formMeta(): IFormMeta;\n\n abstract get initialized(): boolean;\n\n abstract get valid(): FormModelValid;\n\n /**\n * @deprecated\n * use `formModel.getFieldIn` instead in FormModelV2 to get the model of a form field\n * do not use this in FormModelV2 since it only return an empty Map.\n */\n abstract get formItemPathMap(): Map<string, IFormItem>;\n\n /**\n * @deprecated\n */\n abstract clearValid(): void;\n\n abstract validate(): Promise<boolean>;\n\n abstract validateWithFeedbacks(): Promise<FormFeedback[]>;\n\n abstract init(formMetaOrFormMetaGenerator: any, initialValue?: any): MaybePromise<void>;\n\n abstract toJSON(): any;\n\n /**\n * @deprecated\n * use `formModel.getField` instead in FormModelV2\n */\n abstract getFormItemByPath(path: string): FormItem | undefined;\n\n /**\n * @deprecated\n * use `formModel.getFieldValue` instead in FormModelV2 to get the model of a form field by path\n */\n abstract getFormItemValueByPath<T = any>(path: string): any | undefined;\n\n abstract render(): any;\n\n abstract dispose(): void;\n}\n","import { DisposableCollection, Emitter } from '@flowgram.ai/utils';\n\nimport { FormItemDomRef, type IFormItemMeta } from '..';\nimport { type FormModel } from '.';\n\nexport abstract class FormItem {\n readonly meta: IFormItemMeta;\n\n readonly path: string;\n\n readonly formModel: FormModel;\n\n readonly onInitEventEmitter = new Emitter<FormItem>();\n\n readonly onInit = this.onInitEventEmitter.event;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n readonly onDispose = this.toDispose.onDispose;\n\n // todo(heyuan): 将dom 相关逻辑拆到form item插件里\n private _domRef: FormItemDomRef;\n\n protected constructor(meta: IFormItemMeta, path: string, formModel: FormModel) {\n this.meta = meta;\n this.path = path;\n this.formModel = formModel;\n this.toDispose.push(this.onInitEventEmitter);\n }\n\n abstract get value(): any;\n\n abstract set value(value: any);\n\n abstract validate(): void;\n\n set domRef(domRef: FormItemDomRef) {\n this._domRef = domRef;\n }\n\n get domRef() {\n return this._domRef;\n }\n\n dispose(): void {\n this.toDispose.dispose();\n }\n}\n","import { type IFormItemMeta, type IFormMeta, type IFormMetaOptions } from '../types';\nimport { FormPathService } from '../services';\n\nexport interface FormMetaTraverseParams {\n formItemMeta: IFormItemMeta;\n parentPath?: string;\n handle: (params: { formItemMeta: IFormItemMeta; path: string }) => any;\n}\n\nexport class FormMeta implements IFormMeta {\n constructor(root: IFormItemMeta, options: IFormMetaOptions) {\n this._root = root;\n this._options = options;\n }\n\n protected _root: IFormItemMeta;\n\n get root(): IFormItemMeta {\n return this._root;\n }\n\n protected _options: IFormMetaOptions;\n\n get options(): IFormMetaOptions {\n return this._options;\n }\n\n static traverse({ formItemMeta, parentPath = '', handle }: FormMetaTraverseParams): void {\n if (!formItemMeta) {\n return;\n }\n\n const isRoot = !parentPath;\n\n const path = isRoot\n ? FormPathService.ROOT\n : formItemMeta.name\n ? FormPathService.join([parentPath, formItemMeta.name])\n : parentPath;\n\n handle({ formItemMeta, path });\n\n if (formItemMeta.items) {\n this.traverse({\n formItemMeta: formItemMeta.items,\n handle,\n parentPath: FormPathService.toArrayPath(path),\n });\n }\n\n if (formItemMeta.children && formItemMeta.children.length) {\n formItemMeta.children.forEach((child) => {\n this.traverse({ formItemMeta: child, handle, parentPath: path });\n });\n }\n }\n}\n","import { injectable } from 'inversify';\n\nexport interface Extension {\n key: string;\n}\n@injectable()\nexport class FormAbilityExtensionRegistry {\n protected registry = new Map<string, Extension>();\n\n register(extension: Extension): void {\n this.registry.set(extension.key, extension);\n }\n\n get<T extends Extension>(key: string): T | undefined {\n return this.registry.get(key) as T | undefined;\n }\n\n get objectMap(): Record<string, Extension> {\n return Object.fromEntries(this.registry);\n }\n\n get collection(): Extension[] {\n return Array.from(this.registry.values());\n }\n}\n","import { type FormManager } from './services/form-manager';\n\nexport const FormContribution = Symbol('FormContribution');\n\nexport interface FormContribution {\n onRegister?(formManager: FormManager): void;\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class SetterAbility implements FormItemAbility {\n static readonly type = 'setter';\n\n get type(): string {\n return SetterAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DecoratorAbility implements FormItemAbility {\n static readonly type = 'decorator';\n\n get type(): string {\n return DecoratorAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport interface VisibilityAbilityOptions {\n /**\n * 是否隐藏\n */\n hidden: string | boolean;\n /**\n * 隐藏是否要清空表单值, 默认为false\n */\n clearWhenHidden?: boolean;\n}\n\nexport class VisibilityAbility implements FormItemAbility {\n static readonly type = 'visibility';\n\n get type(): string {\n return VisibilityAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class EffectAbility implements FormItemAbility {\n static readonly type = 'effect';\n\n get type(): string {\n return EffectAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DefaultAbility implements FormItemAbility {\n static readonly type = 'default';\n\n get type(): string {\n return DefaultAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class ValidationAbility implements FormItemAbility {\n static readonly type = 'validation';\n\n get type(): string {\n return ValidationAbility.type;\n }\n}\n","import { injectable } from 'inversify';\n\nimport { NodeContribution, NodeManager, PLUGIN_KEY } from '../node';\nimport { formPluginRender } from './form-render';\n\n@injectable()\nexport class FormNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.FORM, formPluginRender);\n }\n}\n","import React, { useEffect } from 'react';\n\nimport { useRefresh } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeContext } from '../node';\nimport { FormModel } from './models';\nimport { FlowNodeFormData } from './flow-node-form-data';\n\ninterface FormRenderProps {\n node: FlowNodeEntity;\n playgroundContext?: PlaygroundContext;\n}\n\nfunction getFormModelFromNode(node: FlowNodeEntity) {\n return node.getData(FlowNodeFormData)?.getFormModel<FormModel>();\n}\n\nexport function FormRender({ node }: FormRenderProps): any {\n const refresh = useRefresh();\n\n const formModel = getFormModelFromNode(node);\n\n useEffect(() => {\n const disposable = formModel?.onInitialized(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, [formModel]);\n\n return formModel?.initialized ? formModel.render() : null;\n}\n\nexport const formPluginRender = (props: NodeContext) => <FormRender {...props} />;\n","import { Disposable, Emitter } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { EntityData } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../error';\nimport { FormMetaOrFormMetaGenerator } from './types';\nimport { FormModel, type FormModelFactory } from './models';\n\ninterface Options {\n formModelFactory: FormModelFactory;\n}\n\nexport interface DetailChangeEvent {\n path: string;\n oldValue: any;\n value: any;\n initialized: boolean;\n}\n\nexport interface OnFormValuesChangePayload {\n values: any;\n prevValues: any;\n name: string;\n}\n\nexport class FlowNodeFormData extends EntityData {\n static type = 'FlowNodeEntityFormData';\n\n readonly formModel: FormModel;\n\n protected flowNodeEntity: FlowNodeEntity;\n\n /**\n * @deprecated rehaje 版表单form Values change 事件\n * @protected\n */\n protected onDetailChangeEmitter = new Emitter<DetailChangeEvent>();\n\n /**\n * @deprecated 该方法为旧版引擎(rehaje)表单数据变更事件, 新版节点引擎请使用\n * this.getFormModel<FormModelV2>().onFormValuesChange.\n * @protected\n */\n readonly onDetailChange = this.onDetailChangeEmitter.event;\n\n constructor(entity: FlowNodeEntity, opts: Options) {\n super(entity);\n\n this.flowNodeEntity = entity;\n this.formModel = opts.formModelFactory(entity);\n\n this.toDispose.push(this.onDetailChangeEmitter);\n\n this.toDispose.push(\n Disposable.create(() => {\n this.formModel.dispose();\n })\n );\n }\n\n getFormModel<TFormModel>(): TFormModel {\n // @ts-ignore\n return this.formModel as TFormModel;\n }\n\n getDefaultData(): any {\n return {};\n }\n\n createForm(formMetaOrFormMetaGenerator: any, initialValue?: any): void {\n const errorData = this.flowNodeEntity.getData<FlowNodeErrorData>(FlowNodeErrorData);\n\n errorData.setError(null);\n try {\n this.formModel.init(formMetaOrFormMetaGenerator, initialValue);\n } catch (e) {\n errorData.setError(e as Error);\n }\n }\n\n recreateForm(formMetaOrFormMetaGenerator: FormMetaOrFormMetaGenerator, initialValue?: any): void {\n this.createForm(formMetaOrFormMetaGenerator, initialValue);\n }\n\n toJSON(): any {\n return this.formModel.toJSON();\n }\n\n dispose(): void {\n super.dispose();\n }\n\n /**\n * @deprecated rehaje 版表单form Values change 事件触发函数\n * @protected\n */\n fireDetaiChange(detailChangeEvent: DetailChangeEvent) {\n this.onDetailChangeEmitter.fire(detailChangeEvent);\n }\n}\n","export interface IFormItem<T = any> {\n value: T;\n}\n\nexport enum FormItemEventName {\n onFormValueChange = 'onFormValueChange',\n onFormItemInit = 'onFormItemInit',\n}\n\nexport type FormModelValid = boolean | null;\n\nexport type FeedbackStatus = 'error' | 'warning' | 'pending';\nexport type FeedbackText = string;\n\nexport interface FormItemFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n}\n\nexport interface FormFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n path: string;\n}\n\nexport interface FormItemDomRef {\n current: HTMLElement | null;\n}\n","import { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\nimport { MaybePromise } from '@flowgram.ai/utils';\n\nimport { type FormItemAbilityMeta } from './form-ability.types';\n\nexport type FormDataTypeName =\n | 'string'\n | 'number'\n | 'integer'\n | 'boolean'\n | 'object'\n | 'array'\n | 'null';\n\nexport type FormDataType =\n | string //\n | number\n | boolean\n | FormDataObject\n | DataArray\n | null;\n\nexport interface FormDataObject {\n [key: string]: FormDataType;\n}\n\nexport type DataArray = Array<FormDataType>;\n\nexport const FORM_VOID = 'form-void' as const;\n\nexport interface TreeNode<T> {\n name: string;\n children?: TreeNode<T>[];\n}\n\nexport interface IFormItemMeta extends TreeNode<IFormItemMeta> {\n /**\n * 表单项名称\n */\n name: string;\n /**\n * 数据类型\n */\n type: FormDataTypeName | typeof FORM_VOID;\n /**\n * 枚举值\n */\n enum?: FormDataType[];\n /**\n * 数组类型item的数据类型描述\n */\n items?: IFormItemMeta;\n /**\n * 表单项标题\n */\n title?: string;\n /**\n * 表单项描述\n */\n description?: string;\n /**\n * 表单项默认值\n */\n default?: FormDataType;\n /**\n * 是否必填\n */\n required?: boolean;\n /**\n * 扩展能力\n */\n abilities?: FormItemAbilityMeta[];\n\n /**\n * 子表单项\n */\n children?: IFormItemMeta[];\n}\n\nexport interface IFormMeta {\n /**\n * 表单树结构root\n */\n root: IFormItemMeta;\n /**\n * 表单全局配置\n */\n options?: IFormMetaOptions;\n}\n\nexport interface NodeFormContext {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport interface IFormMetaOptions {\n formatOnInit?: (value: any, context: NodeFormContext) => any;\n\n formatOnSubmit?: (value: any, context: NodeFormContext) => any;\n\n [key: string]: any;\n}\n\nexport interface FormMetaGeneratorParams<PlaygroundContext, FormValue = any> {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n initialValue?: FormValue;\n}\n\nexport type FormMetaGenerator<PlaygroundContext = any, FormValue = any> = (\n params: FormMetaGeneratorParams<FormValue, FormValue>,\n) => MaybePromise<IFormMeta>;\n\nexport type FormMetaOrFormMetaGenerator = FormMetaGenerator | IFormMeta;\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeFormData } from '../flow-node-form-data';\nimport { FormModel } from '..';\n\nexport function isNodeFormReady(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).getFormModel<FormModel>().initialized;\n}\n\nexport function getFormModel(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).formModel;\n}\n","import { NodeContainerModule } from '../node/node-container-module';\nimport { FormCoreContainerModule } from '../form';\nimport { ErrorContainerModule } from '../error';\n\nexport function createNodeContainerModules() {\n return [NodeContainerModule, FormCoreContainerModule, ErrorContainerModule];\n}\n","import React, { memo, useCallback, useEffect } from 'react';\n\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { NodeEngineReactContext } from '../node-react/context/node-engine-react-context';\nimport { useNodeEngineContext } from '../node-react';\nimport { NodeManager } from '../node/node-manager';\nimport { PLUGIN_KEY } from '../node/core-plugins';\nimport { MATERIAL_KEY, type NodeRenderProps } from '../node';\nimport { getFormModel, isNodeFormReady } from '../form';\nimport { FlowNodeErrorData } from '../error/flow-node-error-data';\nimport { getNodeError } from '../error';\n\nconst PureNodeRender = ({ node }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const formModel = getFormModel(node);\n const isNodeError = !!getNodeError(node);\n const isFormReady = isNodeFormReady(node);\n const playgroundContext = useService<PlaygroundContext>(PlaygroundContext);\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeFormRender = nodeManager.getPluginRender(PLUGIN_KEY.FORM);\n const nodeErrorRender = nodeManager.getPluginRender(PLUGIN_KEY.ERROR);\n const nodePlaceholderRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER);\n\n const nodeEngineContext = useNodeEngineContext();\n\n useEffect(() => {\n const errorDisposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n const formDisposable = formModel.onInitialized(() => {\n refresh();\n });\n return () => {\n errorDisposable.dispose();\n formDisposable.dispose();\n };\n }, []);\n\n const renderContent = useCallback(() => {\n if (isNodeError) {\n return nodeErrorRender!({ node, playgroundContext });\n }\n if (!formModel.formMeta) {\n return null;\n }\n if (isFormReady) {\n return nodeFormRender!({ node, playgroundContext });\n }\n return nodePlaceholderRender?.({ node, playgroundContext }) || null;\n }, [\n isNodeError,\n isFormReady,\n nodeErrorRender,\n nodeFormRender,\n nodePlaceholderRender,\n node,\n playgroundContext,\n ]);\n\n return (\n <NodeEngineReactContext.Provider value={nodeEngineContext.json}>\n {nodeManager.nodeRenderHoc(renderContent)()}\n </NodeEngineReactContext.Provider>\n );\n};\n\nexport const NodeRender = memo(PureNodeRender);\n","import React from 'react';\n\nimport { INodeEngineContext, NodeEngineContext } from '../../node';\n\nexport const NodeEngineReactContext = React.createContext<INodeEngineContext>(\n NodeEngineContext.DEFAULT_JSON,\n);\n","import { useEffect } from 'react';\n\nimport { useService, useRefresh } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\n\nexport function useNodeEngineContext(): NodeEngineContext {\n const refresh = useRefresh();\n const nodeEngineContext = useService<NodeEngineContext>(NodeEngineContext);\n\n useEffect(() => {\n const disposable = nodeEngineContext.onChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeEngineContext;\n}\n","import { useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { useEntityFromContext, useRefresh } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData, FormModel, IFormItem } from '../../form';\n\nexport function useFormItem(path: string): IFormItem | undefined {\n const refresh = useRefresh();\n const node = useEntityFromContext<FlowNodeEntity>();\n const formData = node.getData<FlowNodeFormData>(FlowNodeFormData);\n const formItem = formData.getFormModel<FormModel>().getFormItemByPath(path);\n\n useEffect(() => {\n const disposable = formData.onDataChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return formItem;\n}\n","import { MATERIAL_KEY } from '../node/core-materials';\nimport { NodeManager, NodePlaceholderRender, Render } from '../node';\n\nexport function registerNodeErrorRender(nodeManager: NodeManager, render: Render): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER, render);\n}\n\nexport function registerNodePlaceholderRender(\n nodeManager: NodeManager,\n render: NodePlaceholderRender,\n): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER, render);\n}\n","import { EntityDataRegistry } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData } from '../form';\nimport { FlowNodeErrorData } from '../error';\n\nexport function createNodeEntityDatas(): EntityDataRegistry[] {\n return [FlowNodeFormData, FlowNodeErrorData];\n}\n"],"mappings":"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","names":["import_inversify","MaterialRenderKey","import_inversify","import_inversify","import_inversify","import_utils","import_inversify","import_react","import_core","React","React","import_inversify","import_utils","import_inversify","import_core","import_inversify","import_lodash","import_inversify","import_utils","import_core","import_inversify","import_utils","import_utils","import_inversify","import_inversify","import_react","import_utils","import_utils","import_core","React","FormItemEventName","import_react","import_core","import_react","React","import_react","import_core","import_react","import_core","React"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/node/node-contribution.ts","../src/node/node-container-module.ts","../src/node/node-manager.ts","../src/node/node-engine-context.ts","../src/node/node-engine.ts","../src/node/core-plugins.ts","../src/node/core-materials.ts","../src/error/flow-node-error-data.ts","../src/error/error-container-module.ts","../src/error/error-node-contribution.ts","../src/error/renders/error-render.tsx","../src/error/renders/default-error-render.tsx","../src/error/client.ts","../src/form/form-core-container-module.ts","../src/form/services/form-context-maker.ts","../src/form/services/form-path-service.ts","../src/form/services/form-manager.ts","../src/form/models/form-model.ts","../src/form/models/form-item.ts","../src/form/models/form-meta.ts","../src/form/models/form-ability-extension-registry.ts","../src/form/form-contribution.ts","../src/form/abilities/setter-ability/setter-ability.ts","../src/form/abilities/decorator-ability/decorator-ability.ts","../src/form/abilities/visibility-ability/visibility-ability.ts","../src/form/abilities/effect-ability/effect-ability.ts","../src/form/abilities/default-ability/default-ability.ts","../src/form/abilities/validation-ability/validation-ability.ts","../src/form/form-node-contribution.ts","../src/form/form-render.tsx","../src/form/flow-node-form-data.ts","../src/form/types/form-model.types.ts","../src/form/types/form-meta.types.ts","../src/form/client/index.ts","../src/client/create-node-container-modules.ts","../src/client/node-render.tsx","../src/node-react/context/node-engine-react-context.ts","../src/node-react/hooks/use-node-engine-context.ts","../src/node-react/hooks/use-form-Item.ts","../src/client/node-material-client.ts","../src/client/create-node-entity-datas.ts"],"sourcesContent":["export * from './node';\nexport * from './error';\nexport * from './form';\nexport * from './client';\nexport * from './node-react';\n","import { type NodeManager } from './node-manager';\n\nexport const NodeContribution = Symbol('NodeContribution');\n\nexport interface NodeContribution {\n onRegister?(nodeManager: NodeManager): void;\n}\n","import { ContainerModule } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\nimport { NodeEngine } from './node-engine';\n\nexport const NodeContainerModule = new ContainerModule((bind, unbind, isBound, rebind) => {\n bind(NodeEngine).toSelf().inSingletonScope();\n bind(NodeManager).toSelf().inSingletonScope();\n bind(NodeEngineContext).toSelf().inSingletonScope();\n});\n","import { flow } from 'lodash';\nimport { injectable, multiInject, optional, postConstruct } from 'inversify';\n\nimport { NodeErrorRenderProps } from '../error';\nimport { NodePluginRender, NodeRenderHoc, Render } from './types';\nimport { NodeContribution } from './node-contribution';\n\nexport enum MaterialRenderKey {\n CustomNodeError = 'Material_CustomNodeError',\n}\n\n@injectable()\nexport class NodeManager {\n readonly materialRenderRegistry: Map<string, Render> = new Map();\n\n readonly pluginRenderRegistry: Map<string, Render> = new Map();\n\n readonly nodeRenderHocs: NodeRenderHoc[] = [];\n\n @multiInject(NodeContribution) @optional() protected nodeContributions: NodeContribution[] = [];\n\n registerMaterialRender(key: string, render: Render) {\n this.materialRenderRegistry.set(key, render);\n }\n\n getMaterialRender(key: string): Render | undefined {\n return this.materialRenderRegistry.get(key);\n }\n\n registerPluginRender(key: string, render: NodePluginRender): void {\n this.pluginRenderRegistry.set(key, render);\n }\n\n getPluginRender(key: string): NodePluginRender | undefined {\n return this.pluginRenderRegistry.get(key);\n }\n\n registerNodeErrorRender(render: Render<NodeErrorRenderProps>) {\n this.registerMaterialRender(MaterialRenderKey.CustomNodeError, render);\n }\n\n get nodeRenderHoc() {\n return flow(this.nodeRenderHocs);\n }\n\n registerNodeRenderHoc(hoc: NodeRenderHoc) {\n this.nodeRenderHocs.push(hoc);\n }\n\n get nodeErrorRender() {\n return this.materialRenderRegistry.get(MaterialRenderKey.CustomNodeError);\n }\n\n @postConstruct()\n protected init(): void {\n this.nodeContributions.forEach(contrib => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\n\nexport interface INodeEngineContext {\n readonly: boolean;\n}\n\n/**\n * NodeEngineContext 在 Node Engine 中为全局单例, 它的作用是让Node之间共享数据。\n * context 分为内置context(如 readonly) 和 自定义context(业务可以按需注入)\n */\n@injectable()\nexport class NodeEngineContext {\n static DEFAULT_READONLY = false;\n\n static DEFAULT_JSON = { readonly: NodeEngineContext.DEFAULT_READONLY };\n\n readonly onChangeEmitter = new Emitter<NodeEngineContext>();\n\n readonly onChange = this.onChangeEmitter.event;\n\n private _readonly: boolean = NodeEngineContext.DEFAULT_READONLY;\n\n private _json: INodeEngineContext = NodeEngineContext.DEFAULT_JSON;\n\n get json(): INodeEngineContext {\n return this._json;\n }\n\n get readonly(): boolean {\n return this._readonly;\n }\n\n set readonly(value: boolean) {\n this._readonly = value;\n this.fireChange();\n }\n\n private fireChange(): void {\n this.updateJSON();\n this.onChangeEmitter.fire(this);\n }\n\n private updateJSON(): void {\n this._json = {\n readonly: this._readonly,\n };\n }\n}\n","import { injectable, inject } from 'inversify';\n\nimport { NodeManager } from './node-manager';\nimport { NodeEngineContext } from './node-engine-context';\n\n@injectable()\nexport class NodeEngine {\n @inject(NodeManager) nodeManager: NodeManager;\n\n @inject(NodeEngineContext) context: NodeEngineContext;\n}\n","export const PLUGIN_KEY = {\n FORM: 'Plugin_Form',\n ERROR: 'Plugin_Error',\n};\n","export const MATERIAL_KEY = {\n NODE_ERROR_RENDER: 'node_error_render',\n NODE_PLACEHOLDER_RENDER: 'node_placeholder_render',\n};\n","import { EntityData } from '@flowgram.ai/core';\n\nexport interface ErrorData {\n error: Error | null;\n}\n\nexport class FlowNodeErrorData extends EntityData {\n static type = 'FlowNodeErrorData';\n\n getDefaultData(): ErrorData {\n return { error: null };\n }\n\n setError(e: ErrorData['error']) {\n this.update({ error: e });\n }\n\n getError(): Error {\n return this.data.error;\n }\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { NodeContribution } from '../node';\nimport { ErrorNodeContribution } from './error-node-contribution';\n\nexport const ErrorContainerModule = new ContainerModule(bind => {\n bindContributions(bind, ErrorNodeContribution, [NodeContribution]);\n});\n","import { injectable } from 'inversify';\n\nimport { NodeContribution } from '../node';\nimport { NodeManager, PLUGIN_KEY } from '../node';\nimport { errorPluginRender } from './renders';\n\n@injectable()\nexport class ErrorNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.ERROR, errorPluginRender);\n }\n}\n","import React, { useCallback, useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../flow-node-error-data';\nimport { MATERIAL_KEY, NodeManager, NodePluginRender } from '../../node';\nimport { defaultErrorRender } from './default-error-render';\n\ninterface NodeRenderProps {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport const ErrorRender = ({ node, playgroundContext }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const nodeError = nodeErrorData.getError();\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeErrorRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER);\n\n const renderError = useCallback(() => {\n if (!nodeErrorRender) {\n return defaultErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }\n return nodeErrorRender({\n error: nodeError,\n context: { node, playgroundContext },\n });\n }, [nodeError, node, playgroundContext]);\n\n useEffect(() => {\n const disposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeError ? renderError() : null;\n};\n\nexport const errorPluginRender: NodePluginRender = (props) => <ErrorRender {...props} />;\n","import React from 'react';\n\nimport { NodeErrorRenderProps } from '../types';\n\nconst ERROR_STYLE = {\n color: '#f54a45',\n};\n\nexport const defaultErrorRender = ({ error }: NodeErrorRenderProps) => (\n <div style={ERROR_STYLE}>{error.message}</div>\n);\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeErrorData } from './flow-node-error-data';\n\nexport function getNodeError(node: FlowNodeEntity) {\n return node.getData<FlowNodeErrorData>(FlowNodeErrorData).getError();\n}\n","import { ContainerModule } from 'inversify';\nimport { bindContributions } from '@flowgram.ai/utils';\n\nimport { FormContextMaker } from './services/form-context-maker';\nimport { NodeContribution } from '../node';\nimport { FormManager, FormPathService } from './services';\nimport { FormNodeContribution } from './form-node-contribution';\n\nexport const FormCoreContainerModule = new ContainerModule((bind) => {\n bind(FormManager).toSelf().inSingletonScope();\n bind(FormPathService).toSelf().inSingletonScope();\n bind(FormContextMaker).toSelf().inSingletonScope();\n bindContributions(bind, FormNodeContribution, [NodeContribution]);\n});\n","import { inject, injectable } from 'inversify';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\nimport { FormItem, FormItemMaterialContext } from '..';\n\n@injectable()\nexport class FormContextMaker {\n @inject(NodeEngineContext) readonly nodeEngineContext: NodeEngineContext;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n makeFormItemMaterialContext(\n formItem: FormItem,\n options?: { getIndex: () => number | undefined }\n ): FormItemMaterialContext {\n return {\n meta: formItem.meta,\n path: formItem.path,\n readonly: this.nodeEngineContext.readonly,\n getFormItemValueByPath: formItem.formModel.getFormItemValueByPath.bind(formItem.formModel),\n onFormValidate: formItem.formModel.onValidate.bind(formItem.formModel),\n form: formItem.formModel,\n node: formItem.formModel.flowNodeEntity,\n playgroundContext: this.playgroundContext,\n index: options?.getIndex(),\n };\n }\n}\n","import { injectable } from 'inversify';\n\n@injectable()\nexport class FormPathService {\n static readonly ROOT = '/';\n\n static readonly DIVIDER = '/';\n\n static readonly RELATIVE_PARENT = '..';\n\n static readonly RELATIVE_CURRENT = '.';\n\n static readonly ARRAY = '[]';\n\n static normalize(path: string) {\n if (path === FormPathService.ROOT) {\n return path;\n }\n // 去掉末尾的斜杠\n if (path.endsWith(FormPathService.DIVIDER)) {\n path = path.slice(0, -1);\n }\n return path;\n }\n\n static join(paths: string[]): string {\n if (paths[1].startsWith(FormPathService.ROOT)) {\n throw new Error(\n `FormPathService Error: join failed, invalid paths[1], paths[1]= ${paths[1]}`,\n );\n }\n if (paths[0].endsWith(FormPathService.DIVIDER)) {\n return `${paths[0]}${paths[1]}`;\n }\n return paths.join(FormPathService.DIVIDER);\n }\n\n static toArrayPath(path: string): string {\n return FormPathService.join([path, FormPathService.ARRAY]);\n }\n\n static parseArrayItemPath(path: string) {\n const names = path.split('/');\n\n let i = 0;\n while (i < names.length) {\n const itemIndex = parseInt(names[i]);\n\n if (!isNaN(itemIndex)) {\n const arrayPath = FormPathService.toArrayPath(\n names.slice(0, i).join(FormPathService.DIVIDER),\n );\n const restPath = names.slice(i + 1).join(FormPathService.DIVIDER);\n const itemMetaPath = FormPathService.join([arrayPath, restPath]);\n return { itemIndex, arrayPath, itemMetaPath };\n }\n i = i + 1;\n }\n return null;\n }\n\n simplify(path: string) {\n const segments = path.split(FormPathService.DIVIDER);\n const resSegments: string[] = [];\n\n for (let i = 0; i < segments.length; i++) {\n if (!segments[i]) {\n throw new Error('FormPathService: join failed');\n }\n\n if (segments[i] === FormPathService.RELATIVE_CURRENT) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (segments[i] === FormPathService.RELATIVE_PARENT) {\n resSegments.pop();\n }\n resSegments.push(segments[i]);\n }\n return resSegments.join(FormPathService.DIVIDER);\n }\n}\n","import { mapValues } from 'lodash';\nimport { inject, injectable, multiInject, optional, postConstruct } from 'inversify';\nimport { Emitter } from '@flowgram.ai/utils';\nimport { injectPlaygroundContext, PlaygroundContext } from '@flowgram.ai/core';\n\nimport { AbilityClass, FormItemAbility } from '../models/form-item-ability';\nimport { FormAbilityExtensionRegistry, FormModel } from '../models';\nimport { FormContribution } from '../form-contribution';\nimport {\n DecoratorAbility,\n DecoratorExtension,\n SetterAbility,\n SetterExtension,\n SetterHoc,\n} from '../abilities';\nimport { FormContextMaker, FormPathService } from './index';\n\n@injectable()\nexport class FormManager {\n readonly abilityRegistry: Map<string, FormItemAbility> = new Map();\n\n readonly setterHocs: SetterHoc[] = [];\n\n readonly extensionRegistryMap: Map<string, FormAbilityExtensionRegistry> = new Map();\n\n @inject(FormPathService) readonly pathManager: FormPathService;\n\n @inject(FormContextMaker) readonly formContextMaker: FormContextMaker;\n\n @injectPlaygroundContext() readonly playgroundContext: PlaygroundContext;\n\n @multiInject(FormContribution) @optional() protected formContributions: FormContribution[] = [];\n\n private readonly onFormModelWillInitEmitter = new Emitter<{\n model: FormModel;\n data: any;\n }>();\n\n readonly onFormModelWillInit = this.onFormModelWillInitEmitter.event;\n\n get components(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(SetterAbility.type)?.objectMap || {},\n (setter: SetterExtension) => setter.component\n );\n }\n\n get decorators(): Record<string, any> {\n return mapValues(\n this.extensionRegistryMap.get(DecoratorAbility.type)?.objectMap || {},\n (decorator: DecoratorExtension) => decorator.component\n );\n }\n\n registerAbilityExtension(type: string, extension: any): void {\n if (!this.extensionRegistryMap.get(type)) {\n this.extensionRegistryMap.set(type, new FormAbilityExtensionRegistry());\n }\n const registry = this.extensionRegistryMap.get(type);\n if (!registry) {\n return;\n }\n registry.register(extension);\n }\n\n getAbilityExtension(abilityType: string, extensionKey: string): any {\n return this.extensionRegistryMap.get(abilityType)?.get(extensionKey);\n }\n\n registerAbility(Ability: AbilityClass): void {\n const ability = new Ability();\n this.abilityRegistry.set(ability.type, ability);\n }\n\n registerAbilities(Abilities: AbilityClass[]): void {\n Abilities.forEach(this.registerAbility.bind(this));\n }\n\n getAbility<ExtendAbility>(type: string): (FormItemAbility & ExtendAbility) | undefined {\n return this.abilityRegistry.get(type) as FormItemAbility & ExtendAbility;\n }\n\n /**\n * @deprecated\n * Setter Hoc and setter are no longer supported in NodeEngineV2\n * @param hoc\n */\n registerSetterHoc(hoc: SetterHoc): void {\n this.setterHocs.push(hoc);\n }\n\n fireFormModelWillInit(model: FormModel, data: any) {\n this.onFormModelWillInitEmitter.fire({\n model,\n data,\n });\n }\n\n dispose() {\n this.onFormModelWillInitEmitter.dispose();\n }\n\n @postConstruct()\n protected init(): void {\n this.formContributions.forEach((contrib) => contrib.onRegister?.(this));\n }\n}\n","import { injectable } from 'inversify';\nimport { DisposableCollection, Event, MaybePromise } from '@flowgram.ai/utils';\nimport { type FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FormFeedback, FormModelValid, IFormItem, IFormMeta } from '../types';\nimport { FormManager } from '../services/form-manager';\nimport { type FormItem } from '.';\n\nexport type FormModelFactory = (entity: FlowNodeEntity) => FormModel;\nexport const FormModelFactory = Symbol('FormModelFactory');\nexport const FormModelEntity = Symbol('FormModelEntity');\n\n@injectable()\nexport abstract class FormModel {\n readonly onValidate: Event<FormModel>;\n\n readonly onValidChange: Event<FormModelValid>;\n\n readonly onFeedbacksChange: Event<FormFeedback[]>;\n\n readonly onInitialized: Event<FormModel>;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n /**\n * @deprecated\n * use `formModel.node` instead in FormModelV2\n */\n abstract get flowNodeEntity(): FlowNodeEntity;\n\n /**\n * @deprecated\n */\n abstract get formManager(): FormManager;\n\n abstract get formMeta(): IFormMeta;\n\n abstract get initialized(): boolean;\n\n abstract get valid(): FormModelValid;\n\n abstract updateFormValues(value: any): void;\n\n /**\n * @deprecated\n * use `formModel.getFieldIn` instead in FormModelV2 to get the model of a form field\n * do not use this in FormModelV2 since it only return an empty Map.\n */\n abstract get formItemPathMap(): Map<string, IFormItem>;\n\n /**\n * @deprecated\n */\n abstract clearValid(): void;\n\n abstract validate(): Promise<boolean>;\n\n abstract validateWithFeedbacks(): Promise<FormFeedback[]>;\n\n abstract init(formMetaOrFormMetaGenerator: any, initialValue?: any): MaybePromise<void>;\n\n abstract toJSON(): any;\n\n /**\n * @deprecated\n * use `formModel.getField` instead in FormModelV2\n */\n abstract getFormItemByPath(path: string): FormItem | undefined;\n\n /**\n * @deprecated\n * use `formModel.getFieldValue` instead in FormModelV2 to get the model of a form field by path\n */\n abstract getFormItemValueByPath<T = any>(path: string): any | undefined;\n\n abstract render(): any;\n\n abstract dispose(): void;\n}\n","import { DisposableCollection, Emitter } from '@flowgram.ai/utils';\n\nimport { FormItemDomRef, type IFormItemMeta } from '..';\nimport { type FormModel } from '.';\n\nexport abstract class FormItem {\n readonly meta: IFormItemMeta;\n\n readonly path: string;\n\n readonly formModel: FormModel;\n\n readonly onInitEventEmitter = new Emitter<FormItem>();\n\n readonly onInit = this.onInitEventEmitter.event;\n\n protected toDispose: DisposableCollection = new DisposableCollection();\n\n readonly onDispose = this.toDispose.onDispose;\n\n // todo(heyuan): 将dom 相关逻辑拆到form item插件里\n private _domRef: FormItemDomRef;\n\n protected constructor(meta: IFormItemMeta, path: string, formModel: FormModel) {\n this.meta = meta;\n this.path = path;\n this.formModel = formModel;\n this.toDispose.push(this.onInitEventEmitter);\n }\n\n abstract get value(): any;\n\n abstract set value(value: any);\n\n abstract validate(): void;\n\n set domRef(domRef: FormItemDomRef) {\n this._domRef = domRef;\n }\n\n get domRef() {\n return this._domRef;\n }\n\n dispose(): void {\n this.toDispose.dispose();\n }\n}\n","import { type IFormItemMeta, type IFormMeta, type IFormMetaOptions } from '../types';\nimport { FormPathService } from '../services';\n\nexport interface FormMetaTraverseParams {\n formItemMeta: IFormItemMeta;\n parentPath?: string;\n handle: (params: { formItemMeta: IFormItemMeta; path: string }) => any;\n}\n\nexport class FormMeta implements IFormMeta {\n constructor(root: IFormItemMeta, options: IFormMetaOptions) {\n this._root = root;\n this._options = options;\n }\n\n protected _root: IFormItemMeta;\n\n get root(): IFormItemMeta {\n return this._root;\n }\n\n protected _options: IFormMetaOptions;\n\n get options(): IFormMetaOptions {\n return this._options;\n }\n\n static traverse({ formItemMeta, parentPath = '', handle }: FormMetaTraverseParams): void {\n if (!formItemMeta) {\n return;\n }\n\n const isRoot = !parentPath;\n\n const path = isRoot\n ? FormPathService.ROOT\n : formItemMeta.name\n ? FormPathService.join([parentPath, formItemMeta.name])\n : parentPath;\n\n handle({ formItemMeta, path });\n\n if (formItemMeta.items) {\n this.traverse({\n formItemMeta: formItemMeta.items,\n handle,\n parentPath: FormPathService.toArrayPath(path),\n });\n }\n\n if (formItemMeta.children && formItemMeta.children.length) {\n formItemMeta.children.forEach((child) => {\n this.traverse({ formItemMeta: child, handle, parentPath: path });\n });\n }\n }\n}\n","import { injectable } from 'inversify';\n\nexport interface Extension {\n key: string;\n}\n@injectable()\nexport class FormAbilityExtensionRegistry {\n protected registry = new Map<string, Extension>();\n\n register(extension: Extension): void {\n this.registry.set(extension.key, extension);\n }\n\n get<T extends Extension>(key: string): T | undefined {\n return this.registry.get(key) as T | undefined;\n }\n\n get objectMap(): Record<string, Extension> {\n return Object.fromEntries(this.registry);\n }\n\n get collection(): Extension[] {\n return Array.from(this.registry.values());\n }\n}\n","import { type FormManager } from './services/form-manager';\n\nexport const FormContribution = Symbol('FormContribution');\n\nexport interface FormContribution {\n onRegister?(formManager: FormManager): void;\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class SetterAbility implements FormItemAbility {\n static readonly type = 'setter';\n\n get type(): string {\n return SetterAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DecoratorAbility implements FormItemAbility {\n static readonly type = 'decorator';\n\n get type(): string {\n return DecoratorAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport interface VisibilityAbilityOptions {\n /**\n * 是否隐藏\n */\n hidden: string | boolean;\n /**\n * 隐藏是否要清空表单值, 默认为false\n */\n clearWhenHidden?: boolean;\n}\n\nexport class VisibilityAbility implements FormItemAbility {\n static readonly type = 'visibility';\n\n get type(): string {\n return VisibilityAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class EffectAbility implements FormItemAbility {\n static readonly type = 'effect';\n\n get type(): string {\n return EffectAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class DefaultAbility implements FormItemAbility {\n static readonly type = 'default';\n\n get type(): string {\n return DefaultAbility.type;\n }\n}\n","import { FormItemAbility } from '../../models/form-item-ability';\n\nexport class ValidationAbility implements FormItemAbility {\n static readonly type = 'validation';\n\n get type(): string {\n return ValidationAbility.type;\n }\n}\n","import { injectable } from 'inversify';\n\nimport { NodeContribution, NodeManager, PLUGIN_KEY } from '../node';\nimport { formPluginRender } from './form-render';\n\n@injectable()\nexport class FormNodeContribution implements NodeContribution {\n onRegister(nodeManager: NodeManager) {\n nodeManager.registerPluginRender(PLUGIN_KEY.FORM, formPluginRender);\n }\n}\n","import React, { useEffect } from 'react';\n\nimport { useRefresh } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\n\nimport { NodeContext } from '../node';\nimport { FormModel } from './models';\nimport { FlowNodeFormData } from './flow-node-form-data';\n\ninterface FormRenderProps {\n node: FlowNodeEntity;\n playgroundContext?: PlaygroundContext;\n}\n\nfunction getFormModelFromNode(node: FlowNodeEntity) {\n return node.getData(FlowNodeFormData)?.getFormModel<FormModel>();\n}\n\nexport function FormRender({ node }: FormRenderProps): any {\n const refresh = useRefresh();\n\n const formModel = getFormModelFromNode(node);\n\n useEffect(() => {\n const disposable = formModel?.onInitialized(() => {\n refresh();\n });\n return () => {\n disposable.dispose();\n };\n }, [formModel]);\n\n return formModel?.initialized ? formModel.render() : null;\n}\n\nexport const formPluginRender = (props: NodeContext) => <FormRender {...props} />;\n","import { Disposable, Emitter } from '@flowgram.ai/utils';\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { EntityData } from '@flowgram.ai/core';\n\nimport { FlowNodeErrorData } from '../error';\nimport { FormMetaOrFormMetaGenerator } from './types';\nimport { FormModel, type FormModelFactory } from './models';\n\ninterface Options {\n formModelFactory: FormModelFactory;\n}\n\nexport interface DetailChangeEvent {\n path: string;\n oldValue: any;\n value: any;\n initialized: boolean;\n}\n\nexport interface OnFormValuesChangePayload {\n values: any;\n prevValues: any;\n name: string;\n}\n\nexport class FlowNodeFormData extends EntityData {\n static type = 'FlowNodeEntityFormData';\n\n readonly formModel: FormModel;\n\n protected flowNodeEntity: FlowNodeEntity;\n\n /**\n * @deprecated rehaje 版表单form Values change 事件\n * @protected\n */\n protected onDetailChangeEmitter = new Emitter<DetailChangeEvent>();\n\n /**\n * @deprecated 该方法为旧版引擎(rehaje)表单数据变更事件, 新版节点引擎请使用\n * this.getFormModel<FormModelV2>().onFormValuesChange.\n * @protected\n */\n readonly onDetailChange = this.onDetailChangeEmitter.event;\n\n constructor(entity: FlowNodeEntity, opts: Options) {\n super(entity);\n\n this.flowNodeEntity = entity;\n this.formModel = opts.formModelFactory(entity);\n\n this.toDispose.push(this.onDetailChangeEmitter);\n\n this.toDispose.push(\n Disposable.create(() => {\n this.formModel.dispose();\n })\n );\n }\n\n getFormModel<TFormModel>(): TFormModel {\n // @ts-ignore\n return this.formModel as TFormModel;\n }\n\n getDefaultData(): any {\n return {};\n }\n\n createForm(formMetaOrFormMetaGenerator: any, initialValue?: any): void {\n const errorData = this.flowNodeEntity.getData<FlowNodeErrorData>(FlowNodeErrorData);\n\n errorData.setError(null);\n try {\n this.formModel.init(formMetaOrFormMetaGenerator, initialValue);\n } catch (e) {\n errorData.setError(e as Error);\n }\n }\n\n updateFormValues(value: any) {\n this.formModel.updateFormValues(value);\n }\n\n recreateForm(formMetaOrFormMetaGenerator: FormMetaOrFormMetaGenerator, initialValue?: any): void {\n this.createForm(formMetaOrFormMetaGenerator, initialValue);\n }\n\n toJSON(): any {\n return this.formModel.toJSON();\n }\n\n dispose(): void {\n super.dispose();\n }\n\n /**\n * @deprecated rehaje 版表单form Values change 事件触发函数\n * @protected\n */\n fireDetaiChange(detailChangeEvent: DetailChangeEvent) {\n this.onDetailChangeEmitter.fire(detailChangeEvent);\n }\n}\n","export interface IFormItem<T = any> {\n value: T;\n}\n\nexport enum FormItemEventName {\n onFormValueChange = 'onFormValueChange',\n onFormItemInit = 'onFormItemInit',\n}\n\nexport type FormModelValid = boolean | null;\n\nexport type FeedbackStatus = 'error' | 'warning' | 'pending';\nexport type FeedbackText = string;\n\nexport interface FormItemFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n}\n\nexport interface FormFeedback {\n feedbackStatus?: FeedbackStatus;\n feedbackText?: FeedbackText;\n path: string;\n}\n\nexport interface FormItemDomRef {\n current: HTMLElement | null;\n}\n","import { FlowNodeEntity } from '@flowgram.ai/document';\nimport { PlaygroundContext } from '@flowgram.ai/core';\nimport { MaybePromise } from '@flowgram.ai/utils';\n\nimport { type FormItemAbilityMeta } from './form-ability.types';\n\nexport type FormDataTypeName =\n | 'string'\n | 'number'\n | 'integer'\n | 'boolean'\n | 'object'\n | 'array'\n | 'null';\n\nexport type FormDataType =\n | string //\n | number\n | boolean\n | FormDataObject\n | DataArray\n | null;\n\nexport interface FormDataObject {\n [key: string]: FormDataType;\n}\n\nexport type DataArray = Array<FormDataType>;\n\nexport const FORM_VOID = 'form-void' as const;\n\nexport interface TreeNode<T> {\n name: string;\n children?: TreeNode<T>[];\n}\n\nexport interface IFormItemMeta extends TreeNode<IFormItemMeta> {\n /**\n * 表单项名称\n */\n name: string;\n /**\n * 数据类型\n */\n type: FormDataTypeName | typeof FORM_VOID;\n /**\n * 枚举值\n */\n enum?: FormDataType[];\n /**\n * 数组类型item的数据类型描述\n */\n items?: IFormItemMeta;\n /**\n * 表单项标题\n */\n title?: string;\n /**\n * 表单项描述\n */\n description?: string;\n /**\n * 表单项默认值\n */\n default?: FormDataType;\n /**\n * 是否必填\n */\n required?: boolean;\n /**\n * 扩展能力\n */\n abilities?: FormItemAbilityMeta[];\n\n /**\n * 子表单项\n */\n children?: IFormItemMeta[];\n}\n\nexport interface IFormMeta {\n /**\n * 表单树结构root\n */\n root: IFormItemMeta;\n /**\n * 表单全局配置\n */\n options?: IFormMetaOptions;\n}\n\nexport interface NodeFormContext {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n}\n\nexport interface IFormMetaOptions {\n formatOnInit?: (value: any, context: NodeFormContext) => any;\n\n formatOnSubmit?: (value: any, context: NodeFormContext) => any;\n\n [key: string]: any;\n}\n\nexport interface FormMetaGeneratorParams<PlaygroundContext, FormValue = any> {\n node: FlowNodeEntity;\n playgroundContext: PlaygroundContext;\n initialValue?: FormValue;\n}\n\nexport type FormMetaGenerator<PlaygroundContext = any, FormValue = any> = (\n params: FormMetaGeneratorParams<FormValue, FormValue>,\n) => MaybePromise<IFormMeta>;\n\nexport type FormMetaOrFormMetaGenerator = FormMetaGenerator | IFormMeta;\n","import { FlowNodeEntity } from '@flowgram.ai/document';\n\nimport { FlowNodeFormData } from '../flow-node-form-data';\nimport { FormModel } from '..';\n\nexport function isNodeFormReady(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).getFormModel<FormModel>().initialized;\n}\n\nexport function getFormModel(node: FlowNodeEntity) {\n return node.getData<FlowNodeFormData>(FlowNodeFormData).formModel;\n}\n","import { NodeContainerModule } from '../node/node-container-module';\nimport { FormCoreContainerModule } from '../form';\nimport { ErrorContainerModule } from '../error';\n\nexport function createNodeContainerModules() {\n return [NodeContainerModule, FormCoreContainerModule, ErrorContainerModule];\n}\n","import React, { memo, useCallback, useEffect } from 'react';\n\nimport { PlaygroundContext, useRefresh, useService } from '@flowgram.ai/core';\n\nimport { NodeEngineReactContext } from '../node-react/context/node-engine-react-context';\nimport { useNodeEngineContext } from '../node-react';\nimport { NodeManager } from '../node/node-manager';\nimport { PLUGIN_KEY } from '../node/core-plugins';\nimport { MATERIAL_KEY, type NodeRenderProps } from '../node';\nimport { getFormModel, isNodeFormReady } from '../form';\nimport { FlowNodeErrorData } from '../error/flow-node-error-data';\nimport { getNodeError } from '../error';\n\nconst PureNodeRender = ({ node }: NodeRenderProps) => {\n const refresh = useRefresh();\n const nodeErrorData = node.getData<FlowNodeErrorData>(FlowNodeErrorData);\n const formModel = getFormModel(node);\n const isNodeError = !!getNodeError(node);\n const isFormReady = isNodeFormReady(node);\n const playgroundContext = useService<PlaygroundContext>(PlaygroundContext);\n const nodeManager = useService<NodeManager>(NodeManager);\n const nodeFormRender = nodeManager.getPluginRender(PLUGIN_KEY.FORM);\n const nodeErrorRender = nodeManager.getPluginRender(PLUGIN_KEY.ERROR);\n const nodePlaceholderRender = nodeManager.getMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER);\n\n const nodeEngineContext = useNodeEngineContext();\n\n useEffect(() => {\n const errorDisposable = nodeErrorData.onDataChange(() => {\n refresh();\n });\n const formDisposable = formModel.onInitialized(() => {\n refresh();\n });\n return () => {\n errorDisposable.dispose();\n formDisposable.dispose();\n };\n }, []);\n\n const renderContent = useCallback(() => {\n if (isNodeError) {\n return nodeErrorRender!({ node, playgroundContext });\n }\n if (!formModel.formMeta) {\n return null;\n }\n if (isFormReady) {\n return nodeFormRender!({ node, playgroundContext });\n }\n return nodePlaceholderRender?.({ node, playgroundContext }) || null;\n }, [\n isNodeError,\n isFormReady,\n nodeErrorRender,\n nodeFormRender,\n nodePlaceholderRender,\n node,\n playgroundContext,\n ]);\n\n return (\n <NodeEngineReactContext.Provider value={nodeEngineContext.json}>\n {nodeManager.nodeRenderHoc(renderContent)()}\n </NodeEngineReactContext.Provider>\n );\n};\n\nexport const NodeRender = memo(PureNodeRender);\n","import React from 'react';\n\nimport { INodeEngineContext, NodeEngineContext } from '../../node';\n\nexport const NodeEngineReactContext = React.createContext<INodeEngineContext>(\n NodeEngineContext.DEFAULT_JSON,\n);\n","import { useEffect } from 'react';\n\nimport { useService, useRefresh } from '@flowgram.ai/core';\n\nimport { NodeEngineContext } from '../../node';\n\nexport function useNodeEngineContext(): NodeEngineContext {\n const refresh = useRefresh();\n const nodeEngineContext = useService<NodeEngineContext>(NodeEngineContext);\n\n useEffect(() => {\n const disposable = nodeEngineContext.onChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return nodeEngineContext;\n}\n","import { useEffect } from 'react';\n\nimport { FlowNodeEntity } from '@flowgram.ai/document';\nimport { useEntityFromContext, useRefresh } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData, FormModel, IFormItem } from '../../form';\n\nexport function useFormItem(path: string): IFormItem | undefined {\n const refresh = useRefresh();\n const node = useEntityFromContext<FlowNodeEntity>();\n const formData = node.getData<FlowNodeFormData>(FlowNodeFormData);\n const formItem = formData.getFormModel<FormModel>().getFormItemByPath(path);\n\n useEffect(() => {\n const disposable = formData.onDataChange(() => {\n refresh();\n });\n\n return () => {\n disposable.dispose();\n };\n }, []);\n\n return formItem;\n}\n","import { MATERIAL_KEY } from '../node/core-materials';\nimport { NodeManager, NodePlaceholderRender, Render } from '../node';\n\nexport function registerNodeErrorRender(nodeManager: NodeManager, render: Render): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_ERROR_RENDER, render);\n}\n\nexport function registerNodePlaceholderRender(\n nodeManager: NodeManager,\n render: NodePlaceholderRender,\n): void {\n nodeManager.registerMaterialRender(MATERIAL_KEY.NODE_PLACEHOLDER_RENDER, render);\n}\n","import { EntityDataRegistry } from '@flowgram.ai/core';\n\nimport { FlowNodeFormData } from '../form';\nimport { FlowNodeErrorData } from '../error';\n\nexport function createNodeEntityDatas(): EntityDataRegistry[] {\n return [FlowNodeFormData, FlowNodeErrorData];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAM,mBAAmB,OAAO,kBAAkB;;;ACFzD,IAAAA,oBAAgC;;;ACAhC,oBAAqB;AACrB,uBAAiE;AAM1D,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,qBAAkB;AADR,SAAAA;AAAA,GAAA;AAKL,IAAM,cAAN,MAAkB;AAAA,EAAlB;AACL,SAAS,yBAA8C,oBAAI,IAAI;AAE/D,SAAS,uBAA4C,oBAAI,IAAI;AAE7D,SAAS,iBAAkC,CAAC;AAED,SAAU,oBAAwC,CAAC;AAAA;AAAA,EAE9F,uBAAuB,KAAa,QAAgB;AAClD,SAAK,uBAAuB,IAAI,KAAK,MAAM;AAAA,EAC7C;AAAA,EAEA,kBAAkB,KAAiC;AACjD,WAAO,KAAK,uBAAuB,IAAI,GAAG;AAAA,EAC5C;AAAA,EAEA,qBAAqB,KAAa,QAAgC;AAChE,SAAK,qBAAqB,IAAI,KAAK,MAAM;AAAA,EAC3C;AAAA,EAEA,gBAAgB,KAA2C;AACzD,WAAO,KAAK,qBAAqB,IAAI,GAAG;AAAA,EAC1C;AAAA,EAEA,wBAAwB,QAAsC;AAC5D,SAAK,uBAAuB,kDAAmC,MAAM;AAAA,EACvE;AAAA,EAEA,IAAI,gBAAgB;AAClB,eAAO,oBAAK,KAAK,cAAc;AAAA,EACjC;AAAA,EAEA,sBAAsB,KAAoB;AACxC,SAAK,eAAe,KAAK,GAAG;AAAA,EAC9B;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAO,KAAK,uBAAuB,IAAI,gDAAiC;AAAA,EAC1E;AAAA,EAGU,OAAa;AACrB,SAAK,kBAAkB,QAAQ,aAAQ;AAvD3C;AAuD8C,2BAAQ,eAAR,iCAAqB;AAAA,KAAK;AAAA,EACtE;AACF;AAtCuD;AAAA,MAApD,8BAAY,gBAAgB;AAAA,MAAG,2BAAS;AAAA,GAP9B,YAO0C;AAmC3C;AAAA,MADT,gCAAc;AAAA,GAzCJ,YA0CD;AA1CC,cAAN;AAAA,MADN,6BAAW;AAAA,GACC;;;ACZb,IAAAC,oBAA2B;AAC3B,mBAAwB;AAWjB,IAAM,oBAAN,MAAwB;AAAA,EAAxB;AAKL,SAAS,kBAAkB,IAAI,qBAA2B;AAE1D,SAAS,WAAW,KAAK,gBAAgB;AAEzC,SAAQ,YAAqB,kBAAkB;AAE/C,SAAQ,QAA4B,kBAAkB;AAAA;AAAA,EAEtD,IAAI,OAA2B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,OAAgB;AAC3B,SAAK,YAAY;AACjB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEQ,aAAmB;AACzB,SAAK,WAAW;AAChB,SAAK,gBAAgB,KAAK,IAAI;AAAA,EAChC;AAAA,EAEQ,aAAmB;AACzB,SAAK,QAAQ;AAAA,MACX,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AACF;AApCa,kBACJ,mBAAmB;AADf,kBAGJ,eAAe,EAAE,UAAU,kBAAkB,iBAAiB;AAH1D,oBAAN;AAAA,MADN,8BAAW;AAAA,GACC;;;ACZb,IAAAC,oBAAmC;AAM5B,IAAM,aAAN,MAAiB;AAIxB;AAHuB;AAAA,MAApB,0BAAO,WAAW;AAAA,GADR,WACU;AAEM;AAAA,MAA1B,0BAAO,iBAAiB;AAAA,GAHd,WAGgB;AAHhB,aAAN;AAAA,MADN,8BAAW;AAAA,GACC;;;AHAN,IAAM,sBAAsB,IAAI,kCAAgB,CAAC,MAAM,QAAQ,SAAS,WAAW;AACxF,OAAK,UAAU,EAAE,OAAO,EAAE,iBAAiB;AAC3C,OAAK,WAAW,EAAE,OAAO,EAAE,iBAAiB;AAC5C,OAAK,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;AACpD,CAAC;;;AIVM,IAAM,aAAa;AAAA,EACxB,MAAM;AAAA,EACN,OAAO;AACT;;;ACHO,IAAM,eAAe;AAAA,EAC1B,mBAAmB;AAAA,EACnB,yBAAyB;AAC3B;;;ACHA,kBAA2B;AAMpB,IAAM,oBAAN,cAAgC,uBAAW;AAAA,EAGhD,iBAA4B;AAC1B,WAAO,EAAE,OAAO,KAAK;AAAA,EACvB;AAAA,EAEA,SAAS,GAAuB;AAC9B,SAAK,OAAO,EAAE,OAAO,EAAE,CAAC;AAAA,EAC1B;AAAA,EAEA,WAAkB;AAChB,WAAO,KAAK,KAAK;AAAA,EACnB;AACF;AAda,kBACJ,OAAO;;;ACPhB,IAAAC,oBAAgC;AAChC,IAAAC,gBAAkC;;;ACDlC,IAAAC,oBAA2B;;;ACA3B,IAAAC,gBAA8C;AAG9C,IAAAC,eAA0D;;;ACH1D,mBAAkB;AAIlB,IAAM,cAAc;AAAA,EAClB,OAAO;AACT;AAEO,IAAM,qBAAqB,CAAC,EAAE,MAAM,MACzC,6BAAAC,QAAA,cAAC,SAAI,OAAO,eAAc,MAAM,OAAQ;;;ADKnC,IAAM,cAAc,CAAC,EAAE,MAAM,kBAAkB,MAAuB;AAC3E,QAAM,cAAU,yBAAW;AAC3B,QAAM,gBAAgB,KAAK,QAA2B,iBAAiB;AACvE,QAAM,YAAY,cAAc,SAAS;AACzC,QAAM,kBAAc,yBAAwB,WAAW;AACvD,QAAM,kBAAkB,YAAY,kBAAkB,aAAa,iBAAiB;AAEpF,QAAM,kBAAc,2BAAY,MAAM;AACpC,QAAI,CAAC,iBAAiB;AACpB,aAAO,mBAAmB;AAAA,QACxB,OAAO;AAAA,QACP,SAAS,EAAE,MAAM,kBAAkB;AAAA,MACrC,CAAC;AAAA,IACH;AACA,WAAO,gBAAgB;AAAA,MACrB,OAAO;AAAA,MACP,SAAS,EAAE,MAAM,kBAAkB;AAAA,IACrC,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,MAAM,iBAAiB,CAAC;AAEvC,+BAAU,MAAM;AACd,UAAM,aAAa,cAAc,aAAa,MAAM;AAClD,cAAQ;AAAA,IACV,CAAC;AACD,WAAO,MAAM;AACX,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,YAAY,YAAY,IAAI;AACrC;AAEO,IAAM,oBAAsC,CAAC,UAAU,8BAAAC,QAAA,cAAC,eAAa,GAAG,OAAO;;;ADvC/E,IAAM,wBAAN,MAAwD;AAAA,EAC7D,WAAW,aAA0B;AACnC,gBAAY,qBAAqB,WAAW,OAAO,iBAAiB;AAAA,EACtE;AACF;AAJa,wBAAN;AAAA,MADN,8BAAW;AAAA,GACC;;;ADDN,IAAM,uBAAuB,IAAI,kCAAgB,UAAQ;AAC9D,uCAAkB,MAAM,uBAAuB,CAAC,gBAAgB,CAAC;AACnE,CAAC;;;AIJM,SAAS,aAAa,MAAsB;AACjD,SAAO,KAAK,QAA2B,iBAAiB,EAAE,SAAS;AACrE;;;ACNA,IAAAC,qBAAgC;AAChC,IAAAC,gBAAkC;;;ACDlC,IAAAC,oBAAmC;AACnC,IAAAC,eAA2D;AAMpD,IAAM,mBAAN,MAAuB;AAAA,EAK5B,4BACE,UACA,SACyB;AACzB,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf,MAAM,SAAS;AAAA,MACf,UAAU,KAAK,kBAAkB;AAAA,MACjC,wBAAwB,SAAS,UAAU,uBAAuB,KAAK,SAAS,SAAS;AAAA,MACzF,gBAAgB,SAAS,UAAU,WAAW,KAAK,SAAS,SAAS;AAAA,MACrE,MAAM,SAAS;AAAA,MACf,MAAM,SAAS,UAAU;AAAA,MACzB,mBAAmB,KAAK;AAAA,MACxB,OAAO,mCAAS;AAAA,IAClB;AAAA,EACF;AACF;AApBsC;AAAA,MAAnC,0BAAO,iBAAiB;AAAA,GADd,iBACyB;AAEA;AAAA,MAAnC,sCAAwB;AAAA,GAHd,iBAGyB;AAHzB,mBAAN;AAAA,MADN,8BAAW;AAAA,GACC;;;ACPb,IAAAC,oBAA2B;AAGpB,IAAM,kBAAN,MAAsB;AAAA,EAW3B,OAAO,UAAU,MAAc;AAC7B,QAAI,SAAS,gBAAgB,MAAM;AACjC,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,SAAS,gBAAgB,OAAO,GAAG;AAC1C,aAAO,KAAK,MAAM,GAAG,EAAE;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,KAAK,OAAyB;AACnC,QAAI,MAAM,CAAC,EAAE,WAAW,gBAAgB,IAAI,GAAG;AAC7C,YAAM,IAAI;AAAA,QACR,mEAAmE,MAAM,CAAC,CAAC;AAAA,MAC7E;AAAA,IACF;AACA,QAAI,MAAM,CAAC,EAAE,SAAS,gBAAgB,OAAO,GAAG;AAC9C,aAAO,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,IAC/B;AACA,WAAO,MAAM,KAAK,gBAAgB,OAAO;AAAA,EAC3C;AAAA,EAEA,OAAO,YAAY,MAAsB;AACvC,WAAO,gBAAgB,KAAK,CAAC,MAAM,gBAAgB,KAAK,CAAC;AAAA,EAC3D;AAAA,EAEA,OAAO,mBAAmB,MAAc;AACtC,UAAM,QAAQ,KAAK,MAAM,GAAG;AAE5B,QAAI,IAAI;AACR,WAAO,IAAI,MAAM,QAAQ;AACvB,YAAM,YAAY,SAAS,MAAM,CAAC,CAAC;AAEnC,UAAI,CAAC,MAAM,SAAS,GAAG;AACrB,cAAM,YAAY,gBAAgB;AAAA,UAChC,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,gBAAgB,OAAO;AAAA,QAChD;AACA,cAAM,WAAW,MAAM,MAAM,IAAI,CAAC,EAAE,KAAK,gBAAgB,OAAO;AAChE,cAAM,eAAe,gBAAgB,KAAK,CAAC,WAAW,QAAQ,CAAC;AAC/D,eAAO,EAAE,WAAW,WAAW,aAAa;AAAA,MAC9C;AACA,UAAI,IAAI;AAAA,IACV;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,MAAc;AACrB,UAAM,WAAW,KAAK,MAAM,gBAAgB,OAAO;AACnD,UAAM,cAAwB,CAAC;AAE/B,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAI,CAAC,SAAS,CAAC,GAAG;AAChB,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AAEA,UAAI,SAAS,CAAC,MAAM,gBAAgB,kBAAkB;AAEpD;AAAA,MACF;AAEA,UAAI,SAAS,CAAC,MAAM,gBAAgB,iBAAiB;AACnD,oBAAY,IAAI;AAAA,MAClB;AACA,kBAAY,KAAK,SAAS,CAAC,CAAC;AAAA,IAC9B;AACA,WAAO,YAAY,KAAK,gBAAgB,OAAO;AAAA,EACjD;AACF;AA/Ea,gBACK,OAAO;AADZ,gBAGK,UAAU;AAHf,gBAKK,kBAAkB;AALvB,gBAOK,mBAAmB;AAPxB,gBASK,QAAQ;AATb,kBAAN;AAAA,MADN,8BAAW;AAAA,GACC;;;ACHb,IAAAC,iBAA0B;AAC1B,IAAAC,qBAAyE;AACzE,IAAAC,gBAAwB;AACxB,IAAAC,eAA2D;;;ACH3D,IAAAC,oBAA2B;AAC3B,IAAAC,gBAA0D;AAQnD,IAAM,mBAAmB,OAAO,kBAAkB;AAClD,IAAM,kBAAkB,OAAO,iBAAiB;AAGhD,IAAe,YAAf,MAAyB;AAAA,EAAzB;AASL,SAAU,YAAkC,IAAI,mCAAqB;AAAA;AAwDvE;AAjEsB,YAAf;AAAA,MADN,8BAAW;AAAA,GACU;;;ACbtB,IAAAC,gBAA8C;AAKvC,IAAe,WAAf,MAAwB;AAAA,EAkBnB,YAAY,MAAqB,MAAc,WAAsB;AAX/E,SAAS,qBAAqB,IAAI,sBAAkB;AAEpD,SAAS,SAAS,KAAK,mBAAmB;AAE1C,SAAU,YAAkC,IAAI,mCAAqB;AAErE,SAAS,YAAY,KAAK,UAAU;AAMlC,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,SAAK,UAAU,KAAK,KAAK,kBAAkB;AAAA,EAC7C;AAAA,EAQA,IAAI,OAAO,QAAwB;AACjC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAgB;AACd,SAAK,UAAU,QAAQ;AAAA,EACzB;AACF;;;ACtCO,IAAM,WAAN,MAAoC;AAAA,EACzC,YAAY,MAAqB,SAA2B;AAC1D,SAAK,QAAQ;AACb,SAAK,WAAW;AAAA,EAClB;AAAA,EAIA,IAAI,OAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAIA,IAAI,UAA4B;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,SAAS,EAAE,cAAc,aAAa,IAAI,OAAO,GAAiC;AACvF,QAAI,CAAC,cAAc;AACjB;AAAA,IACF;AAEA,UAAM,SAAS,CAAC;AAEhB,UAAM,OAAO,SACT,gBAAgB,OAChB,aAAa,OACb,gBAAgB,KAAK,CAAC,YAAY,aAAa,IAAI,CAAC,IACpD;AAEJ,WAAO,EAAE,cAAc,KAAK,CAAC;AAE7B,QAAI,aAAa,OAAO;AACtB,WAAK,SAAS;AAAA,QACZ,cAAc,aAAa;AAAA,QAC3B;AAAA,QACA,YAAY,gBAAgB,YAAY,IAAI;AAAA,MAC9C,CAAC;AAAA,IACH;AAEA,QAAI,aAAa,YAAY,aAAa,SAAS,QAAQ;AACzD,mBAAa,SAAS,QAAQ,CAAC,UAAU;AACvC,aAAK,SAAS,EAAE,cAAc,OAAO,QAAQ,YAAY,KAAK,CAAC;AAAA,MACjE,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACxDA,IAAAC,qBAA2B;AAMpB,IAAM,+BAAN,MAAmC;AAAA,EAAnC;AACL,SAAU,WAAW,oBAAI,IAAuB;AAAA;AAAA,EAEhD,SAAS,WAA4B;AACnC,SAAK,SAAS,IAAI,UAAU,KAAK,SAAS;AAAA,EAC5C;AAAA,EAEA,IAAyB,KAA4B;AACnD,WAAO,KAAK,SAAS,IAAI,GAAG;AAAA,EAC9B;AAAA,EAEA,IAAI,YAAuC;AACzC,WAAO,OAAO,YAAY,KAAK,QAAQ;AAAA,EACzC;AAAA,EAEA,IAAI,aAA0B;AAC5B,WAAO,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC;AAAA,EAC1C;AACF;AAlBa,+BAAN;AAAA,MADN,+BAAW;AAAA,GACC;;;ACJN,IAAM,mBAAmB,OAAO,kBAAkB;;;ACAlD,IAAM,iBAAN,MAAM,eAAyC;AAAA,EAGpD,IAAI,OAAe;AACjB,WAAO,eAAc;AAAA,EACvB;AACF;AANa,eACK,OAAO;AADlB,IAAM,gBAAN;;;ACAA,IAAM,oBAAN,MAAM,kBAA4C;AAAA,EAGvD,IAAI,OAAe;AACjB,WAAO,kBAAiB;AAAA,EAC1B;AACF;AANa,kBACK,OAAO;AADlB,IAAM,mBAAN;;;ACWA,IAAM,qBAAN,MAAM,mBAA6C;AAAA,EAGxD,IAAI,OAAe;AACjB,WAAO,mBAAkB;AAAA,EAC3B;AACF;AANa,mBACK,OAAO;AADlB,IAAM,oBAAN;;;ACXA,IAAM,iBAAN,MAAM,eAAyC;AAAA,EAGpD,IAAI,OAAe;AACjB,WAAO,eAAc;AAAA,EACvB;AACF;AANa,eACK,OAAO;AADlB,IAAM,gBAAN;;;ACAA,IAAM,kBAAN,MAAM,gBAA0C;AAAA,EAGrD,IAAI,OAAe;AACjB,WAAO,gBAAe;AAAA,EACxB;AACF;AANa,gBACK,OAAO;AADlB,IAAM,iBAAN;;;ACAA,IAAM,qBAAN,MAAM,mBAA6C;AAAA,EAGxD,IAAI,OAAe;AACjB,WAAO,mBAAkB;AAAA,EAC3B;AACF;AANa,mBACK,OAAO;AADlB,IAAM,oBAAN;;;AXgBA,IAAM,cAAN,MAAkB;AAAA,EAAlB;AACL,SAAS,kBAAgD,oBAAI,IAAI;AAEjE,SAAS,aAA0B,CAAC;AAEpC,SAAS,uBAAkE,oBAAI,IAAI;AAQxC,SAAU,oBAAwC,CAAC;AAE9F,SAAiB,6BAA6B,IAAI,sBAG/C;AAEH,SAAS,sBAAsB,KAAK,2BAA2B;AAAA;AAAA,EAE/D,IAAI,aAAkC;AAxCxC;AAyCI,eAAO;AAAA,QACL,UAAK,qBAAqB,IAAI,cAAc,IAAI,MAAhD,mBAAmD,cAAa,CAAC;AAAA,MACjE,CAAC,WAA4B,OAAO;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,IAAI,aAAkC;AA/CxC;AAgDI,eAAO;AAAA,QACL,UAAK,qBAAqB,IAAI,iBAAiB,IAAI,MAAnD,mBAAsD,cAAa,CAAC;AAAA,MACpE,CAAC,cAAkC,UAAU;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,yBAAyB,MAAc,WAAsB;AAC3D,QAAI,CAAC,KAAK,qBAAqB,IAAI,IAAI,GAAG;AACxC,WAAK,qBAAqB,IAAI,MAAM,IAAI,6BAA6B,CAAC;AAAA,IACxE;AACA,UAAM,WAAW,KAAK,qBAAqB,IAAI,IAAI;AACnD,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AACA,aAAS,SAAS,SAAS;AAAA,EAC7B;AAAA,EAEA,oBAAoB,aAAqB,cAA2B;AAjEtE;AAkEI,YAAO,UAAK,qBAAqB,IAAI,WAAW,MAAzC,mBAA4C,IAAI;AAAA,EACzD;AAAA,EAEA,gBAAgB,SAA6B;AAC3C,UAAM,UAAU,IAAI,QAAQ;AAC5B,SAAK,gBAAgB,IAAI,QAAQ,MAAM,OAAO;AAAA,EAChD;AAAA,EAEA,kBAAkB,WAAiC;AACjD,cAAU,QAAQ,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAAA,EACnD;AAAA,EAEA,WAA0B,MAA6D;AACrF,WAAO,KAAK,gBAAgB,IAAI,IAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,KAAsB;AACtC,SAAK,WAAW,KAAK,GAAG;AAAA,EAC1B;AAAA,EAEA,sBAAsB,OAAkB,MAAW;AACjD,SAAK,2BAA2B,KAAK;AAAA,MACnC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAU;AACR,SAAK,2BAA2B,QAAQ;AAAA,EAC1C;AAAA,EAGU,OAAa;AACrB,SAAK,kBAAkB,QAAQ,CAAC,YAAS;AAxG7C;AAwGgD,2BAAQ,eAAR,iCAAqB;AAAA,KAAK;AAAA,EACxE;AACF;AAjFoC;AAAA,MAAjC,2BAAO,eAAe;AAAA,GAPZ,YAOuB;AAEC;AAAA,MAAlC,2BAAO,gBAAgB;AAAA,GATb,YASwB;AAEC;AAAA,MAAnC,sCAAwB;AAAA,GAXd,YAWyB;AAEiB;AAAA,MAApD,gCAAY,gBAAgB;AAAA,MAAG,6BAAS;AAAA,GAb9B,YAa0C;AAwE3C;AAAA,MADT,kCAAc;AAAA,GApFJ,YAqFD;AArFC,cAAN;AAAA,MADN,+BAAW;AAAA,GACC;;;AYlBb,IAAAC,qBAA2B;;;ACA3B,IAAAC,gBAAiC;AAEjC,IAAAC,gBAA2B;;;ACF3B,IAAAC,gBAAoC;AAEpC,IAAAC,eAA2B;AAuBpB,IAAM,mBAAN,cAA+B,wBAAW;AAAA,EAoB/C,YAAY,QAAwB,MAAe;AACjD,UAAM,MAAM;AAVd;AAAA;AAAA;AAAA;AAAA,SAAU,wBAAwB,IAAI,sBAA2B;AAOjE;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,iBAAiB,KAAK,sBAAsB;AAKnD,SAAK,iBAAiB;AACtB,SAAK,YAAY,KAAK,iBAAiB,MAAM;AAE7C,SAAK,UAAU,KAAK,KAAK,qBAAqB;AAE9C,SAAK,UAAU;AAAA,MACb,yBAAW,OAAO,MAAM;AACtB,aAAK,UAAU,QAAQ;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,eAAuC;AAErC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,iBAAsB;AACpB,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,WAAW,6BAAkC,cAA0B;AACrE,UAAM,YAAY,KAAK,eAAe,QAA2B,iBAAiB;AAElF,cAAU,SAAS,IAAI;AACvB,QAAI;AACF,WAAK,UAAU,KAAK,6BAA6B,YAAY;AAAA,IAC/D,SAAS,GAAG;AACV,gBAAU,SAAS,CAAU;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,iBAAiB,OAAY;AAC3B,SAAK,UAAU,iBAAiB,KAAK;AAAA,EACvC;AAAA,EAEA,aAAa,6BAA0D,cAA0B;AAC/F,SAAK,WAAW,6BAA6B,YAAY;AAAA,EAC3D;AAAA,EAEA,SAAc;AACZ,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA,EAEA,UAAgB;AACd,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAgB,mBAAsC;AACpD,SAAK,sBAAsB,KAAK,iBAAiB;AAAA,EACnD;AACF;AA9Ea,iBACJ,OAAO;;;ADXhB,SAAS,qBAAqB,MAAsB;AAfpD;AAgBE,UAAO,UAAK,QAAQ,gBAAgB,MAA7B,mBAAgC;AACzC;AAEO,SAAS,WAAW,EAAE,KAAK,GAAyB;AACzD,QAAM,cAAU,0BAAW;AAE3B,QAAM,YAAY,qBAAqB,IAAI;AAE3C,+BAAU,MAAM;AACd,UAAM,aAAa,uCAAW,cAAc,MAAM;AAChD,cAAQ;AAAA,IACV;AACA,WAAO,MAAM;AACX,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,UAAO,uCAAW,eAAc,UAAU,OAAO,IAAI;AACvD;AAEO,IAAM,mBAAmB,CAAC,UAAuB,8BAAAC,QAAA,cAAC,cAAY,GAAG,OAAO;;;AD9BxE,IAAM,uBAAN,MAAuD;AAAA,EAC5D,WAAW,aAA0B;AACnC,gBAAY,qBAAqB,WAAW,MAAM,gBAAgB;AAAA,EACpE;AACF;AAJa,uBAAN;AAAA,MADN,+BAAW;AAAA,GACC;;;AfEN,IAAM,0BAA0B,IAAI,mCAAgB,CAAC,SAAS;AACnE,OAAK,WAAW,EAAE,OAAO,EAAE,iBAAiB;AAC5C,OAAK,eAAe,EAAE,OAAO,EAAE,iBAAiB;AAChD,OAAK,gBAAgB,EAAE,OAAO,EAAE,iBAAiB;AACjD,uCAAkB,MAAM,sBAAsB,CAAC,gBAAgB,CAAC;AAClE,CAAC;;;AkBTM,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,uBAAoB;AACpB,EAAAA,mBAAA,oBAAiB;AAFP,SAAAA;AAAA,GAAA;;;ACyBL,IAAM,YAAY;;;ACxBlB,SAAS,gBAAgB,MAAsB;AACpD,SAAO,KAAK,QAA0B,gBAAgB,EAAE,aAAwB,EAAE;AACpF;AAEO,SAAS,aAAa,MAAsB;AACjD,SAAO,KAAK,QAA0B,gBAAgB,EAAE;AAC1D;;;ACPO,SAAS,6BAA6B;AAC3C,SAAO,CAAC,qBAAqB,yBAAyB,oBAAoB;AAC5E;;;ACNA,IAAAC,gBAAoD;AAEpD,IAAAC,eAA0D;;;ACF1D,IAAAC,gBAAkB;AAIX,IAAM,yBAAyB,cAAAC,QAAM;AAAA,EAC1C,kBAAkB;AACpB;;;ACNA,IAAAC,gBAA0B;AAE1B,IAAAC,eAAuC;AAIhC,SAAS,uBAA0C;AACxD,QAAM,cAAU,yBAAW;AAC3B,QAAM,wBAAoB,yBAA8B,iBAAiB;AAEzE,+BAAU,MAAM;AACd,UAAM,aAAa,kBAAkB,SAAS,MAAM;AAClD,cAAQ;AAAA,IACV,CAAC;AAED,WAAO,MAAM;AACX,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;ACrBA,IAAAC,gBAA0B;AAG1B,IAAAC,eAAiD;AAI1C,SAAS,YAAY,MAAqC;AAC/D,QAAM,cAAU,yBAAW;AAC3B,QAAM,WAAO,mCAAqC;AAClD,QAAM,WAAW,KAAK,QAA0B,gBAAgB;AAChE,QAAM,WAAW,SAAS,aAAwB,EAAE,kBAAkB,IAAI;AAE1E,+BAAU,MAAM;AACd,UAAM,aAAa,SAAS,aAAa,MAAM;AAC7C,cAAQ;AAAA,IACV,CAAC;AAED,WAAO,MAAM;AACX,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;AHXA,IAAM,iBAAiB,CAAC,EAAE,KAAK,MAAuB;AACpD,QAAM,cAAU,yBAAW;AAC3B,QAAM,gBAAgB,KAAK,QAA2B,iBAAiB;AACvE,QAAM,YAAY,aAAa,IAAI;AACnC,QAAM,cAAc,CAAC,CAAC,aAAa,IAAI;AACvC,QAAM,cAAc,gBAAgB,IAAI;AACxC,QAAM,wBAAoB,yBAA8B,8BAAiB;AACzE,QAAM,kBAAc,yBAAwB,WAAW;AACvD,QAAM,iBAAiB,YAAY,gBAAgB,WAAW,IAAI;AAClE,QAAM,kBAAkB,YAAY,gBAAgB,WAAW,KAAK;AACpE,QAAM,wBAAwB,YAAY,kBAAkB,aAAa,uBAAuB;AAEhG,QAAM,oBAAoB,qBAAqB;AAE/C,+BAAU,MAAM;AACd,UAAM,kBAAkB,cAAc,aAAa,MAAM;AACvD,cAAQ;AAAA,IACV,CAAC;AACD,UAAM,iBAAiB,UAAU,cAAc,MAAM;AACnD,cAAQ;AAAA,IACV,CAAC;AACD,WAAO,MAAM;AACX,sBAAgB,QAAQ;AACxB,qBAAe,QAAQ;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB,2BAAY,MAAM;AACtC,QAAI,aAAa;AACf,aAAO,gBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAAA,IACrD;AACA,QAAI,CAAC,UAAU,UAAU;AACvB,aAAO;AAAA,IACT;AACA,QAAI,aAAa;AACf,aAAO,eAAgB,EAAE,MAAM,kBAAkB,CAAC;AAAA,IACpD;AACA,YAAO,+DAAwB,EAAE,MAAM,kBAAkB,OAAM;AAAA,EACjE,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,8BAAAC,QAAA,cAAC,uBAAuB,UAAvB,EAAgC,OAAO,kBAAkB,QACvD,YAAY,cAAc,aAAa,EAAE,CAC5C;AAEJ;AAEO,IAAM,iBAAa,oBAAK,cAAc;;;AIjEtC,SAAS,wBAAwB,aAA0B,QAAsB;AACtF,cAAY,uBAAuB,aAAa,mBAAmB,MAAM;AAC3E;AAEO,SAAS,8BACd,aACA,QACM;AACN,cAAY,uBAAuB,aAAa,yBAAyB,MAAM;AACjF;;;ACPO,SAAS,wBAA8C;AAC5D,SAAO,CAAC,kBAAkB,iBAAiB;AAC7C;","names":["import_inversify","MaterialRenderKey","import_inversify","import_inversify","import_inversify","import_utils","import_inversify","import_react","import_core","React","React","import_inversify","import_utils","import_inversify","import_core","import_inversify","import_lodash","import_inversify","import_utils","import_core","import_inversify","import_utils","import_utils","import_inversify","import_inversify","import_react","import_utils","import_utils","import_core","React","FormItemEventName","import_react","import_core","import_react","React","import_react","import_core","import_react","import_core","React"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowgram.ai/form-core",
3
- "version": "0.1.0-alpha.7",
3
+ "version": "0.1.0-alpha.8",
4
4
  "description": "automation form core",
5
5
  "keywords": [
6
6
  "flow",
@@ -24,9 +24,9 @@
24
24
  "inversify": "^6.0.1",
25
25
  "lodash": "^4.17.21",
26
26
  "reflect-metadata": "~0.2.2",
27
- "@flowgram.ai/core": "0.1.0-alpha.7",
28
- "@flowgram.ai/document": "0.1.0-alpha.7",
29
- "@flowgram.ai/utils": "0.1.0-alpha.7"
27
+ "@flowgram.ai/core": "0.1.0-alpha.8",
28
+ "@flowgram.ai/document": "0.1.0-alpha.8",
29
+ "@flowgram.ai/utils": "0.1.0-alpha.8"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/lodash": "^4.14.137",
@@ -37,13 +37,13 @@
37
37
  "tsup": "^8.0.1",
38
38
  "typescript": "^5.0.4",
39
39
  "vitest": "^0.34.6",
40
- "@flowgram.ai/eslint-config": "0.1.0-alpha.7",
41
- "@flowgram.ai/form": "0.1.0-alpha.7",
42
- "@flowgram.ai/ts-config": "0.1.0-alpha.7"
40
+ "@flowgram.ai/eslint-config": "0.1.0-alpha.8",
41
+ "@flowgram.ai/form": "0.1.0-alpha.8",
42
+ "@flowgram.ai/ts-config": "0.1.0-alpha.8"
43
43
  },
44
44
  "peerDependencies": {
45
- "react": ">=17",
46
- "react-dom": ">=17"
45
+ "react": ">=16.8",
46
+ "react-dom": ">=16.8"
47
47
  },
48
48
  "publishConfig": {
49
49
  "access": "public",