@webiny/app-admin 6.2.0 → 6.3.0-beta.1
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/base/Admin.js +2 -0
- package/base/Admin.js.map +1 -1
- package/base/Base/DefaultFieldRenderers.js +20 -4
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/DefaultLayoutRenderers.d.ts +2 -0
- package/base/Base/DefaultLayoutRenderers.js +11 -0
- package/base/Base/DefaultLayoutRenderers.js.map +1 -0
- package/base/Base/FieldRenderers/InputRenderer.d.ts +15 -0
- package/base/Base/FieldRenderers/{TextRenderer.js → InputRenderer.js} +5 -3
- package/base/Base/FieldRenderers/InputRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +25 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +89 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.d.ts +21 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js +28 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +63 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.d.ts +4 -0
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +22 -0
- package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -0
- package/base/Base/FieldRenderers/PassthroughRenderer.d.ts +15 -0
- package/base/Base/FieldRenderers/PassthroughRenderer.js +29 -0
- package/base/Base/FieldRenderers/PassthroughRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/SelectRenderer.d.ts +12 -2
- package/base/Base/FieldRenderers/SelectRenderer.js +4 -2
- package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TextareaRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/TextareaRenderer.js +25 -0
- package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +5 -0
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js +41 -0
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js.map +1 -0
- package/base/Base.js +2 -1
- package/base/Base.js.map +1 -1
- package/base/createRootContainer.js +4 -0
- package/base/createRootContainer.js.map +1 -1
- package/base/providers/UiProviders.js +0 -1
- package/base/providers/UiProviders.js.map +1 -1
- package/components/Filters/Filters.js.map +1 -1
- package/components/IconPicker/components/IconPickerCell.d.ts +1 -1
- package/components/IconPicker/components/IconPickerTrigger.d.ts +1 -1
- package/components/IconPicker/components/IconPickerTrigger.js.map +1 -1
- package/components/LexicalEditor/LexicalEditor.js +7 -1
- package/components/LexicalEditor/LexicalEditor.js.map +1 -1
- package/components/LexicalEditor/lexicalValueFromHtml.d.ts +7 -0
- package/components/LexicalEditor/lexicalValueFromHtml.js +35 -0
- package/components/LexicalEditor/lexicalValueFromHtml.js.map +1 -0
- package/components/OverlayLayout/components/OverlayHeader.d.ts +1 -1
- package/components/OverlayLayout/components/OverlayHeader.js.map +1 -1
- package/components/SimpleForm/SimpleForm.d.ts +2 -2
- package/components/SimpleForm/SimpleForm.js.map +1 -1
- package/config/AdminConfig/Form.d.ts +1 -0
- package/config/AdminConfig/Form.js +3 -1
- package/config/AdminConfig/Form.js.map +1 -1
- package/config/AdminConfig/LayoutRenderer.d.ts +10 -0
- package/config/AdminConfig/LayoutRenderer.js +21 -0
- package/config/AdminConfig/LayoutRenderer.js.map +1 -0
- package/config/AdminConfig/Menu/MenuLink.d.ts +2 -2
- package/config/AdminConfig.d.ts +4 -0
- package/config/AdminConfig.js +2 -1
- package/config/AdminConfig.js.map +1 -1
- package/exports/admin.d.ts +2 -0
- package/exports/admin.js +2 -0
- package/exports/admin.js.map +1 -1
- package/features/formModel/Field.js +4 -0
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.d.ts +18 -2
- package/features/formModel/FieldBuilder.js +57 -3
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FormModel.d.ts +3 -3
- package/features/formModel/FormModel.js +48 -13
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +383 -0
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormModelFactory.d.ts +2 -2
- package/features/formModel/FormModelFactory.js.map +1 -1
- package/features/formModel/FormView.d.ts +24 -4
- package/features/formModel/FormView.js +57 -27
- package/features/formModel/FormView.js.map +1 -1
- package/features/formModel/ObjectField.d.ts +46 -0
- package/features/formModel/ObjectField.js +346 -0
- package/features/formModel/ObjectField.js.map +1 -0
- package/features/formModel/abstractions.d.ts +88 -19
- package/features/formModel/abstractions.js +8 -0
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/index.d.ts +7 -4
- package/features/formModel/index.js +9 -2
- package/features/formModel/index.js.map +1 -1
- package/features/formModel/renderers.d.ts +6 -0
- package/features/formModel/renderers.js +10 -0
- package/features/formModel/renderers.js.map +1 -0
- package/features/formModel/useLayoutRenderers.d.ts +2 -0
- package/features/formModel/useLayoutRenderers.js +19 -0
- package/features/formModel/useLayoutRenderers.js.map +1 -0
- package/features/tools/ToolPipelineRunner.d.ts +10 -0
- package/features/tools/ToolPipelineRunner.js +33 -0
- package/features/tools/ToolPipelineRunner.js.map +1 -0
- package/features/tools/ToolRegistry.d.ts +12 -0
- package/features/tools/ToolRegistry.js +29 -0
- package/features/tools/ToolRegistry.js.map +1 -0
- package/features/tools/abstractions.d.ts +28 -0
- package/features/tools/abstractions.js +6 -0
- package/features/tools/abstractions.js.map +1 -0
- package/features/tools/feature.d.ts +4 -0
- package/features/tools/feature.js +19 -0
- package/features/tools/feature.js.map +1 -0
- package/features/tools/index.d.ts +2 -0
- package/features/tools/index.js +4 -0
- package/features/tools/index.js.map +1 -0
- package/features/wcp/ReactLicense.d.ts +3 -0
- package/features/wcp/ReactLicense.js +9 -0
- package/features/wcp/ReactLicense.js.map +1 -1
- package/features/wcp/WcpGateway.js +4 -0
- package/features/wcp/WcpGateway.js.map +1 -1
- package/features/webinySdk/WebinySdk.d.ts +11 -0
- package/features/webinySdk/WebinySdk.js +27 -0
- package/features/webinySdk/WebinySdk.js.map +1 -0
- package/features/webinySdk/abstractions.d.ts +6 -0
- package/features/webinySdk/abstractions.js +8 -0
- package/features/webinySdk/abstractions.js.map +1 -0
- package/features/webinySdk/feature.d.ts +3 -0
- package/features/webinySdk/feature.js +16 -0
- package/features/webinySdk/feature.js.map +1 -0
- package/features/webinySdk/index.d.ts +2 -0
- package/features/webinySdk/index.js +4 -0
- package/features/webinySdk/index.js.map +1 -0
- package/index.d.ts +8 -3
- package/index.js +5 -2
- package/index.js.map +1 -1
- package/package.json +24 -23
- package/presentation/textToLexicalTool/TextToLexicalTool.d.ts +27 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.js +25 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.js.map +1 -0
- package/presentation/textToLexicalTool/feature.d.ts +1 -0
- package/presentation/textToLexicalTool/feature.js +10 -0
- package/presentation/textToLexicalTool/feature.js.map +1 -0
- package/presentation/textToLexicalTool/textToLexicalState.d.ts +5 -0
- package/presentation/textToLexicalTool/textToLexicalState.js +19 -0
- package/presentation/textToLexicalTool/textToLexicalState.js.map +1 -0
- package/base/Base/FieldRenderers/TextRenderer.d.ts +0 -5
- package/base/Base/FieldRenderers/TextRenderer.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["makeAutoObservable","runInAction","toJS","Field","createChildFields","childBuilders","form","children","Map","name","builder","Object","entries","config","build","field","createFieldFromConfig","set","objField","ObjectField","setForm","hydrateChildren","data","setValueSilent","getChildrenData","isObjectField","getData","getValue","validateChildren","allValid","valid","validate","type","itemKeyCounter","_form","_items","constructor","_base","renderer","_children","visible","setDisabled","value","setVisible","item","setValidation","validation","addBeforeChange","cb","addAfterChange","addAfterSetValue","addOnBlur","blur","remove","isList","items","map","key","getChild","get","getListItemChild","index","setValue","Array","isArray","itemData","_addItemInternal","addItem","removeItem","splice","moveItem","fromIndex","toIndex","length","push","resetValidation","as","Error","vm","baseVm","label","help","description","note","placeholder","required","disabled","rendererSettings","onChange","onBlur","fields","from","values","filter","f","moveUp","moveDown","to","hasErrors","checkChildren","isValid","message","requiredMessage","hasAnyValue","some","v","undefined","listSchema","listData","result","safeParseAsync","success","firstIssue","error","issues","schema"],"sources":["ObjectField.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\";\nimport { Field } from \"./Field.js\";\nimport type {\n IObjectFieldConfig,\n IObjectField,\n IListItemField,\n IField,\n IObjectFieldVM,\n IFieldValidation,\n IFormModel,\n IFieldBuilder,\n FieldTypeMap,\n BeforeChangeCallback,\n AfterChangeCallback,\n AfterSetValueCallback,\n OnBlurCallback\n} from \"./abstractions.js\";\n\nfunction createChildFields(\n childBuilders: Record<string, IFieldBuilder>,\n form: IFormModel | null\n): Map<string, IField> {\n const children = new Map<string, IField>();\n for (const [name, builder] of Object.entries(childBuilders)) {\n const config = builder.build(name);\n const field = createFieldFromConfig(config, form);\n children.set(name, field);\n }\n return children;\n}\n\nfunction createFieldFromConfig(config: any, form: IFormModel | null): IField {\n if (config.childBuilders) {\n const objField = new ObjectField(config as IObjectFieldConfig);\n if (form) {\n objField.setForm(form);\n }\n return objField;\n }\n const field = new Field(config);\n if (form) {\n field.setForm(form);\n }\n return field;\n}\n\nfunction hydrateChildren(\n children: Map<string, IField>,\n data: Record<string, unknown> | null | undefined\n): void {\n if (!data) {\n return;\n }\n for (const [name, field] of children) {\n if (name in data) {\n field.setValueSilent(data[name]);\n }\n }\n}\n\nfunction getChildrenData(children: Map<string, IField>): Record<string, unknown> {\n const data: Record<string, unknown> = {};\n for (const [name, field] of children) {\n if (isObjectField(field)) {\n data[name] = toJS(field.getData());\n } else {\n data[name] = toJS(field.getValue());\n }\n }\n return data;\n}\n\nasync function validateChildren(children: Map<string, IField>): Promise<boolean> {\n let allValid = true;\n for (const [, field] of children) {\n const valid = await field.validate();\n if (!valid) {\n allValid = false;\n }\n }\n return allValid;\n}\n\nexport function isObjectField(field: IField): field is ObjectField {\n return field.type === \"object\";\n}\n\nlet itemKeyCounter = 0;\n\ninterface ListItem {\n key: string;\n children: Map<string, IField>;\n}\n\n/**\n * ObjectField — hierarchical field with children, using composition.\n * Holds a `_base` Field for scalar behavior (callbacks, disabled/hidden, form ref).\n * Adds its own children/items management for object and list modes.\n */\nexport class ObjectField implements IObjectField {\n readonly config: IObjectFieldConfig;\n\n private _base: Field;\n private _form: IFormModel | null = null;\n private _children: Map<string, IField>;\n private _items: ListItem[] = [];\n\n constructor(config: IObjectFieldConfig) {\n this.config = config;\n this._base = new Field({\n ...config,\n type: \"object\",\n renderer: config.renderer ?? \"object\"\n });\n this._children = createChildFields(config.childBuilders, null);\n\n makeAutoObservable(this, {\n config: false\n });\n }\n\n // --- Forwarded from _base ---\n\n get name(): string {\n return this._base.name;\n }\n\n get type(): string {\n return \"object\";\n }\n\n get visible(): boolean {\n return this._base.visible;\n }\n\n setDisabled(value: boolean): void {\n this._base.setDisabled(value);\n }\n\n setVisible(value: boolean): void {\n this._base.setVisible(value);\n }\n\n setForm(form: IFormModel): void {\n this._form = form;\n this._base.setForm(form);\n for (const [, field] of this._children) {\n field.setForm(form);\n }\n for (const item of this._items) {\n for (const [, field] of item.children) {\n field.setForm(form);\n }\n }\n }\n\n setValidation(validation: IFieldValidation): void {\n this._base.setValidation(validation);\n }\n\n addBeforeChange(cb: BeforeChangeCallback): void {\n this._base.addBeforeChange(cb);\n }\n\n addAfterChange(cb: AfterChangeCallback): void {\n this._base.addAfterChange(cb);\n }\n\n addAfterSetValue(cb: AfterSetValueCallback): void {\n this._base.addAfterSetValue(cb);\n }\n\n addOnBlur(cb: OnBlurCallback): void {\n this._base.addOnBlur(cb);\n }\n\n blur(): void {\n this._base.blur();\n }\n\n remove(): void {\n this._base.remove();\n }\n\n // --- Object-specific ---\n\n get isList(): boolean {\n return this.config.isList;\n }\n\n get children(): Map<string, IField> {\n return this._children;\n }\n\n get items(): IListItemField[] {\n return this._items.map(item => ({\n key: item.key,\n children: item.children,\n getData: () => getChildrenData(item.children)\n }));\n }\n\n getChild(name: string): IField | undefined {\n return this._children.get(name);\n }\n\n getListItemChild(index: number, name: string): IField | undefined {\n const item = this._items[index];\n return item?.children.get(name);\n }\n\n getData(): any {\n if (this.config.isList) {\n return this._items.map(item => getChildrenData(item.children));\n }\n return getChildrenData(this._children);\n }\n\n getValue<T = unknown>(): T {\n return this.getData() as T;\n }\n\n setValue(value: unknown): void {\n this.setValueSilent(value);\n }\n\n setValueSilent(value: unknown): void {\n if (this.config.isList) {\n this._items = [];\n if (Array.isArray(value)) {\n for (const itemData of value) {\n this._addItemInternal(itemData);\n }\n }\n } else {\n hydrateChildren(this._children, value as Record<string, unknown>);\n }\n }\n\n addItem(data?: Record<string, unknown>): void {\n this._addItemInternal(data);\n }\n\n removeItem(index: number): void {\n this._items.splice(index, 1);\n }\n\n moveItem(fromIndex: number, toIndex: number): void {\n if (\n fromIndex < 0 ||\n fromIndex >= this._items.length ||\n toIndex < 0 ||\n toIndex >= this._items.length ||\n fromIndex === toIndex\n ) {\n return;\n }\n const [item] = this._items.splice(fromIndex, 1);\n this._items.splice(toIndex, 0, item);\n }\n\n private _addItemInternal(data?: Record<string, unknown>): void {\n const children = createChildFields(this.config.childBuilders, this._form);\n if (data) {\n hydrateChildren(children, data);\n }\n const key = `item_${++itemKeyCounter}`;\n this._items.push({ key, children });\n }\n\n resetValidation(): void {\n this._base.resetValidation();\n for (const [, field] of this._children) {\n field.resetValidation();\n }\n for (const item of this._items) {\n for (const [, field] of item.children) {\n field.resetValidation();\n }\n }\n }\n\n as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T] {\n if (type !== \"object\") {\n throw new Error(`Field \"${this.config.name}\" is type \"object\", not \"${type}\".`);\n }\n return this as unknown as FieldTypeMap[T];\n }\n\n get vm(): IObjectFieldVM {\n const baseVm = this._base.vm;\n return {\n name: baseVm.name,\n type: \"object\",\n label: baseVm.label,\n help: baseVm.help,\n description: baseVm.description,\n note: baseVm.note,\n placeholder: baseVm.placeholder,\n value: this.getValue(),\n validation: baseVm.validation,\n required: baseVm.required,\n disabled: baseVm.disabled,\n renderer: baseVm.renderer,\n rendererSettings: baseVm.rendererSettings,\n onChange: (value: unknown) => this.setValue(value),\n onBlur: () => this.blur(),\n isList: this.config.isList,\n fields: this.config.isList\n ? []\n : Array.from(this._children.values())\n .filter(f => f.visible)\n .map(f => f.vm),\n items: this.config.isList\n ? this._items.map((item, index) => ({\n key: item.key,\n fields: Array.from(item.children.values())\n .filter(f => f.visible)\n .map(f => f.vm),\n remove: () => this.removeItem(index),\n moveUp: () => this.moveItem(index, index - 1),\n moveDown: () => this.moveItem(index, index + 1)\n }))\n : [],\n addItem: () => this.addItem(),\n removeItem: (index: number) => this.removeItem(index),\n moveItem: (from: number, to: number) => this.moveItem(from, to)\n };\n }\n\n get hasErrors(): boolean {\n const checkChildren = (children: Map<string, IField>): boolean => {\n for (const [, field] of children) {\n if (field.vm.validation.isValid === false) {\n return true;\n }\n if (isObjectField(field) && field.hasErrors) {\n return true;\n }\n }\n return false;\n };\n\n if (this.config.isList) {\n for (const item of this._items) {\n if (checkChildren(item.children)) {\n return true;\n }\n }\n } else {\n if (checkChildren(this._children)) {\n return true;\n }\n }\n return false;\n }\n\n async validate(): Promise<boolean> {\n if (this.config.required) {\n if (this.config.isList && this._items.length === 0) {\n this.setValidation({\n isValid: false,\n message: this.config.requiredMessage || \"This field is required.\"\n });\n return false;\n }\n if (!this.config.isList) {\n const data = this.getData();\n const hasAnyValue = Object.values(data).some(\n v => v !== null && v !== undefined && v !== \"\"\n );\n if (!hasAnyValue) {\n this.setValidation({\n isValid: false,\n message: this.config.requiredMessage || \"This field is required.\"\n });\n return false;\n }\n }\n }\n\n if (this.config.isList && this.config.listSchema) {\n const listData = this.getData();\n const result = await this.config.listSchema.safeParseAsync(listData);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n runInAction(() => {\n this.setValidation({\n isValid: false,\n message: firstIssue?.message || \"Invalid value.\"\n });\n });\n return false;\n }\n }\n\n if (this.config.schema) {\n const data = this.getData();\n const result = await this.config.schema.safeParseAsync(data);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n runInAction(() => {\n this.setValidation({\n isValid: false,\n message: firstIssue?.message || \"Invalid value.\"\n });\n });\n return false;\n }\n }\n\n let allValid = true;\n\n if (this.config.isList) {\n for (const item of this._items) {\n const valid = await validateChildren(item.children);\n if (!valid) {\n allValid = false;\n }\n }\n } else {\n allValid = await validateChildren(this._children);\n }\n\n runInAction(() => {\n this.setValidation({ isValid: allValid });\n });\n\n return allValid;\n }\n}\n"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,WAAW,EAAEC,IAAI,QAAQ,MAAM;AAC5D,SAASC,KAAK;AAiBd,SAASC,iBAAiBA,CACtBC,aAA4C,EAC5CC,IAAuB,EACJ;EACnB,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAC1C,KAAK,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACP,aAAa,CAAC,EAAE;IACzD,MAAMQ,MAAM,GAAGH,OAAO,CAACI,KAAK,CAACL,IAAI,CAAC;IAClC,MAAMM,KAAK,GAAGC,qBAAqB,CAACH,MAAM,EAAEP,IAAI,CAAC;IACjDC,QAAQ,CAACU,GAAG,CAACR,IAAI,EAAEM,KAAK,CAAC;EAC7B;EACA,OAAOR,QAAQ;AACnB;AAEA,SAASS,qBAAqBA,CAACH,MAAW,EAAEP,IAAuB,EAAU;EACzE,IAAIO,MAAM,CAACR,aAAa,EAAE;IACtB,MAAMa,QAAQ,GAAG,IAAIC,WAAW,CAACN,MAA4B,CAAC;IAC9D,IAAIP,IAAI,EAAE;MACNY,QAAQ,CAACE,OAAO,CAACd,IAAI,CAAC;IAC1B;IACA,OAAOY,QAAQ;EACnB;EACA,MAAMH,KAAK,GAAG,IAAIZ,KAAK,CAACU,MAAM,CAAC;EAC/B,IAAIP,IAAI,EAAE;IACNS,KAAK,CAACK,OAAO,CAACd,IAAI,CAAC;EACvB;EACA,OAAOS,KAAK;AAChB;AAEA,SAASM,eAAeA,CACpBd,QAA6B,EAC7Be,IAAgD,EAC5C;EACJ,IAAI,CAACA,IAAI,EAAE;IACP;EACJ;EACA,KAAK,MAAM,CAACb,IAAI,EAAEM,KAAK,CAAC,IAAIR,QAAQ,EAAE;IAClC,IAAIE,IAAI,IAAIa,IAAI,EAAE;MACdP,KAAK,CAACQ,cAAc,CAACD,IAAI,CAACb,IAAI,CAAC,CAAC;IACpC;EACJ;AACJ;AAEA,SAASe,eAAeA,CAACjB,QAA6B,EAA2B;EAC7E,MAAMe,IAA6B,GAAG,CAAC,CAAC;EACxC,KAAK,MAAM,CAACb,IAAI,EAAEM,KAAK,CAAC,IAAIR,QAAQ,EAAE;IAClC,IAAIkB,aAAa,CAACV,KAAK,CAAC,EAAE;MACtBO,IAAI,CAACb,IAAI,CAAC,GAAGP,IAAI,CAACa,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC,MAAM;MACHJ,IAAI,CAACb,IAAI,CAAC,GAAGP,IAAI,CAACa,KAAK,CAACY,QAAQ,CAAC,CAAC,CAAC;IACvC;EACJ;EACA,OAAOL,IAAI;AACf;AAEA,eAAeM,gBAAgBA,CAACrB,QAA6B,EAAoB;EAC7E,IAAIsB,QAAQ,GAAG,IAAI;EACnB,KAAK,MAAM,GAAGd,KAAK,CAAC,IAAIR,QAAQ,EAAE;IAC9B,MAAMuB,KAAK,GAAG,MAAMf,KAAK,CAACgB,QAAQ,CAAC,CAAC;IACpC,IAAI,CAACD,KAAK,EAAE;MACRD,QAAQ,GAAG,KAAK;IACpB;EACJ;EACA,OAAOA,QAAQ;AACnB;AAEA,OAAO,SAASJ,aAAaA,CAACV,KAAa,EAAwB;EAC/D,OAAOA,KAAK,CAACiB,IAAI,KAAK,QAAQ;AAClC;AAEA,IAAIC,cAAc,GAAG,CAAC;AAOtB;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMd,WAAW,CAAyB;EAIrCe,KAAK,GAAsB,IAAI;EAE/BC,MAAM,GAAe,EAAE;EAE/BC,WAAWA,CAACvB,MAA0B,EAAE;IACpC,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACwB,KAAK,GAAG,IAAIlC,KAAK,CAAC;MACnB,GAAGU,MAAM;MACTmB,IAAI,EAAE,QAAQ;MACdM,QAAQ,EAAEzB,MAAM,CAACyB,QAAQ,IAAI;IACjC,CAAC,CAAC;IACF,IAAI,CAACC,SAAS,GAAGnC,iBAAiB,CAACS,MAAM,CAACR,aAAa,EAAE,IAAI,CAAC;IAE9DL,kBAAkB,CAAC,IAAI,EAAE;MACrBa,MAAM,EAAE;IACZ,CAAC,CAAC;EACN;;EAEA;;EAEA,IAAIJ,IAAIA,CAAA,EAAW;IACf,OAAO,IAAI,CAAC4B,KAAK,CAAC5B,IAAI;EAC1B;EAEA,IAAIuB,IAAIA,CAAA,EAAW;IACf,OAAO,QAAQ;EACnB;EAEA,IAAIQ,OAAOA,CAAA,EAAY;IACnB,OAAO,IAAI,CAACH,KAAK,CAACG,OAAO;EAC7B;EAEAC,WAAWA,CAACC,KAAc,EAAQ;IAC9B,IAAI,CAACL,KAAK,CAACI,WAAW,CAACC,KAAK,CAAC;EACjC;EAEAC,UAAUA,CAACD,KAAc,EAAQ;IAC7B,IAAI,CAACL,KAAK,CAACM,UAAU,CAACD,KAAK,CAAC;EAChC;EAEAtB,OAAOA,CAACd,IAAgB,EAAQ;IAC5B,IAAI,CAAC4B,KAAK,GAAG5B,IAAI;IACjB,IAAI,CAAC+B,KAAK,CAACjB,OAAO,CAACd,IAAI,CAAC;IACxB,KAAK,MAAM,GAAGS,KAAK,CAAC,IAAI,IAAI,CAACwB,SAAS,EAAE;MACpCxB,KAAK,CAACK,OAAO,CAACd,IAAI,CAAC;IACvB;IACA,KAAK,MAAMsC,IAAI,IAAI,IAAI,CAACT,MAAM,EAAE;MAC5B,KAAK,MAAM,GAAGpB,KAAK,CAAC,IAAI6B,IAAI,CAACrC,QAAQ,EAAE;QACnCQ,KAAK,CAACK,OAAO,CAACd,IAAI,CAAC;MACvB;IACJ;EACJ;EAEAuC,aAAaA,CAACC,UAA4B,EAAQ;IAC9C,IAAI,CAACT,KAAK,CAACQ,aAAa,CAACC,UAAU,CAAC;EACxC;EAEAC,eAAeA,CAACC,EAAwB,EAAQ;IAC5C,IAAI,CAACX,KAAK,CAACU,eAAe,CAACC,EAAE,CAAC;EAClC;EAEAC,cAAcA,CAACD,EAAuB,EAAQ;IAC1C,IAAI,CAACX,KAAK,CAACY,cAAc,CAACD,EAAE,CAAC;EACjC;EAEAE,gBAAgBA,CAACF,EAAyB,EAAQ;IAC9C,IAAI,CAACX,KAAK,CAACa,gBAAgB,CAACF,EAAE,CAAC;EACnC;EAEAG,SAASA,CAACH,EAAkB,EAAQ;IAChC,IAAI,CAACX,KAAK,CAACc,SAAS,CAACH,EAAE,CAAC;EAC5B;EAEAI,IAAIA,CAAA,EAAS;IACT,IAAI,CAACf,KAAK,CAACe,IAAI,CAAC,CAAC;EACrB;EAEAC,MAAMA,CAAA,EAAS;IACX,IAAI,CAAChB,KAAK,CAACgB,MAAM,CAAC,CAAC;EACvB;;EAEA;;EAEA,IAAIC,MAAMA,CAAA,EAAY;IAClB,OAAO,IAAI,CAACzC,MAAM,CAACyC,MAAM;EAC7B;EAEA,IAAI/C,QAAQA,CAAA,EAAwB;IAChC,OAAO,IAAI,CAACgC,SAAS;EACzB;EAEA,IAAIgB,KAAKA,CAAA,EAAqB;IAC1B,OAAO,IAAI,CAACpB,MAAM,CAACqB,GAAG,CAACZ,IAAI,KAAK;MAC5Ba,GAAG,EAAEb,IAAI,CAACa,GAAG;MACblD,QAAQ,EAAEqC,IAAI,CAACrC,QAAQ;MACvBmB,OAAO,EAAEA,CAAA,KAAMF,eAAe,CAACoB,IAAI,CAACrC,QAAQ;IAChD,CAAC,CAAC,CAAC;EACP;EAEAmD,QAAQA,CAACjD,IAAY,EAAsB;IACvC,OAAO,IAAI,CAAC8B,SAAS,CAACoB,GAAG,CAAClD,IAAI,CAAC;EACnC;EAEAmD,gBAAgBA,CAACC,KAAa,EAAEpD,IAAY,EAAsB;IAC9D,MAAMmC,IAAI,GAAG,IAAI,CAACT,MAAM,CAAC0B,KAAK,CAAC;IAC/B,OAAOjB,IAAI,EAAErC,QAAQ,CAACoD,GAAG,CAAClD,IAAI,CAAC;EACnC;EAEAiB,OAAOA,CAAA,EAAQ;IACX,IAAI,IAAI,CAACb,MAAM,CAACyC,MAAM,EAAE;MACpB,OAAO,IAAI,CAACnB,MAAM,CAACqB,GAAG,CAACZ,IAAI,IAAIpB,eAAe,CAACoB,IAAI,CAACrC,QAAQ,CAAC,CAAC;IAClE;IACA,OAAOiB,eAAe,CAAC,IAAI,CAACe,SAAS,CAAC;EAC1C;EAEAZ,QAAQA,CAAA,EAAmB;IACvB,OAAO,IAAI,CAACD,OAAO,CAAC,CAAC;EACzB;EAEAoC,QAAQA,CAACpB,KAAc,EAAQ;IAC3B,IAAI,CAACnB,cAAc,CAACmB,KAAK,CAAC;EAC9B;EAEAnB,cAAcA,CAACmB,KAAc,EAAQ;IACjC,IAAI,IAAI,CAAC7B,MAAM,CAACyC,MAAM,EAAE;MACpB,IAAI,CAACnB,MAAM,GAAG,EAAE;MAChB,IAAI4B,KAAK,CAACC,OAAO,CAACtB,KAAK,CAAC,EAAE;QACtB,KAAK,MAAMuB,QAAQ,IAAIvB,KAAK,EAAE;UAC1B,IAAI,CAACwB,gBAAgB,CAACD,QAAQ,CAAC;QACnC;MACJ;IACJ,CAAC,MAAM;MACH5C,eAAe,CAAC,IAAI,CAACkB,SAAS,EAAEG,KAAgC,CAAC;IACrE;EACJ;EAEAyB,OAAOA,CAAC7C,IAA8B,EAAQ;IAC1C,IAAI,CAAC4C,gBAAgB,CAAC5C,IAAI,CAAC;EAC/B;EAEA8C,UAAUA,CAACP,KAAa,EAAQ;IAC5B,IAAI,CAAC1B,MAAM,CAACkC,MAAM,CAACR,KAAK,EAAE,CAAC,CAAC;EAChC;EAEAS,QAAQA,CAACC,SAAiB,EAAEC,OAAe,EAAQ;IAC/C,IACID,SAAS,GAAG,CAAC,IACbA,SAAS,IAAI,IAAI,CAACpC,MAAM,CAACsC,MAAM,IAC/BD,OAAO,GAAG,CAAC,IACXA,OAAO,IAAI,IAAI,CAACrC,MAAM,CAACsC,MAAM,IAC7BF,SAAS,KAAKC,OAAO,EACvB;MACE;IACJ;IACA,MAAM,CAAC5B,IAAI,CAAC,GAAG,IAAI,CAACT,MAAM,CAACkC,MAAM,CAACE,SAAS,EAAE,CAAC,CAAC;IAC/C,IAAI,CAACpC,MAAM,CAACkC,MAAM,CAACG,OAAO,EAAE,CAAC,EAAE5B,IAAI,CAAC;EACxC;EAEQsB,gBAAgBA,CAAC5C,IAA8B,EAAQ;IAC3D,MAAMf,QAAQ,GAAGH,iBAAiB,CAAC,IAAI,CAACS,MAAM,CAACR,aAAa,EAAE,IAAI,CAAC6B,KAAK,CAAC;IACzE,IAAIZ,IAAI,EAAE;MACND,eAAe,CAACd,QAAQ,EAAEe,IAAI,CAAC;IACnC;IACA,MAAMmC,GAAG,GAAG,QAAQ,EAAExB,cAAc,EAAE;IACtC,IAAI,CAACE,MAAM,CAACuC,IAAI,CAAC;MAAEjB,GAAG;MAAElD;IAAS,CAAC,CAAC;EACvC;EAEAoE,eAAeA,CAAA,EAAS;IACpB,IAAI,CAACtC,KAAK,CAACsC,eAAe,CAAC,CAAC;IAC5B,KAAK,MAAM,GAAG5D,KAAK,CAAC,IAAI,IAAI,CAACwB,SAAS,EAAE;MACpCxB,KAAK,CAAC4D,eAAe,CAAC,CAAC;IAC3B;IACA,KAAK,MAAM/B,IAAI,IAAI,IAAI,CAACT,MAAM,EAAE;MAC5B,KAAK,MAAM,GAAGpB,KAAK,CAAC,IAAI6B,IAAI,CAACrC,QAAQ,EAAE;QACnCQ,KAAK,CAAC4D,eAAe,CAAC,CAAC;MAC3B;IACJ;EACJ;EAEAC,EAAEA,CAA+B5C,IAAO,EAAmB;IACvD,IAAIA,IAAI,KAAK,QAAQ,EAAE;MACnB,MAAM,IAAI6C,KAAK,CAAC,UAAU,IAAI,CAAChE,MAAM,CAACJ,IAAI,4BAA4BuB,IAAI,IAAI,CAAC;IACnF;IACA,OAAO,IAAI;EACf;EAEA,IAAI8C,EAAEA,CAAA,EAAmB;IACrB,MAAMC,MAAM,GAAG,IAAI,CAAC1C,KAAK,CAACyC,EAAE;IAC5B,OAAO;MACHrE,IAAI,EAAEsE,MAAM,CAACtE,IAAI;MACjBuB,IAAI,EAAE,QAAQ;MACdgD,KAAK,EAAED,MAAM,CAACC,KAAK;MACnBC,IAAI,EAAEF,MAAM,CAACE,IAAI;MACjBC,WAAW,EAAEH,MAAM,CAACG,WAAW;MAC/BC,IAAI,EAAEJ,MAAM,CAACI,IAAI;MACjBC,WAAW,EAAEL,MAAM,CAACK,WAAW;MAC/B1C,KAAK,EAAE,IAAI,CAACf,QAAQ,CAAC,CAAC;MACtBmB,UAAU,EAAEiC,MAAM,CAACjC,UAAU;MAC7BuC,QAAQ,EAAEN,MAAM,CAACM,QAAQ;MACzBC,QAAQ,EAAEP,MAAM,CAACO,QAAQ;MACzBhD,QAAQ,EAAEyC,MAAM,CAACzC,QAAQ;MACzBiD,gBAAgB,EAAER,MAAM,CAACQ,gBAAgB;MACzCC,QAAQ,EAAG9C,KAAc,IAAK,IAAI,CAACoB,QAAQ,CAACpB,KAAK,CAAC;MAClD+C,MAAM,EAAEA,CAAA,KAAM,IAAI,CAACrC,IAAI,CAAC,CAAC;MACzBE,MAAM,EAAE,IAAI,CAACzC,MAAM,CAACyC,MAAM;MAC1BoC,MAAM,EAAE,IAAI,CAAC7E,MAAM,CAACyC,MAAM,GACpB,EAAE,GACFS,KAAK,CAAC4B,IAAI,CAAC,IAAI,CAACpD,SAAS,CAACqD,MAAM,CAAC,CAAC,CAAC,CAC9BC,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACtD,OAAO,CAAC,CACtBgB,GAAG,CAACsC,CAAC,IAAIA,CAAC,CAAChB,EAAE,CAAC;MACzBvB,KAAK,EAAE,IAAI,CAAC1C,MAAM,CAACyC,MAAM,GACnB,IAAI,CAACnB,MAAM,CAACqB,GAAG,CAAC,CAACZ,IAAI,EAAEiB,KAAK,MAAM;QAC9BJ,GAAG,EAAEb,IAAI,CAACa,GAAG;QACbiC,MAAM,EAAE3B,KAAK,CAAC4B,IAAI,CAAC/C,IAAI,CAACrC,QAAQ,CAACqF,MAAM,CAAC,CAAC,CAAC,CACrCC,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACtD,OAAO,CAAC,CACtBgB,GAAG,CAACsC,CAAC,IAAIA,CAAC,CAAChB,EAAE,CAAC;QACnBzB,MAAM,EAAEA,CAAA,KAAM,IAAI,CAACe,UAAU,CAACP,KAAK,CAAC;QACpCkC,MAAM,EAAEA,CAAA,KAAM,IAAI,CAACzB,QAAQ,CAACT,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC;QAC7CmC,QAAQ,EAAEA,CAAA,KAAM,IAAI,CAAC1B,QAAQ,CAACT,KAAK,EAAEA,KAAK,GAAG,CAAC;MAClD,CAAC,CAAC,CAAC,GACH,EAAE;MACRM,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACA,OAAO,CAAC,CAAC;MAC7BC,UAAU,EAAGP,KAAa,IAAK,IAAI,CAACO,UAAU,CAACP,KAAK,CAAC;MACrDS,QAAQ,EAAEA,CAACqB,IAAY,EAAEM,EAAU,KAAK,IAAI,CAAC3B,QAAQ,CAACqB,IAAI,EAAEM,EAAE;IAClE,CAAC;EACL;EAEA,IAAIC,SAASA,CAAA,EAAY;IACrB,MAAMC,aAAa,GAAI5F,QAA6B,IAAc;MAC9D,KAAK,MAAM,GAAGQ,KAAK,CAAC,IAAIR,QAAQ,EAAE;QAC9B,IAAIQ,KAAK,CAAC+D,EAAE,CAAChC,UAAU,CAACsD,OAAO,KAAK,KAAK,EAAE;UACvC,OAAO,IAAI;QACf;QACA,IAAI3E,aAAa,CAACV,KAAK,CAAC,IAAIA,KAAK,CAACmF,SAAS,EAAE;UACzC,OAAO,IAAI;QACf;MACJ;MACA,OAAO,KAAK;IAChB,CAAC;IAED,IAAI,IAAI,CAACrF,MAAM,CAACyC,MAAM,EAAE;MACpB,KAAK,MAAMV,IAAI,IAAI,IAAI,CAACT,MAAM,EAAE;QAC5B,IAAIgE,aAAa,CAACvD,IAAI,CAACrC,QAAQ,CAAC,EAAE;UAC9B,OAAO,IAAI;QACf;MACJ;IACJ,CAAC,MAAM;MACH,IAAI4F,aAAa,CAAC,IAAI,CAAC5D,SAAS,CAAC,EAAE;QAC/B,OAAO,IAAI;MACf;IACJ;IACA,OAAO,KAAK;EAChB;EAEA,MAAMR,QAAQA,CAAA,EAAqB;IAC/B,IAAI,IAAI,CAAClB,MAAM,CAACwE,QAAQ,EAAE;MACtB,IAAI,IAAI,CAACxE,MAAM,CAACyC,MAAM,IAAI,IAAI,CAACnB,MAAM,CAACsC,MAAM,KAAK,CAAC,EAAE;QAChD,IAAI,CAAC5B,aAAa,CAAC;UACfuD,OAAO,EAAE,KAAK;UACdC,OAAO,EAAE,IAAI,CAACxF,MAAM,CAACyF,eAAe,IAAI;QAC5C,CAAC,CAAC;QACF,OAAO,KAAK;MAChB;MACA,IAAI,CAAC,IAAI,CAACzF,MAAM,CAACyC,MAAM,EAAE;QACrB,MAAMhC,IAAI,GAAG,IAAI,CAACI,OAAO,CAAC,CAAC;QAC3B,MAAM6E,WAAW,GAAG5F,MAAM,CAACiF,MAAM,CAACtE,IAAI,CAAC,CAACkF,IAAI,CACxCC,CAAC,IAAIA,CAAC,KAAK,IAAI,IAAIA,CAAC,KAAKC,SAAS,IAAID,CAAC,KAAK,EAChD,CAAC;QACD,IAAI,CAACF,WAAW,EAAE;UACd,IAAI,CAAC1D,aAAa,CAAC;YACfuD,OAAO,EAAE,KAAK;YACdC,OAAO,EAAE,IAAI,CAACxF,MAAM,CAACyF,eAAe,IAAI;UAC5C,CAAC,CAAC;UACF,OAAO,KAAK;QAChB;MACJ;IACJ;IAEA,IAAI,IAAI,CAACzF,MAAM,CAACyC,MAAM,IAAI,IAAI,CAACzC,MAAM,CAAC8F,UAAU,EAAE;MAC9C,MAAMC,QAAQ,GAAG,IAAI,CAAClF,OAAO,CAAC,CAAC;MAC/B,MAAMmF,MAAM,GAAG,MAAM,IAAI,CAAChG,MAAM,CAAC8F,UAAU,CAACG,cAAc,CAACF,QAAQ,CAAC;MACpE,IAAI,CAACC,MAAM,CAACE,OAAO,EAAE;QACjB,MAAMC,UAAU,GAAGH,MAAM,CAACI,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC;QACzCjH,WAAW,CAAC,MAAM;UACd,IAAI,CAAC4C,aAAa,CAAC;YACfuD,OAAO,EAAE,KAAK;YACdC,OAAO,EAAEW,UAAU,EAAEX,OAAO,IAAI;UACpC,CAAC,CAAC;QACN,CAAC,CAAC;QACF,OAAO,KAAK;MAChB;IACJ;IAEA,IAAI,IAAI,CAACxF,MAAM,CAACsG,MAAM,EAAE;MACpB,MAAM7F,IAAI,GAAG,IAAI,CAACI,OAAO,CAAC,CAAC;MAC3B,MAAMmF,MAAM,GAAG,MAAM,IAAI,CAAChG,MAAM,CAACsG,MAAM,CAACL,cAAc,CAACxF,IAAI,CAAC;MAC5D,IAAI,CAACuF,MAAM,CAACE,OAAO,EAAE;QACjB,MAAMC,UAAU,GAAGH,MAAM,CAACI,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC;QACzCjH,WAAW,CAAC,MAAM;UACd,IAAI,CAAC4C,aAAa,CAAC;YACfuD,OAAO,EAAE,KAAK;YACdC,OAAO,EAAEW,UAAU,EAAEX,OAAO,IAAI;UACpC,CAAC,CAAC;QACN,CAAC,CAAC;QACF,OAAO,KAAK;MAChB;IACJ;IAEA,IAAIxE,QAAQ,GAAG,IAAI;IAEnB,IAAI,IAAI,CAAChB,MAAM,CAACyC,MAAM,EAAE;MACpB,KAAK,MAAMV,IAAI,IAAI,IAAI,CAACT,MAAM,EAAE;QAC5B,MAAML,KAAK,GAAG,MAAMF,gBAAgB,CAACgB,IAAI,CAACrC,QAAQ,CAAC;QACnD,IAAI,CAACuB,KAAK,EAAE;UACRD,QAAQ,GAAG,KAAK;QACpB;MACJ;IACJ,CAAC,MAAM;MACHA,QAAQ,GAAG,MAAMD,gBAAgB,CAAC,IAAI,CAACW,SAAS,CAAC;IACrD;IAEAtC,WAAW,CAAC,MAAM;MACd,IAAI,CAAC4C,aAAa,CAAC;QAAEuD,OAAO,EAAEvE;MAAS,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,OAAOA,QAAQ;EACnB;AACJ","ignoreList":[]}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
+
export interface IFieldRendererRegistry {
|
|
3
|
+
}
|
|
4
|
+
export type FieldRendererName<TType extends string = string> = string extends TType ? keyof IFieldRendererRegistry & string : {
|
|
5
|
+
[K in keyof IFieldRendererRegistry]: TType extends IFieldRendererRegistry[K]["fieldType"] ? K : never;
|
|
6
|
+
}[keyof IFieldRendererRegistry] & string;
|
|
7
|
+
export type FieldRendererSettings<TName extends string> = TName extends keyof IFieldRendererRegistry ? IFieldRendererRegistry[TName]["settings"] : Record<string, unknown> | undefined;
|
|
2
8
|
export interface IFieldConfig {
|
|
3
9
|
name: string;
|
|
4
10
|
type: string;
|
|
5
11
|
label?: string;
|
|
12
|
+
help?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
note?: string;
|
|
6
15
|
placeholder?: string;
|
|
7
16
|
defaultValue?: unknown;
|
|
8
17
|
renderer?: string;
|
|
18
|
+
rendererSettings?: Record<string, unknown>;
|
|
9
19
|
hidden: boolean;
|
|
10
20
|
required: boolean;
|
|
11
21
|
requiredMessage?: string;
|
|
@@ -30,23 +40,53 @@ export interface IFieldVM {
|
|
|
30
40
|
name: string;
|
|
31
41
|
type: string;
|
|
32
42
|
label?: string;
|
|
43
|
+
help?: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
note?: string;
|
|
33
46
|
placeholder?: string;
|
|
34
47
|
value: unknown;
|
|
35
48
|
validation: IFieldValidation;
|
|
36
49
|
required: boolean;
|
|
37
50
|
disabled: boolean;
|
|
38
51
|
renderer?: string;
|
|
52
|
+
rendererSettings?: Record<string, unknown>;
|
|
39
53
|
options?: IValueOption[];
|
|
40
54
|
onChange: (value: unknown) => void;
|
|
41
55
|
onBlur: () => void;
|
|
42
56
|
}
|
|
57
|
+
export interface IObjectFieldVM extends IFieldVM {
|
|
58
|
+
type: "object";
|
|
59
|
+
isList: boolean;
|
|
60
|
+
/** Child field VMs for non-list object fields. */
|
|
61
|
+
fields: IFieldVM[];
|
|
62
|
+
/** Items for list-mode object fields. */
|
|
63
|
+
items: IObjectFieldItemVM[];
|
|
64
|
+
addItem: () => void;
|
|
65
|
+
removeItem: (index: number) => void;
|
|
66
|
+
moveItem: (fromIndex: number, toIndex: number) => void;
|
|
67
|
+
}
|
|
68
|
+
export interface IObjectFieldItemVM {
|
|
69
|
+
key: string;
|
|
70
|
+
fields: IFieldVM[];
|
|
71
|
+
remove: () => void;
|
|
72
|
+
moveUp: () => void;
|
|
73
|
+
moveDown: () => void;
|
|
74
|
+
}
|
|
43
75
|
export interface IField {
|
|
44
76
|
readonly name: string;
|
|
45
77
|
readonly type: string;
|
|
78
|
+
readonly visible: boolean;
|
|
79
|
+
readonly vm: IFieldVM;
|
|
80
|
+
readonly config: IFieldConfig;
|
|
46
81
|
getValue<T = unknown>(): T;
|
|
47
82
|
setValue(value: unknown): void;
|
|
83
|
+
setValueSilent(value: unknown): void;
|
|
48
84
|
setDisabled(value: boolean): void;
|
|
49
85
|
setVisible(value: boolean): void;
|
|
86
|
+
setForm(form: IFormModel): void;
|
|
87
|
+
setValidation(validation: IFieldValidation): void;
|
|
88
|
+
resetValidation(): void;
|
|
89
|
+
validate(): Promise<boolean>;
|
|
50
90
|
remove(): void;
|
|
51
91
|
addBeforeChange(cb: BeforeChangeCallback): void;
|
|
52
92
|
addAfterChange(cb: AfterChangeCallback): void;
|
|
@@ -54,8 +94,6 @@ export interface IField {
|
|
|
54
94
|
addOnBlur(cb: OnBlurCallback): void;
|
|
55
95
|
blur(): void;
|
|
56
96
|
as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T];
|
|
57
|
-
readonly vm: IFieldVM;
|
|
58
|
-
readonly config: IFieldConfig;
|
|
59
97
|
}
|
|
60
98
|
/**
|
|
61
99
|
* Maps field type strings to their typed field interfaces.
|
|
@@ -64,17 +102,37 @@ export interface IField {
|
|
|
64
102
|
export interface FieldTypeMap {
|
|
65
103
|
text: IField;
|
|
66
104
|
select: ISelectField;
|
|
105
|
+
object: IObjectField;
|
|
67
106
|
}
|
|
68
107
|
export interface ISelectField extends IField {
|
|
69
108
|
readonly config: IFieldConfig & {
|
|
70
109
|
options?: IValueOption[] | ((form: IFormModel) => IValueOption[]);
|
|
71
110
|
};
|
|
72
111
|
}
|
|
112
|
+
export interface IObjectFieldConfig extends IFieldConfig {
|
|
113
|
+
childBuilders: Record<string, IFieldBuilder>;
|
|
114
|
+
isList: boolean;
|
|
115
|
+
listSchema?: z.ZodTypeAny;
|
|
116
|
+
}
|
|
117
|
+
export interface IObjectField extends IField {
|
|
118
|
+
readonly isList: boolean;
|
|
119
|
+
readonly children: Map<string, IField>;
|
|
120
|
+
readonly items: IListItemField[];
|
|
121
|
+
addItem(data?: Record<string, unknown>): void;
|
|
122
|
+
removeItem(index: number): void;
|
|
123
|
+
moveItem(fromIndex: number, toIndex: number): void;
|
|
124
|
+
getData(): Record<string, unknown> | Record<string, unknown>[];
|
|
125
|
+
}
|
|
126
|
+
export interface IListItemField {
|
|
127
|
+
readonly key: string;
|
|
128
|
+
readonly children: Map<string, IField>;
|
|
129
|
+
getData(): Record<string, unknown>;
|
|
130
|
+
}
|
|
73
131
|
export type BeforeChangeCallback = (value: unknown, form: IFormModel) => unknown;
|
|
74
132
|
export type AfterChangeCallback = (value: unknown, form: IFormModel) => void;
|
|
75
133
|
export type AfterSetValueCallback = (value: unknown, form: IFormModel) => void;
|
|
76
134
|
export type OnBlurCallback = (value: unknown, form: IFormModel) => void;
|
|
77
|
-
export type LayoutNode = IRowNode | ISeparatorNode | ITabsNode | IElementNode
|
|
135
|
+
export type LayoutNode = IRowNode | ISeparatorNode | ITabsNode | IElementNode;
|
|
78
136
|
export interface IRowNode {
|
|
79
137
|
type: "row";
|
|
80
138
|
fieldIds: string[];
|
|
@@ -92,6 +150,7 @@ export interface ITabDefinition {
|
|
|
92
150
|
export interface ITabsNode {
|
|
93
151
|
type: "tabs";
|
|
94
152
|
id?: string;
|
|
153
|
+
renderer?: string;
|
|
95
154
|
tabs: ITabDefinition[];
|
|
96
155
|
}
|
|
97
156
|
export interface IElementNode {
|
|
@@ -100,12 +159,6 @@ export interface IElementNode {
|
|
|
100
159
|
renderer: string;
|
|
101
160
|
props?: Record<string, unknown>;
|
|
102
161
|
}
|
|
103
|
-
export interface IObjectNode {
|
|
104
|
-
type: "object";
|
|
105
|
-
fieldId: string;
|
|
106
|
-
layout?: LayoutNode[];
|
|
107
|
-
templates?: Record<string, LayoutNode[]>;
|
|
108
|
-
}
|
|
109
162
|
export type LayoutNodeVM = IRowNodeVM | ISeparatorNodeVM | ITabsNodeVM | IElementNodeVM;
|
|
110
163
|
export interface IRowNodeVM {
|
|
111
164
|
type: "row";
|
|
@@ -125,6 +178,7 @@ export interface ITabDefinitionVM {
|
|
|
125
178
|
export interface ITabsNodeVM {
|
|
126
179
|
type: "tabs";
|
|
127
180
|
id?: string;
|
|
181
|
+
renderer?: string;
|
|
128
182
|
tabs: ITabDefinitionVM[];
|
|
129
183
|
activeTabId: string;
|
|
130
184
|
setActiveTab: (id: string) => void;
|
|
@@ -177,6 +231,7 @@ export interface ILayoutModifier {
|
|
|
177
231
|
separator(): ILayoutNodeHandle;
|
|
178
232
|
tabs(config: {
|
|
179
233
|
id?: string;
|
|
234
|
+
renderer?: string;
|
|
180
235
|
tabs: ITabDefinition[];
|
|
181
236
|
}): ILayoutNodeHandle;
|
|
182
237
|
element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle;
|
|
@@ -193,13 +248,13 @@ export interface IFormVM {
|
|
|
193
248
|
isDirty: boolean;
|
|
194
249
|
isValid: boolean | null;
|
|
195
250
|
}
|
|
196
|
-
export interface IFormModel {
|
|
251
|
+
export interface IFormModel<T = Record<string, any>> {
|
|
197
252
|
field(name: string): IField;
|
|
198
253
|
fields(factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>): void;
|
|
199
254
|
layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;
|
|
200
255
|
layout(nodeId: string): ILayoutNodeAccessHandle;
|
|
201
|
-
getData():
|
|
202
|
-
setData(data:
|
|
256
|
+
getData(): T;
|
|
257
|
+
setData(data: T): void;
|
|
203
258
|
reset(): void;
|
|
204
259
|
validate(): Promise<boolean>;
|
|
205
260
|
submit<T = Record<string, unknown>>(): Promise<T | false>;
|
|
@@ -215,6 +270,8 @@ export declare namespace FormModel {
|
|
|
215
270
|
type FieldVM = IFieldVM;
|
|
216
271
|
type Field = IField;
|
|
217
272
|
type SelectField = ISelectField;
|
|
273
|
+
type ObjectField = IObjectField;
|
|
274
|
+
type ObjectFieldConfig = IObjectFieldConfig;
|
|
218
275
|
type BeforeChange = BeforeChangeCallback;
|
|
219
276
|
type AfterChange = AfterChangeCallback;
|
|
220
277
|
type AfterSetValue = AfterSetValueCallback;
|
|
@@ -229,15 +286,16 @@ export declare namespace FormModel {
|
|
|
229
286
|
type TabDefinitionVM = ITabDefinitionVM;
|
|
230
287
|
type ElementNode = IElementNode;
|
|
231
288
|
type ElementNodeVM = IElementNodeVM;
|
|
232
|
-
type
|
|
289
|
+
type ObjectFieldVM = IObjectFieldVM;
|
|
290
|
+
type ObjectFieldItemVM = IObjectFieldItemVM;
|
|
233
291
|
type FormError = IFormError;
|
|
234
292
|
type FormVM = IFormVM;
|
|
235
|
-
type Interface = IFormModel
|
|
293
|
+
type Interface<T = Record<string, any>> = IFormModel<T>;
|
|
236
294
|
type Modifier = IFormModifier;
|
|
237
295
|
type LayoutModifier = ILayoutModifier;
|
|
238
296
|
}
|
|
239
297
|
export interface IFormModelFactory {
|
|
240
|
-
create(config: IFormModelConfig): IFormModel
|
|
298
|
+
create<T = Record<string, any>>(config: IFormModelConfig): IFormModel<T>;
|
|
241
299
|
}
|
|
242
300
|
export interface IFormModelConfig {
|
|
243
301
|
fields: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>;
|
|
@@ -249,16 +307,20 @@ export interface ILayoutBuilder {
|
|
|
249
307
|
separator(): ISeparatorNode;
|
|
250
308
|
tabs(config: {
|
|
251
309
|
id?: string;
|
|
310
|
+
renderer?: string;
|
|
252
311
|
tabs: ITabDefinition[];
|
|
253
312
|
}): ITabsNode;
|
|
254
313
|
element(renderer: string, props?: Record<string, unknown>): IElementNode;
|
|
255
314
|
}
|
|
256
|
-
export interface IFieldBuilder {
|
|
315
|
+
export interface IFieldBuilder<TType extends string = string> {
|
|
257
316
|
label(text: string): this;
|
|
317
|
+
help(text: string): this;
|
|
318
|
+
description(text: string): this;
|
|
319
|
+
note(text: string): this;
|
|
258
320
|
placeholder(text: string): this;
|
|
259
321
|
schema(zodSchema: z.ZodTypeAny): this;
|
|
260
322
|
defaultValue(value: unknown): this;
|
|
261
|
-
renderer(name:
|
|
323
|
+
renderer<TName extends FieldRendererName<TType>>(name: TName, ...args: undefined extends FieldRendererSettings<TName> ? [settings?: FieldRendererSettings<TName>] : FieldRendererSettings<TName> extends undefined ? [] : [settings: FieldRendererSettings<TName>]): this;
|
|
262
324
|
hidden(): this;
|
|
263
325
|
required(message?: string): this;
|
|
264
326
|
disabled(value?: boolean): this;
|
|
@@ -268,12 +330,18 @@ export interface IFieldBuilder {
|
|
|
268
330
|
onBlur(fn: OnBlurCallback): this;
|
|
269
331
|
build(name: string): IFieldConfig;
|
|
270
332
|
}
|
|
271
|
-
export interface ISelectFieldBuilder extends IFieldBuilder {
|
|
333
|
+
export interface ISelectFieldBuilder extends IFieldBuilder<"select"> {
|
|
272
334
|
options(opts: IValueOption[] | ((form: IFormModel) => IValueOption[])): this;
|
|
273
335
|
}
|
|
336
|
+
export interface IObjectFieldBuilder extends IFieldBuilder<"object"> {
|
|
337
|
+
fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;
|
|
338
|
+
list(): this;
|
|
339
|
+
listSchema(schema: z.ZodTypeAny): this;
|
|
340
|
+
}
|
|
274
341
|
export interface IFieldBuilderRegistry {
|
|
275
|
-
text(): IFieldBuilder
|
|
342
|
+
text(): IFieldBuilder<"text">;
|
|
276
343
|
select(): ISelectFieldBuilder;
|
|
344
|
+
object(): IObjectFieldBuilder;
|
|
277
345
|
}
|
|
278
346
|
export declare const FormModelFactory: import("@webiny/di").Abstraction<IFormModelFactory>;
|
|
279
347
|
export declare namespace FormModelFactory {
|
|
@@ -282,5 +350,6 @@ export declare namespace FormModelFactory {
|
|
|
282
350
|
type LayoutBuilder = ILayoutBuilder;
|
|
283
351
|
type FieldBuilder = IFieldBuilder;
|
|
284
352
|
type SelectFieldBuilder = ISelectFieldBuilder;
|
|
353
|
+
type ObjectFieldBuilder = IObjectFieldBuilder;
|
|
285
354
|
type FieldBuilderRegistry = IFieldBuilderRegistry;
|
|
286
355
|
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/admin";
|
|
2
2
|
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Renderer registry — augmented by each renderer via declare module
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
|
|
3
7
|
// ---------------------------------------------------------------------------
|
|
4
8
|
// Field types
|
|
5
9
|
// ---------------------------------------------------------------------------
|
|
@@ -9,6 +13,10 @@ import { createAbstraction } from "@webiny/feature/admin";
|
|
|
9
13
|
* Extended via module augmentation when new field types are registered.
|
|
10
14
|
*/
|
|
11
15
|
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Object / List field types
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
12
20
|
// ---------------------------------------------------------------------------
|
|
13
21
|
// Callback types
|
|
14
22
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","FormModel","FormModelFactory"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Field types\n// ---------------------------------------------------------------------------\n\nexport interface IFieldConfig {\n name: string;\n type: string;\n label?: string;\n placeholder?: string;\n defaultValue?: unknown;\n renderer?: string;\n hidden: boolean;\n required: boolean;\n requiredMessage?: string;\n disabled: boolean;\n schema?: z.ZodTypeAny;\n options?: IValueOption[] | ((form: IFormModel) => IValueOption[]);\n beforeChangeCallbacks?: BeforeChangeCallback[];\n afterChangeCallbacks?: AfterChangeCallback[];\n afterSetValueCallbacks?: AfterSetValueCallback[];\n onBlurCallbacks?: OnBlurCallback[];\n}\n\nexport interface IValueOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface IFieldValidation {\n isValid: boolean | null;\n message?: string;\n}\n\nexport interface IFieldVM {\n name: string;\n type: string;\n label?: string;\n placeholder?: string;\n value: unknown;\n validation: IFieldValidation;\n required: boolean;\n disabled: boolean;\n renderer?: string;\n options?: IValueOption[];\n onChange: (value: unknown) => void;\n onBlur: () => void;\n}\n\nexport interface IField {\n readonly name: string;\n readonly type: string;\n getValue<T = unknown>(): T;\n setValue(value: unknown): void;\n setDisabled(value: boolean): void;\n setVisible(value: boolean): void;\n remove(): void;\n addBeforeChange(cb: BeforeChangeCallback): void;\n addAfterChange(cb: AfterChangeCallback): void;\n addAfterSetValue(cb: AfterSetValueCallback): void;\n addOnBlur(cb: OnBlurCallback): void;\n blur(): void;\n as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T];\n readonly vm: IFieldVM;\n readonly config: IFieldConfig;\n}\n\n/**\n * Maps field type strings to their typed field interfaces.\n * Extended via module augmentation when new field types are registered.\n */\nexport interface FieldTypeMap {\n text: IField;\n select: ISelectField;\n}\n\nexport interface ISelectField extends IField {\n readonly config: IFieldConfig & {\n options?: IValueOption[] | ((form: IFormModel) => IValueOption[]);\n };\n}\n\n// ---------------------------------------------------------------------------\n// Callback types\n// ---------------------------------------------------------------------------\n\nexport type BeforeChangeCallback = (value: unknown, form: IFormModel) => unknown;\nexport type AfterChangeCallback = (value: unknown, form: IFormModel) => void;\nexport type AfterSetValueCallback = (value: unknown, form: IFormModel) => void;\nexport type OnBlurCallback = (value: unknown, form: IFormModel) => void;\n\n// ---------------------------------------------------------------------------\n// Layout types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNode = IRowNode | ISeparatorNode | ITabsNode | IElementNode | IObjectNode;\n\nexport interface IRowNode {\n type: \"row\";\n fieldIds: string[];\n}\n\nexport interface ISeparatorNode {\n type: \"separator\";\n}\n\nexport interface ITabDefinition {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n layout: LayoutNode[];\n}\n\nexport interface ITabsNode {\n type: \"tabs\";\n id?: string;\n tabs: ITabDefinition[];\n}\n\nexport interface IElementNode {\n type: \"element\";\n id?: string;\n renderer: string;\n props?: Record<string, unknown>;\n}\n\nexport interface IObjectNode {\n type: \"object\";\n fieldId: string;\n layout?: LayoutNode[];\n templates?: Record<string, LayoutNode[]>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout VM types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNodeVM = IRowNodeVM | ISeparatorNodeVM | ITabsNodeVM | IElementNodeVM;\n\nexport interface IRowNodeVM {\n type: \"row\";\n fields: IFieldVM[];\n}\n\nexport interface ISeparatorNodeVM {\n type: \"separator\";\n}\n\nexport interface ITabDefinitionVM {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n hasErrors: boolean;\n layout: LayoutNodeVM[];\n}\n\nexport interface ITabsNodeVM {\n type: \"tabs\";\n id?: string;\n tabs: ITabDefinitionVM[];\n activeTabId: string;\n setActiveTab: (id: string) => void;\n}\n\nexport interface IElementNodeVM {\n type: \"element\";\n renderer: string;\n props?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout modifier types\n// ---------------------------------------------------------------------------\n\nexport type LayoutPosition =\n | { type: \"before\"; target: string }\n | { type: \"after\"; target: string }\n | { type: \"replace\"; target: string };\n\nexport interface IPositionedLayoutNode {\n node: LayoutNode;\n position?: LayoutPosition;\n}\n\n/**\n * Chainable handle returned by modifier layout.row().\n * Can be used as-is (appended) or positioned via .before()/.after()/.replace().\n */\nexport interface ILayoutNodeHandle extends IPositionedLayoutNode {\n before(target: string): IPositionedLayoutNode;\n after(target: string): IPositionedLayoutNode;\n replace(target: string): IPositionedLayoutNode;\n}\n\n// ---------------------------------------------------------------------------\n// Named layout node access types\n// ---------------------------------------------------------------------------\n\nexport interface ITabsHandle {\n tab(definition: ITabDefinition): ITabHandle;\n tab(id: string): ITabHandle;\n}\n\nexport interface ITabHandle {\n layout(factory: (layout: ILayoutBuilder) => LayoutNode[]): void;\n before(target: string): void;\n after(target: string): void;\n}\n\nexport interface ILayoutNodeAccessHandle {\n as(type: \"tabs\"): ITabsHandle;\n}\n\n// ---------------------------------------------------------------------------\n// Modifier types\n// ---------------------------------------------------------------------------\n\nexport interface IFormModifier {\n modify(form: IFormModel): void;\n}\n\nexport interface ILayoutModifier {\n row(...fieldIds: string[]): ILayoutNodeHandle;\n separator(): ILayoutNodeHandle;\n tabs(config: { id?: string; tabs: ITabDefinition[] }): ILayoutNodeHandle;\n element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle;\n remove(target: string): void;\n}\n\n// ---------------------------------------------------------------------------\n// Form types\n// ---------------------------------------------------------------------------\n\nexport interface IFormError {\n path: string;\n label?: string;\n message: string;\n}\n\nexport interface IFormVM {\n layout: LayoutNodeVM[];\n errors: IFormError[];\n isDirty: boolean;\n isValid: boolean | null;\n}\n\nexport interface IFormModel {\n field(name: string): IField;\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void;\n layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;\n layout(nodeId: string): ILayoutNodeAccessHandle;\n getData(): Record<string, unknown>;\n setData(data: Record<string, unknown>): void;\n reset(): void;\n validate(): Promise<boolean>;\n submit<T = Record<string, unknown>>(): Promise<T | false>;\n readonly isDirty: boolean;\n readonly isValid: boolean | null;\n readonly errors: IFormError[];\n readonly vm: IFormVM;\n}\n\n// ---------------------------------------------------------------------------\n// FormModel namespace — groups all public types under one import\n// ---------------------------------------------------------------------------\n\nexport namespace FormModel {\n export type FieldConfig = IFieldConfig;\n export type ValueOption = IValueOption;\n export type FieldValidation = IFieldValidation;\n export type FieldVM = IFieldVM;\n export type Field = IField;\n export type SelectField = ISelectField;\n export type BeforeChange = BeforeChangeCallback;\n export type AfterChange = AfterChangeCallback;\n export type AfterSetValue = AfterSetValueCallback;\n export type OnBlur = OnBlurCallback;\n export type RowNode = IRowNode;\n export type RowNodeVM = IRowNodeVM;\n export type SeparatorNode = ISeparatorNode;\n export type SeparatorNodeVM = ISeparatorNodeVM;\n export type TabsNode = ITabsNode;\n export type TabDefinition = ITabDefinition;\n export type TabsNodeVM = ITabsNodeVM;\n export type TabDefinitionVM = ITabDefinitionVM;\n export type ElementNode = IElementNode;\n export type ElementNodeVM = IElementNodeVM;\n export type ObjectNode = IObjectNode;\n export type FormError = IFormError;\n export type FormVM = IFormVM;\n export type Interface = IFormModel;\n export type Modifier = IFormModifier;\n export type LayoutModifier = ILayoutModifier;\n}\n\n// ---------------------------------------------------------------------------\n// FormModelFactory abstraction\n// ---------------------------------------------------------------------------\n\nexport interface IFormModelFactory {\n create(config: IFormModelConfig): IFormModel;\n}\n\nexport interface IFormModelConfig {\n fields: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>;\n layout?: (layout: ILayoutBuilder) => LayoutNode[];\n validateOnSubmit?: boolean;\n}\n\nexport interface ILayoutBuilder {\n row(...fieldIds: string[]): IRowNode;\n separator(): ISeparatorNode;\n tabs(config: { id?: string; tabs: ITabDefinition[] }): ITabsNode;\n element(renderer: string, props?: Record<string, unknown>): IElementNode;\n}\n\nexport interface IFieldBuilder {\n label(text: string): this;\n placeholder(text: string): this;\n schema(zodSchema: z.ZodTypeAny): this;\n defaultValue(value: unknown): this;\n renderer(name: string): this;\n hidden(): this;\n required(message?: string): this;\n disabled(value?: boolean): this;\n beforeChange(fn: BeforeChangeCallback): this;\n afterChange(fn: AfterChangeCallback): this;\n afterSetValue(fn: AfterSetValueCallback): this;\n onBlur(fn: OnBlurCallback): this;\n build(name: string): IFieldConfig;\n}\n\nexport interface ISelectFieldBuilder extends IFieldBuilder {\n options(opts: IValueOption[] | ((form: IFormModel) => IValueOption[])): this;\n}\n\nexport interface IFieldBuilderRegistry {\n text(): IFieldBuilder;\n select(): ISelectFieldBuilder;\n}\n\nexport const FormModelFactory = createAbstraction<IFormModelFactory>(\"FormModelFactory\");\n\nexport namespace FormModelFactory {\n export type Interface = IFormModelFactory;\n export type Config = IFormModelConfig;\n export type LayoutBuilder = ILayoutBuilder;\n export type FieldBuilder = IFieldBuilder;\n export type SelectFieldBuilder = ISelectFieldBuilder;\n export type FieldBuilderRegistry = IFieldBuilderRegistry;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,uBAAuB;;AAGzD;AACA;AACA;;AAiEA;AACA;AACA;AACA;;AAYA;AACA;AACA;;AAOA;AACA;AACA;;AAyCA;AACA;AACA;;AAoCA;AACA;AACA;;AAYA;AACA;AACA;AACA;;AAOA;AACA;AACA;;AAiBA;AACA;AACA;;AAcA;AACA;AACA;AAiCA;AACA;AACA;AAAA,WAEiBC,SAAS;AA6B1B;AACA;AACA;;AA4CA,OAAO,MAAMC,gBAAgB,GAAGF,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","FormModel","FormModelFactory"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Renderer registry — augmented by each renderer via declare module\n// ---------------------------------------------------------------------------\n\nexport interface IFieldRendererRegistry {}\n\nexport type FieldRendererName<TType extends string = string> = string extends TType\n ? keyof IFieldRendererRegistry & string\n : {\n [K in keyof IFieldRendererRegistry]: TType extends IFieldRendererRegistry[K][\"fieldType\"]\n ? K\n : never;\n }[keyof IFieldRendererRegistry] &\n string;\n\nexport type FieldRendererSettings<TName extends string> = TName extends keyof IFieldRendererRegistry\n ? IFieldRendererRegistry[TName][\"settings\"]\n : Record<string, unknown> | undefined;\n\n// ---------------------------------------------------------------------------\n// Field types\n// ---------------------------------------------------------------------------\n\nexport interface IFieldConfig {\n name: string;\n type: string;\n label?: string;\n help?: string;\n description?: string;\n note?: string;\n placeholder?: string;\n defaultValue?: unknown;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n hidden: boolean;\n required: boolean;\n requiredMessage?: string;\n disabled: boolean;\n schema?: z.ZodTypeAny;\n options?: IValueOption[] | ((form: IFormModel) => IValueOption[]);\n beforeChangeCallbacks?: BeforeChangeCallback[];\n afterChangeCallbacks?: AfterChangeCallback[];\n afterSetValueCallbacks?: AfterSetValueCallback[];\n onBlurCallbacks?: OnBlurCallback[];\n}\n\nexport interface IValueOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport interface IFieldValidation {\n isValid: boolean | null;\n message?: string;\n}\n\nexport interface IFieldVM {\n name: string;\n type: string;\n label?: string;\n help?: string;\n description?: string;\n note?: string;\n placeholder?: string;\n value: unknown;\n validation: IFieldValidation;\n required: boolean;\n disabled: boolean;\n renderer?: string;\n rendererSettings?: Record<string, unknown>;\n options?: IValueOption[];\n onChange: (value: unknown) => void;\n onBlur: () => void;\n}\n\nexport interface IObjectFieldVM extends IFieldVM {\n type: \"object\";\n isList: boolean;\n /** Child field VMs for non-list object fields. */\n fields: IFieldVM[];\n /** Items for list-mode object fields. */\n items: IObjectFieldItemVM[];\n addItem: () => void;\n removeItem: (index: number) => void;\n moveItem: (fromIndex: number, toIndex: number) => void;\n}\n\nexport interface IObjectFieldItemVM {\n key: string;\n fields: IFieldVM[];\n remove: () => void;\n moveUp: () => void;\n moveDown: () => void;\n}\n\nexport interface IField {\n readonly name: string;\n readonly type: string;\n readonly visible: boolean;\n readonly vm: IFieldVM;\n readonly config: IFieldConfig;\n getValue<T = unknown>(): T;\n setValue(value: unknown): void;\n setValueSilent(value: unknown): void;\n setDisabled(value: boolean): void;\n setVisible(value: boolean): void;\n setForm(form: IFormModel): void;\n setValidation(validation: IFieldValidation): void;\n resetValidation(): void;\n validate(): Promise<boolean>;\n remove(): void;\n addBeforeChange(cb: BeforeChangeCallback): void;\n addAfterChange(cb: AfterChangeCallback): void;\n addAfterSetValue(cb: AfterSetValueCallback): void;\n addOnBlur(cb: OnBlurCallback): void;\n blur(): void;\n as<T extends keyof FieldTypeMap>(type: T): FieldTypeMap[T];\n}\n\n/**\n * Maps field type strings to their typed field interfaces.\n * Extended via module augmentation when new field types are registered.\n */\nexport interface FieldTypeMap {\n text: IField;\n select: ISelectField;\n object: IObjectField;\n}\n\nexport interface ISelectField extends IField {\n readonly config: IFieldConfig & {\n options?: IValueOption[] | ((form: IFormModel) => IValueOption[]);\n };\n}\n\n// ---------------------------------------------------------------------------\n// Object / List field types\n// ---------------------------------------------------------------------------\n\nexport interface IObjectFieldConfig extends IFieldConfig {\n childBuilders: Record<string, IFieldBuilder>;\n isList: boolean;\n listSchema?: z.ZodTypeAny;\n}\n\nexport interface IObjectField extends IField {\n readonly isList: boolean;\n readonly children: Map<string, IField>;\n readonly items: IListItemField[];\n addItem(data?: Record<string, unknown>): void;\n removeItem(index: number): void;\n moveItem(fromIndex: number, toIndex: number): void;\n getData(): Record<string, unknown> | Record<string, unknown>[];\n}\n\nexport interface IListItemField {\n readonly key: string;\n readonly children: Map<string, IField>;\n getData(): Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Callback types\n// ---------------------------------------------------------------------------\n\nexport type BeforeChangeCallback = (value: unknown, form: IFormModel) => unknown;\nexport type AfterChangeCallback = (value: unknown, form: IFormModel) => void;\nexport type AfterSetValueCallback = (value: unknown, form: IFormModel) => void;\nexport type OnBlurCallback = (value: unknown, form: IFormModel) => void;\n\n// ---------------------------------------------------------------------------\n// Layout types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNode = IRowNode | ISeparatorNode | ITabsNode | IElementNode;\n\nexport interface IRowNode {\n type: \"row\";\n fieldIds: string[];\n}\n\nexport interface ISeparatorNode {\n type: \"separator\";\n}\n\nexport interface ITabDefinition {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n layout: LayoutNode[];\n}\n\nexport interface ITabsNode {\n type: \"tabs\";\n id?: string;\n renderer?: string;\n tabs: ITabDefinition[];\n}\n\nexport interface IElementNode {\n type: \"element\";\n id?: string;\n renderer: string;\n props?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout VM types\n// ---------------------------------------------------------------------------\n\nexport type LayoutNodeVM = IRowNodeVM | ISeparatorNodeVM | ITabsNodeVM | IElementNodeVM;\n\nexport interface IRowNodeVM {\n type: \"row\";\n fields: IFieldVM[];\n}\n\nexport interface ISeparatorNodeVM {\n type: \"separator\";\n}\n\nexport interface ITabDefinitionVM {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n hasErrors: boolean;\n layout: LayoutNodeVM[];\n}\n\nexport interface ITabsNodeVM {\n type: \"tabs\";\n id?: string;\n renderer?: string;\n tabs: ITabDefinitionVM[];\n activeTabId: string;\n setActiveTab: (id: string) => void;\n}\n\nexport interface IElementNodeVM {\n type: \"element\";\n renderer: string;\n props?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Layout modifier types\n// ---------------------------------------------------------------------------\n\nexport type LayoutPosition =\n | { type: \"before\"; target: string }\n | { type: \"after\"; target: string }\n | { type: \"replace\"; target: string };\n\nexport interface IPositionedLayoutNode {\n node: LayoutNode;\n position?: LayoutPosition;\n}\n\n/**\n * Chainable handle returned by modifier layout.row().\n * Can be used as-is (appended) or positioned via .before()/.after()/.replace().\n */\nexport interface ILayoutNodeHandle extends IPositionedLayoutNode {\n before(target: string): IPositionedLayoutNode;\n after(target: string): IPositionedLayoutNode;\n replace(target: string): IPositionedLayoutNode;\n}\n\n// ---------------------------------------------------------------------------\n// Named layout node access types\n// ---------------------------------------------------------------------------\n\nexport interface ITabsHandle {\n tab(definition: ITabDefinition): ITabHandle;\n tab(id: string): ITabHandle;\n}\n\nexport interface ITabHandle {\n layout(factory: (layout: ILayoutBuilder) => LayoutNode[]): void;\n before(target: string): void;\n after(target: string): void;\n}\n\nexport interface ILayoutNodeAccessHandle {\n as(type: \"tabs\"): ITabsHandle;\n}\n\n// ---------------------------------------------------------------------------\n// Modifier types\n// ---------------------------------------------------------------------------\n\nexport interface IFormModifier {\n modify(form: IFormModel): void;\n}\n\nexport interface ILayoutModifier {\n row(...fieldIds: string[]): ILayoutNodeHandle;\n separator(): ILayoutNodeHandle;\n tabs(config: { id?: string; renderer?: string; tabs: ITabDefinition[] }): ILayoutNodeHandle;\n element(renderer: string, props?: Record<string, unknown>): ILayoutNodeHandle;\n remove(target: string): void;\n}\n\n// ---------------------------------------------------------------------------\n// Form types\n// ---------------------------------------------------------------------------\n\nexport interface IFormError {\n path: string;\n label?: string;\n message: string;\n}\n\nexport interface IFormVM {\n layout: LayoutNodeVM[];\n errors: IFormError[];\n isDirty: boolean;\n isValid: boolean | null;\n}\n\nexport interface IFormModel<T = Record<string, any>> {\n field(name: string): IField;\n fields(\n factory: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder | undefined>\n ): void;\n layout(factory: (layout: ILayoutModifier) => (LayoutNode | IPositionedLayoutNode)[]): void;\n layout(nodeId: string): ILayoutNodeAccessHandle;\n getData(): T;\n setData(data: T): void;\n reset(): void;\n validate(): Promise<boolean>;\n submit<T = Record<string, unknown>>(): Promise<T | false>;\n readonly isDirty: boolean;\n readonly isValid: boolean | null;\n readonly errors: IFormError[];\n readonly vm: IFormVM;\n}\n\n// ---------------------------------------------------------------------------\n// FormModel namespace — groups all public types under one import\n// ---------------------------------------------------------------------------\n\nexport namespace FormModel {\n export type FieldConfig = IFieldConfig;\n export type ValueOption = IValueOption;\n export type FieldValidation = IFieldValidation;\n export type FieldVM = IFieldVM;\n export type Field = IField;\n export type SelectField = ISelectField;\n export type ObjectField = IObjectField;\n export type ObjectFieldConfig = IObjectFieldConfig;\n export type BeforeChange = BeforeChangeCallback;\n export type AfterChange = AfterChangeCallback;\n export type AfterSetValue = AfterSetValueCallback;\n export type OnBlur = OnBlurCallback;\n export type RowNode = IRowNode;\n export type RowNodeVM = IRowNodeVM;\n export type SeparatorNode = ISeparatorNode;\n export type SeparatorNodeVM = ISeparatorNodeVM;\n export type TabsNode = ITabsNode;\n export type TabDefinition = ITabDefinition;\n export type TabsNodeVM = ITabsNodeVM;\n export type TabDefinitionVM = ITabDefinitionVM;\n export type ElementNode = IElementNode;\n export type ElementNodeVM = IElementNodeVM;\n export type ObjectFieldVM = IObjectFieldVM;\n export type ObjectFieldItemVM = IObjectFieldItemVM;\n export type FormError = IFormError;\n export type FormVM = IFormVM;\n export type Interface<T = Record<string, any>> = IFormModel<T>;\n export type Modifier = IFormModifier;\n export type LayoutModifier = ILayoutModifier;\n}\n\n// ---------------------------------------------------------------------------\n// FormModelFactory abstraction\n// ---------------------------------------------------------------------------\n\nexport interface IFormModelFactory {\n create<T = Record<string, any>>(config: IFormModelConfig): IFormModel<T>;\n}\n\nexport interface IFormModelConfig {\n fields: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>;\n layout?: (layout: ILayoutBuilder) => LayoutNode[];\n validateOnSubmit?: boolean;\n}\n\nexport interface ILayoutBuilder {\n row(...fieldIds: string[]): IRowNode;\n separator(): ISeparatorNode;\n tabs(config: { id?: string; renderer?: string; tabs: ITabDefinition[] }): ITabsNode;\n element(renderer: string, props?: Record<string, unknown>): IElementNode;\n}\n\nexport interface IFieldBuilder<TType extends string = string> {\n label(text: string): this;\n help(text: string): this;\n description(text: string): this;\n note(text: string): this;\n placeholder(text: string): this;\n schema(zodSchema: z.ZodTypeAny): this;\n defaultValue(value: unknown): this;\n renderer<TName extends FieldRendererName<TType>>(\n name: TName,\n ...args: undefined extends FieldRendererSettings<TName>\n ? [settings?: FieldRendererSettings<TName>]\n : FieldRendererSettings<TName> extends undefined\n ? []\n : [settings: FieldRendererSettings<TName>]\n ): this;\n hidden(): this;\n required(message?: string): this;\n disabled(value?: boolean): this;\n beforeChange(fn: BeforeChangeCallback): this;\n afterChange(fn: AfterChangeCallback): this;\n afterSetValue(fn: AfterSetValueCallback): this;\n onBlur(fn: OnBlurCallback): this;\n build(name: string): IFieldConfig;\n}\n\nexport interface ISelectFieldBuilder extends IFieldBuilder<\"select\"> {\n options(opts: IValueOption[] | ((form: IFormModel) => IValueOption[])): this;\n}\n\nexport interface IObjectFieldBuilder extends IFieldBuilder<\"object\"> {\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;\n list(): this;\n listSchema(schema: z.ZodTypeAny): this;\n}\n\nexport interface IFieldBuilderRegistry {\n text(): IFieldBuilder<\"text\">;\n select(): ISelectFieldBuilder;\n object(): IObjectFieldBuilder;\n}\n\nexport const FormModelFactory = createAbstraction<IFormModelFactory>(\"FormModelFactory\");\n\nexport namespace FormModelFactory {\n export type Interface = IFormModelFactory;\n export type Config = IFormModelConfig;\n export type LayoutBuilder = ILayoutBuilder;\n export type FieldBuilder = IFieldBuilder;\n export type SelectFieldBuilder = ISelectFieldBuilder;\n export type ObjectFieldBuilder = IObjectFieldBuilder;\n export type FieldBuilderRegistry = IFieldBuilderRegistry;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,uBAAuB;;AAGzD;AACA;AACA;;AAiBA;AACA;AACA;;AAmGA;AACA;AACA;AACA;;AAaA;AACA;AACA;;AAwBA;AACA;AACA;;AAOA;AACA;AACA;;AAmCA;AACA;AACA;;AAqCA;AACA;AACA;;AAYA;AACA;AACA;AACA;;AAOA;AACA;AACA;;AAiBA;AACA;AACA;;AAcA;AACA;AACA;AAiCA;AACA;AACA;AAAA,WAEiBC,SAAS;AAgC1B;AACA;AACA;;AA6DA,OAAO,MAAMC,gBAAgB,GAAGF,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export { FormModelFeature } from "./feature.js";
|
|
2
|
+
import "./renderers.js";
|
|
2
3
|
export { FormModelFactory, FormModel } from "./abstractions.js";
|
|
3
|
-
export type { IFormModelFactory, IFormModelConfig, ILayoutBuilder, IFieldBuilder, ISelectFieldBuilder, IFieldBuilderRegistry, IFormModel, IField, ISelectField, FieldTypeMap, IFieldConfig, IFieldVM, IFieldValidation, IFormVM, IFormError, IValueOption, IRowNode, IRowNodeVM, ISeparatorNode, ISeparatorNodeVM, ITabsNode, ITabDefinition, ITabsNodeVM, ITabDefinitionVM, IElementNode, IElementNodeVM,
|
|
4
|
+
export type { IFieldRendererRegistry, FieldRendererName, FieldRendererSettings, IFormModelFactory, IFormModelConfig, ILayoutBuilder, IFieldBuilder, ISelectFieldBuilder, IObjectFieldBuilder, IFieldBuilderRegistry, IFormModel, IField, ISelectField, IObjectField, IObjectFieldConfig, IListItemField, IObjectFieldVM, IObjectFieldItemVM, FieldTypeMap, IFieldConfig, IFieldVM, IFieldValidation, IFormVM, IFormError, IValueOption, IRowNode, IRowNodeVM, ISeparatorNode, ISeparatorNodeVM, ITabsNode, ITabDefinition, ITabsNodeVM, ITabDefinitionVM, IElementNode, IElementNodeVM, ILayoutNodeAccessHandle, ITabsHandle, ITabHandle, LayoutNode, LayoutNodeVM, LayoutPosition, IPositionedLayoutNode, ILayoutNodeHandle, ILayoutModifier, IFormModifier, BeforeChangeCallback, AfterChangeCallback, AfterSetValueCallback, OnBlurCallback } from "./abstractions.js";
|
|
4
5
|
export { FormModel as FormModelImpl } from "./FormModel.js";
|
|
5
6
|
export { Field } from "./Field.js";
|
|
6
|
-
export { FieldBuilder, TextFieldBuilder, SelectFieldBuilder, createFieldBuilderRegistry } from "./FieldBuilder.js";
|
|
7
|
+
export { FieldBuilder, TextFieldBuilder, SelectFieldBuilder, ObjectFieldBuilder, createFieldBuilderRegistry } from "./FieldBuilder.js";
|
|
7
8
|
export type { IFieldTypeFactory } from "./FieldBuilder.js";
|
|
8
|
-
export {
|
|
9
|
+
export { ObjectField, isObjectField } from "./ObjectField.js";
|
|
10
|
+
export { FormView, LayoutNodeRenderer, useFormViewRenderers } from "./FormView.js";
|
|
9
11
|
export { useFieldRenderers } from "./useFieldRenderers.js";
|
|
10
|
-
export
|
|
12
|
+
export { useLayoutRenderers } from "./useLayoutRenderers.js";
|
|
13
|
+
export type { FieldRenderers, FieldRendererComponent, LayoutRenderers, TabsNodeRendererProps } from "./FormView.js";
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
// Feature
|
|
2
2
|
export { FormModelFeature } from "./feature.js";
|
|
3
3
|
|
|
4
|
+
// Renderer registry augmentations
|
|
5
|
+
import "./renderers.js";
|
|
6
|
+
|
|
4
7
|
// Abstractions (types + DI tokens)
|
|
5
8
|
export { FormModelFactory, FormModel } from "./abstractions.js";
|
|
6
9
|
// Implementations
|
|
7
10
|
export { FormModel as FormModelImpl } from "./FormModel.js";
|
|
8
11
|
export { Field } from "./Field.js";
|
|
9
|
-
export { FieldBuilder, TextFieldBuilder, SelectFieldBuilder, createFieldBuilderRegistry } from "./FieldBuilder.js";
|
|
12
|
+
export { FieldBuilder, TextFieldBuilder, SelectFieldBuilder, ObjectFieldBuilder, createFieldBuilderRegistry } from "./FieldBuilder.js";
|
|
13
|
+
// Object field
|
|
14
|
+
export { ObjectField, isObjectField } from "./ObjectField.js";
|
|
15
|
+
|
|
10
16
|
// View
|
|
11
|
-
export { FormView } from "./FormView.js";
|
|
17
|
+
export { FormView, LayoutNodeRenderer, useFormViewRenderers } from "./FormView.js";
|
|
12
18
|
export { useFieldRenderers } from "./useFieldRenderers.js";
|
|
19
|
+
export { useLayoutRenderers } from "./useLayoutRenderers.js";
|
|
13
20
|
|
|
14
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FormModelFeature","FormModelFactory","FormModel","FormModelImpl","Field","FieldBuilder","TextFieldBuilder","SelectFieldBuilder","createFieldBuilderRegistry","FormView","useFieldRenderers"],"sources":["index.ts"],"sourcesContent":["// Feature\nexport { FormModelFeature } from \"./feature.js\";\n\n// Abstractions (types + DI tokens)\nexport { FormModelFactory, FormModel } from \"./abstractions.js\";\nexport type {\n IFormModelFactory,\n IFormModelConfig,\n ILayoutBuilder,\n IFieldBuilder,\n ISelectFieldBuilder,\n IFieldBuilderRegistry,\n IFormModel,\n IField,\n ISelectField,\n FieldTypeMap,\n IFieldConfig,\n IFieldVM,\n IFieldValidation,\n IFormVM,\n IFormError,\n IValueOption,\n IRowNode,\n IRowNodeVM,\n ISeparatorNode,\n ISeparatorNodeVM,\n ITabsNode,\n ITabDefinition,\n ITabsNodeVM,\n ITabDefinitionVM,\n IElementNode,\n IElementNodeVM,\n
|
|
1
|
+
{"version":3,"names":["FormModelFeature","FormModelFactory","FormModel","FormModelImpl","Field","FieldBuilder","TextFieldBuilder","SelectFieldBuilder","ObjectFieldBuilder","createFieldBuilderRegistry","ObjectField","isObjectField","FormView","LayoutNodeRenderer","useFormViewRenderers","useFieldRenderers","useLayoutRenderers"],"sources":["index.ts"],"sourcesContent":["// Feature\nexport { FormModelFeature } from \"./feature.js\";\n\n// Renderer registry augmentations\nimport \"./renderers.js\";\n\n// Abstractions (types + DI tokens)\nexport { FormModelFactory, FormModel } from \"./abstractions.js\";\nexport type {\n IFieldRendererRegistry,\n FieldRendererName,\n FieldRendererSettings,\n IFormModelFactory,\n IFormModelConfig,\n ILayoutBuilder,\n IFieldBuilder,\n ISelectFieldBuilder,\n IObjectFieldBuilder,\n IFieldBuilderRegistry,\n IFormModel,\n IField,\n ISelectField,\n IObjectField,\n IObjectFieldConfig,\n IListItemField,\n IObjectFieldVM,\n IObjectFieldItemVM,\n FieldTypeMap,\n IFieldConfig,\n IFieldVM,\n IFieldValidation,\n IFormVM,\n IFormError,\n IValueOption,\n IRowNode,\n IRowNodeVM,\n ISeparatorNode,\n ISeparatorNodeVM,\n ITabsNode,\n ITabDefinition,\n ITabsNodeVM,\n ITabDefinitionVM,\n IElementNode,\n IElementNodeVM,\n ILayoutNodeAccessHandle,\n ITabsHandle,\n ITabHandle,\n LayoutNode,\n LayoutNodeVM,\n LayoutPosition,\n IPositionedLayoutNode,\n ILayoutNodeHandle,\n ILayoutModifier,\n IFormModifier,\n BeforeChangeCallback,\n AfterChangeCallback,\n AfterSetValueCallback,\n OnBlurCallback\n} from \"./abstractions.js\";\n\n// Implementations\nexport { FormModel as FormModelImpl } from \"./FormModel.js\";\nexport { Field } from \"./Field.js\";\nexport {\n FieldBuilder,\n TextFieldBuilder,\n SelectFieldBuilder,\n ObjectFieldBuilder,\n createFieldBuilderRegistry\n} from \"./FieldBuilder.js\";\nexport type { IFieldTypeFactory } from \"./FieldBuilder.js\";\n\n// Object field\nexport { ObjectField, isObjectField } from \"./ObjectField.js\";\n\n// View\nexport { FormView, LayoutNodeRenderer, useFormViewRenderers } from \"./FormView.js\";\nexport { useFieldRenderers } from \"./useFieldRenderers.js\";\nexport { useLayoutRenderers } from \"./useLayoutRenderers.js\";\nexport type {\n FieldRenderers,\n FieldRendererComponent,\n LayoutRenderers,\n TabsNodeRendererProps\n} from \"./FormView.js\";\n"],"mappings":"AAAA;AACA,SAASA,gBAAgB;;AAEzB;AACA;;AAEA;AACA,SAASC,gBAAgB,EAAEC,SAAS;AAqDpC;AACA,SAASA,SAAS,IAAIC,aAAa;AACnC,SAASC,KAAK;AACd,SACIC,YAAY,EACZC,gBAAgB,EAChBC,kBAAkB,EAClBC,kBAAkB,EAClBC,0BAA0B;AAI9B;AACA,SAASC,WAAW,EAAEC,aAAa;;AAEnC;AACA,SAASC,QAAQ,EAAEC,kBAAkB,EAAEC,oBAAoB;AAC3D,SAASC,iBAAiB;AAC1B,SAASC,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "../../base/Base/FieldRenderers/InputRenderer.js";
|
|
2
|
+
import "../../base/Base/FieldRenderers/SelectRenderer.js";
|
|
3
|
+
import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js";
|
|
4
|
+
import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js";
|
|
5
|
+
import "../../base/Base/FieldRenderers/PassthroughRenderer.js";
|
|
6
|
+
import "../../base/Base/FieldRenderers/TextareaRenderer.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Side-effect imports to pull in IFieldRendererRegistry augmentations.
|
|
2
|
+
// Each renderer file declares its registry entry via `declare module`.
|
|
3
|
+
import "../../base/Base/FieldRenderers/InputRenderer.js";
|
|
4
|
+
import "../../base/Base/FieldRenderers/SelectRenderer.js";
|
|
5
|
+
import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js";
|
|
6
|
+
import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js";
|
|
7
|
+
import "../../base/Base/FieldRenderers/PassthroughRenderer.js";
|
|
8
|
+
import "../../base/Base/FieldRenderers/TextareaRenderer.js";
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=renderers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["renderers.ts"],"sourcesContent":["// Side-effect imports to pull in IFieldRendererRegistry augmentations.\n// Each renderer file declares its registry entry via `declare module`.\nimport \"../../base/Base/FieldRenderers/InputRenderer.js\";\nimport \"../../base/Base/FieldRenderers/SelectRenderer.js\";\nimport \"../../base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js\";\nimport \"../../base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js\";\nimport \"../../base/Base/FieldRenderers/PassthroughRenderer.js\";\nimport \"../../base/Base/FieldRenderers/TextareaRenderer.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { useAdminConfig } from "../../config/AdminConfig.js";
|
|
3
|
+
export const useLayoutRenderers = () => {
|
|
4
|
+
const {
|
|
5
|
+
layoutRenderers
|
|
6
|
+
} = useAdminConfig();
|
|
7
|
+
return useMemo(() => {
|
|
8
|
+
const map = {};
|
|
9
|
+
for (const {
|
|
10
|
+
name,
|
|
11
|
+
component
|
|
12
|
+
} of layoutRenderers) {
|
|
13
|
+
map[name] = component;
|
|
14
|
+
}
|
|
15
|
+
return map;
|
|
16
|
+
}, [layoutRenderers]);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=useLayoutRenderers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useAdminConfig","useLayoutRenderers","layoutRenderers","map","name","component"],"sources":["useLayoutRenderers.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useAdminConfig } from \"../../config/AdminConfig.js\";\nimport type { LayoutRenderers } from \"./FormView.js\";\n\nexport const useLayoutRenderers = (): LayoutRenderers => {\n const { layoutRenderers } = useAdminConfig();\n\n return useMemo(() => {\n const map: LayoutRenderers = {};\n for (const { name, component } of layoutRenderers) {\n map[name] = component;\n }\n return map;\n }, [layoutRenderers]);\n};\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,cAAc;AAGvB,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAuB;EACrD,MAAM;IAAEC;EAAgB,CAAC,GAAGF,cAAc,CAAC,CAAC;EAE5C,OAAOD,OAAO,CAAC,MAAM;IACjB,MAAMI,GAAoB,GAAG,CAAC,CAAC;IAC/B,KAAK,MAAM;MAAEC,IAAI;MAAEC;IAAU,CAAC,IAAIH,eAAe,EAAE;MAC/CC,GAAG,CAACC,IAAI,CAAC,GAAGC,SAAS;IACzB;IACA,OAAOF,GAAG;EACd,CAAC,EAAE,CAACD,eAAe,CAAC,CAAC;AACzB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type IToolPipelineRunner, type IToolRegistry } from "./abstractions.js";
|
|
2
|
+
declare class PipelineRunnerImpl implements IToolPipelineRunner {
|
|
3
|
+
private toolRegistry;
|
|
4
|
+
constructor(toolRegistry: IToolRegistry);
|
|
5
|
+
resolve(data: unknown): Promise<unknown>;
|
|
6
|
+
}
|
|
7
|
+
export declare const ToolPipelineRunner: typeof PipelineRunnerImpl & {
|
|
8
|
+
__abstraction: import("@webiny/di").Abstraction<IToolPipelineRunner>;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ToolPipelineRunner as Abstraction, ToolRegistry } from "./abstractions.js";
|
|
2
|
+
function isToolEnvelope(value) {
|
|
3
|
+
return typeof value === "object" && value !== null && "tool" in value && typeof value.tool === "string" && "params" in value && typeof value.params === "object";
|
|
4
|
+
}
|
|
5
|
+
class PipelineRunnerImpl {
|
|
6
|
+
constructor(toolRegistry) {
|
|
7
|
+
this.toolRegistry = toolRegistry;
|
|
8
|
+
}
|
|
9
|
+
async resolve(data) {
|
|
10
|
+
if (data === null || data === undefined) {
|
|
11
|
+
return data;
|
|
12
|
+
}
|
|
13
|
+
if (isToolEnvelope(data)) {
|
|
14
|
+
const result = await this.toolRegistry.invoke(data.tool, data.params);
|
|
15
|
+
return this.resolve(result);
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(data)) {
|
|
18
|
+
return Promise.all(data.map(item => this.resolve(item)));
|
|
19
|
+
}
|
|
20
|
+
if (typeof data === "object") {
|
|
21
|
+
const entries = Object.entries(data);
|
|
22
|
+
const resolvedValues = await Promise.all(entries.map(([, value]) => this.resolve(value)));
|
|
23
|
+
return Object.fromEntries(entries.map(([key], i) => [key, resolvedValues[i]]));
|
|
24
|
+
}
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export const ToolPipelineRunner = Abstraction.createImplementation({
|
|
29
|
+
implementation: PipelineRunnerImpl,
|
|
30
|
+
dependencies: [ToolRegistry]
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=ToolPipelineRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ToolPipelineRunner","Abstraction","ToolRegistry","isToolEnvelope","value","tool","params","PipelineRunnerImpl","constructor","toolRegistry","resolve","data","undefined","result","invoke","Array","isArray","Promise","all","map","item","entries","Object","resolvedValues","fromEntries","key","i","createImplementation","implementation","dependencies"],"sources":["ToolPipelineRunner.ts"],"sourcesContent":["import {\n ToolPipelineRunner as Abstraction,\n ToolRegistry,\n type IToolPipelineRunner,\n type IToolRegistry\n} from \"./abstractions.js\";\n\nfunction isToolEnvelope(\n value: unknown\n): value is { tool: string; params: Record<string, unknown> } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"tool\" in value &&\n typeof (value as Record<string, unknown>).tool === \"string\" &&\n \"params\" in value &&\n typeof (value as Record<string, unknown>).params === \"object\"\n );\n}\n\nclass PipelineRunnerImpl implements IToolPipelineRunner {\n constructor(private toolRegistry: IToolRegistry) {}\n\n async resolve(data: unknown): Promise<unknown> {\n if (data === null || data === undefined) {\n return data;\n }\n\n if (isToolEnvelope(data)) {\n const result = await this.toolRegistry.invoke(data.tool, data.params);\n return this.resolve(result);\n }\n\n if (Array.isArray(data)) {\n return Promise.all(data.map(item => this.resolve(item)));\n }\n\n if (typeof data === \"object\") {\n const entries = Object.entries(data as Record<string, unknown>);\n const resolvedValues = await Promise.all(\n entries.map(([, value]) => this.resolve(value))\n );\n return Object.fromEntries(entries.map(([key], i) => [key, resolvedValues[i]]));\n }\n\n return data;\n }\n}\n\nexport const ToolPipelineRunner = Abstraction.createImplementation({\n implementation: PipelineRunnerImpl,\n dependencies: [ToolRegistry]\n});\n"],"mappings":"AAAA,SACIA,kBAAkB,IAAIC,WAAW,EACjCC,YAAY;AAKhB,SAASC,cAAcA,CACnBC,KAAc,EAC4C;EAC1D,OACI,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,MAAM,IAAIA,KAAK,IACf,OAAQA,KAAK,CAA6BC,IAAI,KAAK,QAAQ,IAC3D,QAAQ,IAAID,KAAK,IACjB,OAAQA,KAAK,CAA6BE,MAAM,KAAK,QAAQ;AAErE;AAEA,MAAMC,kBAAkB,CAAgC;EACpDC,WAAWA,CAASC,YAA2B,EAAE;IAAA,KAA7BA,YAA2B,GAA3BA,YAA2B;EAAG;EAElD,MAAMC,OAAOA,CAACC,IAAa,EAAoB;IAC3C,IAAIA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAKC,SAAS,EAAE;MACrC,OAAOD,IAAI;IACf;IAEA,IAAIR,cAAc,CAACQ,IAAI,CAAC,EAAE;MACtB,MAAME,MAAM,GAAG,MAAM,IAAI,CAACJ,YAAY,CAACK,MAAM,CAACH,IAAI,CAACN,IAAI,EAAEM,IAAI,CAACL,MAAM,CAAC;MACrE,OAAO,IAAI,CAACI,OAAO,CAACG,MAAM,CAAC;IAC/B;IAEA,IAAIE,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE;MACrB,OAAOM,OAAO,CAACC,GAAG,CAACP,IAAI,CAACQ,GAAG,CAACC,IAAI,IAAI,IAAI,CAACV,OAAO,CAACU,IAAI,CAAC,CAAC,CAAC;IAC5D;IAEA,IAAI,OAAOT,IAAI,KAAK,QAAQ,EAAE;MAC1B,MAAMU,OAAO,GAAGC,MAAM,CAACD,OAAO,CAACV,IAA+B,CAAC;MAC/D,MAAMY,cAAc,GAAG,MAAMN,OAAO,CAACC,GAAG,CACpCG,OAAO,CAACF,GAAG,CAAC,CAAC,GAAGf,KAAK,CAAC,KAAK,IAAI,CAACM,OAAO,CAACN,KAAK,CAAC,CAClD,CAAC;MACD,OAAOkB,MAAM,CAACE,WAAW,CAACH,OAAO,CAACF,GAAG,CAAC,CAAC,CAACM,GAAG,CAAC,EAAEC,CAAC,KAAK,CAACD,GAAG,EAAEF,cAAc,CAACG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF;IAEA,OAAOf,IAAI;EACf;AACJ;AAEA,OAAO,MAAMX,kBAAkB,GAAGC,WAAW,CAAC0B,oBAAoB,CAAC;EAC/DC,cAAc,EAAErB,kBAAkB;EAClCsB,YAAY,EAAE,CAAC3B,YAAY;AAC/B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ITool, type IToolRegistry } from "./abstractions.js";
|
|
2
|
+
declare class ToolRegistryImpl implements IToolRegistry {
|
|
3
|
+
private toolMap;
|
|
4
|
+
constructor(tools: ITool[]);
|
|
5
|
+
getTool(name: string): ITool;
|
|
6
|
+
getTools(): ITool[];
|
|
7
|
+
invoke(name: string, params: unknown): Promise<unknown>;
|
|
8
|
+
}
|
|
9
|
+
export declare const ToolRegistry: typeof ToolRegistryImpl & {
|
|
10
|
+
__abstraction: import("@webiny/di").Abstraction<IToolRegistry>;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Tool, ToolRegistry as ToolRegistryAbstraction } from "./abstractions.js";
|
|
2
|
+
class ToolRegistryImpl {
|
|
3
|
+
constructor(tools) {
|
|
4
|
+
this.toolMap = new Map(tools.map(t => [t.name, t]));
|
|
5
|
+
}
|
|
6
|
+
getTool(name) {
|
|
7
|
+
const tool = this.toolMap.get(name);
|
|
8
|
+
if (!tool) {
|
|
9
|
+
throw new Error(`Tool "${name}" is not registered.`);
|
|
10
|
+
}
|
|
11
|
+
return tool;
|
|
12
|
+
}
|
|
13
|
+
getTools() {
|
|
14
|
+
return [...this.toolMap.values()];
|
|
15
|
+
}
|
|
16
|
+
async invoke(name, params) {
|
|
17
|
+
const tool = this.getTool(name);
|
|
18
|
+
const validated = tool.inputSchema.parse(params);
|
|
19
|
+
return tool.execute(validated);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export const ToolRegistry = ToolRegistryAbstraction.createImplementation({
|
|
23
|
+
implementation: ToolRegistryImpl,
|
|
24
|
+
dependencies: [[Tool, {
|
|
25
|
+
multiple: true
|
|
26
|
+
}]]
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=ToolRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Tool","ToolRegistry","ToolRegistryAbstraction","ToolRegistryImpl","constructor","tools","toolMap","Map","map","t","name","getTool","tool","get","Error","getTools","values","invoke","params","validated","inputSchema","parse","execute","createImplementation","implementation","dependencies","multiple"],"sources":["ToolRegistry.ts"],"sourcesContent":["import {\n Tool,\n ToolRegistry as ToolRegistryAbstraction,\n type ITool,\n type IToolRegistry\n} from \"./abstractions.js\";\n\nclass ToolRegistryImpl implements IToolRegistry {\n private toolMap: Map<string, ITool>;\n\n constructor(tools: ITool[]) {\n this.toolMap = new Map(tools.map(t => [t.name, t]));\n }\n\n getTool(name: string): ITool {\n const tool = this.toolMap.get(name);\n if (!tool) {\n throw new Error(`Tool \"${name}\" is not registered.`);\n }\n return tool;\n }\n\n getTools(): ITool[] {\n return [...this.toolMap.values()];\n }\n\n async invoke(name: string, params: unknown): Promise<unknown> {\n const tool = this.getTool(name);\n const validated = tool.inputSchema.parse(params);\n return tool.execute(validated);\n }\n}\n\nexport const ToolRegistry = ToolRegistryAbstraction.createImplementation({\n implementation: ToolRegistryImpl,\n dependencies: [[Tool, { multiple: true }]]\n});\n"],"mappings":"AAAA,SACIA,IAAI,EACJC,YAAY,IAAIC,uBAAuB;AAK3C,MAAMC,gBAAgB,CAA0B;EAG5CC,WAAWA,CAACC,KAAc,EAAE;IACxB,IAAI,CAACC,OAAO,GAAG,IAAIC,GAAG,CAACF,KAAK,CAACG,GAAG,CAACC,CAAC,IAAI,CAACA,CAAC,CAACC,IAAI,EAAED,CAAC,CAAC,CAAC,CAAC;EACvD;EAEAE,OAAOA,CAACD,IAAY,EAAS;IACzB,MAAME,IAAI,GAAG,IAAI,CAACN,OAAO,CAACO,GAAG,CAACH,IAAI,CAAC;IACnC,IAAI,CAACE,IAAI,EAAE;MACP,MAAM,IAAIE,KAAK,CAAC,SAASJ,IAAI,sBAAsB,CAAC;IACxD;IACA,OAAOE,IAAI;EACf;EAEAG,QAAQA,CAAA,EAAY;IAChB,OAAO,CAAC,GAAG,IAAI,CAACT,OAAO,CAACU,MAAM,CAAC,CAAC,CAAC;EACrC;EAEA,MAAMC,MAAMA,CAACP,IAAY,EAAEQ,MAAe,EAAoB;IAC1D,MAAMN,IAAI,GAAG,IAAI,CAACD,OAAO,CAACD,IAAI,CAAC;IAC/B,MAAMS,SAAS,GAAGP,IAAI,CAACQ,WAAW,CAACC,KAAK,CAACH,MAAM,CAAC;IAChD,OAAON,IAAI,CAACU,OAAO,CAACH,SAAS,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMlB,YAAY,GAAGC,uBAAuB,CAACqB,oBAAoB,CAAC;EACrEC,cAAc,EAAErB,gBAAgB;EAChCsB,YAAY,EAAE,CAAC,CAACzB,IAAI,EAAE;IAAE0B,QAAQ,EAAE;EAAK,CAAC,CAAC;AAC7C,CAAC,CAAC","ignoreList":[]}
|