@chamn/engine 0.10.1 → 0.10.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utils/css.ts","../src/core/assetPackagesListManage.ts","../src/utils/defaultEngineConfig.tsx","../src/utils/logger.ts","../src/utils/index.ts","../src/component/Workbench/index.tsx","../src/i18n/zh_CN/index.ts","../src/i18n/en_US/index.ts","../src/i18n/index.ts","../src/core/pluginManager.ts","../src/plugins/ComponentLibrary/localize/zh_CN/index.ts","../src/plugins/ComponentLibrary/localize/en_US/index.ts","../src/plugins/ComponentLibrary/localize/index.ts","../src/plugins/ComponentLibrary/components/DragItem/index.tsx","../src/plugins/ComponentLibrary/components/ListView/index.tsx","../src/plugins/ComponentLibrary/util.ts","../src/plugins/ComponentLibrary/index.tsx","../src/plugins/Designer/config.ts","../src/plugins/Designer/localize/zh_CN/index.ts","../src/plugins/Designer/localize/en_US/index.ts","../src/plugins/Designer/localize/index.ts","../src/plugins/Designer/components/DefaultSelectToolBar/index.tsx","../src/plugins/Designer/util.ts","../src/plugins/Designer/components/GhostView/index.tsx","../src/plugins/Designer/components/Canvas/advanceCustomHook.ts","../src/plugins/Designer/components/Canvas/index.tsx","../src/plugins/Designer/index.tsx","../src/plugins/OutlineTree/util.tsx","../src/plugins/OutlineTree/components/TreeView/context.ts","../src/plugins/OutlineTree/components/TreeView/treeNode.tsx","../src/plugins/OutlineTree/components/TreeView/index.tsx","../src/plugins/OutlineTree/localize/zh_CN/index.ts","../src/plugins/OutlineTree/localize/en_US/index.ts","../src/plugins/OutlineTree/localize/index.ts","../src/plugins/OutlineTree/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/config.ts","../src/component/CustomSchemaForm/components/Form/context.ts","../src/component/CustomSchemaForm/components/Form/index.tsx","../src/component/CustomSchemaForm/components/Setters/StringSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/NumberSetter/index.tsx","../src/component/CustomSchemaForm/utils.ts","../src/component/CustomSchemaForm/components/Setters/ArraySetter/ArrayItem.tsx","../src/component/CustomSchemaForm/components/Setters/ArraySetter/SortItemOrderModal.tsx","../src/component/CustomSchemaForm/components/Setters/ArraySetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/ShapeSetter/index.tsx","../src/component/MonacoEditor/index.tsx","../src/component/CustomSchemaForm/components/Setters/FunctionSetter/defaultDts.ts?raw","../src/component/CustomSchemaForm/components/Setters/FunctionSetter/helper.ts","../src/component/CustomSchemaForm/components/Setters/ExpressionSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/BooleanSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/SelectSetter/index.tsx","../src/component/MoveableModal/index.tsx","../src/component/CustomSchemaForm/components/Setters/JSONSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/FunctionSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/TextAreaSetter/index.tsx","../src/component/CSSPropertiesEditor/cssProperties.ts","../src/component/CustomSchemaForm/components/Setters/CSSValueSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/ColorSetter/index.tsx","../src/config/colorPickerColorList.ts","../src/component/CustomSchemaForm/components/Setters/AntDColorSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/SliderSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/RadioGroupSetter/index.tsx","../src/component/InputNumberPlus/index.tsx","../src/component/CSSSizeInput/index.tsx","../src/component/CustomSchemaForm/components/Setters/CSSSizeSetter/index.tsx","../src/component/StylePanel/DimensionInput/index.tsx","../src/component/StylePanel/MarginAndPaddingInput/index.tsx","../src/component/CustomColorPicker/index.tsx","../src/component/StylePanel/FontInput/index.tsx","../src/component/StylePanel/BorderInput/index.tsx","../src/component/StylePanel/BackgroundInput/index.tsx","../src/component/StylePanel/ShadowInput/index.tsx","../src/component/CSSCodeEditor/helper.ts","../src/component/CSSCodeEditor/index.tsx","../src/component/StylePanel/index.tsx","../src/component/CustomSchemaForm/components/Setters/FastLayoutSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/EmptyValueSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/index.ts","../src/component/CustomSchemaForm/components/Form/Field/index.tsx","../src/component/CustomSchemaForm/context.ts","../src/component/CustomSchemaForm/components/SetterSwitcher/core.tsx","../src/component/CustomSchemaForm/components/SetterSwitcher/index.tsx","../src/component/CustomSchemaForm/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/modal.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeState/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/CreateNewNodePopup/initData.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/CreateNewNodePopup/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/InputHandle/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/OutputHandle/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/NodeCard/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/context.ts","../src/component/CustomSchemaForm/components/CFiledWithSwitchSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/StartNode.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/JumpLinkNode.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/helper.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RunCodeNode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/index.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/AdvanceSetterList.ts","../src/plugins/PropertyPanel/view.tsx","../src/plugins/PropertyPanel/index.tsx","../src/plugins/ComponentStatePanel/index.tsx","../src/plugins/AdvancePanel/index.tsx","../src/component/CSSPropertiesVariableBindEditor/cssProperties.ts","../src/plugins/RightPanel/context.ts","../src/component/CSSPropertiesVariableBindEditor/SingleProperty.tsx","../src/component/CSSPropertiesVariableBindEditor/index.tsx","../src/component/ClassNameEditor/index.tsx","../src/component/CSSPropertiesEditor/signleProperty.tsx","../src/component/CSSPropertiesEditor/index.tsx","../src/component/CSSEditor/index.tsx","../src/plugins/VisualPanelPlus/index.tsx","../src/plugins/EventPanel/panel.tsx","../src/plugins/EventPanel/index.tsx","../src/plugins/RightPanel/view.tsx","../src/plugins/RightPanel/index.tsx","../src/plugins/GlobalStatePanel/localize/zh_CN/index.ts","../src/plugins/GlobalStatePanel/localize/en_US/index.ts","../src/plugins/GlobalStatePanel/localize/index.ts","../src/plugins/GlobalStatePanel/index.tsx","../src/plugins/DisplaySourceSchema/index.tsx","../src/plugins/History/index.tsx","../src/plugins/Hotkeys/keymap.ts","../src/plugins/Hotkeys/hotKeyManager.ts","../src/plugins/Hotkeys/localize/zh_CN/index.ts","../src/plugins/Hotkeys/localize/en_US/index.ts","../src/plugins/Hotkeys/localize/index.ts","../src/plugins/Hotkeys/action.ts","../src/plugins/Hotkeys/index.ts","../src/plugins/index.tsx","../src/component/DesignerSizer/index.tsx","../src/material/container.meta.ts","../src/material/innerMaterial.tsx","../src/index.tsx"],"sourcesContent":["import { CSSVal } from '@/component/CSSEditor';\nimport { CNodeModelDataType, CSSType, CSSValue, JSExpressionPropType, getRandomStr, isExpression } from '@chamn/model';\nimport Color from 'color';\nimport { isPlainObject } from 'lodash-es';\nimport * as csstree from 'css-tree';\n\nexport type StyleArr = {\n property: string;\n value: any;\n}[];\n\nexport const styleArr2Obj = (val: StyleArr) => {\n const res: Record<string, any> = {};\n val.forEach((item) => {\n res[item.property] = item.value;\n });\n return res;\n};\n\nexport const styleObjToArr = (obj: Record<string, any> = {}) => {\n const res: StyleArr = Object.keys(obj).reduce((tempRes, key) => {\n return [\n ...tempRes,\n {\n property: key,\n value: obj[key],\n },\n ];\n }, [] as StyleArr);\n\n return res;\n};\n\nexport const styleList2Text = (val: StyleArr) => {\n let res = '';\n val.forEach((item) => {\n res += `${item.property}:${item.value};`;\n });\n return res;\n};\n\nexport const formatStyleProperty = (styleList: CNodeModelDataType['style'] = []) => {\n // 遗留数据结构兼容, 正式版本会移除\n if (isPlainObject(styleList)) {\n styleList = Object.keys(styleList).map((key) => {\n return {\n property: key,\n value: (styleList as any)[key],\n };\n });\n }\n const normalProperty: { property: string; value: string }[] = [];\n const expressionProperty: { property: string; value: JSExpressionPropType }[] = [];\n const allProperty: { property: string; value: any }[] = [];\n styleList.forEach((it) => {\n const val = it.value;\n const obj = {\n property: it.property,\n value: val,\n };\n\n allProperty.push(obj);\n if (isExpression(val)) {\n expressionProperty.push({\n ...obj,\n value: val as unknown as JSExpressionPropType,\n });\n } else {\n normalProperty.push({\n ...obj,\n value: val as unknown as string,\n });\n }\n });\n const res = {\n normalProperty,\n expressionProperty,\n allProperty,\n };\n return res;\n};\n\nexport const formatCSSTextProperty = (cssText: string) => {\n // 解析 CSS 代码\n const ast = csstree.parse(`.node {${cssText}}`);\n\n const cssList: { id: string; property: string; value: string }[] = [];\n\n // 遍历 AST 获取属性\n csstree.walk(ast, function (node) {\n if (node.type === 'Declaration') {\n cssList.push({\n id: getRandomStr(),\n property: node.property,\n value: csstree.generate(node.value),\n });\n }\n });\n\n return cssList;\n};\n\nexport const formatCssToNodeVal = (className: string, val: CSSVal): CSSType => {\n type StateType = keyof CSSVal;\n const res: CSSType = {\n class: className,\n value: [],\n };\n const cssList: CSSValue[] = [];\n Object.keys(val).forEach((state) => {\n const currentStateCss = val[state as StateType];\n const tempVal: CSSValue = {\n state: state,\n media: [],\n text: currentStateCss?.['normal'] || '',\n };\n Object.keys(currentStateCss || ({} as any)).forEach((mediaKey) => {\n tempVal.media = tempVal.media || [];\n if (mediaKey !== 'normal') {\n tempVal.media.push({\n type: 'max-width',\n value: mediaKey,\n text: currentStateCss?.[mediaKey] || '',\n });\n }\n });\n cssList.push(tempVal);\n });\n res.value = cssList;\n return res;\n};\n\nexport const formatNodeValToEditor = (val?: CSSType): CSSVal => {\n if (!val) {\n return {};\n }\n const list = val.value;\n const res: CSSVal = {};\n\n list.forEach((el) => {\n const tempStyle = (el as any).style;\n // 遗留数据兼容,正式版本会移除\n if (!el.text && tempStyle) {\n el.text = Object.keys(tempStyle).reduce((cssText, key) => {\n cssText += `${key}: ${tempStyle[key]};`;\n return cssText;\n }, '');\n }\n\n const currentStateCss: Record<string, string> = {\n normal: el.text || '',\n };\n el.media?.forEach((it) => {\n currentStateCss[it.value] = it.text || '';\n });\n res[el.state as keyof CSSVal] = currentStateCss;\n });\n\n return res;\n};\n\nexport const getColorFromStr = (str: string) => {\n // 匹配16进制颜色(包括#号)\n const hexColorPattern = /#(?:[0-9a-fA-F]{3}){1,2}\\b/g;\n\n // 匹配RGBA颜色\n const rgbaColorPattern = /rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*(?:\\d*\\.\\d+|\\d+\\.\\d*|\\d+)\\s*\\)/g;\n\n // 匹配RGB颜色\n const rgbColorPattern = /rgb?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)/g;\n\n // 匹配HSB颜色\n const hsbColorPattern = /hsb?\\(\\s*\\d+\\s*,\\s*\\d+%\\s*,\\s*\\d+%\\s*\\)/g;\n const hexColors = str.match(hexColorPattern) || [];\n const rgbaColors = str.match(rgbaColorPattern) || [];\n const rgbColors = str.match(rgbColorPattern) || [];\n const hsbColors = str.match(hsbColorPattern) || [];\n\n return [...hexColors, ...rgbaColors, ...rgbColors, ...hsbColors];\n};\n\nexport type BoxShadowObjType = {\n offsetX: string | undefined;\n offsetY: string | undefined;\n blur: string | undefined;\n spread: string | undefined;\n color: string | undefined;\n type?: 'inset' | '';\n};\n\nexport const parseBoxShadowString = (str: string) => {\n // 先匹配所有的 rgb(a), 转换为对应的 16 进制,\n const colorsList = getColorFromStr(str);\n const color16Map = colorsList.reduce((res, c) => {\n res[c] = Color(c).hexa();\n return res;\n }, {} as any);\n // 替换字符串中所有的颜色为 16 进制,避免逗号影响分隔\n let tempStr = str;\n colorsList.forEach((c) => {\n tempStr = tempStr.replaceAll(c, color16Map[c]);\n });\n\n // 分割逗号\n const res = tempStr.split(',').map((el) => {\n const shadowItem: BoxShadowObjType = {\n offsetX: undefined,\n offsetY: undefined,\n blur: undefined,\n spread: undefined,\n color: undefined,\n type: undefined,\n };\n let newStr = el;\n if (newStr.includes('inset')) {\n shadowItem.type = 'inset';\n newStr = newStr.replace('inset', '').trim();\n }\n\n const color = getColorFromStr(newStr);\n if (color.length) {\n shadowItem.color = color[0];\n newStr = newStr.replace(shadowItem.color, '').trim();\n }\n\n const newStrArr = newStr.split(' ');\n const sizeArr = [];\n for (let i = 0; i < newStrArr.length; i++) {\n if (!isNaN(parseInt(newStrArr[i]))) {\n sizeArr.push(newStrArr[i]);\n } else {\n break;\n }\n }\n shadowItem.offsetX = sizeArr[0];\n shadowItem.offsetY = sizeArr[1];\n shadowItem.blur = sizeArr[2] || '';\n shadowItem.spread = sizeArr[3] || '';\n // 获取单词颜色\n if (!shadowItem.color) {\n shadowItem.color = newStrArr[sizeArr.length];\n }\n return shadowItem;\n });\n\n return res;\n};\n","import { AssetPackage } from '@chamn/model';\n\nexport class AssetsPackageListManager {\n private _assets: AssetPackage[];\n constructor(assets: AssetPackage[]) {\n this._assets = assets;\n }\n\n getList() {\n return this._assets;\n }\n\n setList(newAssets: AssetPackage[]) {\n const tempList = [...newAssets, ...this._assets];\n const newList = getUniqueAssetsList(tempList);\n // 去重复\n this._assets = newList;\n }\n}\n\nexport const getUniqueAssetsList = (tempList: AssetPackage[]) => {\n const newList: AssetPackage[] = [];\n const idMap: Record<string, any> = {};\n tempList.forEach((el) => {\n if (!idMap[el.package]) {\n idMap[el.package] = el;\n newList.push(el);\n }\n });\n\n return newList;\n};\n","import { getUniqueAssetsList } from '@/core/assetPackagesListManage';\nimport { LayoutPropsType } from '@chamn/layout';\nimport { collectVariable, flatObject, getThirdLibs, RenderPropsType } from '@chamn/render';\n\n/** 默认使用 react 18 模式渲染 */\nexport const beforeInitRender: LayoutPropsType['beforeInitRender'] = async ({ iframe }) => {\n const subWin = iframe.getWindow();\n if (!subWin) {\n return;\n }\n (subWin as any).React = window.React;\n (subWin as any).ReactDOM = window.ReactDOM;\n (subWin as any).ReactDOMClient = (window as any).ReactDOMClient;\n};\n\n/** 默认使用 react 18 模式渲染 */\nexport const getDefaultRender = (options: {\n components: Record<string, any>;\n renderProps: Partial<RenderPropsType>;\n}) => {\n const defaultRender: LayoutPropsType['customRender'] = async ({\n iframe: iframeContainer,\n assets,\n page,\n pageModel,\n ready,\n renderJSUrl,\n }) => {\n await iframeContainer.injectJS(renderJSUrl || '');\n const iframeWindow = iframeContainer.getWindow()!;\n const iframeDoc = iframeContainer.getDocument()!;\n const IframeReact = iframeWindow.React!;\n const IframeReactDOM = iframeWindow.ReactDOMClient!;\n const CRender = iframeWindow.CRender!;\n\n // 从子窗口获取物料对象\n const pageInfo = page || pageModel?.export();\n if (!pageInfo) {\n console.log('page schema is empty');\n return;\n }\n const allAssets = getUniqueAssetsList([...assets, ...(pageInfo.assets || [])]);\n // 注入组件物料资源\n const assetLoader = new CRender.AssetLoader(allAssets, {\n window: iframeContainer.getWindow()!,\n });\n assetLoader\n .onSuccess(() => {\n const allLibs = collectVariable(allAssets, iframeWindow);\n const componentsLibs = flatObject(allLibs);\n const thirdLibs = getThirdLibs(allLibs, pageInfo.thirdLibs || []);\n const App = IframeReact?.createElement(CRender.DesignRender, {\n adapter: CRender?.ReactAdapter,\n page: page,\n pageModel: pageModel,\n components: { ...componentsLibs, ...(options.components || {}) },\n $$context: {\n thirdLibs,\n },\n onMount: (designRenderInstance) => {\n ready(designRenderInstance);\n },\n ...((options?.renderProps as any) || {}),\n });\n IframeReactDOM.createRoot(iframeDoc.getElementById('app')!).render(App);\n })\n .onError(() => {\n console.log('资源加载出错');\n })\n .load();\n };\n\n return defaultRender;\n};\n","import { consola } from 'consola';\nexport const LOGGER = consola.create({\n level: 1,\n});\n","/**\n *\n * @param time 毫秒\n * @returns\n */\nexport const waitReactUpdate = ({ time = 1000 / 60, cb }: { time?: number; cb?: (...args: any[]) => void } = {}) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve('ok');\n cb?.();\n }, time);\n });\n};\n/** 确保 key 一定存在 */\nexport const ensureKeyExist = (obj: any, key: string, defaultValue: any) => {\n if (obj[key] !== undefined) {\n return;\n }\n obj[key] = defaultValue;\n};\n\nexport const sageJSONParse = function (jsonStr: string, errorValue: any) {\n try {\n const res = JSON.parse(jsonStr);\n return res;\n } catch (_e) {\n return errorValue ?? null;\n }\n};\n\nexport * from './css';\nexport * from './defaultEngineConfig';\nexport * from './logger';\n","import React from 'react';\nimport { Resizable, ResizeCallback } from 're-resizable';\nimport styles from './style.module.scss';\nimport { Button } from 'antd';\nimport { CloseOutlined, DoubleRightOutlined, PushpinOutlined } from '@ant-design/icons';\nimport clsx from 'clsx';\nimport mitt, { Emitter } from 'mitt';\nimport { waitReactUpdate } from '../../utils';\nimport { createPortal } from 'react-dom';\n\nexport interface PluginContext {\n openPanel: () => void;\n closePanel: () => void;\n getPlugin: (pluginName: string) => any;\n emitter: Emitter<any>;\n}\n\ntype PanelItem = {\n name: string;\n title: string | React.ReactNode;\n icon: React.ReactNode;\n render: React.ReactNode;\n};\n\nexport type WorkbenchCustomView = {\n key: string;\n view: React.ReactNode;\n};\n\nexport type TWidgetVisible = {\n hiddenTopBar?: boolean;\n hiddenLeftPanel?: boolean;\n hiddenRightPanel?: boolean;\n /** canvas 区域不添加任何 padding margining */\n canvasFull?: boolean;\n};\n\ntype WorkbenchStateType = {\n leftBoxVisible: boolean;\n leftBoxSize: {\n width: number;\n height: number | string;\n };\n leftBoxFixed: boolean;\n rightBoxSize: {\n width: number;\n height: number | string;\n };\n rightBoxVisible: boolean;\n currentActiveLeftPanel: string;\n leftPanels: PanelItem[];\n bodyView: React.ReactNode | null;\n rightView: React.ReactNode | null;\n topToolBarView: React.ReactNode | null;\n subTopToolBarView: React.ReactNode | null;\n customViewList: WorkbenchCustomView[];\n} & TWidgetVisible;\n\nexport type WorkbenchPropsType = {\n emitter: Emitter<any>;\n} & TWidgetVisible;\n\nexport class Workbench extends React.Component<WorkbenchPropsType, WorkbenchStateType> {\n emitter: Emitter<any>;\n leftPanelContentRef: React.RefObject<HTMLDivElement>;\n constructor(props: WorkbenchPropsType) {\n super(props);\n this.emitter = props.emitter || mitt();\n this.leftPanelContentRef = React.createRef<HTMLDivElement>();\n this.state = {\n leftBoxVisible: true,\n leftBoxSize: {\n width: 300,\n height: '100%',\n },\n leftBoxFixed: true,\n rightBoxVisible: true,\n rightBoxSize: {\n width: 350,\n height: '100%',\n },\n currentActiveLeftPanel: 'ComponentLib',\n leftPanels: [],\n bodyView: null,\n rightView: null,\n topToolBarView: null,\n subTopToolBarView: null,\n customViewList: [],\n hiddenTopBar: props.hiddenTopBar ?? false,\n hiddenLeftPanel: props.hiddenLeftPanel ?? false,\n hiddenRightPanel: props.hiddenRightPanel ?? false,\n canvasFull: props.canvasFull ?? false,\n };\n }\n\n getHiddenWidgetConfig() {\n return {\n hiddenTopBar: this.state.hiddenTopBar,\n hiddenLeftPanel: this.state.hiddenLeftPanel,\n hiddenRightPanel: this.state.hiddenRightPanel,\n };\n }\n\n /** 隐藏编辑器的小部件 */\n hiddenWidget(config: Partial<TWidgetVisible>) {\n this.setState({\n ...(config || {}),\n });\n }\n\n addLeftPanel = (panel: PanelItem) => {\n this.state.leftPanels.push(panel);\n this.setState({\n leftPanels: [...this.state.leftPanels],\n });\n };\n\n /** 替换对应的 panel */\n replaceLeftPanel = (panelName: string, newPanel: PanelItem) => {\n const targetIndex = this.state.leftPanels.findIndex((el) => el.name === panelName);\n if (targetIndex > -1) {\n const newPanels = [...this.state.leftPanels];\n newPanels[targetIndex] = newPanel;\n this.setState({\n leftPanels: newPanels,\n });\n }\n };\n\n /**\n * 添加属于插件的自定义视图\n * @param view\n * @returns dispose: 调用后移除 view\n */\n addCustomView(view: WorkbenchCustomView) {\n const newViewList = this.state.customViewList;\n newViewList.push(view);\n\n this.setState({\n customViewList: [...newViewList],\n });\n\n return () => {\n const newViewList = this.state.customViewList.filter((el) => el !== view);\n this.setState({\n customViewList: [...newViewList],\n });\n };\n }\n\n openLeftPanel = async (currentActiveLeftPanel?: string) => {\n const newActive = currentActiveLeftPanel || this.state.currentActiveLeftPanel;\n this.setState({\n leftBoxVisible: true,\n leftBoxSize: {\n width: 350,\n height: '100%',\n },\n currentActiveLeftPanel: newActive,\n });\n\n await waitReactUpdate();\n this.emitter.emit('leftPanelVisible', {\n visible: true,\n panelName: newActive,\n });\n };\n\n closeLeftPanel = async () => {\n this.setState({\n leftBoxVisible: false,\n leftBoxSize: {\n width: 0,\n height: '100%',\n },\n });\n await waitReactUpdate();\n this.emitter.emit('leftPanelVisible', {\n visible: false,\n panelName: this.state.currentActiveLeftPanel,\n });\n };\n\n toggleLeftPanel = () => {\n const { leftBoxVisible } = this.state;\n const newVisible = !leftBoxVisible;\n if (newVisible) {\n this.openLeftPanel();\n } else {\n this.closeLeftPanel();\n }\n };\n\n onPluginIconClick = (panel: PanelItem) => {\n const { currentActiveLeftPanel } = this.state;\n if (currentActiveLeftPanel === panel.name && this.state.leftBoxVisible) {\n this.closeLeftPanel();\n } else {\n this.openLeftPanel(panel.name);\n }\n };\n\n openRightPanel = () => {\n const { rightBoxSize } = this.state;\n this.setState({\n rightBoxVisible: true,\n rightBoxSize: {\n width: 400,\n height: rightBoxSize.height,\n },\n });\n };\n\n closeRightPanel = () => {\n const { rightBoxSize } = this.state;\n this.setState({\n rightBoxVisible: false,\n rightBoxSize: {\n width: 0,\n height: rightBoxSize.height,\n },\n });\n };\n\n replaceBodyView = (newView: React.ReactNode) => {\n this.setState({\n bodyView: newView,\n });\n };\n\n replaceRightView = (newView: React.ReactNode) => {\n this.setState({\n rightView: newView,\n });\n };\n\n replaceTopBarView = (newView: React.ReactNode) => {\n this.setState({\n topToolBarView: newView,\n });\n };\n\n replaceSubTopBarView = (newView: React.ReactNode) => {\n this.setState({\n subTopToolBarView: newView,\n });\n };\n\n toggleRightPanel = () => {\n const { rightBoxVisible, rightBoxSize } = this.state;\n const newVisible = !rightBoxVisible;\n this.setState({\n rightBoxVisible: newVisible,\n rightBoxSize: {\n width: newVisible ? 400 : 0,\n height: rightBoxSize.height,\n },\n });\n };\n\n onLeftBoxResizeStop: ResizeCallback = (_e, _direction, _ref, d) => {\n const newW = this.state.leftBoxSize.width + d.width;\n this.setState({\n leftBoxSize: {\n width: newW,\n height: this.state.leftBoxSize.height,\n },\n });\n };\n\n onGlobalClick = (e: MouseEvent) => {\n if (e.target && this.leftPanelContentRef.current?.contains(e.target as any)) {\n return;\n }\n\n if (!this.state.leftBoxFixed && this.state.leftBoxVisible) {\n this.closeLeftPanel();\n }\n };\n\n componentDidMount() {\n document.addEventListener('click', this.onGlobalClick);\n }\n\n render() {\n const {\n leftBoxVisible,\n leftBoxSize,\n leftBoxFixed,\n rightBoxSize,\n rightBoxVisible,\n leftPanels,\n currentActiveLeftPanel,\n bodyView,\n rightView,\n topToolBarView,\n subTopToolBarView,\n customViewList,\n hiddenTopBar,\n hiddenLeftPanel,\n hiddenRightPanel,\n } = this.state;\n const leftBoContentStyle: React.CSSProperties = {};\n if (!leftBoxFixed) {\n leftBoContentStyle.position = 'absolute';\n leftBoContentStyle.left = '50px';\n leftBoContentStyle.top = 0;\n }\n\n const currentActivePluginObj = leftPanels.find((el) => el.name === currentActiveLeftPanel);\n\n const CurrentPluginRenderView = currentActivePluginObj?.render || null;\n const { onPluginIconClick, toggleRightPanel, toggleLeftPanel, onLeftBoxResizeStop } = this;\n return (\n <div className={styles.workbenchContainer}>\n {!hiddenTopBar && (\n <div className={styles.topToolBarBox}>\n <div className={styles.topToolBarView}>{topToolBarView}</div>\n </div>\n )}\n\n <div className={styles.bodyContent}>\n {!hiddenLeftPanel && (\n <div\n className={clsx([styles.leftBox, hiddenLeftPanel ?? styles.hiddenLeftPanel])}\n ref={this.leftPanelContentRef}\n >\n <div className={styles.pluginIconBar}>\n {leftPanels.map((pl) => {\n return (\n <div\n key={pl.name}\n onClick={() => onPluginIconClick(pl)}\n className={clsx([\n styles.pluginIconItem,\n currentActivePluginObj?.name === pl.name && styles.active,\n ])}\n >\n {pl.icon}\n </div>\n );\n })}\n </div>\n {leftBoxVisible && (\n <Resizable\n className={styles.pluginPanelBoxResizeBox}\n size={leftBoxSize}\n style={leftBoContentStyle}\n minWidth={300}\n maxWidth={600}\n enable={{\n right: leftBoxVisible,\n }}\n onResizeStop={onLeftBoxResizeStop}\n >\n <div className={styles.pluginHeader}>\n <span className={styles.pluginNameText}>\n {currentActivePluginObj?.title || currentActivePluginObj?.name}\n </span>\n <Button\n className={clsx([styles.fixedBtn])}\n type=\"text\"\n size=\"small\"\n onClick={() => {\n this.setState({\n leftBoxFixed: !this.state.leftBoxFixed,\n });\n }}\n >\n <PushpinOutlined className={clsx([leftBoxFixed && styles.active])} />\n </Button>\n <Button className={styles.closeBtn} type=\"text\" size=\"small\" onClick={toggleLeftPanel}>\n <CloseOutlined />\n </Button>\n </div>\n <div className={styles.pluginPanelBox}>{CurrentPluginRenderView}</div>\n </Resizable>\n )}\n </div>\n )}\n\n <div className={styles.centerBox}>\n {subTopToolBarView && <div className={styles.subTopToolbarBox}>{subTopToolBarView}</div>}\n <div className={clsx([styles.canvasBox, this.state.canvasFull !== true && styles.canvasBoxPadding])}>\n <div className={styles.scrollBox}>{bodyView}</div>\n </div>\n </div>\n\n <div className={clsx([styles.rightResizeBox, hiddenRightPanel && styles.hiddenRightPanel])}>\n <div className={styles.arrowCursor} onClick={toggleRightPanel}>\n <DoubleRightOutlined className={clsx([!rightBoxVisible && styles.active])} />\n </div>\n <div\n style={{\n display: rightBoxVisible ? 'block' : 'none',\n height: '100%',\n }}\n >\n <Resizable\n minWidth={400}\n maxWidth={600}\n enable={{\n left: rightBoxVisible,\n }}\n size={rightBoxSize}\n onResizeStop={(_e, _direction, _ref, d) => {\n this.setState({\n rightBoxSize: {\n width: this.state.rightBoxSize.width + d.width,\n height: this.state.rightBoxSize.height,\n },\n });\n }}\n >\n <div className={styles.rightBox}>{rightView}</div>\n </Resizable>\n </div>\n </div>\n </div>\n {createPortal(\n <div className={styles.customViewBox}>\n {customViewList.map((el) => {\n return (\n <div\n key={el.key}\n style={{\n pointerEvents: 'auto',\n display: 'inline-block',\n }}\n >\n {el.view}\n </div>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n }\n}\n","export const zh_CN = {\n translation: {\n 'Welcome to React': '欢迎使用 React',\n },\n};\n","export const en_US = {\n translation: {\n 'Welcome to React': 'Welcome to React and react-i18next',\n },\n};\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\n\n// the translations\n// (tip move them in a JSON file and import them,\n// or even better, manage them separated from your code: https://react.i18next.com/guides/multiple-translation-files)\nconst resources = {\n zh_CN,\n en_US,\n};\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .init({\n resources,\n lng: 'zh_CN', // language to use, more information here: https://www.i18next.com/overview/configuration-options#languages-namespaces-resources\n // you can use the i18n.changeLanguage function to change the language manually: https://www.i18next.com/overview/api#changelanguage\n // if you're using a language detector, do not define the lng option\n react: {\n bindI18n: 'added languageChanged',\n bindI18nStore: 'added',\n },\n });\n\nexport type CustomI18n = typeof i18n & {\n update: () => void;\n};\n\nconst customI18n: CustomI18n = i18n as any;\n\ncustomI18n.update = () => {\n setTimeout(() => {\n i18n.emit('added');\n }, 0);\n};\n\ncustomI18n.changeLanguage('en_US');\n\nexport default customI18n;\n","import { Engine } from '@/index';\nimport { CPage } from '@chamn/model';\nimport mitt, { Emitter } from 'mitt';\nimport { Workbench } from '../component/Workbench';\nimport { CustomI18n } from '../i18n';\nimport { AssetsPackageListManager } from './assetPackagesListManage';\n\nexport type PluginObj<C, E = any> = {\n name: string;\n PLUGIN_NAME?: string;\n init: (ctx: CPluginCtx<C>) => Promise<void>;\n destroy: (ctx: CPluginCtx<C>) => Promise<void>;\n /** 用于暴露给外部重载插件 */\n reload?: (ctx: CPluginCtx<C>) => Promise<void>;\n /** 插件暴露给外部可以调用的方法 */\n export: (ctx: CPluginCtx<C>) => E;\n meta: {\n engine: {\n version: string;\n };\n };\n};\n\ninterface PluginFunction<C, E> {\n (ctx: CPluginCtx<C>): PluginObj<C, E>;\n ['PLUGIN_NAME']?: string;\n}\n\nexport type CPlugin<C = Record<string, any>, E = any> = PluginObj<C, E> | PluginFunction<C, E>;\n\ntype PluginManagerOptions = {\n getWorkbench: () => Workbench;\n emitter: Emitter<any>;\n pageModel: CPage;\n i18n: CustomI18n;\n assetsPackageListManager: AssetsPackageListManager;\n engine: Engine;\n};\n\nexport type CPluginCtx<C = any> = {\n name?: string;\n globalEmitter: Emitter<any>;\n /** 当前插件外部传入的配置 **/\n config: C;\n pluginManager: PluginManager;\n pluginReadyOk: () => void;\n} & PluginManagerOptions;\n\nexport type PluginInstance<C = any, E = any> = {\n ctx: CPluginCtx<C>;\n export: E;\n source: PluginObj<C, E>;\n ready: boolean;\n};\n\nexport type CustomPluginHook<P extends PluginInstance<any, any> = any> = (pluginInstance: P) => P;\n\nexport class PluginManager {\n plugins: Map<string, PluginInstance> = new Map();\n emitter: Emitter<any> = mitt();\n getWorkbench!: () => Workbench;\n pageModel!: CPage;\n i18n: CustomI18n;\n assetsPackageListManager: AssetsPackageListManager;\n engine: Engine;\n customPluginHooks: Record<string, CustomPluginHook[]> = {};\n\n constructor({ getWorkbench, emitter, pageModel, i18n, assetsPackageListManager, engine }: PluginManagerOptions) {\n this.getWorkbench = getWorkbench;\n this.emitter = emitter;\n this.pageModel = pageModel;\n this.i18n = i18n;\n this.assetsPackageListManager = assetsPackageListManager;\n this.engine = engine;\n }\n\n /** 自定义插件, 可以修改插件的配置 */\n customPlugin = <P extends PluginInstance<any, any>>(pluginName: string, customPluginHook: CustomPluginHook<P>) => {\n const customPluginHooks = this.customPluginHooks;\n const hookList = customPluginHooks[pluginName] || [];\n hookList.push(customPluginHook);\n customPluginHooks[pluginName] = hookList;\n this.customPluginHooks = customPluginHooks;\n };\n\n createPluginCtx = () => {\n const ctx: CPluginCtx = {\n globalEmitter: this.emitter,\n emitter: mitt(),\n config: {},\n getWorkbench: this.getWorkbench,\n pluginManager: this,\n pageModel: this.pageModel,\n i18n: this.i18n,\n assetsPackageListManager: this.assetsPackageListManager,\n engine: this.engine,\n pluginReadyOk: () => {},\n };\n return ctx;\n };\n\n async add(plugin: CPlugin) {\n const ctx = this.createPluginCtx();\n\n let innerPlugin: PluginObj<any, any>;\n if (typeof plugin === 'function') {\n innerPlugin = plugin(ctx);\n } else {\n innerPlugin = plugin;\n }\n let pluginCtx: PluginInstance = {\n source: innerPlugin,\n ctx: ctx,\n export: innerPlugin.export?.(ctx) || {},\n ready: false,\n };\n const customHookList = this.customPluginHooks[innerPlugin.name] || [];\n customHookList.forEach((cb) => {\n pluginCtx = cb(pluginCtx);\n });\n ctx.pluginReadyOk = () => {\n this.emitter.emit(`${innerPlugin.name}:ready`);\n pluginCtx.ready = true;\n };\n this.plugins.set(innerPlugin.name, pluginCtx);\n await innerPlugin.init(ctx);\n }\n\n async get<P extends PluginInstance<any, any>>(pluginName: string): Promise<P | undefined> {\n const pluginInstance = this.plugins.get(pluginName);\n if (pluginInstance?.ready) {\n return pluginInstance as any;\n } else {\n await this.onPluginReadyOk(pluginName);\n return pluginInstance as any;\n }\n }\n\n async remove(name: string) {\n const p = this.plugins.get(name);\n await p?.source.destroy(p.ctx);\n this.plugins.delete(name);\n }\n\n onPluginReadyOk(pluginName: string, cb?: (pluginHandle: PluginInstance) => void) {\n return new Promise<PluginInstance>((resolve) => {\n const pluginObj = this.plugins.get(pluginName);\n if (pluginObj?.ready) {\n resolve(pluginObj);\n } else if (pluginObj === undefined) {\n console.warn(`plugin: ${pluginName} not found.`);\n }\n this.emitter.on(`${pluginName}:ready`, () => {\n const newPluginObj = this.plugins.get(pluginName);\n if (newPluginObj) {\n newPluginObj.ready = true;\n cb?.(newPluginObj);\n resolve(newPluginObj);\n }\n });\n });\n }\n}\n","export const zh_CN: Record<string, any> = {\n pluginName: '组件库',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Components',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","import { Popover } from 'antd';\nimport clsx from 'clsx';\nimport React, { useMemo } from 'react';\nimport styles from './style.module.scss';\n\nexport type DragComponentItemProps = {\n id: string;\n name: string;\n description?: any;\n icon: React.ReactNode | string;\n iconText?: string;\n style?: React.CSSProperties;\n containerClassName?: string;\n};\n\nexport const DragComponentItem = (props: DragComponentItemProps) => {\n const dragInfo = {\n [DRAG_ITEM_KEY]: props.id,\n };\n\n const icon = useMemo(() => {\n if (props.iconText) {\n return <div className={styles.iconText}>{String(props.iconText).toUpperCase()}</div>;\n }\n if (typeof props.icon === 'string') {\n return <img className={styles.iconImg} src={props.icon} draggable={false} />;\n } else {\n return props.icon;\n }\n }, [props.icon, props.iconText]);\n\n const contentView = (\n <div className={clsx([styles.square, props.containerClassName])}>\n <div {...dragInfo} className={styles.componentItem} style={props.style}>\n <div className={styles.iconBox}>{icon}</div>\n <span>{props.name}</span>\n </div>\n </div>\n );\n\n if (props.description) {\n return (\n <Popover\n overlayInnerStyle={{\n maxWidth: '300px',\n maxHeight: '200px',\n overflow: 'auto',\n }}\n content={props.description || ''}\n zIndex={1000}\n placement=\"right\"\n >\n {contentView}\n </Popover>\n );\n } else {\n return contentView;\n }\n};\n\nexport const DRAG_ITEM_KEY = 'data-drag-key';\n","import { useMemo } from 'react';\nimport { SnippetsType } from '@chamn/model';\nimport { Collapse } from 'antd';\nimport { DragComponentItem } from '../DragItem';\nimport styles from './style.module.scss';\n\nexport type ListViewProps = {\n dataSource: {\n name: string;\n list: SnippetsType[];\n }[];\n};\nexport const ListView = (props: ListViewProps) => {\n const { dataSource } = props;\n const defaultActiveKey = dataSource.map((el) => el.name || '');\n\n const items = useMemo(() => {\n return dataSource.map((el) => {\n const category = el.name || '';\n const contentView = (\n <div className={styles.collapsePanel}>\n {el.list.map((it) => {\n return (\n <DragComponentItem\n id={it.id!}\n key={it.id!}\n name={it.title}\n icon={it.snapshot || it.snapshotText}\n iconText={it.snapshotText}\n description={it.description || ''}\n />\n );\n })}\n </div>\n );\n\n return {\n key: category,\n label: category,\n children: contentView,\n };\n });\n }, [dataSource]);\n\n if (!dataSource.length) {\n return null;\n }\n\n return (\n <div className={styles.ListBox}>\n <Collapse style={{ width: '100%' }} defaultActiveKey={defaultActiveKey} items={items}></Collapse>\n </div>\n );\n};\n","import { SnippetsCollection, SnippetsType } from '@chamn/model';\n\nexport const getTargetMNodeKeyVal = (dom: HTMLElement | null, key: string): null | string => {\n if (!dom) {\n return null;\n }\n const val = dom.getAttribute(key);\n if (!val) {\n return getTargetMNodeKeyVal(dom.parentElement, key);\n } else {\n return val;\n }\n};\n\nexport const searchComponentSnippets = (componentList: SnippetsCollection, searchKeyWords: string) => {\n const newResList: {\n name: string;\n list: SnippetsType[];\n }[] = [];\n const searchString = searchKeyWords?.toLowerCase();\n componentList.forEach((el) => {\n // category\n const tempList = [...el.list];\n tempList.forEach((it) => {\n const snippets = it.list.filter((i) => {\n let hit: boolean | undefined = false;\n if (typeof i.description === 'string') {\n hit = i.description?.includes(searchString);\n }\n hit = hit || i.title?.toLowerCase().includes(searchString);\n hit = hit || i.snapshotText?.toLowerCase().includes(searchString);\n hit = hit || i.category?.toLowerCase().includes(searchString);\n return hit;\n });\n if (snippets.length) {\n newResList.push({\n name: it.name,\n list: snippets,\n });\n }\n });\n });\n\n return newResList;\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React, { DOMAttributes } from 'react';\nimport { AppstoreAddOutlined, SearchOutlined } from '@ant-design/icons';\nimport { LayoutDragAndDropExtraDataType, Sensor } from '@chamn/layout';\nimport { Input, Tabs } from 'antd';\nimport { CPlugin, CPluginCtx } from '../../core/pluginManager';\nimport localize from './localize';\nimport styles from './style.module.scss';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { ListView } from './components/ListView';\nimport { getTargetMNodeKeyVal, searchComponentSnippets } from './util';\nimport { DRAG_ITEM_KEY } from './components/DragItem';\nimport {\n CNode,\n CRootNode,\n CSlot,\n DragAndDropEventExtraData,\n findContainerNode,\n isPageModel,\n SnippetsCollection,\n SnippetsType,\n} from '@chamn/model';\nimport { capitalize } from 'lodash-es';\nimport { InsertNodePosType } from '@chamn/model/src';\nimport { DesignerPluginInstance } from '../Designer/type';\n\ninterface ComponentLibViewProps extends WithTranslation {\n pluginCtx: CPluginCtx<ComponentLibPluginConfig>;\n}\n\nexport const PLUGIN_NAME = 'ComponentLib';\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\nconst TabTitle = ({ children }: { children: any }) => {\n return <div className={styles.tabTitle}>{children}</div>;\n};\n\ntype ComponentLibViewState = {\n componentsList: SnippetsCollection;\n searchString: string;\n searchMode: boolean;\n searchResultList: {\n name: string;\n list: SnippetsType[];\n }[];\n};\n\nexport type ComponentLibPluginConfig = {\n customSearchBar?: (props: {\n defaultInputView: React.ReactNode;\n updateState: (newState: Partial<ComponentLibViewState>) => string;\n }) => React.ReactNode;\n};\n\nclass ComponentLibView extends React.Component<ComponentLibViewProps, ComponentLibViewState> {\n containerRef: React.RefObject<HTMLDivElement>;\n disposeList: (() => void)[] = [];\n boxSensor!: Sensor<DragAndDropEventExtraData>;\n\n constructor(props: ComponentLibViewProps) {\n super(props);\n this.containerRef = React.createRef<HTMLDivElement>();\n this.state = {\n componentsList: [],\n searchString: '',\n searchMode: false,\n searchResultList: [],\n };\n }\n\n leftPanelVisibleCb = async ({ visible, panelName }: { visible: boolean; panelName: string }) => {\n await this.props.pluginCtx.pluginManager.onPluginReadyOk('Designer');\n if (panelName === PLUGIN_NAME && visible) {\n this.registerDragEvent();\n }\n };\n\n updateComponentsList() {\n const { pluginCtx } = this.props;\n const { pageModel } = pluginCtx;\n const { materialsModel } = pageModel;\n const allSnippets = materialsModel.getAllSnippets();\n\n if (allSnippets.length && allSnippets[0].name === 'default') {\n const df = allSnippets.shift();\n if (df) {\n allSnippets.push(df);\n }\n }\n\n this.setState({\n componentsList: allSnippets,\n });\n }\n\n async componentDidMount() {\n await this.props.pluginCtx.pluginManager.onPluginReadyOk('Designer');\n this.registerDragEvent();\n const { pluginCtx } = this.props;\n const { i18n } = pluginCtx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n i18n.update();\n this.updateComponentsList();\n pluginCtx.globalEmitter.on('updateMaterials', () => {\n this.updateComponentsList();\n });\n }\n\n componentWillUnmount(): void {\n this.disposeList.map((el) => el());\n }\n\n getNewNode = (targetDom: HTMLElement | null) => {\n const { pluginCtx } = this.props;\n const pageModel = pluginCtx.pageModel;\n\n if (!targetDom) {\n return;\n }\n const targetNodeId = getTargetMNodeKeyVal(targetDom as HTMLElement, DRAG_ITEM_KEY);\n\n if (!targetNodeId) {\n return;\n }\n\n const meta = pageModel.materialsModel.findSnippetById(targetNodeId);\n if (!meta) {\n return;\n }\n return pageModel?.createNode(meta.schema);\n };\n\n registerDragEvent = async () => {\n const { containerRef } = this;\n const { pluginCtx } = this.props;\n const designerHandle = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n\n if (!designerHandle) {\n return;\n }\n if (!containerRef.current) {\n return;\n }\n const designerExport = designerHandle.export;\n const dnd = designerExport.getDnd()!;\n const boxSensor = new Sensor<LayoutDragAndDropExtraDataType>({\n name: 'ComponentListBox',\n container: containerRef.current,\n mainDocument: document,\n });\n\n this.boxSensor = boxSensor;\n\n boxSensor.setCanDrag(async (eventObj) => {\n const newNode = this.getNewNode(eventObj.event.target as any);\n\n this.props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer').then((designerHandle) => {\n const designerExport = designerHandle?.export;\n designerExport?.selectNode('');\n });\n\n return {\n ...eventObj,\n extraData: {\n dropType: 'NEW_ADD',\n dragNode: newNode,\n },\n };\n });\n dnd.registerSensor(boxSensor);\n\n const dragStart = () => {\n const { getWorkbench } = this.props.pluginCtx;\n const workbench = getWorkbench();\n if (!workbench.state.leftBoxFixed) {\n workbench.closeLeftPanel();\n }\n };\n\n this.disposeList.push(() => {\n dnd.emitter.off('dragStart', dragStart);\n });\n dnd.emitter.on('dragStart', dragStart);\n };\n\n toAddNewNode: DOMAttributes<HTMLDivElement>['onClick'] = async (event) => {\n const newNode = this.getNewNode(event.nativeEvent.target as HTMLElement);\n if (!newNode) {\n return;\n }\n\n const { pageModel } = this.props.pluginCtx;\n\n return this.props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer').then(async (designerHandle) => {\n const designerExport = designerHandle?.export;\n // 获取当前选中,如果存在,就插入到当前选中的下面,否则就插入到根节点下面\n const selectedNodeId = designerExport?.getSelectedNodeId();\n const selectedNode = pageModel.getNode(selectedNodeId);\n const containerNode = findContainerNode(selectedNode);\n let pos: InsertNodePosType = 'CHILD_END';\n let dropNode: CNode | CRootNode | CSlot | null = selectedNode ?? null;\n if (selectedNode) {\n // 当前节点的父级节点是容器时\n if (containerNode === selectedNode.parent) {\n if (selectedNode.isContainer()) {\n pos = 'CHILD_END';\n dropNode = selectedNode;\n } else {\n pos = 'AFTER';\n dropNode = selectedNode;\n }\n } else if (containerNode && !isPageModel(containerNode)) {\n pos = 'CHILD_END';\n dropNode = containerNode;\n }\n } else {\n const rootNode = pageModel.getRootNode();\n if (rootNode) {\n pos = 'CHILD_END';\n dropNode = rootNode;\n }\n }\n const designerInstance = designerExport?.getInstance();\n\n const addFlag = await designerInstance?.customAdvanceHook.onNewAdd({\n dragNode: newNode,\n dropNode: dropNode as any,\n eventObj: {\n from: event.nativeEvent,\n fromSensor: this.boxSensor,\n pointer: null as any,\n fromPointer: null as any,\n extraData: {},\n },\n });\n if (addFlag === false) {\n return;\n }\n let addNodeInfo = {\n dragNode: newNode,\n dropNode: dropNode,\n pos: pos,\n };\n if (typeof addFlag === 'object') {\n addNodeInfo = {\n ...addNodeInfo,\n dragNode: (addFlag.addNode as any) ?? addNodeInfo.dragNode,\n dropNode: (addFlag.dropNode as any) ?? addNodeInfo.dropNode,\n pos: (addFlag.dropPosInfo?.pos as any) ?? addNodeInfo.pos,\n };\n }\n pageModel.addNode(addNodeInfo.dragNode, addNodeInfo.dropNode as CNode, addNodeInfo.pos);\n setTimeout(() => {\n designerExport?.selectNode(addNodeInfo.dragNode.id);\n }, 16);\n });\n };\n\n onSearch = () => {\n if (!this.state.searchString.length) {\n this.setState({\n searchResultList: [],\n searchMode: false,\n });\n return;\n }\n const newList = searchComponentSnippets(this.state.componentsList, this.state.searchString);\n this.setState({\n searchResultList: newList,\n searchMode: true,\n });\n };\n\n render(): React.ReactNode {\n const { componentsList, searchString, searchResultList, searchMode } = this.state;\n const { toAddNewNode } = this;\n const CustomSearchBar = this.props.pluginCtx.config.customSearchBar;\n const items = componentsList.map((el) => {\n return {\n label: <TabTitle>{capitalize(el.name)}</TabTitle>,\n key: el.name,\n children: <ListView dataSource={el.list} />,\n };\n });\n\n const defaultSearchValue = (\n <Input\n value={searchString}\n placeholder=\"input search text\"\n suffix={<SearchOutlined style={{ color: 'rgba(0,0,0,.25)' }} />}\n onPressEnter={this.onSearch}\n allowClear\n onClear={() => {\n this.setState({\n searchMode: false,\n searchResultList: [],\n });\n }}\n onChange={(e) => {\n this.setState({\n searchString: e.target.value,\n });\n }}\n />\n );\n return (\n <div ref={this.containerRef} className={styles.container} onClick={toAddNewNode}>\n <div className={styles.header}>\n {CustomSearchBar ? (\n <CustomSearchBar defaultInputView={defaultSearchValue} updateState={this.setState.bind(this) as any} />\n ) : (\n defaultSearchValue\n )}\n </div>\n {searchMode && (\n <div>\n {!searchResultList.length && <div className={styles.notFoundComponent}>暂无相关组件</div>}\n <ListView dataSource={searchResultList} />\n </div>\n )}\n {!searchResultList.length && !searchMode && (\n <Tabs\n defaultActiveKey=\"BaseComponent\"\n items={items}\n style={{\n width: '100%',\n }}\n />\n )}\n </div>\n );\n }\n}\n\nexport const ComponentLibPlugin: CPlugin<ComponentLibPluginConfig> = {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const ComponentLibViewWithLocalize = withTranslation(i18nNamespace)(ComponentLibView);\n const Title = withTranslation(i18nNamespace)(({ t }) => {\n return <>{t('pluginName')}</>;\n });\n const workbench = ctx.getWorkbench();\n workbench.addLeftPanel({\n title: <Title />,\n name: 'ComponentLib',\n icon: <AppstoreAddOutlined />,\n render: <ComponentLibViewWithLocalize pluginCtx={ctx} />,\n });\n ctx.pluginReadyOk();\n },\n reload: async () => {\n console.log(PLUGIN_NAME, 'not suooprt reload');\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return {};\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\nComponentLibPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const PLUGIN_NAME = 'Designer';\n","export const zh_CN: Record<string, any> = {\n pluginName: '组件库',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Designer Canvas',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","/* eslint-disable react-refresh/only-export-components */\nimport React, { useMemo, useState } from 'react';\nimport { CopyOutlined, DeleteOutlined, EyeInvisibleOutlined } from '@ant-design/icons';\nimport styles from './style.module.scss';\nimport { CNode } from '@chamn/model';\nimport clsx from 'clsx';\n\nexport type DefaultSelectToolBarProps = {\n nodeList: CNode[];\n toSelectNode: (id: string) => void;\n toDelete: (id: string) => void;\n toCopy: (idd: string) => void;\n toHidden: (idd: string) => void;\n};\n\nconst LayoutSelect = ({\n dataSource,\n children,\n onSelect,\n}: {\n dataSource: { key: string; label: string }[];\n children: React.ReactNode;\n onSelect: (key: string) => void;\n}) => {\n const [hover, setHover] = useState(false);\n return (\n <div className={styles.layoutSelectBox}>\n <div className={clsx([styles.hoverBox, hover && styles.hoverBoxActive])}>\n {dataSource.map((el) => {\n return (\n <div className={styles.hoverItem} key={el.key} onClick={() => onSelect(el.key)}>\n {el.label}\n </div>\n );\n })}\n </div>\n <div className={styles.placeholder} onMouseOver={() => setHover(true)} onMouseOut={() => setHover(false)}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const getDefaultToolbarItem = (props: DefaultSelectToolBarProps) => {\n const { nodeList, toSelectNode, toDelete, toCopy, toHidden } = props;\n const tempList = [...nodeList];\n const currentNode = tempList.shift();\n const parentNodeItems = tempList.map((el) => {\n const node = el;\n const nodeMeta = node.materialsModel.findByComponentName(node.value.componentName)?.value.title;\n const label = node.value.title || nodeMeta || node.value.componentName || '';\n return {\n key: el.id,\n label: label || 'Empty',\n };\n });\n\n const copyItem = (\n <div className={styles.item} onClick={() => toCopy(currentNode?.id || '')} key={'CopyOutlined'}>\n <CopyOutlined />\n </div>\n );\n\n const deleteItem = (\n <div className={styles.item} onClick={() => toDelete(currentNode?.id || '')} key={'DeleteOutlined'}>\n <DeleteOutlined />\n </div>\n );\n\n const visibleItem = (\n <div className={styles.item} onClick={() => toHidden(currentNode?.id || '')} key={'EyeInvisibleOutlined'}>\n <EyeInvisibleOutlined />\n </div>\n );\n\n const nodeLayout = (\n <LayoutSelect dataSource={parentNodeItems.reverse()} onSelect={toSelectNode} key={'LayoutSelect'}>\n <div>{currentNode?.value.title || currentNode?.material?.value.title || 'Empty'}</div>\n </LayoutSelect>\n );\n\n return {\n map: { copyItem, deleteItem, visibleItem, nodeLayout },\n list: [nodeLayout, visibleItem, copyItem, deleteItem],\n };\n};\n\nexport const DefaultSelectToolBar = (props: DefaultSelectToolBarProps) => {\n const { copyItem, deleteItem, visibleItem, nodeLayout } = useMemo(() => {\n return getDefaultToolbarItem(props).map;\n }, [props]);\n\n return (\n <div className={styles.toolBarBox}>\n {nodeLayout}\n {visibleItem}\n {copyItem}\n {deleteItem}\n </div>\n );\n};\n","import { CNode, CPage, CProp, CRootNode, CSlot, isNodeModel } from '@chamn/model';\n\nexport const getClosestNodeList = (node: CNode | CRootNode, level = 5) => {\n const res = [];\n let count = 0;\n let currentNode: CNode | CRootNode | CSlot | CProp | CPage | null = node;\n\n while (count < level && currentNode) {\n if (isNodeModel(currentNode)) {\n res.push(currentNode);\n count++;\n }\n\n currentNode = currentNode.parent || null;\n }\n\n return res;\n};\n","import React from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\n\nexport const GhostView = ({ node }: { node: CNode | CRootNode }) => {\n return (\n <div\n style={{\n backgroundColor: 'rgba(100,100,100)',\n padding: '3px 10px 3px 15px',\n borderRadius: '2px',\n opacity: 0.9,\n color: 'rgba(220,220,220)',\n }}\n >\n {node.value.componentName}\n </div>\n );\n};\n","import { CPluginCtx } from '@/core/pluginManager';\nimport { Layout, LayoutDragAndDropExtraDataType, LayoutDragEvent } from '@/index';\nimport { waitReactUpdate } from '@/utils';\nimport { AdvanceCustom, CNode, CRootNode } from '@chamn/model';\n\nexport interface AdvanceCustomHookOptions {\n getPortalViewCtx: () => {\n setView: (view: React.ReactNode) => void;\n clearView: () => void;\n };\n ctx: CPluginCtx;\n layoutRef: React.RefObject<Layout>;\n}\n\nexport type HookParameter = {\n dragNode?: CNode | CRootNode;\n dropNode?: CNode | CRootNode;\n eventObj: LayoutDragEvent<LayoutDragAndDropExtraDataType>;\n};\n\nexport class AdvanceCustomHook {\n getPortalViewCtx!: AdvanceCustomHookOptions['getPortalViewCtx'];\n ctx: CPluginCtx;\n layoutRef: AdvanceCustomHookOptions['layoutRef'];\n constructor(options: AdvanceCustomHookOptions) {\n this.getPortalViewCtx = options.getPortalViewCtx;\n this.ctx = options.ctx;\n this.layoutRef = options.layoutRef;\n }\n\n async canDrag({ dragNode, eventObj }: HookParameter): ReturnType<Required<AdvanceCustom>['canDragNode']> {\n const nodeAdvanceCustom = dragNode?.material?.value.advanceCustom;\n if (nodeAdvanceCustom?.canDragNode) {\n const res = nodeAdvanceCustom?.canDragNode(dragNode!, {\n context: this.ctx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: eventObj.extraData,\n });\n return res;\n }\n\n return true;\n }\n\n async canDrop({ dragNode, dropNode, eventObj }: HookParameter): ReturnType<Required<AdvanceCustom>['canDropNode']> {\n const nodeAdvanceCustom = dragNode?.material?.value.advanceCustom;\n const dropNodeAdvanceCustom = dropNode!.material?.value.advanceCustom;\n let res: Awaited<ReturnType<Required<AdvanceCustom>['canDropNode']>> = {} as any;\n const commonParams = {\n dropNode,\n context: this.ctx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: eventObj.extraData!,\n };\n if (nodeAdvanceCustom?.canDropNode) {\n res = await nodeAdvanceCustom.canDropNode(dragNode!, commonParams)!;\n\n // 判断 dropNode 是否可以接受 dragNode\n if (dropNodeAdvanceCustom?.canAcceptNode) {\n let canAcceptFlag: Awaited<ReturnType<Required<AdvanceCustom>['canAcceptNode']>>;\n if (typeof res === 'object') {\n canAcceptFlag = await dropNodeAdvanceCustom?.canAcceptNode(res.dragNode!, {\n ...commonParams,\n ...res,\n });\n } else {\n canAcceptFlag = await dropNodeAdvanceCustom?.canAcceptNode(dragNode!, {\n ...commonParams,\n });\n }\n return canAcceptFlag;\n } else {\n return res;\n }\n } else if (dropNodeAdvanceCustom?.canAcceptNode) {\n const canAcceptFlag = await dropNodeAdvanceCustom?.canAcceptNode(dragNode!, {\n ...commonParams,\n });\n return canAcceptFlag;\n }\n return true;\n }\n\n async onNewAdd({ dragNode, dropNode, eventObj }: HookParameter): ReturnType<Required<AdvanceCustom>['onNewAdd']> {\n const res = await dragNode!.material?.value.advanceCustom?.onNewAdd?.(dragNode!, {\n dropNode: dropNode,\n context: this.ctx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: eventObj.extraData!,\n });\n if (res === false) {\n return false;\n }\n return res;\n }\n\n getSelectRectViewRender(node: CNode | CRootNode) {\n const material = node.material;\n return material?.value.advanceCustom?.selectRectViewRender;\n }\n\n getHoverRectViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.hoverRectViewRender;\n }\n\n getDropViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.dropViewRender;\n }\n\n getGhostViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.ghostViewRender;\n }\n getToolbarViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.toolbarViewRender;\n }\n\n async onCopy(node: CNode | CRootNode) {\n let resNode = node;\n const ctx = this.ctx;\n const material = node.material;\n const onCopy = material?.value.advanceCustom?.onCopy;\n if (onCopy) {\n const newRes = await onCopy(node, {\n viewPortal: this.getPortalViewCtx(),\n context: ctx,\n extra: {},\n });\n if (newRes === false) {\n return false;\n }\n if (typeof newRes === 'object') {\n resNode = newRes.copyNode ?? resNode;\n }\n }\n\n if (resNode) {\n const newNode = ctx.pageModel.copyNode(resNode as CNode);\n if (newNode) {\n await waitReactUpdate();\n }\n }\n\n return resNode;\n }\n\n async onDelete(node: CNode | CRootNode) {\n let resNode = node;\n const ctx = this.ctx;\n const material = node.material;\n const onDelete = material?.value.advanceCustom?.onDelete;\n\n if (onDelete) {\n const newRes = await onDelete(node, {\n viewPortal: this.getPortalViewCtx(),\n context: ctx,\n extra: {},\n });\n if (newRes === false) {\n return false;\n }\n if (typeof newRes === 'object') {\n resNode = newRes.deleteNode ?? resNode;\n }\n }\n\n if (resNode) {\n const newNode = ctx.pageModel.deleteNode(resNode as CNode);\n if (newNode) {\n await waitReactUpdate();\n }\n }\n\n return resNode;\n }\n}\n","import React from 'react';\nimport { Layout, LayoutPropsType } from '@chamn/layout';\nimport { AdvanceCustom, CNode, CPage, CRootNode, InsertNodePosType } from '@chamn/model';\nimport localize from '../../localize';\nimport { PLUGIN_NAME } from '../../config';\nimport { DefaultSelectToolBar, DefaultSelectToolBarProps, getDefaultToolbarItem } from '../DefaultSelectToolBar';\nimport { getClosestNodeList } from '../../util';\nimport { GhostView } from '../GhostView';\n\nimport styles from './style.module.scss';\nimport '@chamn/layout/dist/style.css';\nimport { AssetPackage } from '@chamn/model';\nimport { createPortal } from 'react-dom';\nimport { CPluginCtx } from '@/core/pluginManager';\nimport { AdvanceCustomHook } from './advanceCustomHook';\nimport { DesignerPluginConfig } from '../../type';\nimport { AdvanceCustomFuncParam } from '@chamn/model';\n\nexport type DesignerCtx = CPluginCtx<DesignerPluginConfig>;\nexport type DesignerPropsType = {\n pluginCtx: DesignerCtx;\n};\n\nexport type WrapComponentOptionsType = {\n ctx: DesignerCtx;\n node: CNode | CRootNode;\n};\n\ntype DesignerStateType = {\n pageModel: CPage;\n hoverToolbarView: React.ReactNode;\n selectToolbarView: React.ReactNode;\n selectRectViewRender: AdvanceCustom['selectRectViewRender'] | null;\n hoverRectViewRender: AdvanceCustom['hoverRectViewRender'] | null;\n dropViewRender: AdvanceCustom['dropViewRender'] | null;\n ghostView: React.ReactNode;\n portalView: React.ReactNode;\n};\n\nexport class Designer extends React.Component<DesignerPropsType, DesignerStateType> {\n layoutRef: React.RefObject<Layout>;\n customAdvanceHook: AdvanceCustomHook;\n constructor(props: DesignerPropsType) {\n super(props);\n\n this.state = {\n pageModel: props.pluginCtx.pageModel,\n hoverToolbarView: null,\n selectToolbarView: null,\n ghostView: null,\n portalView: null,\n selectRectViewRender: null,\n hoverRectViewRender: null,\n dropViewRender: null,\n };\n this.layoutRef = React.createRef<Layout>();\n this.customAdvanceHook = new AdvanceCustomHook({\n getPortalViewCtx: this.getPortalViewCtx,\n ctx: this.props.pluginCtx,\n layoutRef: this.layoutRef,\n });\n }\n\n getPortalViewCtx = () => {\n return {\n setView: (view: React.ReactNode) => {\n this.setState({\n portalView: view,\n });\n },\n clearView: () => {\n this.setState({\n portalView: null,\n });\n },\n };\n };\n\n /**\n * 更新 render 中的 components ;\n */\n async updateRenderComponents(newComponentMap: Record<string, any> = {}) {\n const oldComponents = this.props.pluginCtx.config.components || {};\n const newComponents = {\n ...oldComponents,\n ...newComponentMap,\n };\n this.props.pluginCtx.config.components = newComponents;\n const { layoutRef } = this;\n if (!layoutRef.current) {\n console.warn('layout not ready ok');\n return;\n }\n\n await layoutRef.current.ready();\n\n const layoutInstance = layoutRef.current;\n // 直接修改到 render 中去\n layoutInstance?.designRenderRef?.current?.updateComponents(newComponents);\n }\n\n componentDidMount(): void {\n const { i18n } = this.props.pluginCtx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, `plugin:${PLUGIN_NAME}`, localize[lng], true, true);\n });\n this.init();\n }\n\n getIframeDom() {\n return this.layoutRef.current?.iframeContainer;\n }\n\n reloadRender() {\n this.layoutRef.current?.reload();\n this.props.pluginCtx.pageModel.reloadPage();\n }\n\n async init() {\n const { layoutRef } = this;\n const { pluginCtx } = this.props;\n if (!layoutRef.current) {\n console.warn('layout not ready ok');\n return;\n }\n\n await layoutRef.current.ready();\n const layoutInstance = layoutRef.current;\n\n pluginCtx.emitter.emit('ready', {\n UIInstance: this,\n });\n\n layoutInstance.dnd.emitter.on('click', ({ event }: { event: MouseEvent }) => {\n const workbench = pluginCtx.getWorkbench();\n workbench.onGlobalClick(event);\n });\n\n this.props.pluginCtx.pageModel.emitter.on('onPageChange', ({ node }) => {\n layoutRef.current?.designRenderRef?.current?.rerender(node);\n });\n\n this.props.pluginCtx.pageModel.emitter.on('onReloadPage', ({ node }) => {\n layoutRef.current?.designRenderRef?.current?.rerender(node);\n });\n\n pluginCtx.pluginReadyOk();\n }\n\n onNodeDragging: LayoutPropsType['onNodeDragging'] = async (eventObj) => {\n const extraData = eventObj.extraData;\n const dragNode = extraData?.dragNode;\n if (dragNode) {\n const res = dragNode.material?.value.advanceCustom?.onDragging?.(dragNode, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: extraData,\n });\n return res;\n }\n };\n\n onNodeDragEnd: LayoutPropsType['onNodeDraEnd'] = async () => {\n this.setState({\n ...this.state,\n dropViewRender: this.props.pluginCtx.config.dropViewRender,\n });\n };\n\n onNodeDrop: LayoutPropsType['onNodeDrop'] = async (eventObj) => {\n const { layoutRef } = this;\n const pageModel = this.props.pluginCtx.pageModel;\n const extraData = eventObj.extraData;\n const dropPosInfo = extraData?.dropPosInfo;\n const posFlag = {\n before: 'BEFORE',\n after: 'AFTER',\n current: 'CHILD_START',\n }[dropPosInfo?.pos || 'after'] as InsertNodePosType;\n const dragNode = extraData?.dragNode;\n if (dragNode) {\n const res = await dragNode.material?.value.advanceCustom?.onDrop?.(dragNode, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: extraData,\n });\n if (res === false) {\n return false;\n }\n }\n if (!extraData?.dropNode) {\n console.warn('cancel drop, because drop node is null');\n return false;\n }\n if (extraData.dropType === 'NEW_ADD') {\n if (dragNode) {\n const res = await dragNode.material?.value.advanceCustom?.onNewAdd?.(dragNode, {\n dropNode: extraData.dropNode,\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: extraData,\n });\n if (res === false) {\n return false;\n }\n }\n // 说明是根节点,直接插入到 第一个 child\n if (extraData.dropNode?.nodeType !== 'NODE') {\n pageModel?.addNode(extraData.dragNode as CNode, extraData.dropNode!, 'CHILD_START');\n } else {\n pageModel?.addNode(extraData.dragNode as CNode, extraData.dropNode!, posFlag);\n }\n } else {\n if (extraData.dropNode?.id === extraData.dragNode?.id) {\n console.warn('dragNode and dropNode id is the same');\n return false;\n }\n const res = pageModel.moveNodeById(extraData.dragNode?.id || '', extraData?.dropNode?.id || '', posFlag);\n if (!res) {\n console.warn('drop failed');\n return false;\n }\n }\n\n this.props.pluginCtx.emitter.emit('onDrop', eventObj);\n return new Promise((resolve) => {\n // 延迟去选中,因为节点放置下去,可能还没有渲染\n setTimeout(async () => {\n if (dragNode) {\n const flag = await this.onSelectNode(dragNode, null);\n if (flag === false) {\n layoutRef.current?.selectNode('');\n return resolve(false);\n }\n }\n layoutRef.current?.selectNode(extraData.dragNode?.id || '');\n resolve(true);\n }, 16);\n });\n };\n\n onSelectNode: Required<LayoutPropsType>['onSelectNode'] = async (node: CNode | CRootNode | null, event) => {\n const { pluginCtx } = this.props;\n const { layoutRef } = this;\n\n if (!node) {\n pluginCtx.engine.updateCurrentSelectNode(null);\n layoutRef.current?.selectNode('');\n this.setState({\n selectToolbarView: null,\n });\n return false;\n }\n const flag = await node.material?.value.advanceCustom?.onSelect?.(node, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: event,\n extra: {},\n });\n if (flag === false) {\n return flag;\n }\n\n const toolbarView = this.getToolbarView(node);\n this.setState({\n selectToolbarView: toolbarView,\n selectRectViewRender:\n this.customAdvanceHook.getSelectRectViewRender(node) || this.props.pluginCtx.config.selectRectViewRender,\n });\n\n // 延迟发送选中事件\n setTimeout(() => {\n pluginCtx.engine.updateCurrentSelectNode(node);\n }, 16.66);\n\n return true;\n };\n\n onDragStart: LayoutPropsType['onNodeDragStart'] = async (e) => {\n const extraData = e.extraData;\n const dragNode = extraData?.dragNode;\n if (!dragNode) {\n return false;\n }\n\n const commonParam = {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: e,\n extra: extraData,\n };\n\n const canDragFlag = await dragNode.material?.value.advanceCustom?.canDragNode?.(dragNode, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: e,\n extra: {},\n });\n\n if (canDragFlag === false) {\n return canDragFlag;\n }\n\n const dragFlag = await dragNode.material?.value.advanceCustom?.onDragStart?.(dragNode, { ...commonParam });\n if (dragFlag === false) {\n return dragFlag;\n }\n\n const ghostView = this.getGhostView(dragNode, commonParam);\n this.setState({\n ...this.state,\n ghostView: ghostView,\n dropViewRender: this.customAdvanceHook.getDropViewRender(dragNode) || this.props.pluginCtx.config.dropViewRender,\n });\n return true;\n };\n\n getGhostView = (dragNode: CNode | CRootNode, commonParam: AdvanceCustomFuncParam) => {\n let ghostView: React.ReactElement = <GhostView node={dragNode} />;\n const nodeGhostView = this.customAdvanceHook.getGhostViewRender(dragNode);\n const CustomGhostView = nodeGhostView || this.props.pluginCtx.config.ghostViewRender;\n\n if (CustomGhostView) {\n ghostView = <CustomGhostView node={dragNode} params={commonParam} />;\n }\n return ghostView;\n };\n\n toSelectNode = async (nodeId: string) => {\n const ctx = this.props.pluginCtx;\n const node = ctx.pageModel.getNode(nodeId);\n const flag = await this.onSelectNode(node || null, null);\n if (flag === false) {\n return false;\n } else {\n this.layoutRef.current?.selectNode(nodeId);\n return true;\n }\n };\n\n toCopyNode = async (id: string) => {\n const ctx = this.props.pluginCtx;\n const cpNode = ctx.pageModel.getNode(id);\n const newNode = await this.customAdvanceHook.onCopy(cpNode as CNode);\n if (newNode) {\n this.toSelectNode(newNode.id);\n return true;\n }\n };\n\n toDeleteNode = async (nodeId: string) => {\n const ctx = this.props.pluginCtx;\n const node = ctx.pageModel.getNode(nodeId);\n if (!node) {\n return;\n }\n const delRes = await this.customAdvanceHook.onDelete(node);\n if (delRes === false) {\n return false;\n }\n this.toSelectNode('');\n return true;\n };\n\n toHidden = (id: string) => {\n const targetNodeModel = this.props.pluginCtx.pageModel.getNode(id) as CNode;\n if (!targetNodeModel) {\n return;\n }\n const devState = targetNodeModel.value.configure.devState ?? {};\n devState.condition = false;\n targetNodeModel.value.configure.devState = devState;\n targetNodeModel.updateValue();\n return true;\n };\n\n getToolbarView = (node: CNode | CRootNode) => {\n const list = getClosestNodeList(node, 5);\n const toolbarProps: DefaultSelectToolBarProps = {\n nodeList: list,\n toSelectNode: this.toSelectNode,\n toCopy: this.toCopyNode,\n toDelete: this.toDeleteNode,\n toHidden: this.toHidden,\n };\n const defaultToolbarItem = getDefaultToolbarItem(toolbarProps);\n let toolbarView = <DefaultSelectToolBar {...toolbarProps} />;\n const ToolbarView =\n this.customAdvanceHook.getToolbarViewRender(node) || this.props.pluginCtx.config.toolbarViewRender;\n if (ToolbarView) {\n toolbarView = (\n <ToolbarView\n node={node}\n context={this.props.pluginCtx}\n toolBarItems={defaultToolbarItem.map}\n toolBarItemList={defaultToolbarItem.list}\n />\n );\n }\n return toolbarView;\n };\n\n onHoverNode: LayoutPropsType['onHoverNode'] = (node, dragNode, e) => {\n this.props.pluginCtx.emitter.emit('onHover', node);\n const material = node?.material;\n if (!material) {\n console.warn('material not found', node);\n }\n const commonParam = {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: e,\n extra: {},\n };\n const ghostView = this.getGhostView(dragNode, commonParam);\n\n const newState = {\n hoverToolbarView: <div className={styles.hoverTips}>{material?.value.title || material?.componentName}</div>,\n ghostView: ghostView,\n hoverRectViewRender:\n this.customAdvanceHook.getHoverRectViewRender(node) || this.props.pluginCtx.config.hoverRectViewRender,\n };\n if (!dragNode) {\n newState.ghostView = null as any;\n }\n this.setState({\n ...newState,\n });\n };\n\n nodeCanDrag: LayoutPropsType['nodeCanDrag'] = async (e) => {\n const extraData = e.extraData;\n const dragNode = extraData?.dragNode;\n const res = await this.customAdvanceHook.canDrag({\n dragNode,\n eventObj: e,\n });\n return res;\n };\n\n nodeCanDrop: LayoutPropsType['nodeCanDrop'] = async (e) => {\n const extraData = e.extraData;\n const dragNode = extraData?.dragNode;\n const res = await this.customAdvanceHook.canDrop({\n dragNode,\n eventObj: e,\n ...extraData,\n });\n return res;\n };\n\n innerSelectRectViewRender: LayoutPropsType['selectRectViewRender'] = (selectViewProps) => {\n const { selectRectViewRender } = this.state;\n const { pluginCtx } = this.props;\n\n const Comp = selectRectViewRender;\n const selectNode = pluginCtx.engine.getActiveNode();\n\n if (!Comp || !selectNode) {\n return <></>;\n }\n return (\n <Comp\n node={selectNode}\n componentInstance={selectViewProps.instance}\n componentInstanceIndex={selectViewProps.index}\n params={{\n viewPortal: this.getPortalViewCtx(),\n context: this.props.pluginCtx,\n extra: {},\n }}\n />\n );\n };\n\n innerHoverRectViewRender: LayoutPropsType['hoverRectViewRender'] = (hoverViewProps) => {\n const { hoverRectViewRender } = this.state;\n\n const Comp = hoverRectViewRender;\n\n if (!Comp) {\n return <></>;\n }\n return (\n <Comp\n node={hoverViewProps.instance._NODE_MODEL}\n componentInstance={hoverViewProps.instance}\n componentInstanceIndex={hoverViewProps.index}\n params={{\n viewPortal: this.getPortalViewCtx(),\n context: this.props.pluginCtx,\n extra: {},\n }}\n />\n );\n };\n\n innerDropViewRender: LayoutPropsType['dropViewRender'] = (dropViewProps) => {\n const { dropViewRender } = this.state;\n\n const Comp = dropViewRender;\n\n if (!Comp) {\n return <></>;\n }\n return (\n <Comp\n {...(dropViewProps as any)}\n node={dropViewProps.instance._NODE_MODEL}\n componentInstance={dropViewProps.instance}\n componentInstanceIndex={dropViewProps.index}\n params={{\n viewPortal: this.getPortalViewCtx(),\n context: this.props.pluginCtx,\n extra: {},\n }}\n />\n );\n };\n\n render() {\n const { layoutRef, props, onSelectNode, onDragStart, onHoverNode, onNodeDrop, onNodeDragging, onNodeDragEnd } =\n this;\n const {\n pageModel,\n hoverToolbarView,\n selectToolbarView,\n ghostView,\n portalView,\n selectRectViewRender,\n hoverRectViewRender,\n dropViewRender,\n } = this.state;\n\n const { pluginCtx } = props;\n const assets = pluginCtx.assetsPackageListManager.getList() || ([] as AssetPackage[]);\n\n const renderJSUrl = pluginCtx.engine.props.renderJSUrl || './render.umd.js';\n const advanceCustomProps: LayoutPropsType = {};\n\n if (selectRectViewRender) {\n advanceCustomProps.selectRectViewRender = this.innerSelectRectViewRender;\n }\n\n if (hoverRectViewRender) {\n advanceCustomProps.hoverRectViewRender = this.innerHoverRectViewRender;\n }\n\n if (dropViewRender) {\n advanceCustomProps.dropViewRender = this.innerDropViewRender;\n }\n if (selectToolbarView) {\n advanceCustomProps.selectToolbarView = this.state.selectToolbarView;\n }\n\n return (\n <>\n <Layout\n beforeInitRender={props.pluginCtx.config.beforeInitRender}\n customRender={props.pluginCtx.config.customRender}\n ref={layoutRef}\n pageModel={pageModel}\n renderJSUrl={renderJSUrl}\n {...props}\n hoverToolBarView={hoverToolbarView}\n selectBoxStyle={{}}\n hoverBoxStyle={{}}\n nodeCanDrag={this.nodeCanDrag}\n nodeCanDrop={this.nodeCanDrop}\n onSelectNode={onSelectNode}\n onNodeDragStart={onDragStart}\n onHoverNode={onHoverNode}\n onNodeDrop={onNodeDrop}\n onNodeDragging={onNodeDragging}\n onNodeDraEnd={onNodeDragEnd}\n {...advanceCustomProps}\n ghostView={ghostView}\n assets={assets}\n pluginCtx={this.props.pluginCtx}\n />\n {portalView && createPortal(portalView, document.body)}\n </>\n );\n }\n}\n","import React from 'react';\nimport { CPage, CPageDataType } from '@chamn/model';\n\nimport { PLUGIN_NAME } from './config';\nimport { Designer } from './components/Canvas';\nimport { DesignerPluginType } from './type';\nimport { LayoutMode } from '@chamn/layout';\n\nexport const DesignerPlugin: DesignerPluginType = () => {\n const designerRef = React.createRef<Designer>();\n return {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n ctx.name = PLUGIN_NAME;\n const workbench = ctx.getWorkbench();\n workbench.replaceBodyView(<Designer ref={designerRef} pluginCtx={ctx} />);\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return {\n /** 设置 canvas 的渲染模式 */\n setMode(newMode) {\n return designerRef.current?.layoutRef.current?.setMode(newMode);\n },\n setPreviewMode() {\n return designerRef.current?.layoutRef.current?.setMode(LayoutMode.PREVIEW);\n },\n setEditMode() {\n return designerRef.current?.layoutRef.current?.setMode(LayoutMode.EDIT);\n },\n setCanvasWidth(width: number | string) {\n const iframeContainer = designerRef.current?.getIframeDom();\n\n if (iframeContainer?.containerDom) {\n let newW = width;\n if (typeof width === 'number') {\n newW = `${width}px`;\n }\n iframeContainer.containerDom.style.width = String(newW);\n iframeContainer.containerDom.style.margin = '0 auto';\n }\n },\n getIframeDom() {\n return designerRef.current?.getIframeDom();\n },\n getInstance: () => {\n return designerRef.current;\n },\n getDnd: () => {\n return designerRef.current?.layoutRef.current?.dnd;\n },\n selectNode: async (nodeId) => {\n return await designerRef.current?.toSelectNode(nodeId);\n },\n copyNode: async (nodeId) => {\n return await designerRef.current?.toCopyNode(nodeId);\n },\n deleteNode: async (nodeId) => {\n return await designerRef.current?.toDeleteNode(nodeId);\n },\n getSelectedNodeId: () => {\n return designerRef.current?.layoutRef.current?.state.currentSelectId;\n },\n updatePage: (page: CPageDataType | CPage) => {\n designerRef.current?.layoutRef.current?.designRenderRef?.current?.rerender(page);\n },\n reload: () => {\n designerRef.current?.reloadRender();\n },\n getComponentInstances: (id: string) => {\n return designerRef.current?.layoutRef.current?.designRenderRef.current?.getInstancesById(id) || [];\n },\n getDynamicComponentInstances: (id: string) => {\n const map =\n designerRef.current?.layoutRef.current?.designRenderRef.current?.renderRef.current\n ?.dynamicComponentInstanceMap;\n return map?.get(id) || ([] as any);\n },\n getLayoutRef: () => {\n return designerRef.current?.layoutRef as any;\n },\n getDesignerWindow: () => {\n return designerRef.current?.layoutRef.current?.iframeContainer.getWindow() as any;\n },\n updateRenderComponents: (newComponents: Record<string, string>) => {\n return designerRef.current?.updateRenderComponents(newComponents);\n },\n };\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n };\n};\n\nDesignerPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","import {\n ArraySetterObjType,\n CNode,\n CNodeDataType,\n CPage,\n CPageDataType,\n DropPosType,\n getMTitle,\n isJSSlotPropNode,\n isSpecialMaterialPropType,\n MaterialPropType,\n MTitle,\n RenderPropType,\n SetterObjType,\n SetterType,\n ShapeSetterObjType,\n} from '@chamn/model';\nimport { isPlainObject } from 'lodash-es';\nimport { TreeNodeData } from './components/TreeView/dataStruct';\n\nexport const getTargetMNodeKeyVal = (dom: HTMLElement | null, key: string): null | string => {\n if (!dom) {\n return null;\n }\n const val = dom.getAttribute(key);\n if (!val) {\n return getTargetMNodeKeyVal(dom.parentElement, key);\n } else {\n return val;\n }\n};\n\nexport const transformNodeSchemaToTreeData = (\n nodeSchema: CNodeDataType | CNodeDataType[],\n parent: TreeNodeData,\n pageModel: CPage\n): TreeNodeData | TreeNodeData[] => {\n const tb = (node: CNodeDataType, parent?: TreeNodeData | null): TreeNodeData => {\n let nodeChild: any[] = node.children || [];\n if (!Array.isArray(nodeChild)) {\n // TODO: 暂时不处理字符串的情况\n nodeChild = [];\n }\n // 过滤掉字符串的情况\n nodeChild = nodeChild.filter((el) => typeof el !== 'string');\n const nodeMeta = pageModel.materialsModel.findByComponentName(node.componentName)?.value.title;\n const newCurrentNode: TreeNodeData = {\n title: node.title || nodeMeta || node.componentName,\n key: node.id,\n children: [],\n parent: parent,\n canDropPos: pageModel.getNode(node.id || '')?.isContainer() ? undefined : ['after', 'before'],\n };\n // 还需要处理 props 中的节点\n const propsNodeList: TreeNodeData[] = [];\n const slotNode: TreeNodeData = {\n title: 'SLOT',\n key: `${node.id}-SLOT`,\n children: propsNodeList,\n canBeSelected: false,\n canDropPos: false,\n parent: null,\n containerRender: ({ treeNodeView }) => {\n return (\n <div\n style={{\n border: '1px solid #a97cf8',\n borderTopWidth: '6px',\n marginRight: '2px',\n marginTop: '5px',\n }}\n >\n {treeNodeView}\n </div>\n );\n },\n };\n const props = node.props || {};\n\n const processProps = (val: unknown, key: string, keys: string[]) => {\n const flag = isJSSlotPropNode(val);\n\n if (flag) {\n const tempVal = val as RenderPropType;\n const pageModeNode = pageModel.getNode(node.id!);\n let propsTitle = '';\n if (pageModeNode) {\n const tempTitle = getPropsLabel(pageModeNode as CNode, [...keys, key]);\n propsTitle = getMTitle(tempTitle);\n }\n let plainTitle = key;\n if (propsTitle) {\n plainTitle = getMTitle(propsTitle) || key;\n }\n const tempNode: TreeNodeData = {\n title: plainTitle,\n key: `${node.id}-${keys.join('_')}`,\n children: [],\n canBeSelected: false,\n canDrag: false,\n canDropPos: ['current'],\n parent: slotNode,\n };\n\n let propValue: CNodeDataType[] = [];\n if (tempVal.value && !Array.isArray(tempVal.value)) {\n propValue = [tempVal.value];\n } else {\n propValue = tempVal.value;\n }\n\n tempNode.children = transformNodeSchemaToTreeData(propValue, tempNode, pageModel) as TreeNodeData[];\n propsNodeList.push(tempNode);\n return;\n }\n if (isPlainObject(val)) {\n const tempVal = val as any;\n Object.keys(tempVal).forEach((newKey) => {\n processProps(tempVal[newKey], newKey, [...keys, key]);\n });\n }\n if (Array.isArray(val)) {\n const tempVal = val as any[];\n tempVal.forEach((item, index) => {\n processProps(item, String(index), [...keys, key]);\n });\n }\n };\n\n const getPropsLabel = (nodeModel: CNode, keyPath: string[]) => {\n const propsLabelMap = getNodePropsLabelMap(nodeModel);\n const newKeyPath = keyPath.map((el) => {\n if (String(parseInt(el, 10)) === el) {\n return '$NUM';\n } else {\n return el;\n }\n });\n return propsLabelMap[newKeyPath.join('.')] || '';\n };\n\n Object.keys(props).forEach((key) => {\n processProps(props[key], key, []);\n });\n\n if (propsNodeList.length > 0) {\n newCurrentNode.children?.push(slotNode);\n slotNode.parent = newCurrentNode;\n }\n const childNodeList = nodeChild.map((el) => tb(el, newCurrentNode)) || [];\n newCurrentNode.children = [...newCurrentNode.children!, ...childNodeList];\n return newCurrentNode;\n };\n\n if (Array.isArray(nodeSchema)) {\n return nodeSchema.map((el) => {\n return tb(el, parent);\n });\n } else {\n return tb(nodeSchema, parent);\n }\n};\n\nexport const transformPageSchemaToTreeData = (pageSchema: CPageDataType, pageModel: CPage): TreeNodeData[] => {\n const tree = pageSchema.componentsTree;\n let child = (tree.children || []) as CNodeDataType[];\n if (!Array.isArray(child)) {\n child = [];\n }\n\n const rootNode: TreeNodeData = {\n title: 'Page',\n key: tree.id || 'globalState',\n rootNode: true,\n children: [],\n };\n rootNode.children = transformNodeSchemaToTreeData(child, rootNode, pageModel) as TreeNodeData[];\n return [rootNode];\n};\n\nexport const traverseTree = (\n tree: TreeNodeData | TreeNodeData[],\n handler: (node: TreeNodeData) => boolean | undefined\n) => {\n let tempTree: TreeNodeData[] = [];\n if (Array.isArray(tree)) {\n tempTree = tree;\n } else {\n tempTree = [tree];\n }\n\n let stop = false;\n\n const traverseCb = (node: TreeNodeData, conditionCb: (node: TreeNodeData) => boolean | undefined) => {\n if (stop) {\n return;\n }\n const res = conditionCb(node);\n if (res) {\n stop = true;\n } else {\n node.children?.forEach((el) => {\n traverseCb(el, conditionCb);\n });\n }\n };\n tempTree.forEach((el) => {\n traverseCb(el, handler);\n });\n};\n\nexport function calculateDropPosInfo(params: { point: { x: number; y: number }; dom: HTMLElement }): DropPosType {\n const { point, dom } = params;\n let pos: DropPosType['pos'];\n\n const mousePos = point;\n const targetRect = dom.getBoundingClientRect();\n const targetDomH = targetRect.height;\n const xCenter = targetRect.x + 50;\n const yCenter = targetRect.y + Math.round(targetDomH / 2);\n\n if (mousePos.y > yCenter) {\n pos = 'after';\n } else {\n pos = 'before';\n }\n\n if (mousePos.x > xCenter && pos === 'after') {\n pos = 'current';\n }\n\n return {\n pos,\n direction: 'vertical',\n };\n}\n\n//TODO: 移动到 model 包中去\nexport const getNodePropsLabelMap = (node: CNode) => {\n const resMap: Record<string, MTitle> = {};\n const props = node.material?.value.props;\n if (!props) {\n return resMap;\n }\n const singleProcessUnit = (val: SetterType, paths: string[]) => {\n if (isPlainObject(val)) {\n const newPaths = [...paths];\n const objSetter = val as SetterObjType;\n const componentName = objSetter.componentName;\n if (componentName === 'ArraySetter') {\n const setter = objSetter as ArraySetterObjType;\n const arrItemSetter = setter.props?.item.setters || [];\n const parentTitle = resMap[paths.join('.')];\n let currentTitle = '';\n if (typeof parentTitle === 'string') {\n currentTitle = parentTitle;\n } else {\n currentTitle = parentTitle.label;\n }\n newPaths.push('$NUM');\n arrItemSetter.forEach((el) => {\n currentTitle = `${currentTitle}`;\n resMap[newPaths.join('.')] = currentTitle;\n singleProcessUnit(el, newPaths);\n });\n } else if (componentName === 'ShapeSetter') {\n const setter = objSetter as ShapeSetterObjType;\n const elements = setter.props?.elements || [];\n elements.forEach((it) => {\n const newObjPaths = [...newPaths];\n newObjPaths.push(it.name);\n resMap[newObjPaths.join('.')] = it.title;\n const subSetter = it.setters || [];\n subSetter.forEach((it2) => {\n singleProcessUnit(it2, [...newObjPaths]);\n });\n });\n }\n }\n };\n\n props.forEach((item) => {\n let targetItem: MaterialPropType | MaterialPropType[] | null = null;\n if (isSpecialMaterialPropType(item)) {\n targetItem = item.content;\n } else {\n targetItem = item;\n }\n let itemArr: MaterialPropType[] = [];\n if (Array.isArray(targetItem)) {\n itemArr = targetItem;\n } else {\n itemArr = [targetItem];\n }\n\n itemArr.forEach((it) => {\n const newPaths: string[] = [it.name];\n resMap[newPaths.join('.')] = it.title;\n it.setters?.forEach((it2) => {\n singleProcessUnit(it2, newPaths);\n });\n });\n });\n\n return resMap;\n};\n","import { Sensor } from '@chamn/layout';\nimport { CPage } from '@chamn/model';\nimport React from 'react';\nimport { TreeNodeData } from './dataStruct';\nimport { DesignerExport } from '@/plugins/Designer/type';\nexport enum DragState {\n DRAGGING = 'DRAGGING',\n NORMAL = 'NORMAL',\n}\nexport type ContextState = {\n treeData: TreeNodeData[];\n currentSelectNodeKeys: string[];\n expandKeys: string[];\n multiSelect: boolean;\n dragState: DragState;\n pageModel: CPage | null;\n};\n\nexport type CTreeContextData = {\n sensor?: Sensor;\n state: ContextState;\n updateState: (state: Partial<ContextState>) => void;\n onSelectNode: (params: { keys: string[]; node: TreeNodeData }) => Promise<boolean | undefined>;\n onDeleteNode: (id: string) => Promise<boolean | undefined>;\n onCopyNode: (id: string) => Promise<boolean | undefined>;\n getDesignerHandler?: () => Promise<DesignerExport>;\n};\n\nexport const CTreeContext = React.createContext<CTreeContextData>({\n state: {\n treeData: [],\n currentSelectNodeKeys: [],\n expandKeys: [],\n multiSelect: false,\n dragState: DragState.NORMAL,\n pageModel: null,\n },\n updateState: () => {},\n onSelectNode: async () => {\n return true;\n },\n onDeleteNode: async () => {\n return true;\n },\n onCopyNode: async () => {\n return true;\n },\n});\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport { CopyOutlined, DeleteOutlined, EyeInvisibleOutlined, EyeOutlined, RightOutlined } from '@ant-design/icons';\nimport clsx from 'clsx';\nimport { CTreeContext, DragState } from './context';\nimport { TreeNodeData } from './dataStruct';\nimport styles from './style.module.scss';\nimport { CNode } from '@chamn/model';\nimport { Input, InputRef } from 'antd';\nimport { CPluginCtx } from '@/core/pluginManager';\nimport { DesignerPluginInstance } from '@/plugins/Designer/type';\n\nexport const DRAG_ITEM_KEY = 'data-drag-key';\n\nexport type TreeNodeProps = {\n item: TreeNodeData;\n level?: number;\n paths?: (string | number)[];\n pluginCtx: CPluginCtx;\n};\nexport const TreeNode = (props: TreeNodeProps) => {\n const allStateRef = useRef<{ titleEditable: boolean }>({\n titleEditable: false,\n });\n const { level = 0, item, paths = ['0'] } = props;\n const [nodeVisible, setNodeVisible] = useState(true);\n const {\n state: ctxState,\n updateState,\n onSelectNode,\n onDeleteNode,\n getDesignerHandler,\n onCopyNode,\n } = useContext(CTreeContext);\n\n const [titleEditable, setTitleEditable] = useState(allStateRef.current?.titleEditable);\n const [editInputValue, setEditInputValue] = useState('');\n allStateRef.current.titleEditable = titleEditable;\n const expanded = ctxState.expandKeys.find((el) => el === item.key);\n const toggleExpandNode = (open?: boolean) => {\n let newExpandKeys = ctxState.expandKeys;\n if (open !== undefined) {\n if (open === true) {\n if (!expanded) {\n newExpandKeys.push(item.key || '');\n }\n } else {\n if (expanded) {\n newExpandKeys = newExpandKeys.filter((el) => el !== item.key);\n }\n }\n } else {\n if (expanded) {\n newExpandKeys = newExpandKeys.filter((el) => el !== item.key);\n } else {\n newExpandKeys.push(item.key || '');\n }\n }\n\n updateState({\n expandKeys: newExpandKeys,\n });\n };\n const selected = ctxState.currentSelectNodeKeys.find((el) => el === item.key);\n const titleEditInputRef = useRef<InputRef>(null);\n const toggleSelectNode = async () => {\n toggleExpandNode(true);\n if (titleEditable) {\n titleEditInputRef?.current?.focus();\n return;\n }\n if (item.canBeSelected !== undefined && item.canBeSelected === false) {\n return;\n }\n let newKeys = ctxState.currentSelectNodeKeys;\n if (!ctxState.multiSelect) {\n if (item.key) {\n const flag = await onSelectNode?.({ keys: [item.key], node: item });\n if (flag) {\n updateState({\n currentSelectNodeKeys: [String(item.key)],\n });\n }\n } else {\n onSelectNode?.({ keys: [], node: item });\n }\n\n return;\n }\n if (selected) {\n newKeys = newKeys.filter((el) => el !== item.key);\n } else {\n newKeys.push(String(item.key));\n }\n onSelectNode?.({ keys: newKeys, node: item });\n updateState({\n currentSelectNodeKeys: newKeys,\n });\n };\n const singPadding = 20;\n const indent = singPadding * level;\n const canBeSelected = item.canBeSelected ?? true;\n\n const dragKeyProps = {\n [DRAG_ITEM_KEY]: item.key,\n };\n const updateExpandKeyRef = useRef<(key: string) => void>();\n const ctxStateRef = useRef<typeof ctxState>();\n ctxStateRef.current = ctxState;\n updateExpandKeyRef.current = (key) => {\n const oldExpandKeys = ctxState.expandKeys;\n const newExpandKeys = Array.from(new Set([...oldExpandKeys, key]));\n updateState({\n expandKeys: newExpandKeys,\n });\n };\n const domRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n // auto expand on dragging\n let timerHandler = 0;\n domRef.current?.addEventListener('mouseenter', () => {\n timerHandler = window.setTimeout(() => {\n if (ctxStateRef.current?.dragState === DragState.DRAGGING) {\n updateExpandKeyRef.current?.(item.key || '');\n }\n }, 0.8 * 1000);\n });\n domRef.current?.addEventListener('mouseleave', () => {\n clearTimeout(timerHandler);\n });\n\n const clickHandle = (e: MouseEvent) => {\n if (allStateRef.current.titleEditable) {\n if (e.target === titleEditInputRef.current?.input) {\n return;\n }\n setTitleEditable(false);\n targetNodeModel.updateValue();\n }\n };\n let sunWin: Window | null;\n const registerDesignerClick = async () => {\n const designerPluginInstance = await props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerHandler = designerPluginInstance?.export;\n const win = designerHandler?.getDesignerWindow();\n win?.addEventListener('click', clickHandle);\n sunWin = win || null;\n };\n\n registerDesignerClick();\n document.addEventListener('click', clickHandle);\n\n return () => {\n if (timerHandler) {\n clearTimeout(timerHandler);\n }\n document.removeEventListener('click', clickHandle);\n sunWin?.removeEventListener('click', clickHandle);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const targetNodeModel = ctxState.pageModel?.getNode(item.key || '') as CNode;\n\n const toggleNodeVisible = () => {\n const newVisible = !nodeVisible;\n\n if (!targetNodeModel) {\n return;\n }\n const devState = targetNodeModel.value.configure.devState ?? {};\n devState.condition = newVisible;\n targetNodeModel.value.configure.devState = devState;\n targetNodeModel.updateValue();\n setNodeVisible(newVisible);\n };\n\n let titleView = item.title;\n if (item.titleViewRender) {\n titleView = item.titleViewRender({\n item,\n titleView: item.title,\n });\n }\n\n const bodyView = (\n <div className={styles.nodeBox}>\n <div\n className={clsx([styles.nodeContent, selected && canBeSelected && styles.selected])}\n style={{ marginLeft: `${-indent}px`, paddingLeft: `${indent + 8}px` }}\n onMouseMove={async () => {\n if (!item.key) {\n return;\n }\n const designerHandler = await getDesignerHandler?.();\n const compInstances = designerHandler?.getDynamicComponentInstances(item.key);\n if (typeof compInstances?._CONDITION !== 'undefined') {\n setNodeVisible(compInstances?._CONDITION);\n }\n }}\n >\n {item.children?.length ? (\n <span style={{ paddingRight: '5px' }} className={styles.arrowSpan} onClickCapture={() => toggleExpandNode()}>\n <RightOutlined className={clsx([styles.nodeArrow, expanded && styles.expanded])} />\n </span>\n ) : null}\n <div\n className={styles.nodeRenderView}\n {...dragKeyProps}\n ref={domRef}\n onClick={toggleSelectNode}\n onDoubleClick={() => {\n // slot 节点,属性节点不能编辑 title\n if (!targetNodeModel) {\n return;\n }\n const node = targetNodeModel;\n const nodeMeta = node.materialsModel.findByComponentName(node.value.componentName)?.value.title;\n const inputValue = node.value.title || nodeMeta || node.value.componentName || '';\n setEditInputValue(inputValue);\n setTitleEditable(true);\n setTimeout(() => {\n titleEditInputRef.current?.focus();\n }, 16.66);\n }}\n >\n {!titleEditable && titleView}\n {titleEditable && (\n <div\n style={{\n paddingRight: '10px',\n }}\n >\n <Input\n size=\"small\"\n maxLength={20}\n style={{}}\n ref={titleEditInputRef}\n value={editInputValue}\n onPressEnter={() => {\n setTitleEditable(false);\n targetNodeModel.updateValue();\n }}\n onChange={(e) => {\n targetNodeModel.value.title = e.target.value;\n setEditInputValue(e.target.value);\n }}\n />\n </div>\n )}\n </div>\n\n {!titleEditable && !item.rootNode && (\n <div className={styles.toolbarBox}>\n <div className={styles.iconItem}>\n {!nodeVisible && <EyeOutlined onClick={toggleNodeVisible} />}\n {nodeVisible && <EyeInvisibleOutlined onClick={toggleNodeVisible} />}\n </div>\n <div\n className={styles.iconItem}\n onClick={() => {\n onCopyNode(item.key || '');\n }}\n >\n <CopyOutlined />\n </div>\n <div\n className={styles.iconItem}\n onClick={() => {\n onDeleteNode(item.key || '');\n }}\n >\n <DeleteOutlined />\n </div>\n </div>\n )}\n </div>\n <div\n className={clsx([styles.nodeChildren, selected && styles.selected])}\n style={{\n paddingLeft: `${singPadding}px`,\n height: expanded ? 'auto' : '0',\n }}\n >\n {expanded &&\n item.children?.map((el, index) => {\n const key = `${el.key}-${index}`;\n return (\n <TreeNode key={key} item={el} paths={[...paths, index]} level={level + 1} pluginCtx={props.pluginCtx} />\n );\n })}\n </div>\n </div>\n );\n if (item.containerRender) {\n const containerView = item.containerRender({\n item: item,\n treeNodeView: bodyView,\n });\n return containerView;\n }\n return bodyView;\n};\n","import { LayoutDragAndDropExtraDataType, Sensor } from '@chamn/layout';\nimport { CNode, CRootNode, DropPosType } from '@chamn/model';\nimport React from 'react';\nimport { WithTranslation } from 'react-i18next';\nimport { CPluginCtx } from '../../../../core/pluginManager';\nimport { LOGGER } from '../../../../utils/logger';\nimport { calculateDropPosInfo, getTargetMNodeKeyVal, transformPageSchemaToTreeData, traverseTree } from '../../util';\nimport { ContextState, CTreeContext, DragState } from './context';\nimport { TreeNodeData } from './dataStruct';\nimport styles from './style.module.scss';\nimport { DRAG_ITEM_KEY, TreeNode } from './treeNode';\nimport { DesignerPluginInstance } from '@/plugins/Designer/type';\nimport { message } from 'antd';\n\ninterface TreeViewProps extends WithTranslation {\n pluginCtx: CPluginCtx;\n multiSelect?: boolean;\n}\n\nexport class TreeView extends React.Component<\n TreeViewProps,\n ContextState & {\n dropPosInfo: { x: number; y: number } | null;\n }\n> {\n domRef: React.RefObject<HTMLDivElement>;\n disposeCbList: (() => void)[] = [];\n sensor?: Sensor;\n constructor(props: TreeViewProps) {\n super(props);\n this.domRef = React.createRef<HTMLDivElement>();\n\n this.state = {\n treeData: [],\n currentSelectNodeKeys: [],\n expandKeys: [],\n multiSelect: props.multiSelect || false,\n dropPosInfo: {\n x: 0,\n y: 0,\n },\n pageModel: props.pluginCtx.pageModel,\n dragState: DragState.NORMAL,\n };\n }\n\n getDesignerHandler = async () => {\n const designerPluginInstance = await this.props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerHandler = designerPluginInstance?.export;\n return designerHandler!;\n };\n\n updateTreeDataFromNode = () => {\n const { pluginCtx } = this.props;\n const { pageModel } = pluginCtx;\n const plainTreeData = pageModel.export();\n const tempTreeData = transformPageSchemaToTreeData(plainTreeData, pageModel);\n this.setState({\n treeData: tempTreeData,\n });\n };\n\n getParentKeyPaths = (targetKey: string) => {\n const { treeData } = this.state;\n let target: TreeNodeData = null as any;\n traverseTree(treeData, (node) => {\n if (node.key === targetKey) {\n target = node;\n return true;\n }\n return false;\n });\n if (target) {\n let tempNode = target?.parent as TreeNodeData | undefined | null;\n const res = [];\n while (tempNode) {\n if (tempNode.key) {\n res.push(tempNode.key);\n }\n tempNode = tempNode.parent;\n }\n return res;\n } else {\n return [];\n }\n };\n\n scrollNodeToView = (key: string) => {\n const dom = document.querySelector(`[${DRAG_ITEM_KEY}=\"${key}\"]`);\n dom?.scrollIntoView?.({\n behavior: 'smooth',\n block: 'center',\n });\n };\n\n async componentDidMount() {\n this.updateTreeDataFromNode();\n const { pluginCtx } = this.props;\n const { pageModel } = pluginCtx;\n\n pageModel.emitter.on('*', () => {\n this.updateTreeDataFromNode();\n });\n\n pluginCtx.globalEmitter.on('onSelectNodeChange', ({ node }) => {\n this.toSelectTreeNode(node);\n });\n\n const workbench = pluginCtx.getWorkbench();\n\n workbench.emitter.on('leftPanelVisible', ({ visible, panelName }) => {\n if (visible && panelName === 'OutlineTree') {\n console.log('visible, panelName', visible, panelName);\n const currentSelectNode = pluginCtx.engine.getActiveNode();\n if (currentSelectNode) {\n this.toSelectTreeNode(currentSelectNode);\n }\n }\n });\n\n const currentSelectNode = pluginCtx.engine.getActiveNode();\n if (currentSelectNode) {\n this.toSelectTreeNode(currentSelectNode);\n }\n\n await this.props.pluginCtx.pluginManager.onPluginReadyOk('Designer');\n this.registerDragEvent();\n // 页面重载时重新注册拖拽事件\n this.props.pluginCtx.engine.pageModel.emitter.on('onReloadPage', () => {\n this.registerDragEvent();\n });\n }\n\n toSelectTreeNode = (node: CNode | CRootNode | null) => {\n if (!node) {\n this.setState({\n currentSelectNodeKeys: [],\n });\n return;\n }\n const parentPaths = this.getParentKeyPaths(node.id);\n LOGGER.debug('onSelectNodeChange parent path', parentPaths, node);\n const newExpandKeys = Array.from(new Set([...this.state.expandKeys, ...parentPaths]));\n\n LOGGER.debug('onSelectNodeChange newExpandKeys', newExpandKeys, node);\n\n this.setState({\n currentSelectNodeKeys: [node.id],\n expandKeys: newExpandKeys,\n });\n\n setTimeout(() => {\n this.scrollNodeToView(node.id);\n }, 16);\n };\n\n containNode = (parentNode: TreeNodeData, targetNode: TreeNodeData) => {\n let res = null;\n traverseTree(parentNode, (node) => {\n if (node.key === targetNode.key) {\n res = node;\n return true;\n }\n return false;\n });\n return res;\n };\n\n getTreeNodeByKey = (key: string): TreeNodeData | null => {\n const { treeData } = this.state;\n let target: TreeNodeData | null = null;\n traverseTree(treeData, (node) => {\n if (node.key === key) {\n target = node;\n return true;\n }\n return false;\n });\n return target;\n };\n\n registerDragEvent = async () => {\n if (!this.domRef.current) {\n return;\n }\n const sensor = new Sensor<LayoutDragAndDropExtraDataType>({\n container: this.domRef.current,\n name: 'OutlineTree',\n eventPriority: 999,\n mainDocument: document,\n });\n const { pluginCtx } = this.props;\n\n const pageModel = pluginCtx.pageModel;\n const designerExport = await this.getDesignerHandler();\n const dnd = designerExport!.getDnd()!;\n\n sensor.setCanDrag(async (eventObj) => {\n const targetDom = eventObj.event.target as HTMLDivElement;\n if (!targetDom) {\n return;\n }\n const targetNodeId = getTargetMNodeKeyVal(targetDom, DRAG_ITEM_KEY);\n\n if (!targetNodeId) {\n return;\n }\n\n const targetNode = pageModel.getNode(targetNodeId);\n const targetTreeNode = this.getTreeNodeByKey(targetNodeId);\n // 判断当前节点是否可以在节点树上拖动,比如 jsslot 容器节点不能被拖动,大纲树特有\n if (targetTreeNode?.canDrag !== undefined && targetTreeNode?.canDrag === false) {\n return;\n }\n\n // 判断节点本身是否可以拖动\n const designerInstance = designerExport!.getInstance();\n const nodeCanDragRes = await designerInstance?.customAdvanceHook.canDrag({\n dragNode: targetNode,\n eventObj: {\n extraData: {},\n ...eventObj,\n from: eventObj.event,\n fromSensor: sensor,\n fromPointer: eventObj.pointer,\n },\n });\n // 节点不能拖动\n if (nodeCanDragRes === false) {\n return false;\n }\n\n if (!targetNode) {\n console.log('targetNode not found');\n return;\n }\n\n const canDragResInfo = {\n ...eventObj,\n extraData: {\n dragNode: targetNode,\n dragNodeUID: targetNode.id,\n },\n };\n\n if (typeof nodeCanDragRes === 'object') {\n canDragResInfo.extraData.dragNode = nodeCanDragRes.dragNode!;\n canDragResInfo.extraData.dragNodeUID = nodeCanDragRes.dragNode?.id || '';\n }\n\n return canDragResInfo;\n });\n\n sensor.setCanDrop(async (eventObj) => {\n const targetDom = eventObj.event.target as HTMLDivElement;\n\n if (!targetDom) {\n LOGGER.debug('drop dom not found');\n return eventObj;\n }\n const targetNodeId = getTargetMNodeKeyVal(targetDom, DRAG_ITEM_KEY);\n\n if (!targetNodeId) {\n LOGGER.debug('targetNodeId dom not found', eventObj, targetDom, DRAG_ITEM_KEY);\n return eventObj;\n }\n const targetTreeNode = this.getTreeNodeByKey(targetNodeId);\n if (targetTreeNode?.canDropPos !== undefined && targetTreeNode.canDropPos === false) {\n LOGGER.debug('node can not be drop by tree node config');\n return eventObj;\n }\n\n const targetNode = pageModel.getNode(targetNodeId);\n\n if (!targetNode) {\n LOGGER.debug('targetNode not found');\n return eventObj;\n }\n const startNode = eventObj.extraData?.dragNode as CNode;\n if (!startNode) {\n LOGGER.debug('startNode not found');\n return eventObj;\n }\n\n if (startNode?.id === targetNode.id) {\n LOGGER.debug('startNode and dropNode is the same');\n return eventObj;\n }\n const hasContain = startNode.contains(targetNode.id);\n\n if (hasContain) {\n LOGGER.debug('startNode contain dropNode');\n return eventObj;\n }\n\n const dropInfo = calculateDropPosInfo({\n point: eventObj.pointer,\n dom: targetDom,\n });\n\n if (Array.isArray(targetTreeNode?.canDropPos) && !targetTreeNode?.canDropPos.includes(dropInfo.pos)) {\n return false;\n }\n\n LOGGER.info('can dropNode', targetNode);\n\n const res = {\n ...eventObj,\n extraData: {\n ...eventObj.extraData,\n dropPosInfo: dropInfo,\n dropNode: targetNode,\n dropNodeUID: targetNode.id,\n },\n };\n\n // 判断节点本身是否可以拖动\n const designerInstance = designerExport!.getInstance();\n const nodeCanDropRes = await designerInstance?.customAdvanceHook.canDrop({\n dragNode: res.extraData.dragNode,\n dropNode: targetNode,\n eventObj: {\n ...res,\n from: res.event,\n fromSensor: sensor,\n fromPointer: res.pointer,\n },\n });\n\n if (nodeCanDropRes === false) {\n return false;\n }\n\n if (typeof nodeCanDropRes === 'object') {\n res.extraData = {\n ...res.extraData,\n ...nodeCanDropRes,\n };\n }\n return res;\n });\n\n dnd.registerSensor(sensor);\n\n sensor.emitter.on('dragging', (e) => {\n const dropNode = e.extraData.dropNode as CNode;\n this.setState({\n dragState: DragState.DRAGGING,\n });\n\n if (!dropNode) {\n this.setState({\n dropPosInfo: null,\n });\n return;\n }\n const dropDom = document.querySelectorAll(`[${DRAG_ITEM_KEY}=\"${dropNode.id}\"]`)?.[0];\n if (!dropDom) {\n return;\n }\n const dropPosInfo = e.extraData?.dropPosInfo || ({} as DropPosType);\n const rect = dropDom.getBoundingClientRect();\n const newDropInfo = { x: 0, y: 0 };\n\n newDropInfo.x = rect.x;\n if (dropPosInfo.pos === 'before') {\n newDropInfo.y = rect.y;\n } else if (dropPosInfo.pos === 'after') {\n newDropInfo.y = rect.y + rect.height;\n } else {\n newDropInfo.y = rect.y + rect.height;\n newDropInfo.x = rect.x + 20;\n }\n this.setState({\n dropPosInfo: newDropInfo,\n });\n });\n\n sensor.emitter.on('dragEnd', () => {\n this.setState({\n dragState: DragState.NORMAL,\n });\n });\n this.sensor = sensor;\n };\n\n render() {\n const { treeData, dragState, dropPosInfo } = this.state;\n const { pluginCtx } = this.props;\n\n return (\n <CTreeContext.Provider\n value={{\n sensor: this.sensor,\n state: this.state,\n getDesignerHandler: this.getDesignerHandler,\n onSelectNode: async ({ keys: sk }) => {\n const designer = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n if (!designer) {\n console.warn('Designer is empty');\n return false;\n }\n const nodeId = sk?.[0] || '';\n const nn = pluginCtx.pageModel.getNode(nodeId);\n if (!nn) {\n return false;\n }\n\n const designerExport = designer.export;\n const flag = await designerExport.selectNode(nodeId);\n return flag;\n },\n updateState: (newVal) => {\n this.setState(newVal as any);\n },\n onDeleteNode: async (id) => {\n const designer = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n if (!designer) {\n console.warn('Designer is empty');\n return false;\n }\n const designerExport = designer.export;\n const nodeId = id;\n const nn = pluginCtx.pageModel.getNode(nodeId);\n if (!nn) {\n message.error('该节点不能删除');\n return false;\n }\n const flag = await designerExport.deleteNode(id);\n if (!flag) {\n message.error('该节点不能删除');\n }\n return flag;\n },\n onCopyNode: async (id) => {\n const designer = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n if (!designer) {\n console.warn('Designer is empty');\n return false;\n }\n const designerExport = designer.export;\n return await designerExport.copyNode(id);\n },\n }}\n >\n <div className={styles.contentBox} ref={this.domRef}>\n {treeData.map((item, index) => {\n return <TreeNode item={item} key={item.key + `${index}`} pluginCtx={this.props.pluginCtx}></TreeNode>;\n })}\n {dragState === DragState.DRAGGING && dropPosInfo && (\n <div\n className={styles.dropAnchorLine}\n style={{\n left: `${dropPosInfo.x}px`,\n top: `${dropPosInfo.y}px`,\n }}\n ></div>\n )}\n </div>\n </CTreeContext.Provider>\n );\n }\n}\n","export const zh_CN: Record<string, any> = {\n pluginName: '大纲树',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Layout Tree',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","import { ApartmentOutlined } from '@ant-design/icons';\nimport { CPlugin } from '../../core/pluginManager';\nimport { withTranslation } from 'react-i18next';\nimport { TreeView } from './components/TreeView';\nimport localize from './localize';\n\nconst PLUGIN_NAME = 'OutlineTree';\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\nexport const OutlineTreePlugin: CPlugin = {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const { i18n } = ctx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n const TreeViewWithLocalize = withTranslation(i18nNamespace)(TreeView);\n const Title = withTranslation(i18nNamespace)(({ t }) => <>{t('pluginName')}</>);\n const workbench = ctx.getWorkbench();\n workbench.addLeftPanel({\n title: <Title />,\n name: PLUGIN_NAME,\n icon: <ApartmentOutlined />,\n render: <TreeViewWithLocalize pluginCtx={ctx} />,\n });\n\n ctx.pluginReadyOk();\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return {};\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\nOutlineTreePlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const REACT_FLOW_DRAG_CLASS_NAME = 'chamn-action-drag-handler';\n\nexport const INPUT_HANDLE_ID = 'INPUT_HANDLE_ID';\n\nexport const OUTPUT_HANDLE_ID = 'OUTPUT_HANDLE_ID';\n\nexport const REQUEST_API_FAILED_HANDLE_ID = 'REQUEST_API_FAILED_HANDLE_ID';\n","import React from 'react';\nimport { CSetter } from '../Setters/type';\n\nexport type ContextState = Record<string, any>;\n\nexport type CFormContextData = {\n formName: string;\n formState: ContextState;\n conditionConfig: Record<string, (state: ContextState) => boolean>;\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap?: Record<string, CSetter>;\n updateContext: (newState: ContextState, changeKeys?: string[]) => void;\n updateConditionConfig: (name: string, cb: (state: ContextState) => boolean) => void;\n};\n\nexport const CFormContext = React.createContext<CFormContextData>({\n formName: '',\n formState: {},\n conditionConfig: {},\n updateContext: () => {},\n updateConditionConfig: () => {},\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap: {},\n});\n","import React from 'react';\nimport { ReactNode } from 'react';\nimport { CFormContext, CFormContextData, ContextState } from './context';\n\nexport type CFormProps = {\n name: string;\n children?: ReactNode | ReactNode[];\n initialValue?: Record<string, any>;\n customSetterMap: CFormContextData['customSetterMap'];\n onValueChange?: (formData: Record<string, any>, changeKeys?: string[]) => void;\n} & Partial<ContextState>;\n\nconst CUSTOM_SETTER_MAP = {};\n\nlet updateState = () => {};\n\nexport const registerCustomSetter = (customSetterMap: CFormContextData['customSetterMap']) => {\n Object.assign(CUSTOM_SETTER_MAP, customSetterMap);\n updateState?.();\n};\nexport class CForm extends React.Component<CFormProps, CFormContextData> {\n updateContext: (newState: ContextState) => void;\n isMount = false;\n constructor(props: CFormProps) {\n super(props);\n this.updateContext = (newState: ContextState, changeKeys?: string[]) => {\n this.setState({\n formState: newState,\n customSetterMap: CUSTOM_SETTER_MAP,\n });\n this.props.onValueChange?.(this.formatValue(newState), changeKeys);\n };\n updateState = () => {\n if (!this.isMount) {\n return;\n }\n this.setState({\n customSetterMap: { ...CUSTOM_SETTER_MAP, ...this.props.customSetterMap },\n });\n };\n registerCustomSetter(props.customSetterMap || {});\n this.state = {\n formName: props.name,\n formState: props.initialValue ?? {},\n conditionConfig: {},\n customSetterMap: props.customSetterMap || {},\n\n updateContext: this.updateContext,\n updateConditionConfig: (name: string, cb: (state: Record<string, any>) => boolean) => {\n this.setState({\n conditionConfig: {\n ...this.state.conditionConfig,\n [name]: cb,\n },\n });\n },\n };\n }\n\n componentDidMount(): void {\n this.isMount = true;\n }\n\n componentWillUnmount(): void {\n this.isMount = false;\n }\n\n getFieldsValue = () => {\n return this.formatValue(this.state.formState);\n };\n\n setFields = (state: Record<string, any>) => {\n this.setState({\n formState: state,\n });\n };\n\n formatValue = (data: Record<string, any>) => {\n const res: Record<string, any> = {};\n const conditionConfig = this.state.conditionConfig;\n Object.keys(data).forEach((key) => {\n const isValid = conditionConfig[key]?.(data) ?? true;\n if (isValid) {\n res[key] = data[key];\n }\n });\n return res;\n };\n\n render(): ReactNode {\n const { state } = this;\n const { children } = this.props;\n\n return <CFormContext.Provider value={state}>{children}</CFormContext.Provider>;\n }\n}\n","import { ConfigProvider, Input, InputProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\nexport const StringSetter: CSetter<InputProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<InputProps & { initialValue?: string }>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Input\n {...props}\n value={props.value ?? initialValue}\n onChange={(e) => {\n props.onChange?.(e);\n onValueChange?.(e.target.value);\n }}\n />\n </ConfigProvider>\n );\n};\n\nStringSetter.setterName = '字符设置器';\n","import React from 'react';\nimport { ConfigProvider, InputNumber, InputNumberProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\nexport const NumberSetter: CSetter<InputNumberProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<InputNumberProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <InputNumber\n style={{\n width: '100%',\n }}\n {...props}\n value={props.value ?? initialValue}\n onChange={(value) => {\n props.onChange?.(value);\n onValueChange?.(value);\n }}\n />\n </ConfigProvider>\n );\n};\n\nNumberSetter.setterName = '数字设置器';\n","import { SetterBasicType, SetterObjType, SetterType } from '@chamn/model';\n\nexport const getSetterList = <T extends SetterBasicType = ''>(setters: SetterType<T>[] = []): SetterObjType<T>[] => {\n return setters.map((setter) => {\n if (typeof setter === 'string') {\n return {\n componentName: setter as any,\n };\n } else {\n return setter;\n }\n });\n};\n\nconst setterTypeMap = {\n string: 'StringSetter',\n number: 'NumberSetter',\n boolean: 'BooleanSetter',\n array: 'ArraySetter',\n expression: 'ExpressionSetter',\n function: 'FunctionSetter',\n json: 'JSONSetter',\n} as const;\n\nconst getValueType = (value: any): keyof typeof setterTypeMap => {\n if (value === undefined || value === null) {\n return 'string';\n }\n\n if (Array.isArray(value)) {\n return 'array';\n }\n\n if (typeof value === 'object') {\n if (value.type === 'EXPRESSION') return 'expression';\n if (value.type === 'FUNCTION') return 'function';\n return 'json';\n }\n\n return typeof value as keyof typeof setterTypeMap;\n};\n\n/** 根据值获取默认的 setter */\nexport const getDefaultSetterByValue = (value: any, setterList: SetterObjType[]) => {\n const valueType = getValueType(value);\n const setterName = setterTypeMap[valueType];\n return setterList.find((setter) => setter.componentName === setterName);\n};\n","import React, { useEffect, useRef } from 'react';\nimport { CForm } from '../../Form';\nimport { SetterSwitcher } from '../../SetterSwitcher';\nimport { DeleteOutlined } from '@ant-design/icons';\nimport { SetterObjType } from '@chamn/model';\n\nexport function ArrayItem(props: {\n index: number;\n labelPrefix?: string;\n keyPaths: string[];\n value: Record<string, any>;\n setters: SetterObjType[];\n style: React.CSSProperties;\n onValueChange: (val: Record<string, any>) => void;\n onDelete: () => void;\n}) {\n const { index, keyPaths, setters } = props;\n\n const style = {\n ...props.style,\n };\n const objectValue = {\n [index]: props.value,\n };\n const formRef = useRef<CForm>(null);\n useEffect(() => {\n formRef.current?.setFields({\n [index]: props.value,\n });\n }, [index, props.value]);\n\n return (\n <div style={style}>\n <CForm\n ref={formRef}\n name={String(index)}\n initialValue={objectValue || {}}\n onValueChange={props.onValueChange}\n customSetterMap={{}}\n >\n <SetterSwitcher\n suffix={\n <div\n style={{\n marginLeft: '8px',\n cursor: 'pointer',\n fontSize: '12px',\n }}\n >\n <DeleteOutlined onClick={props.onDelete} />\n </div>\n }\n name={String(index)}\n label={`${props.labelPrefix ?? `元素-${index}`}`}\n keyPaths={[...keyPaths, String(index)]}\n setters={setters}\n ></SetterSwitcher>\n </CForm>\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { CSS, Transform } from '@dnd-kit/utilities';\nimport { Modal, ModalProps } from 'antd';\nimport {\n DndContext,\n DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useDraggable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { arrayMove, SortableContext, sortableKeyboardCoordinates, useSortable } from '@dnd-kit/sortable';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { getRandomStr } from '@chamn/model';\nimport styles from './style.module.scss';\n\nexport type SortItemOrderProps = {\n list: any[];\n keyPaths: string[];\n label: string;\n sortLabelKey?: string;\n onValueChange?: (newList: any[]) => void;\n} & ModalProps;\n\nexport const SortItemOrderModal = ({\n list,\n onValueChange,\n keyPaths,\n label,\n sortLabelKey,\n ...modalProps\n}: SortItemOrderProps) => {\n const [listValue, setListValue] = useState<{ val: any; id: string }[]>([]);\n useEffect(() => {\n const innerList = list.map((el, index) => ({\n val: el,\n oldIndex: index,\n id: getRandomStr(),\n }));\n setListValue(innerList);\n }, [list, modalProps.open]);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 15,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n if (active.id !== over?.id) {\n const oldIndex = listValue.findIndex((el) => el.id === active?.id);\n const newIndex = listValue.findIndex((el) => el.id === over?.id);\n const newInnerListVal = arrayMove(listValue, oldIndex, newIndex);\n const newVal = newInnerListVal.map((el) => {\n return el.val;\n });\n setListValue(newInnerListVal);\n onValueChange?.(newVal);\n }\n }\n\n const [modalTransform, setModalTransform] = useState<Transform>({\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n });\n\n return (\n <Modal\n {...modalProps}\n title={`Sort: ${label} [${keyPaths.join('.')}]`}\n styles={{\n mask: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n },\n }}\n modalRender={(modal) => {\n return (\n <DndContext\n sensors={sensors}\n onDragEnd={({ delta }) => {\n const res = {\n ...modalTransform,\n ...delta,\n x: modalTransform.x + (delta?.x || 0),\n y: modalTransform.y + (delta?.y || 0),\n };\n setModalTransform(res);\n }}\n >\n <ModalDragView modal={modal} transform={modalTransform} />\n </DndContext>\n );\n }}\n >\n <div className={styles.sortModalBox}>\n <DndContext sensors={sensors} onDragEnd={handleDragEnd} modifiers={[restrictToVerticalAxis]}>\n <SortableContext items={listValue}>\n {listValue.map(({ id, val }, index) => {\n return <SortableItem key={id} id={id} index={index} label={val[sortLabelKey || '']} />;\n })}\n </SortableContext>\n </DndContext>\n </div>\n </Modal>\n );\n};\n\nconst ModalDragView = ({ modal, transform }: { modal: React.ReactNode; transform: Transform }) => {\n const id = useRef(getRandomStr());\n const {\n setNodeRef,\n attributes,\n listeners,\n transform: tempTransform,\n } = useDraggable({\n id: id.current,\n });\n\n const finalTransform = {\n ...transform,\n ...tempTransform,\n x: transform.x + (tempTransform?.x || 0),\n y: transform.y + (tempTransform?.y || 0),\n };\n\n return (\n <div\n ref={setNodeRef}\n style={{\n pointerEvents: 'auto',\n transform: CSS.Transform.toString(finalTransform),\n }}\n {...attributes}\n {...listeners}\n >\n {modal}\n </div>\n );\n};\n\nconst SortableItem = (props: { id: string; index: string | number; label?: string }) => {\n const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: props.id });\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n const labelText = props.label || `Ele ${props.index}`;\n return (\n <div className={styles.dragItem} ref={setNodeRef} style={style} {...attributes} {...listeners}>\n {labelText}\n </div>\n );\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { Button, ConfigProvider } from 'antd';\nimport { CSetterProps } from '../type';\nimport { getSetterList } from '../../../utils';\nimport { SetterType } from '@chamn/model';\n\nimport { ArrayItem } from './ArrayItem';\nimport { SortItemOrderModal } from './SortItemOrderModal';\nimport styles from './style.module.scss';\n\nexport type CArraySetterProps = {\n item: {\n setters: SetterType[];\n initialValue?: any;\n };\n itemLabelPrefix?: string;\n sortLabelKey?: string;\n itemLabelPrefixKey?: string;\n};\n\nfunction formatValue(value: unknown) {\n if (Array.isArray(value)) {\n return value;\n } else {\n return [];\n }\n}\n\nexport const ArraySetter = ({\n onValueChange,\n setterContext,\n item: { setters, initialValue: itemInitialValue },\n sortLabelKey,\n initialValue,\n itemLabelPrefix,\n itemLabelPrefixKey,\n ...props\n}: CSetterProps<CArraySetterProps>) => {\n const { keyPaths, label } = setterContext;\n const listValue: any[] = useMemo(() => {\n return formatValue(props.value ?? initialValue);\n }, [initialValue, props.value]);\n\n const [sortVisible, setSortVisible] = useState(false);\n const innerSetters = getSetterList(\n setters || [\n {\n component: 'StringSetter',\n },\n ]\n );\n\n useEffect(() => {\n if (setterContext.setCollapseHeaderExt) {\n setterContext.setCollapseHeaderExt?.(\n <Button\n type=\"text\"\n size=\"small\"\n style={{\n color: 'gray',\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSortVisible(true);\n }}\n >\n sort\n </Button>\n );\n }\n }, [setterContext]);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n {listValue.map((val, index) => {\n return (\n <ArrayItem\n labelPrefix={val[itemLabelPrefixKey || sortLabelKey || ''] || itemLabelPrefix}\n key={index}\n style={{ paddingBottom: '10px' }}\n index={index}\n keyPaths={keyPaths}\n value={val}\n onValueChange={(val) => {\n listValue[index] = val[index];\n onValueChange?.([...listValue]);\n }}\n setters={innerSetters}\n onDelete={() => {\n const newVal = [...listValue];\n newVal.splice(index, 1);\n onValueChange?.(newVal);\n }}\n />\n );\n })}\n\n <Button\n className={styles.addOneBtn}\n size=\"small\"\n onClick={() => {\n const newVal = [...listValue];\n onValueChange?.([...newVal, itemInitialValue ?? '']);\n }}\n >\n Add One\n </Button>\n <SortItemOrderModal\n label={label}\n sortLabelKey={sortLabelKey}\n onValueChange={(newVal) => {\n onValueChange?.([...newVal]);\n }}\n open={sortVisible}\n list={listValue}\n keyPaths={keyPaths}\n onCancel={() => {\n setSortVisible(false);\n }}\n onOk={() => {\n setSortVisible(false);\n }}\n />\n </ConfigProvider>\n );\n};\n\nArraySetter.setterName = '数组设置器';\n","import { useEffect, useRef } from 'react';\nimport { ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CForm } from '../../Form';\nimport { SetterSwitcher } from '../../SetterSwitcher';\nimport { getSetterList } from '../../../utils';\nimport { getMTitle, getMTitleTip, MaterialPropType } from '@chamn/model';\n\nexport type CShapeSetterProps = {\n elements: MaterialPropType[];\n initialValue?: Record<string, any>;\n value: Record<string, any>;\n};\n\nexport const ShapeSetter: CSetter<CShapeSetterProps> = ({\n onValueChange,\n elements,\n value,\n setterContext,\n initialValue,\n}: CSetterProps<CShapeSetterProps>) => {\n const { keyPaths } = setterContext;\n const formRef = useRef<CForm>(null);\n useEffect(() => {\n formRef.current?.setFields(value || {});\n }, [value]);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <CForm\n ref={formRef}\n name={keyPaths.join('.')}\n initialValue={value || initialValue || {}}\n onValueChange={(val) => {\n onValueChange?.(val);\n }}\n customSetterMap={{}}\n >\n {elements.map((el, index) => {\n const setters = getSetterList(el.setters);\n const title = getMTitle(el.title);\n const tip = getMTitleTip(el.title) || el?.description;\n return (\n <div key={index}>\n <SetterSwitcher\n name={el.name}\n label={title}\n tips={tip}\n condition={el.condition}\n keyPaths={[...keyPaths, el.name]}\n setters={setters}\n />\n </div>\n );\n })}\n </CForm>\n </ConfigProvider>\n );\n};\n\nShapeSetter.setterName = '对象设置器';\n","import Editor, { EditorProps, Monaco } from '@monaco-editor/react';\n\nexport type EditorType = EditorProps;\n\nexport type MonacoEditorInstance = Parameters<Required<EditorType>['onMount']>[0];\n\nexport type MonacoEditorProps = {\n beforeMount?: (monaco: Monaco) => void;\n onDidMount?: (editor: MonacoEditorInstance) => void;\n options?: EditorType['options'];\n onChange?: EditorType['onChange'];\n initialValue?: string;\n language?: 'json' | 'javascript' | 'typescript' | 'css';\n theme?: 'vs-dark' | 'light';\n};\n\nexport const MonacoEditor = (props: MonacoEditorProps) => {\n const handleEditorBeforeMount: EditorType['beforeMount'] = (monaco) => {\n props.beforeMount?.(monaco);\n };\n\n const handleEditorDidMount: EditorType['onMount'] = (editor) => {\n props.onDidMount?.(editor);\n };\n\n return (\n <Editor\n height=\"100%\"\n width=\"100%\"\n defaultLanguage={props.language}\n defaultValue={props.initialValue}\n beforeMount={handleEditorBeforeMount}\n onMount={handleEditorDidMount}\n options={props.options}\n theme={props.theme}\n onChange={props.onChange}\n />\n );\n};\n","export default \"type SetStateInternal<T> = {\\n _(\\n partial:\\n | T\\n | Partial<T>\\n | {\\n _(state: T): T | Partial<T>;\\n }['_'],\\n replace?: boolean | undefined\\n ): void;\\n}['_'];\\nexport interface StoreApi<T> {\\n setState: SetStateInternal<T>;\\n getState: () => T;\\n subscribe: (listener: (state: T, prevState: T) => void) => () => void;\\n /**\\n * @deprecated Use `unsubscribe` returned by `subscribe`\\n */\\n destroy: () => void;\\n}\\n\\ntype PageState = any;\\n\\ntype NodeId = keyof PageState;\\n\\ntype MethodsManager = any;\\n\\ntype GlobalState = any;\\n\\ntype CurrentNodeState = any;\\n\\ntype PageStateManager<K extends keyof PageState> = {\\n state: PageState[K];\\n updateState: (newState: Partial<PageState[K]>) => void;\\n};\\n\\ntype PageStateManagerMap = {\\n [K in keyof PageState]: PageStateManager<K>;\\n};\\n\\ntype ContextType = {\\n /** 渲染函数的入口参数 */\\n params?: Record<any, any>;\\n /** 全局状态 */\\n globalState?: GlobalState;\\n /** 更新全局状态 */\\n updateGlobalState?: (newState: Partial<GlobalState>) => void;\\n /** 存储当前节点的数据,不具有响应性, 可能不是最新的值, 可以直接赋值 **/\\n staticVar?: Record<string | number, any>;\\n methods?: Record<string, (...arg: any) => any>;\\n /** 当前节点状态 **/\\n state?: CurrentNodeState;\\n /** 更新当前节点状态 */\\n updateState?: (newState: Partial<CurrentNodeState>) => void;\\n /** 获取当前节点状态最新 */\\n /** 用于访访问和管理页面被注册为全局的局部 state 快照,在闭包中使用会存在值不是最新的情况 */\\n stateManager: PageStateManagerMap;\\n /** 循环数据 */\\n loopData?: {\\n item: any;\\n index: number;\\n };\\n /** 组件节点的 Ref, 可以通过 current 直接调用节点提供的方法,需要判断是否在存在 */\\n nodeRefs?: { get: (/** 节点 id */ nodeId: NodeId) => { current?: any } };\\n /** 运行时全局的 store 管理 */\\n storeManager?: StoreManager<NodeId>;\\n /** 第三方辅助库 */\\n thirdLibs?: Record<string, any>;\\n};\\n\\ndeclare class StoreManager<T extends NodeId> {\\n storeMap: Map<T, StoreApi<PageState[T]>>;\\n getStore(storeName: T): StoreApi<PageState[T]> | undefined;\\n getState(nodeId: T): any;\\n getStateObj(nodeId: T): {\\n state: PageState[T];\\n updateState: (newState: Partial<PageState[T]>) => void;\\n };\\n setState(nodeId: NodeId, newState: Partial<PageState[T]>): void | undefined;\\n connect<T extends NodeId>(name: string, cb: (newState: PageState[T]) => void): () => void;\\n getStateSnapshot(): PageState;\\n destroy(): void;\\n}\\n\\ntype UpdaterMap = {\\n [K in NodeId /** 更新对应 nodeId 的数据 **/]: (newState: Partial<PageState[K]>) => void;\\n};\\n\\ndeclare global {\\n /** 运行时上下文 */\\n const $CTX: ContextType;\\n\\n /** 当前节点的 state */\\n const $STATE: CurrentNodeState;\\n\\n /** global state */\\n const $G_STATE: GlobalState;\\n\\n /** 当前页面所有节点的 state */\\n const $ALL_STATE: PageState;\\n\\n /** 状态更新函数 */\\n const $U_STATE: UpdaterMap;\\n\\n /** 节点方法调用 */\\n const $M: MethodsManager;\\n\\n /** 当前节点 ID */\\n const $N_ID: string;\\n\\n /** 存储所有节点的 id */\\n const $IDS: Record<NodeId, NodeId>;\\n\\n /** 上一个 API 返回的数据,可能不存在 */\\n const $RESPONSE: any;\\n\\n /** 循环数据,如果存在 */\\n const $LOOP_DATA: ContextType['loopData'];\\n\\n /** 函数在配置面板传入的参数 */\\n const $PARAMS: ContextType['params'];\\n\\n /** 事件传入的第一个参数,如果需要获取第二个参数,请使用 $ARGS 数组获取*/\\n const $EVENT_PARAMS: any;\\n\\n /** 事件对象 */\\n const $EVENT: MouseEvent;\\n\\n /** 函数执行时传入的入参 */\\n const $ARGS: any[];\\n\\n /** action flow 中的局部变量 */\\n const $ACTION_VAR_SPACE: any;\\n}\\n\"","import { CNode, CPage, InnerComponentNameEnum, traversePageNode } from '@chamn/model';\nimport DefaultTslibSource from './defaultDts?raw';\n\nimport { quicktype, InputData, jsonInputForTargetLanguage } from 'quicktype-core';\n\nexport async function quicktypeJSON(typeName: string, jsonString: string) {\n const jsonInput = jsonInputForTargetLanguage('typescript');\n\n // We could add multiple samples for the same desired\n // type, or many sources for other types. Here we're\n // just making one type from one piece of sample JSON.\n await jsonInput.addSource({\n name: typeName,\n samples: [jsonString],\n });\n\n const inputData = new InputData();\n inputData.addInput(jsonInput);\n\n return await quicktype({\n inputData,\n lang: 'typescript',\n rendererOptions: {\n 'just-types': 'true',\n 'nice-property-names': 'false',\n 'acronym-style': 'original',\n },\n });\n}\n\nexport const getPageTypeDefined = async (pageModel: CPage, currentNode: CNode) => {\n const stateTypeMap: Record<\n string,\n {\n stateTypeDefined: string;\n methodsTypeDefined: string;\n }\n > = {} as any;\n const pList: any[] = [];\n traversePageNode(pageModel, (node) => {\n stateTypeMap[node.id] = {\n stateTypeDefined: '',\n methodsTypeDefined: '',\n };\n if (node.value.state) {\n const cb = async () => {\n let typeName = `CNode${node.id.toUpperCase()}`;\n let id = node.id;\n if (node.value.componentName === InnerComponentNameEnum.ROOT_CONTAINER) {\n typeName = 'GlobalState';\n id = 'GlobalState';\n }\n const tempRes = await quicktypeJSON(typeName, JSON.stringify(node.value.state));\n stateTypeMap[id] = {\n stateTypeDefined: tempRes.lines.join('\\n'),\n methodsTypeDefined: '',\n };\n };\n\n pList.push(cb());\n }\n });\n\n await Promise.all(pList);\n\n const globalStateDts = stateTypeMap['GlobalState'];\n delete stateTypeMap.GlobalState;\n\n // 拼接 整体的 page state 类型定义\n let pageStateDts = '';\n\n pageStateDts += `type PageState = {\\n`;\n const nodeIdList: string[] = [];\n\n Object.keys(stateTypeMap).forEach((k) => {\n if (stateTypeMap[k].stateTypeDefined) {\n const body = getBodyDefined(`CNode${k.toUpperCase()}`, stateTypeMap[k].stateTypeDefined);\n pageStateDts += ` '${k}': ${body},\\n`;\n nodeIdList.push(`'${k}'`);\n }\n });\n\n pageStateDts += `};\\n\\n`;\n\n let dtsContent = DefaultTslibSource.replace('type PageState = any;', pageStateDts);\n dtsContent = dtsContent.replace('type NodeId = any;', `type NodeId = ${nodeIdList.join(' | ')};`);\n if (globalStateDts?.stateTypeDefined) {\n dtsContent = dtsContent.replace('type GlobalState = any;', globalStateDts.stateTypeDefined);\n dtsContent = dtsContent.replace(\n 'Partial<GlobalState>',\n getBodyDefined('GlobalState', globalStateDts.stateTypeDefined)\n );\n }\n\n // 处理当前 node 的 types\n const currentNodeDts = await quicktypeJSON('CurrentNodeState', JSON.stringify(currentNode.value.state || {}));\n const currentNodeDtsText = currentNodeDts.lines.join('\\n');\n dtsContent = dtsContent.replace('type CurrentNodeState = any;', currentNodeDtsText);\n dtsContent = dtsContent.replace('Partial<CurrentNodeState>', getBodyDefined('CurrentNodeState', currentNodeDtsText));\n\n // 处理 methods 调用\n return dtsContent;\n};\n\nconst getBodyDefined = (\n typeName: string,\n dtsStr: string,\n options?: {\n isPartial: true;\n }\n) => {\n const body = dtsStr.replace(`export interface ${typeName}`, '').trim();\n if (!options?.isPartial) {\n return body;\n }\n return `Partial<${body}>`;\n};\n","import React, { useRef, useState } from 'react';\nimport { Button, ConfigProvider, Modal } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { EditorType, MonacoEditor, MonacoEditorInstance } from '../../../../MonacoEditor';\nimport DefaultTslibSource from '../FunctionSetter//defaultDts?raw';\nimport { CNodePropsTypeEnum } from '@chamn/model';\nimport styles from './style.module.scss';\nimport { getPageTypeDefined } from '../FunctionSetter/helper';\nexport type ExpressionSetterProps = CSetterProps<{\n value: {\n type: string;\n value: string;\n };\n mode: 'modal' | 'inline';\n containerStyle?: React.CSSProperties;\n minimap?: boolean;\n lineNumber?: boolean;\n editorOptions?: EditorType['options'];\n}>;\n\nexport const ExpressionSetter: CSetter<ExpressionSetterProps> = ({\n onValueChange,\n initialValue,\n setterContext,\n editorOptions,\n\n mode = 'modal',\n ...props\n}) => {\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const [open, setOpen] = useState(false);\n const onInnerValueChange = () => {\n const newValStr = editorRef.current?.getValue() || '';\n onValueChange?.({\n type: CNodePropsTypeEnum.EXPRESSION,\n value: newValStr,\n });\n };\n\n let lineNumberOptions = {};\n if (props.lineNumber === false || mode === 'inline') {\n lineNumberOptions = {\n lineNumbers: 'off',\n lineDecorationsWidth: 0,\n lineNumbersMinChars: 0,\n glyphMargin: false,\n };\n }\n\n const editorView = (\n <MonacoEditor\n beforeMount={async (monaco) => {\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: true,\n noSyntaxValidation: false,\n });\n\n // compiler options\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES5,\n allowNonTsExtensions: true,\n });\n\n const realtimeDts = await getPageTypeDefined(setterContext.pluginCtx.pageModel, setterContext.nodeModel);\n\n const libUri = 'ts:filename/chameleon.default.variable.d.ts';\n monaco.languages.typescript.javascriptDefaults.addExtraLib(realtimeDts, libUri);\n // When resolving definitions and references, the editor will try to use created models.\n // Creating a model for the library allows \"peek definition/references\" commands to work with the library.\n const model = monaco.editor.getModel(monaco.Uri.parse(libUri));\n if (!model) {\n monaco.editor.createModel(DefaultTslibSource, 'typescript', monaco.Uri.parse(libUri));\n }\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n initialValue={props.value?.value ?? initialValue}\n language={'javascript'}\n options={{\n automaticLayout: true,\n tabSize: 2,\n minimap: { enabled: false },\n folding: false,\n hover: {\n // enabled: false, // ✅ 禁用 hoverWidget\n },\n ...lineNumberOptions,\n ...(editorOptions || {}),\n }}\n onChange={() => {\n if (mode === 'inline') {\n // TODO: 需要节流每 1 秒触发一次\n onInnerValueChange();\n }\n }}\n />\n );\n\n if (mode === 'inline') {\n return (\n <div\n className={styles.expressionCodeEditor}\n style={{\n border: '1px solid rgba(0,0,0, 0.2)',\n ...(props.containerStyle || {}),\n height: '100px',\n }}\n >\n {editorView}\n </div>\n );\n }\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n onClick={() => {\n setOpen(true);\n }}\n >\n {props.value?.value || 'Edit Expression'}\n </Button>\n <Modal\n destroyOnClose\n open={open}\n title=\"Expression Editor\"\n onCancel={() => setOpen(false)}\n width=\"calc(100vw - 100px)\"\n onOk={() => {\n onInnerValueChange();\n setOpen(false);\n }}\n style={{\n maxWidth: '800px',\n }}\n styles={{\n body: {\n height: '300px',\n },\n }}\n >\n <div style={{ height: '100%' }}>{open && editorView}</div>\n </Modal>\n </ConfigProvider>\n );\n};\n\nExpressionSetter.setterName = '表达式';\n","import React from 'react';\nimport { ConfigProvider, Switch, SwitchProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\ntype BooleanSetterProps = SwitchProps;\n\nexport const BooleanSetter: CSetter<BooleanSetterProps & { initialValue?: boolean }> = ({\n onValueChange,\n initialValue,\n setterContext,\n ...props\n}: CSetterProps<BooleanSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Switch\n {...props}\n checked={(props.value ?? initialValue) as boolean}\n onChange={(open, e) => {\n props.onChange?.(open, e);\n onValueChange?.(open);\n }}\n />\n </ConfigProvider>\n );\n};\n\nBooleanSetter.setterName = 'Bool 设置器';\n","import React from 'react';\nimport { ConfigProvider, Select, SelectProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\nexport const SelectSetter: CSetter<SelectProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<SelectProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Select\n showSearch\n style={{\n width: '100%',\n }}\n {...props}\n value={props.value ?? initialValue}\n onChange={(val, option) => {\n props.onChange?.(val, option);\n onValueChange?.(val);\n }}\n />\n </ConfigProvider>\n );\n};\n\nSelectSetter.setterName = '选择设置器';\n","import React, { useRef, useState } from 'react';\nimport { CSS, Transform } from '@dnd-kit/utilities';\nimport { Modal, ModalProps } from 'antd';\nimport { DndContext, PointerSensor, useDraggable, useSensor, useSensors } from '@dnd-kit/core';\nimport { getRandomStr } from '@chamn/model';\n\nexport type SortItemOrderProps = {} & ModalProps;\n\n/** 可拖拽移动的 Modal */\nexport const MoveableModal = (props: ModalProps) => {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 15,\n },\n })\n );\n\n const [modalTransform, setModalTransform] = useState<Transform>({\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n });\n\n return (\n <Modal\n {...props}\n styles={{\n mask: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n pointerEvents: 'none',\n },\n }}\n modalRender={(modal) => {\n return (\n <DndContext\n sensors={sensors}\n onDragEnd={({ delta }) => {\n const res = {\n ...modalTransform,\n ...delta,\n x: modalTransform.x + (delta?.x || 0),\n y: modalTransform.y + (delta?.y || 0),\n };\n setModalTransform(res);\n }}\n >\n <ModalDragView modal={modal} transform={modalTransform} setModalTransform={setModalTransform} />\n </DndContext>\n );\n }}\n ></Modal>\n );\n};\n\nconst ModalDragView = ({\n modal,\n transform,\n setModalTransform,\n}: {\n modal: React.ReactNode;\n transform: Transform;\n setModalTransform: any;\n}) => {\n const id = useRef(getRandomStr());\n const {\n setNodeRef,\n attributes,\n listeners,\n transform: tempTransform,\n } = useDraggable({\n id: id.current,\n });\n\n const finalTransform = {\n ...transform,\n ...tempTransform,\n x: transform.x + (tempTransform?.x || 0),\n y: transform.y + (tempTransform?.y || 0),\n };\n\n return (\n <div\n style={{\n pointerEvents: 'auto',\n transform: CSS.Transform.toString(finalTransform),\n }}\n >\n <div\n onDoubleClick={() => {\n setModalTransform((oldValue: any) => {\n return {\n ...oldValue,\n x: 0,\n y: 0,\n };\n });\n }}\n ref={setNodeRef}\n style={{\n cursor: 'move',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: '55px',\n zIndex: 1,\n }}\n {...attributes}\n {...listeners}\n />\n {modal}\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Button, ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { EditorType, MonacoEditor, MonacoEditorInstance } from '../../../../MonacoEditor';\nimport { MoveableModal } from '@/component/MoveableModal';\nimport { sageJSONParse } from '@/utils';\n\nconst EditorConfig = {\n options: {\n automaticLayout: true,\n tabSize: 2,\n suggestOnTriggerCharacters: false,\n minimap: { enabled: false },\n },\n style: {\n height: '200px',\n border: '1px solid #d9d9d9',\n borderRadius: '4px',\n },\n};\n\nconst JsonEditor = ({ editor, value, initialValue, onChange, height, editorOptions }: any) => {\n const editorRef = useRef<MonacoEditorInstance>();\n const oldValueRef = useRef();\n oldValueRef.current = value;\n useEffect(() => {\n const oldVal = sageJSONParse(editorRef.current?.getValue() || '', {});\n if (JSON.stringify(value) === JSON.stringify(oldVal)) {\n return;\n }\n editorRef.current?.setValue(JSON.stringify(value, null, 2));\n }, [value]);\n return (\n <div style={{ height: height || EditorConfig.style.height }}>\n <MonacoEditor\n onDidMount={(editorInstance) => {\n editor.current = editorInstance;\n editorRef.current = editorInstance;\n }}\n onChange={onChange}\n initialValue={JSON.stringify(value ?? (initialValue || {}), null, 2)}\n language=\"json\"\n options={{\n ...EditorConfig.options,\n ...editorOptions,\n }}\n />\n </div>\n );\n};\nexport const JSONSetter: CSetter<any> = ({\n onValueChange,\n initialValue,\n mode = 'modal',\n editorOptions,\n setterContext,\n ...props\n}: CSetterProps<{\n mode: 'modal' | 'inline';\n containerStyle?: React.CSSProperties;\n minimap?: boolean;\n lineNumber?: 'on' | 'off';\n editorOptions?: EditorType['options'];\n}>) => {\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const [open, setOpen] = useState(false);\n\n const onInnerValueChange = () => {\n const newValStr = editorRef.current?.getValue() || '';\n try {\n const newVal = JSON.parse(newValStr);\n onValueChange?.(newVal);\n } catch (e) {\n console.warn(e);\n }\n };\n\n return (\n <ConfigProvider theme={{ token: { borderRadius: 4 } }}>\n {mode === 'inline' ? (\n <div style={EditorConfig.style}>\n <JsonEditor\n editor={editorRef}\n value={props.value}\n initialValue={initialValue}\n onChange={onInnerValueChange}\n editorOptions={editorOptions || {}}\n />\n </div>\n ) : (\n <>\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n onClick={() => setOpen(true)}\n >\n Edit\n </Button>\n <MoveableModal\n destroyOnClose\n open={open}\n title=\"JSON Editor\"\n width=\"800px\"\n onCancel={() => setOpen(false)}\n onOk={() => {\n onInnerValueChange();\n setOpen(false);\n }}\n >\n {open && (\n <JsonEditor\n editor={editorRef}\n value={props.value}\n initialValue={initialValue}\n height=\"500px\"\n editorOptions={editorOptions || {}}\n />\n )}\n </MoveableModal>\n </>\n )}\n </ConfigProvider>\n );\n};\n\nJSONSetter.setterName = 'JSON 设置器';\n","import React, { useRef, useState } from 'react';\nimport { Button, ConfigProvider, Modal } from 'antd';\nimport { CSetter } from '../type';\nimport { EditorType, MonacoEditor, MonacoEditorInstance } from '../../../../MonacoEditor';\nimport DefaultTslibSource from './defaultDts?raw';\nimport { CNodePropsTypeEnum } from '@chamn/model';\nimport { getPageTypeDefined } from './helper';\n\nexport const FunctionSetter: CSetter<{\n mode: 'modal' | 'inline';\n containerStyle?: React.CSSProperties;\n minimap?: boolean;\n lineNumber?: boolean;\n editorOptions?: EditorType['options'];\n}> = ({ onValueChange, initialValue, setterContext, editorOptions, ...props }) => {\n getPageTypeDefined(setterContext.pluginCtx.pageModel, setterContext.nodeModel);\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const [open, setOpen] = useState(false);\n const onInnerValueChange = () => {\n const newValStr = editorRef.current?.getValue() || '';\n onValueChange?.({\n type: CNodePropsTypeEnum.FUNCTION,\n value: newValStr,\n });\n };\n\n let lineNumberOptions = {};\n if (props.lineNumber === false) {\n lineNumberOptions = {\n lineNumbers: 'off',\n lineDecorationsWidth: 0,\n lineNumbersMinChars: 0,\n glyphMargin: false,\n };\n }\n\n const editorView = (\n <MonacoEditor\n beforeMount={async (monaco) => {\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: true,\n noSyntaxValidation: false,\n });\n\n // compiler options\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES5,\n allowNonTsExtensions: true,\n });\n\n const realtimeDts = await getPageTypeDefined(setterContext.pluginCtx.pageModel, setterContext.nodeModel);\n\n const libUri = 'ts:filename/chameleon.default.variable.d.ts';\n monaco.languages.typescript.javascriptDefaults.addExtraLib(realtimeDts, libUri);\n // When resolving definitions and references, the editor will try to use created models.\n // Creating a model for the library allows \"peek definition/references\" commands to work with the library.\n const model = monaco.editor.getModel(monaco.Uri.parse(libUri));\n if (!model) {\n monaco.editor.createModel(DefaultTslibSource, 'typescript', monaco.Uri.parse(libUri));\n }\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n initialValue={props.value?.value ?? (initialValue || 'function run() {\\n}')}\n language={'javascript'}\n options={{\n automaticLayout: true,\n tabSize: 2,\n\n minimap: {\n enabled: props.minimap ?? true,\n },\n ...lineNumberOptions,\n ...(editorOptions || {}),\n }}\n onChange={() => {\n if (props.mode === 'inline') {\n // TODO: 需要节流每 1 秒触发一次\n onInnerValueChange();\n }\n }}\n />\n );\n\n if (props.mode === 'inline') {\n return (\n <div\n style={{\n border: '1px solid rgba(0,0,0, 0.2)',\n ...(props.containerStyle || {}),\n }}\n >\n {editorView}\n </div>\n );\n }\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n onClick={() => {\n setOpen(true);\n }}\n >\n Edit Function\n </Button>\n <Modal\n centered\n destroyOnClose\n open={open}\n title=\"Function Editor\"\n onCancel={() => setOpen(false)}\n width=\"calc(100vw - 100px)\"\n onOk={() => {\n onInnerValueChange();\n setOpen(false);\n }}\n style={{\n maxWidth: '1300px',\n }}\n styles={{\n body: {\n minHeight: '500px',\n height: 'calc(100vh - 280px)',\n },\n }}\n >\n <div style={{ height: '100%' }}>{open && editorView}</div>\n </Modal>\n </ConfigProvider>\n );\n};\n\nFunctionSetter.setterName = '函数设置器';\n","import { ConfigProvider, Input } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { TextAreaProps } from 'antd/es/input';\nimport { useState } from 'react';\n\nexport type TTextAreaSetterProps = TextAreaProps & {\n valueValidator?: (value: string) => boolean;\n};\n\nexport const TextAreaSetter: CSetter<TTextAreaSetterProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n valueValidator,\n ...props\n}: CSetterProps<TTextAreaSetterProps>) => {\n const [checkValueStatus, setCheckValueStatus] = useState<TextAreaProps['status']>('');\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Input.TextArea\n status={checkValueStatus}\n {...props}\n value={props.value ?? initialValue}\n onChange={(e) => {\n const newValue = e.target.value;\n if (valueValidator !== undefined) {\n const res = valueValidator(newValue);\n if (!res) {\n setCheckValueStatus('error');\n } else {\n setCheckValueStatus('');\n }\n }\n props.onChange?.(e);\n onValueChange?.(e.target.value);\n }}\n />\n </ConfigProvider>\n );\n};\n\nTextAreaSetter.setterName = '长文本设置器';\n","const CSSSourceInfo = {\n cssColors: {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n },\n cssKeyValue: {\n 'align-content': {\n values: [\n 'center',\n 'flex-end',\n 'flex-start',\n 'space-around',\n 'space-between',\n 'stretch',\n ],\n },\n 'align-items': {\n values: ['baseline', 'center', 'flex-end', 'flex-start', 'stretch'],\n },\n 'align-self': {\n values: [\n 'auto',\n 'normal',\n 'self-start',\n 'self-end',\n 'baseline',\n 'center',\n 'start',\n 'end',\n 'flex-end',\n 'flex-start',\n 'safe',\n 'stretch',\n 'unsafe',\n ],\n },\n all: { values: [] },\n animation: { values: [] },\n 'animation-delay': { values: [] },\n 'animation-direction': {\n values: ['alternate', 'alternate-reverse', 'normal', 'reverse'],\n },\n 'animation-duration': { values: [] },\n 'animation-fill-mode': {\n values: ['backwards', 'both', 'forwards', 'none'],\n },\n 'animation-iteration-count': { values: ['infinite'] },\n 'animation-name': { values: ['none'] },\n 'animation-play-state': { values: ['paused', 'running'] },\n 'animation-timing-function': {\n values: [\n 'cubic-bezier()',\n 'ease',\n 'ease-in',\n 'ease-in-out',\n 'ease-out',\n 'linear',\n 'step-end',\n 'step-start',\n 'steps()',\n ],\n },\n 'backface-visibility': { values: ['hidden', 'visible'] },\n background: { values: [], type: 'color' },\n 'background-attachment': { values: ['fixed', 'local', 'scroll'] },\n 'background-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'background-clip': { values: ['border-box', 'content-box', 'padding-box'] },\n 'background-color': { values: [], type: 'color' },\n 'background-image': {\n values: [\n 'image()',\n 'linear-gradient()',\n 'radial-gradient()',\n 'repeating-linear-gradient()',\n 'repeating-radial-gradient()',\n 'url()',\n ],\n },\n 'background-origin': {\n values: ['border-box', 'content-box', 'padding-box'],\n },\n 'background-position': {\n values: ['left', 'center', 'right', 'bottom', 'top'],\n },\n 'background-repeat': {\n values: ['no-repeat', 'repeat', 'repeat-x', 'repeat-y', 'round', 'space'],\n },\n 'background-size': { values: ['auto', 'contain', 'cover'] },\n border: { values: [] },\n 'border-collapse': { values: ['collapse', 'separate'] },\n 'border-color': { values: [], type: 'color' },\n 'border-spacing': { values: [] },\n 'border-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-bottom': { values: [] },\n 'border-bottom-color': { values: [], type: 'color' },\n 'border-bottom-left-radius': { values: [] },\n 'border-bottom-right-radius': { values: [] },\n 'border-bottom-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-bottom-width': { values: ['medium', 'thin', 'thick'] },\n 'border-image': { values: ['url()'] },\n 'border-image-outset': { values: [] },\n 'border-image-slice': { values: [] },\n 'border-image-source': { values: [] },\n 'border-image-repeat': { values: ['repeat', 'round', 'space', 'stretch'] },\n 'border-image-width': { values: ['auto'] },\n 'border-left': { values: [] },\n 'border-left-color': { values: [], type: 'color' },\n 'border-left-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-left-width': { values: ['medium', 'thin', 'thick'] },\n 'border-radius': { values: [] },\n 'border-right': { values: [] },\n 'border-right-color': { values: [], type: 'color' },\n 'border-right-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-right-width': { values: ['medium', 'thin', 'thick'] },\n 'border-top': { values: [] },\n 'border-top-color': { values: [], type: 'color' },\n 'border-top-left-radius': { values: [] },\n 'border-top-right-radius': { values: [] },\n 'border-top-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-top-width': { values: ['medium', 'thin', 'thick'] },\n 'border-width': { values: ['medium', 'thin', 'thick'] },\n 'box-decoration-break': { values: ['clone', 'slice'] },\n 'box-shadow': { values: ['none'] },\n 'box-sizing': { values: ['border-box', 'content-box'] },\n bottom: { values: ['auto'] },\n 'break-after': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'break-before': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'caption-side': { values: ['bottom', 'top'] },\n 'caret-color': { values: ['auto'], type: 'color' },\n clear: { values: ['both', 'left', 'none', 'right'] },\n clip: { values: ['auto'] },\n color: { values: [], type: 'color' },\n columns: { values: [] },\n 'column-count': { values: [] },\n 'column-fill': { values: ['auto', 'balance'] },\n 'column-gap': { values: ['normal'] },\n 'column-rule': { values: [] },\n 'column-rule-color': { values: [], type: 'color' },\n 'column-rule-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'column-rule-width': { values: ['medium', 'thin', 'thick'] },\n 'column-span': { values: ['all', 'none'] },\n 'column-width': { values: ['auto'] },\n content: {\n values: [\n 'attr()',\n 'close-quote',\n 'no-close-quote',\n 'no-open-quote',\n 'normal',\n 'none',\n 'open-quote',\n ],\n },\n 'counter-increment': { values: ['none'] },\n 'counter-reset': { values: ['none'] },\n cursor: {\n values: [\n 'alias',\n 'all-scroll',\n 'auto',\n 'cell',\n 'col-resize',\n 'context-menu',\n 'copy',\n 'crosshair',\n 'default',\n 'e-resize',\n 'ew-resize',\n 'grab',\n 'grabbing',\n 'help',\n 'move',\n 'n-resize',\n 'ne-resize',\n 'nesw-resize',\n 'no-drop',\n 'none',\n 'not-allowed',\n 'ns-resize',\n 'nw-resize',\n 'nwse-resize',\n 'pointer',\n 'progress',\n 'row-resize',\n 's-resize',\n 'se-resize',\n 'sw-resize',\n 'text',\n 'vertical-text',\n 'w-resize',\n 'wait',\n 'zoom-in',\n 'zoom-out',\n ],\n },\n direction: { values: ['ltr', 'rtl'] },\n display: {\n values: [\n 'block',\n 'contents',\n 'flex',\n 'flow-root',\n 'grid',\n 'inline',\n 'inline-block',\n 'inline-flex',\n 'inline-grid',\n 'inline-table',\n 'list-item',\n 'none',\n 'run-in',\n 'subgrid',\n 'table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row',\n 'table-row-group',\n ],\n },\n 'empty-cells': { values: ['hide', 'show'] },\n fill: { values: [] },\n filter: {\n values: [\n 'blur()',\n 'brightness()',\n 'contrast()',\n 'custom()',\n 'drop-shadow()',\n 'grayscale()',\n 'hue-rotate()',\n 'invert()',\n 'none',\n 'opacity()',\n 'sepia()',\n 'saturate()',\n 'url()',\n ],\n },\n flex: { values: ['auto', 'none'] },\n 'flex-basis': { values: ['auto'] },\n 'flex-direction': {\n values: ['column', 'column-reverse', 'row', 'row-reverse'],\n },\n 'flex-flow': {\n values: [\n 'column',\n 'column-reverse',\n 'nowrap',\n 'row',\n 'row-reverse',\n 'wrap',\n 'wrap-reverse',\n ],\n },\n 'flex-grow': { values: [] },\n 'flex-shrink': { values: [] },\n 'flex-wrap': { values: ['nowrap', 'wrap', 'wrap-reverse'] },\n float: { values: ['left', 'right', 'none', 'inline-start', 'inline-end'] },\n 'flow-into': { values: ['none'], type: 'named-flow' },\n 'flow-from': { values: ['none'], type: 'named-flow' },\n font: { values: [] },\n 'font-display': {\n values: ['auto', 'block', 'swap', 'fallback', 'optional'],\n },\n 'font-family': {\n values: [\n 'auto',\n 'cursive',\n 'fantasy',\n 'monospace',\n 'sans-serif',\n 'serif',\n ],\n },\n 'font-feature-settings': { values: ['normal'] },\n 'font-kerning': { values: ['auto', 'none', 'normal'] },\n 'font-language-override': { values: ['normal'] },\n 'font-size': {\n values: [\n 'xx-small',\n 'x-small',\n 'small',\n 'medium',\n 'large',\n 'x-large',\n 'xx-large',\n 'xxx-large',\n 'larger',\n 'smaller',\n ],\n },\n 'font-size-adjust': { values: ['auto', 'none'] },\n 'font-stretch': {\n values: [\n 'condensed',\n 'expanded',\n 'extra-condensed',\n 'extra-expanded',\n 'normal',\n 'semi-condensed',\n 'semi-expanded',\n 'ultra-condensed',\n 'ultra-expanded',\n ],\n },\n 'font-style': { values: ['italic', 'normal', 'oblique'] },\n 'font-synthesis': { values: ['none', 'style', 'weight'] },\n 'font-variant': { values: ['normal', 'small-caps'] },\n 'font-variant-alternates': { values: ['normal'] },\n 'font-variant-caps': {\n values: [\n 'normal',\n 'small-caps',\n 'all-small-caps',\n 'petite-caps',\n 'all-petite-caps',\n 'unicase',\n 'titling-caps',\n ],\n },\n 'font-variant-east-asian': { values: ['normal'] },\n 'font-variant-ligatures': { values: ['normal', 'none'] },\n 'font-variant-numeric': { values: ['normal'] },\n 'font-variant-position': { values: ['normal', 'sub', 'super'] },\n 'font-weight': {\n values: [\n 'bold',\n 'bolder',\n 'lighter',\n 'normal',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n ],\n },\n gap: { values: ['revert-layer'] },\n grid: { values: [] },\n 'grid-area': { values: [] },\n 'grid-auto-columns': { values: [] },\n 'grid-auto-flow': { values: ['row', 'column', 'dense'] },\n 'grid-auto-rows': { values: [] },\n 'grid-column': { values: ['auto'] },\n 'grid-column-end': { values: [] },\n 'grid-column-gap': { values: [] },\n 'grid-column-start': { values: [] },\n 'grid-gap': { values: [] },\n 'grid-row': { values: ['auto'] },\n 'grid-row-end': { values: [] },\n 'grid-row-start': { values: [] },\n 'grid-row-gap': { values: [] },\n 'grid-template': { values: ['none'] },\n 'grid-template-areas': { values: [] },\n 'grid-template-columns': { values: ['auto'] },\n 'grid-template-rows': { values: ['auto'] },\n 'hanging-punctuation': {\n values: ['allow-end', 'first', 'force-end', 'last', 'none'],\n },\n height: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n hyphens: { values: ['auto', 'manual', 'none'] },\n 'image-orientation': { values: [] },\n 'image-resolution': { values: ['from-image', 'snap'] },\n isolation: { values: ['auto', 'isolate'] },\n 'justify-content': {\n values: [\n 'center',\n 'flex-end',\n 'flex-start',\n 'space-around',\n 'space-between',\n ],\n },\n 'justify-items': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n 'legacy',\n ],\n },\n 'justify-self': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n ],\n },\n left: { values: ['auto'] },\n 'letter-spacing': { values: ['normal'] },\n 'line-height': { values: ['normal'] },\n 'list-style': {\n values: [\n 'none',\n 'url()',\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'inside',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'outside',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n 'list-style-image': { values: ['none', 'url()'] },\n 'list-style-position': { values: ['inside', 'outside'] },\n 'list-style-type': {\n values: [\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'none',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n margin: { values: ['auto'] },\n 'margin-bottom': { values: ['auto'] },\n 'margin-left': { values: ['auto'] },\n 'margin-right': { values: ['auto'] },\n 'margin-top': { values: ['auto'] },\n 'max-height': { values: ['none'] },\n 'max-width': { values: ['none'] },\n 'min-height': { values: [] },\n 'min-width': { values: [] },\n 'mix-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'object-fit': {\n values: ['contain', 'cover', 'fill', 'none', 'scale-down'],\n },\n 'object-position': { values: ['left', 'center', 'right', 'bottom', 'top'] },\n opacity: { values: [] },\n order: { values: [] },\n orphans: { values: [] },\n outline: { values: [] },\n 'outline-color': { values: ['invert'], type: 'color' },\n 'outline-offset': { values: [] },\n 'outline-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'outline-width': { values: ['medium', 'thin', 'thick'] },\n overflow: { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-x': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-y': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-wrap': { values: ['normal', 'anywhere', 'break-word'] },\n padding: { values: [] },\n 'padding-bottom': { values: [] },\n 'padding-left': { values: [] },\n 'padding-right': { values: [] },\n 'padding-top': { values: [] },\n 'page-break-after': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-before': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-inside': { values: ['auto', 'avoid'] },\n perspective: { values: ['none'] },\n 'perspective-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'pointer-events': {\n values: [\n 'all',\n 'auto',\n 'fill',\n 'none',\n 'painted',\n 'stroke',\n 'visible',\n 'visibleFill',\n 'visiblePainted',\n 'visibleStroke',\n ],\n },\n position: { values: ['absolute', 'fixed', 'relative', 'static', 'sticky'] },\n quotes: { values: ['none'] },\n 'region-break-after': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'region-break-before': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'region-break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'region-fragment': { values: ['auto', 'break'] },\n resize: { values: ['both', 'horizontal', 'none', 'vertical'] },\n right: { values: ['auto'] },\n 'scroll-behavior': { values: ['auto', 'smooth'] },\n 'scroll-snap-type': {\n values: [\n 'none',\n 'x',\n 'y',\n 'block',\n 'inline',\n 'both',\n 'mandatory',\n 'proximity',\n ],\n },\n src: { values: ['url()'] },\n 'shape-image-threshold': { values: [] },\n 'shape-inside': {\n values: [\n 'auto',\n 'circle()',\n 'ellipse()',\n 'outside-shape',\n 'polygon()',\n 'rectangle()',\n ],\n },\n 'shape-margin': { values: [] },\n 'shape-outside': {\n values: [\n 'none',\n 'circle()',\n 'ellipse()',\n 'polygon()',\n 'inset()',\n 'margin-box',\n 'border-box',\n 'padding-box',\n 'content-box',\n 'url()',\n 'image()',\n 'linear-gradient()',\n 'radial-gradient()',\n 'repeating-linear-gradient()',\n 'repeating-radial-gradient()',\n ],\n },\n 'tab-size': { values: [] },\n 'table-layout': { values: ['auto', 'fixed'] },\n 'text-align': {\n values: [\n 'start',\n 'end',\n 'center',\n 'left',\n 'justify',\n 'right',\n 'match-parent',\n 'justify-all',\n ],\n },\n 'text-align-last': { values: ['center', 'left', 'justify', 'right'] },\n 'text-decoration': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-color': { values: [], type: 'color' },\n 'text-decoration-line': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-skip': {\n values: ['edges', 'ink', 'none', 'objects', 'spaces'],\n },\n 'text-decoration-style': {\n values: ['dashed', 'dotted', 'double', 'solid', 'wavy'],\n },\n 'text-emphasis': { values: [] },\n 'text-emphasis-color': { values: [], type: 'color' },\n 'text-emphasis-position': { values: ['above', 'below', 'left', 'right'] },\n 'text-emphasis-style': {\n values: [\n 'circle',\n 'dot',\n 'double-circle',\n 'filled',\n 'none',\n 'open',\n 'sesame',\n 'triangle',\n ],\n },\n 'text-indent': { values: [] },\n 'text-justify': {\n values: ['auto', 'none', 'inter-word', 'inter-character'],\n },\n 'text-overflow': { values: ['clip', 'ellipsis'] },\n 'text-shadow': { values: [] },\n 'text-rendering': {\n values: [\n 'auto',\n 'geometricPrecision',\n 'optimizeLegibility',\n 'optimizeSpeed',\n ],\n },\n 'text-transform': {\n values: ['capitalize', 'full-width', 'lowercase', 'none', 'uppercase'],\n },\n 'text-underline-position': {\n values: ['alphabetic', 'auto', 'below', 'left', 'right'],\n },\n top: { values: ['auto'] },\n transform: {\n values: [\n 'matrix()',\n 'matrix3d()',\n 'none',\n 'perspective()',\n 'rotate()',\n 'rotate3d()',\n 'rotateX()',\n 'rotateY()',\n 'rotateZ()',\n 'scale()',\n 'scale3d()',\n 'scaleX()',\n 'scaleY()',\n 'scaleZ()',\n 'skewX()',\n 'skewY()',\n 'translate()',\n 'translate3d()',\n 'translateX()',\n 'translateY()',\n 'translateZ()',\n ],\n },\n 'transform-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'transform-style': { values: ['flat', 'preserve-3d'] },\n transition: { values: [] },\n 'transition-delay': { values: [] },\n 'transition-duration': { values: [] },\n 'transition-property': { values: ['all', 'none'] },\n 'transition-timing-function': {\n values: [\n 'cubic-bezier()',\n 'ease',\n 'ease-in',\n 'ease-in-out',\n 'ease-out',\n 'linear',\n 'step-end',\n 'step-start',\n 'steps()',\n ],\n },\n 'unicode-bidi': { values: ['bidi-override', 'embed', 'normal'] },\n 'unicode-range': { values: [] },\n 'user-select': { values: ['all', 'auto', 'contain', 'none', 'text'] },\n 'vertical-align': {\n values: [\n 'baseline',\n 'bottom',\n 'middle',\n 'sub',\n 'super',\n 'text-bottom',\n 'text-top',\n 'top',\n ],\n },\n visibility: { values: ['collapse', 'hidden', 'visible'] },\n 'white-space': {\n values: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap'],\n },\n widows: { values: [] },\n width: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n 'will-change': {\n values: ['auto', 'contents', 'opacity', 'scroll-position'],\n },\n 'word-break': { values: ['normal', 'break-all', 'keep-all'] },\n 'word-spacing': { values: ['normal'] },\n 'z-index': { values: ['auto'] },\n },\n};\n\nexport const CSSProperties = CSSSourceInfo.cssKeyValue;\n\nexport const CSSColors = CSSSourceInfo.cssColors;\n\nexport type CSSPropertiesKey = keyof typeof CSSProperties;\n\nexport const CSSPropertyList = Object.keys(CSSSourceInfo.cssKeyValue);\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { AutoComplete, ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { BaseSelectRef } from 'rc-select';\nimport clsx from 'clsx';\nimport styles from './style.module.scss';\nimport { CSSProperties, CSSPropertiesKey } from '../../../../CSSPropertiesEditor/cssProperties';\n\ntype CSSValueSetterProps = {\n propertyKey: string;\n};\n\nexport const CSSValueSetter: CSetter<CSSValueSetterProps> = ({\n onValueChange,\n propertyKey = '',\n value,\n initialValue,\n}: CSetterProps<CSSValueSetterProps>) => {\n // const { keyPaths, onSetterChange } = setterContext;\n const propertyValueRef = useRef<BaseSelectRef | null>(null);\n const [innerValue, setInnerVal] = useState<any>(value ?? (initialValue || ''));\n const [focusState, setFocusState] = useState(false);\n const updateOuterValue = () => {\n onValueChange?.(innerValue);\n };\n useEffect(() => {\n setInnerVal(value);\n }, [value]);\n\n const optionsValue = useMemo(() => {\n const list = CSSProperties[propertyKey as unknown as CSSPropertiesKey]?.values || [];\n return list.map((el) => {\n return {\n value: el,\n };\n });\n }, [propertyKey]);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <AutoComplete\n ref={propertyValueRef}\n popupMatchSelectWidth={200}\n variant={'borderless'}\n value={innerValue}\n onChange={(val) => {\n setInnerVal(val);\n updateOuterValue();\n }}\n style={{\n flex: 1,\n }}\n onFocus={() => {\n setFocusState(true);\n }}\n onBlur={() => {\n setFocusState(false);\n }}\n className={clsx([styles.inputAuto, focusState && styles.active])}\n placeholder=\"value\"\n options={optionsValue}\n ></AutoComplete>\n </ConfigProvider>\n );\n};\n\nCSSValueSetter.setterName = 'CSS值设置器';\n","import { ConfigProvider, Input, Popover } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { SketchPicker } from 'react-color';\n\ntype ColorSetterProps = {\n initialValue: string;\n};\n\nexport const ColorSetter: CSetter = ({ onValueChange, initialValue, value }: CSetterProps<ColorSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Popover\n trigger=\"click\"\n content={\n <SketchPicker\n color={value || initialValue}\n onChange={(newColor) => {\n const newColorStr = `rgba(${newColor.rgb.r},${newColor.rgb.g},${newColor.rgb.b}, ${newColor.rgb.a || 1})`;\n onValueChange?.(newColorStr);\n }}\n />\n }\n placement={'bottomLeft'}\n styles={{\n body: {\n padding: 0,\n },\n }}\n arrow={{\n pointAtCenter: false,\n }}\n >\n <Input\n placeholder=\"color\"\n value={value}\n onChange={(e) => {\n onValueChange?.(e.target.value);\n }}\n prefix={\n <div\n style={{\n backgroundColor: value || 'transparent',\n width: '10px',\n height: '10px',\n borderRadius: '4px',\n overflow: 'hidden',\n }}\n ></div>\n }\n />\n </Popover>\n </ConfigProvider>\n );\n};\n\nColorSetter.setterName = '颜色设置器';\n","export const DEFAULT_PRESET_COLORS = [\n {\n label: 'Recommended',\n colors: [\n '#000000',\n '#000000E0',\n '#000000A6',\n '#00000073',\n '#00000040',\n '#00000026',\n '#0000001A',\n '#00000012',\n '#0000000A',\n '#00000005',\n '#F5222D',\n '#FA8C16',\n '#FADB14',\n '#8BBB11',\n '#52C41A',\n '#13A8A8',\n '#1677FF',\n '#2F54EB',\n '#722ED1',\n '#EB2F96',\n '#F5222D4D',\n '#FA8C164D',\n '#FADB144D',\n '#8BBB114D',\n '#52C41A4D',\n '#13A8A84D',\n '#1677FF4D',\n '#2F54EB4D',\n '#722ED14D',\n '#EB2F964D',\n ],\n },\n];\n","import { ColorPicker, ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\n\ntype ColorSetterProps = {\n initialValue: string;\n};\n\nexport const AntDColorSetter: CSetter = ({\n onValueChange,\n initialValue,\n value,\n setterContext,\n ...restProps\n}: CSetterProps<ColorSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <ColorPicker\n showText={true}\n allowClear\n value={value ?? initialValue}\n onChangeComplete={(color) => {\n onValueChange?.(color.toRgbString());\n }}\n presets={DEFAULT_PRESET_COLORS}\n {...restProps}\n />\n </ConfigProvider>\n );\n};\n\nAntDColorSetter.setterName = '颜色设置器';\n","import { Slider, SliderSingleProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\nexport const SliderSetter: CSetter<SliderSingleProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<SliderSingleProps & { initialValue?: string }>) => {\n return (\n <Slider\n {...props}\n value={props.value ?? initialValue}\n onChange={(newValue) => {\n props.onChange?.(newValue);\n onValueChange?.(newValue);\n }}\n />\n );\n};\n\nSliderSetter.setterName = '滑动条设置器';\n","import { ConfigProvider, Radio } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\ntype ColorSetterProps = {\n initialValue: string;\n};\n\nexport const RadioGroupSetter: CSetter = ({\n onValueChange,\n value,\n initialValue,\n setterContext,\n ...restProps\n}: CSetterProps<ColorSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Radio.Group\n onChange={(e) => {\n onValueChange?.(e.target.value);\n }}\n defaultValue={initialValue}\n value={value}\n {...restProps}\n />\n </ConfigProvider>\n );\n};\n\nRadioGroupSetter.setterName = '单选设置器';\n","import { Input, InputProps } from 'antd';\nimport styles from './style.module.scss';\nimport { useMemo } from 'react';\n\nexport type InputNumberPlusProps = Omit<InputProps, 'onChange'> & {\n min?: number;\n max?: number;\n value?: number;\n onChange?: (newVal: number | undefined) => void;\n};\n\nexport const InputNumberPlus = ({ min, max, value, onChange, addonAfter, ...restProps }: InputNumberPlusProps) => {\n const updateInnerVal = (newVal: number | undefined) => {\n onChange?.(newVal);\n };\n\n const processUpdateVal = (num: number) => {\n let resVal = num;\n if (min !== undefined) {\n resVal = Math.max(min, resVal);\n }\n if (max !== undefined) {\n resVal = Math.min(max, resVal);\n }\n updateInnerVal(resVal);\n };\n // 是否是合法的值\n const isLegal = useMemo(() => {\n if (value === undefined) {\n return true;\n }\n let tempVal = value;\n if (min !== undefined) {\n tempVal = Math.max(min, tempVal);\n }\n if (max !== undefined) {\n tempVal = Math.min(max, tempVal);\n }\n\n if (tempVal !== value) {\n return false;\n }\n return true;\n }, [max, min, value]);\n\n return (\n <div className={styles.inputNumberPlus}>\n <div\n style={{\n display: 'flex',\n position: 'relative',\n }}\n >\n <Input\n allowClear\n {...restProps}\n status={isLegal ? undefined : 'error'}\n value={value}\n onClear={() => {\n updateInnerVal(undefined);\n }}\n onChange={(e) => {\n const newNum = parseInt(e.target.value || '0', 10);\n processUpdateVal(newNum);\n }}\n addonAfter={addonAfter}\n />\n </div>\n </div>\n );\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { ConfigProvider, InputProps, Select } from 'antd';\nimport { MouseEventHandler, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport styles from './style.module.scss';\nimport { addEventListenerReturnCancel } from '@chamn/layout';\nimport { InputNumberPlus } from '../InputNumberPlus';\nimport clsx from 'clsx';\n\ntype CumulativeInfoType = {\n x: number;\n y: number;\n cumulativeX: number;\n cumulativeY: number;\n};\n\nconst UNIT_LIST = [\n { value: 'px', label: 'px' },\n { value: '%', label: '%' },\n { value: 'vw', label: 'vw' },\n { value: 'vh', label: 'vh' },\n { value: 'rem', label: 'rem' },\n];\n\nexport const useDragSize = function (options?: {\n onStart?: (data: CumulativeInfoType) => void;\n onChange?: (data: CumulativeInfoType) => void;\n onEnd?: (data: CumulativeInfoType) => void;\n limitCumulative?: {\n x?: [number | undefined, number | undefined];\n y?: [number | undefined, number | undefined];\n };\n}) {\n const cumulativeInfo = useRef<{\n status: 'running' | '';\n start: CumulativeInfoType;\n processing: CumulativeInfoType;\n mouseDown: boolean;\n }>({\n status: '',\n start: {\n x: 0,\n y: 0,\n cumulativeX: 0,\n cumulativeY: 0,\n },\n processing: {\n x: 0,\n y: 0,\n cumulativeX: 0,\n cumulativeY: 0,\n },\n mouseDown: false,\n });\n\n const processEnd: MouseEventHandler<any> = useCallback(() => {\n cumulativeInfo.current.mouseDown = false;\n const { processing } = cumulativeInfo.current;\n\n options?.onEnd?.({ ...processing });\n cumulativeInfo.current.status = '';\n cumulativeInfo.current.processing.cumulativeX = 0;\n cumulativeInfo.current.processing.cumulativeY = 0;\n }, [options]);\n\n const onMouseDown: MouseEventHandler<any> = useCallback(() => {\n cumulativeInfo.current.mouseDown = true;\n }, []);\n\n const processMove: MouseEventHandler<any> = useCallback(\n (e) => {\n if (!cumulativeInfo.current.mouseDown) {\n return;\n }\n const { start, processing } = cumulativeInfo.current;\n // 判断是否是拖拽\n const tempCumulativeX = e.clientX - start.x;\n const tempCumulativeY = e.clientY - start.y;\n\n const shakeDIstance = 10;\n if (\n cumulativeInfo.current.status !== 'running' &&\n (Math.abs(tempCumulativeX) > shakeDIstance || Math.abs(tempCumulativeY) > shakeDIstance)\n ) {\n cumulativeInfo.current.status = 'running';\n const startInfo = cumulativeInfo.current.start;\n startInfo.x = e.clientX;\n startInfo.y = e.clientY;\n options?.onStart?.({ ...startInfo });\n }\n\n if (cumulativeInfo.current.status !== 'running') {\n return;\n }\n processing.x = e.clientX;\n processing.y = e.clientY;\n\n processing.cumulativeX = e.clientX - start.x;\n processing.cumulativeY = e.clientY - start.y;\n\n // 超出最大累积便宜,直接结束拖拽\n const [minX, maxX] = options?.limitCumulative?.x || [];\n if (minX !== undefined && processing.cumulativeX < minX) {\n processEnd(e);\n return;\n }\n\n if (maxX !== undefined && processing.cumulativeX > maxX) {\n processEnd(e);\n return;\n }\n\n options?.onChange?.({ ...processing });\n },\n [options, processEnd]\n );\n\n useEffect(() => {\n const globalMoveDispose = addEventListenerReturnCancel(document.body, 'mousemove', (e) => {\n processMove(e as any);\n });\n\n const globalUpDispose = addEventListenerReturnCancel(document.body, 'mouseup', (e) => {\n processEnd(e as any);\n });\n const globalLeaveDispose = addEventListenerReturnCancel(document.body, 'mouseleave', (e) => {\n processEnd(e as any);\n });\n\n return () => {\n globalMoveDispose();\n globalUpDispose();\n globalLeaveDispose();\n };\n }, [processEnd, processMove]);\n\n return {\n onMouseDown,\n };\n};\n\ntype MinMaxType = {\n px?: number;\n vw?: number;\n vh?: number;\n rem?: number;\n};\n\nexport type CSSSizeInputProps = {\n value?: string;\n onValueChange?: (newVal: string | undefined) => void;\n min?: MinMaxType | number;\n max?: MinMaxType | number;\n size?: InputProps['size'];\n style?: React.CSSProperties;\n\n className?: string;\n unit?: boolean;\n /** 累计的偏移量,映射为具体的值,默认 1:1 */\n cumulativeTransform?: (params: CumulativeInfoType) => CumulativeInfoType;\n unitList?: (keyof MinMaxType)[];\n};\n\nexport const CSSSizeInput = (props: CSSSizeInputProps) => {\n const outValue = String(props.value);\n const [dragSizing, setDragSizing] = useState({\n value: 0,\n status: '',\n });\n\n const originalValObj = useMemo(() => {\n const res: {\n value: number | undefined;\n unit: keyof MinMaxType;\n } = {\n value: undefined,\n unit: 'px' as any,\n };\n\n if (props.value === undefined) {\n return res;\n }\n const tempVal = parseFloat(props.value || '');\n if (!isNaN(tempVal)) {\n res.value = tempVal;\n }\n\n let unit: keyof MinMaxType = 'px';\n if (res.value !== undefined) {\n unit = outValue.replace(String(res.value), '').trim() as keyof MinMaxType;\n }\n if (['px', '%', 'rem', 'vw', 'vx'].includes(unit)) {\n res.unit = unit || 'px';\n }\n return res;\n }, [outValue, props.value]);\n\n const currentUnitList = useMemo<typeof UNIT_LIST>(() => {\n if (!props.unitList) {\n return UNIT_LIST;\n }\n return props.unitList\n .map((el) => {\n return UNIT_LIST.find((it) => it.value === el);\n })\n .filter(Boolean) as typeof UNIT_LIST;\n }, [props.unitList]);\n\n const currentMinMix = useMemo(() => {\n return {\n min: typeof props.min === 'number' ? props.min : props.min?.[originalValObj.unit],\n max: typeof props.max === 'number' ? props.max : props.max?.[originalValObj.unit],\n };\n }, [props, originalValObj]);\n\n const valObj = useMemo(() => {\n const res = { ...originalValObj };\n if (dragSizing.status === 'dragging') {\n res.value = dragSizing.value;\n }\n\n return res;\n }, [originalValObj, dragSizing]);\n\n const updateValue = useCallback(\n (val: { value: number | undefined; unit: string }) => {\n let valStr: string | undefined = `${val.value}${val.unit}`;\n if (val.value === undefined) {\n valStr = undefined;\n }\n props.onValueChange?.(valStr);\n },\n [props]\n );\n\n const processNewVal = useCallback(\n (cumulativeData: CumulativeInfoType, value: number | undefined) => {\n let data = { ...cumulativeData };\n if (props.cumulativeTransform) {\n data = props.cumulativeTransform(data);\n }\n\n let num = value ?? 0;\n if (isNaN(num)) {\n num = 0;\n }\n let newVal = num + data.cumulativeX;\n\n if (currentMinMix.min !== undefined) {\n newVal = Math.max(newVal, currentMinMix.min);\n }\n if (currentMinMix.max !== undefined) {\n newVal = Math.min(newVal, currentMinMix.max);\n }\n return newVal;\n },\n [currentMinMix.max, currentMinMix.min, props]\n );\n\n const onDragStart = useCallback(\n (data: CumulativeInfoType) => {\n setDragSizing({\n status: 'dragging',\n value: processNewVal(data, originalValObj.value),\n });\n },\n [originalValObj.value, processNewVal]\n );\n\n const onDragMoveChange = useCallback(\n (data: CumulativeInfoType) => {\n const nV = processNewVal(data, originalValObj.value);\n setDragSizing({\n status: 'dragging',\n value: nV,\n });\n },\n [originalValObj.value, processNewVal]\n );\n\n const onDragEnd = useCallback(\n (data: CumulativeInfoType) => {\n const newVal = processNewVal(data, originalValObj.value);\n if (dragSizing.status !== 'dragging') {\n return;\n }\n\n updateValue({\n value: newVal,\n unit: originalValObj.unit,\n });\n setDragSizing({\n status: '',\n value: 0,\n });\n },\n [dragSizing.status, originalValObj, processNewVal, updateValue]\n );\n const handleRef = useRef({\n onStart: onDragStart,\n onChange: onDragMoveChange,\n onEnd: onDragEnd,\n });\n handleRef.current = {\n onStart: onDragStart,\n onChange: onDragMoveChange,\n onEnd: onDragEnd,\n };\n\n const dragSizeHandle = useDragSize({\n onStart: (data) => handleRef.current.onStart(data),\n onChange: (data) => handleRef.current.onChange(data),\n onEnd: (data) => handleRef.current.onEnd(data),\n limitCumulative: {\n x: [-60, undefined],\n },\n });\n const unitSelect = (\n <span className={styles.unitSelect}>\n <Select\n size={props.size}\n defaultValue=\"\"\n value={valObj.unit}\n onChange={(val) => {\n updateValue({\n value: valObj.value,\n unit: val,\n });\n }}\n style={{\n width: '40px',\n }}\n popupMatchSelectWidth={false}\n options={currentUnitList}\n />\n </span>\n );\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 2,\n },\n }}\n >\n <div className={clsx([styles.cssSizeInput, props?.className])} {...dragSizeHandle} style={props.style}>\n <InputNumberPlus\n size={props.size}\n value={valObj.value}\n addonAfter={props.unit === false ? '' : unitSelect}\n min={currentMinMix.min}\n max={currentMinMix.max}\n onChange={(val) => {\n updateValue({\n value: val,\n unit: valObj.unit,\n });\n }}\n />\n </div>\n </ConfigProvider>\n );\n};\n","import { ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CSSSizeInput, CSSSizeInputProps } from '@/component/CSSSizeInput';\n\nexport const CSSSizeSetter: CSetter<CSSSizeInputProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<CSSSizeInputProps & { initialValue?: string }>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <CSSSizeInput\n min={0}\n {...props}\n value={props.value ?? initialValue}\n onValueChange={(newVal) => {\n onValueChange?.(newVal);\n }}\n />\n </ConfigProvider>\n );\n};\n\nCSSSizeSetter.setterName = 'CSS size 设置器';\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col, Radio, Button } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useState } from 'react';\nimport { InputCommonRef } from '../type';\nimport { pick } from 'lodash-es';\nimport {\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n AlignHorizontalSpaceAround,\n AlignHorizontalSpaceBetween,\n AlignVerticalJustifyEnd,\n AlignVerticalJustifyStart,\n AlignVerticalSpaceAround,\n AlignVerticalSpaceBetween,\n ArrowDownFromLine,\n ArrowLeftFromLine,\n ArrowRightFromLine,\n ArrowUpFromLine,\n MoveHorizontal,\n MoveVertical,\n SquareX,\n StretchHorizontal,\n StretchVertical,\n} from 'lucide-react';\nconst keyList = [\n 'width',\n 'height',\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height',\n 'flex',\n 'display',\n 'flex-direction',\n 'justify-content',\n 'align-items',\n 'flex-wrap',\n] as const;\n\ntype Value = Record<typeof keyList[number], string>;\n\nexport type DimensionInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nfunction getDefaultValue(list: string[]): any {\n return list.reduce((res, el) => {\n return {\n ...res,\n [el]: '',\n };\n }, {});\n}\n\nconst maxVal = {\n px: 2048,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nexport const DimensionInput = forwardRef<InputCommonRef, DimensionInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getDefaultValue(keyList as any));\n\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...pick(newVal, keyList),\n };\n\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) =>\n updateInnerVal(\n {\n ...getDefaultValue(keyList as any),\n ...newVal,\n },\n true\n ),\n setEmptyValue: () => {\n setInnerVal(getDefaultValue(keyList as any));\n },\n };\n },\n [updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n return props.value ?? innerVal;\n }, [props.value, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col span={24} className=\"flex\">\n <span className={styles.label}>layout:</span>\n <Radio.Group\n value={realValue.display}\n size=\"small\"\n buttonStyle=\"solid\"\n onChange={(e) => {\n updateInnerVal({\n display: e.target.value,\n });\n }}\n >\n <Radio.Button value=\"block\">Block</Radio.Button>\n <Radio.Button value=\"flex\">Flex</Radio.Button>\n <Radio.Button value=\"inline-block\">InlineB</Radio.Button>\n <Radio.Button value=\"inline\">Inline</Radio.Button>\n <Radio.Button value=\"none\">None</Radio.Button>\n </Radio.Group>\n </Col>\n </Row>\n {/* flex 布局属性 */}\n {realValue.display === 'flex' && (\n <>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>AxisD:</span>\n <div\n style={{\n width: '200px',\n marginLeft: '3px',\n }}\n >\n <Radio.Group\n size=\"small\"\n value={realValue['flex-direction']}\n buttonStyle={'outline'}\n options={[\n {\n label: <ArrowRightFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'row',\n },\n {\n label: <ArrowLeftFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'row-reverse',\n },\n {\n label: <ArrowDownFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'column',\n },\n {\n label: <ArrowUpFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'column-reverse',\n },\n {\n label: <SquareX size={14} style={{ top: '3px', position: 'relative' }} />,\n value: '',\n },\n ]}\n onChange={(e) => {\n updateInnerVal({\n 'flex-direction': e.target.value || '',\n });\n }}\n optionType=\"button\"\n />\n </div>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>MAxis:</span>\n <div\n style={{\n width: '200px',\n marginLeft: '3px',\n }}\n >\n <Radio.Group\n size=\"small\"\n value={realValue['justify-content']}\n buttonStyle={'outline'}\n options={[\n {\n label: <AlignHorizontalDistributeStart size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-start',\n },\n {\n label: <AlignHorizontalDistributeEnd size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-end',\n },\n {\n label: <StretchVertical size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'center',\n },\n {\n label: <AlignHorizontalSpaceBetween size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-between',\n },\n {\n label: <AlignHorizontalSpaceAround size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-around',\n },\n {\n label: <SquareX size={14} style={{ top: '3px', position: 'relative' }} />,\n value: '',\n },\n ]}\n onChange={(e) => {\n updateInnerVal({\n 'justify-content': e.target.value || '',\n });\n }}\n optionType=\"button\"\n />\n </div>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>CAxis:</span>\n <div\n style={{\n width: '200px',\n marginLeft: '3px',\n }}\n >\n <Radio.Group\n size=\"small\"\n value={realValue['align-items']}\n buttonStyle={'outline'}\n options={[\n {\n label: <AlignVerticalJustifyStart size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-start',\n },\n {\n label: <AlignVerticalJustifyEnd size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-end',\n },\n {\n label: <StretchHorizontal size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'center',\n },\n {\n label: <AlignVerticalSpaceBetween size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-between',\n },\n {\n label: <AlignVerticalSpaceAround size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-around',\n },\n {\n label: <SquareX size={14} style={{ top: '3px', position: 'relative' }} />,\n value: '',\n },\n ]}\n onChange={(e) => {\n updateInnerVal({\n 'align-items': e.target.value || '',\n });\n }}\n optionType=\"button\"\n />\n </div>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col span={12} className=\"flex\">\n <span className={styles.label}>flex:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n unit={false}\n min={0}\n max={maxVal}\n value={realValue['flex']}\n onValueChange={(newVal) => {\n updateInnerVal({\n flex: newVal || '',\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </>\n )}\n {/* flex 布局属性 end */}\n\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>width:</span>\n <CSSSizeInput\n style={{\n width: '180px',\n }}\n min={0}\n max={maxVal}\n value={realValue.width}\n onValueChange={(val) => {\n updateInnerVal({\n width: val,\n });\n }}\n className={styles.inputWidth}\n size=\"small\"\n />\n <Button\n size=\"small\"\n style={{\n marginLeft: '10px',\n }}\n onClick={() => {\n updateInnerVal({\n width: '100%',\n });\n }}\n >\n <MoveHorizontal size={14} />\n </Button>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>height:</span>\n <CSSSizeInput\n min={0}\n style={{\n width: '180px',\n }}\n max={maxVal}\n value={realValue.height}\n onValueChange={(val) => {\n updateInnerVal({\n height: val,\n });\n }}\n className={styles.inputWidth}\n size=\"small\"\n />\n <Button\n size=\"small\"\n style={{\n marginLeft: '10px',\n }}\n onClick={() => {\n updateInnerVal({\n height: '100%',\n });\n }}\n >\n <MoveVertical size={14} />\n </Button>\n </Col>\n </Row>\n <div>\n <Row className={styles.row}>\n <Col span={12} className=\"flex\">\n <span className={styles.label}>minW:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n min={0}\n max={maxVal}\n value={realValue['min-width']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'min-width': newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n <Col span={12}>\n <span className={styles.label}>minH:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue['min-height']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'min-height': newVal,\n });\n }}\n className={styles.inputWidth}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col span={12} className=\"flex\">\n <span className={styles.label}>maxW:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n min={0}\n max={maxVal}\n value={realValue['max-width']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'max-width': newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n <Col span={12}>\n <span className={styles.label}>maxH:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n min={0}\n max={maxVal}\n value={realValue['max-height']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'max-height': newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </div>\n </div>\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useState } from 'react';\nimport { InputCommonRef } from '../type';\nimport clsx from 'clsx';\nimport { pick } from 'lodash-es';\n\ntype Value = Record<string, string>;\n\nexport type MarginAndPaddingInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n prefix: 'margin' | 'padding';\n};\n\nconst maxVal = {\n px: 2048,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nconst inputW = '100px';\n\nconst getEmptyVal = () => ({\n left: '',\n right: '',\n top: '',\n bottom: '',\n});\n\nexport const MarginAndPaddingInput = forwardRef<InputCommonRef, MarginAndPaddingInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const keyList = useMemo(() => {\n return ['left', 'top', 'right', 'bottom'].map((el) => `${props.prefix}-${el}`);\n }, [props.prefix]);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<any>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n const outVal = Object.keys(finalVal).reduce((res, k) => {\n if (k === 'all') {\n res[`${props.prefix}`] = (finalVal as unknown as any)?.[k];\n } else {\n res[`${props.prefix}-${k}`] = (finalVal as unknown as any)?.[k];\n }\n return res;\n }, {} as any);\n if (noTrigger !== true) {\n props.onChange?.(pick(outVal, keyList));\n }\n return finalVal;\n });\n },\n [keyList, props]\n );\n\n const formatValue = useCallback(\n (obj: Record<string, any>, prefix: string) => {\n const targetKeyList = Object.keys(obj || {}).filter((k) => k.includes(prefix));\n const tempVal = targetKeyList.reduce((res, k) => {\n if (k.replace(`${props.prefix}`, '') === '') {\n res['all'] = (obj as unknown as any)?.[k];\n } else {\n res[k.replace(`${props.prefix}-`, '')] = (obj as unknown as any)?.[k];\n }\n return res;\n }, {} as any);\n return tempVal;\n },\n [props.prefix]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n ...formatValue(newVal, props.prefix),\n },\n true\n );\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n },\n true\n );\n },\n };\n },\n [formatValue, props.prefix, updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n const tempVal = formatValue(props.value || {}, props.prefix);\n if (props.value === undefined) {\n return innerVal;\n }\n return tempVal;\n }, [formatValue, props.value, props.prefix, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n span={12}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label, styles['m-p']])}>T:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue.top}\n onValueChange={(val) => {\n updateInnerVal({\n top: val,\n });\n }}\n style={{\n width: inputW,\n }}\n size=\"small\"\n />\n </Col>\n <Col span={12}>\n <span className={clsx([styles.label, styles['m-p']])}>L:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue.left}\n onValueChange={(val) => {\n updateInnerVal({\n left: val,\n });\n }}\n style={{\n width: inputW,\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <div>\n <Row className={styles.row}>\n <Col span={12}>\n <span className={clsx([styles.label, styles['m-p']])}>B:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue.bottom}\n onValueChange={(newVal) => {\n updateInnerVal({\n bottom: newVal,\n });\n }}\n style={{\n width: inputW,\n }}\n size=\"small\"\n />\n </Col>\n <Col\n span={12}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label, styles['m-p']])}>R:</span>\n <CSSSizeInput\n style={{\n width: inputW,\n }}\n min={0}\n max={maxVal}\n value={realValue.right}\n onValueChange={(newVal) => {\n updateInnerVal({\n right: newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </div>\n </div>\n );\n});\n","import { ColorPicker, ColorPickerProps, GetProp } from 'antd';\nimport { forwardRef, useImperativeHandle, useState } from 'react';\n\nexport type CustomColorPickerRef = {\n updateColor: (color: string) => void;\n};\n\ntype Color = GetProp<ColorPickerProps, 'value'>;\n\ntype CustomColorPickerProps = Omit<ColorPickerProps, 'onChange'> & {\n onChange: (color: string) => void;\n};\n\nexport const CustomColorPicker = forwardRef<CustomColorPickerRef, CustomColorPickerProps>(function CustomColorPicker(\n props,\n ref\n) {\n const [color, setColor] = useState<Color>();\n\n useImperativeHandle(ref, () => {\n return {\n updateColor: (color: string) => {\n setColor(color);\n },\n };\n });\n\n return (\n <ColorPicker\n {...props}\n value={color}\n onChange={(val) => {\n setColor(val);\n }}\n onChangeComplete={(val) => {\n props.onChange?.(val.toRgbString());\n }}\n />\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col, Radio } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { InputCommonRef } from '../type';\nimport { pick } from 'lodash-es';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\nconst FONT_CSS_KEY_LIST = ['font-size', 'color', 'text-align', 'font-weight'] as const;\ntype FontKeyType = typeof FONT_CSS_KEY_LIST[number];\ntype Value = Record<FontKeyType, string>;\n\nexport type FontInputProps = {\n initialValue?: Value;\n value?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nconst maxVal = {\n px: 100,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nconst alignOptions = [\n { label: <span className={styles.fontOption}>Left</span>, value: 'left' },\n { label: <span className={styles.fontOption}>Center</span>, value: 'center' },\n { label: <span className={styles.fontOption}>Right</span>, value: 'Right' },\n];\n\nconst fontWeightOptions = [\n { label: <span className={styles.fontOption}>Regular</span>, value: '400' },\n { label: <span className={styles.fontOption}>Medium</span>, value: '500' },\n { label: <span className={styles.fontOption}>Bold</span>, value: '700' },\n];\n\nconst getEmptyVal = () => ({\n 'font-size': '',\n color: '',\n 'text-align': '',\n 'font-weight': '',\n});\n\nexport const FontInput = forwardRef<InputCommonRef, FontInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n colorRef.current?.updateColor(newVal?.color || '');\n updateInnerVal(\n {\n ...getEmptyVal(),\n ...pick(newVal, FONT_CSS_KEY_LIST),\n },\n true\n );\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n },\n true\n );\n },\n };\n },\n [updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n return props.value ?? innerVal;\n }, [props.value, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n onChange={(color) => {\n updateInnerVal({\n color: color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Size:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue['font-size']}\n onValueChange={(val) => {\n updateInnerVal({\n 'font-size': val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <span className={clsx([styles.label])}>Align:</span>\n <Radio.Group\n options={alignOptions}\n onChange={({ target: { value: newVal } }) => {\n updateInnerVal({\n 'text-align': newVal,\n });\n }}\n value={realValue['text-align']}\n />\n </Row>\n <Row className={styles.row}>\n <span className={clsx([styles.label])}>Weight:</span>\n <Radio.Group\n options={fontWeightOptions}\n onChange={({ target: { value: newVal } }) => {\n updateInnerVal({\n 'font-weight': newVal,\n });\n }}\n value={realValue['font-weight']}\n />\n </Row>\n </div>\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col, Radio } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { InputCommonRef } from '../type';\nimport { CloseCircleOutlined } from '@ant-design/icons';\nimport { pick } from 'lodash-es';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\nconst CSS_BORDER_KEY_LIST = ['border', 'border-radius'] as const;\n\ntype CSSBorderKeyType = typeof CSS_BORDER_KEY_LIST[number];\ntype Value = Record<CSSBorderKeyType, string>;\n\nconst maxVal = {\n px: 100,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nconst getEmptyVal = () => ({\n border: '',\n 'border-radius': '',\n});\n\nexport type BorderInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nexport const BorderInput = forwardRef<InputCommonRef, BorderInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n const emptyVal = getEmptyVal();\n if (Object.keys(newVal).length) {\n updateInnerVal(\n {\n ...emptyVal,\n ...pick(newVal, CSS_BORDER_KEY_LIST),\n },\n true\n );\n } else {\n updateInnerVal(emptyVal, true);\n }\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n },\n true\n );\n },\n };\n },\n [updateInnerVal]\n );\n\n const currentEditVal = useMemo(() => {\n const tempVal = innerVal['border'] || '';\n const list = tempVal.split(' ');\n const tmpVal = {\n size: list[0] || '',\n type: list[1] || '',\n color: tempVal.replace(' ', '').replace(list[0], '').replace(list[1], ''),\n };\n colorRef.current?.updateColor(tmpVal.color);\n\n return tmpVal;\n }, [innerVal]);\n\n const updateSingleBorderVal = (newBorderVal: typeof currentEditVal) => {\n updateInnerVal({\n border: `${newBorderVal.size || '0px'} ${newBorderVal.type || 'none'} ${\n newBorderVal.color || 'transparent'\n }`.trim(),\n });\n };\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n style={{\n position: 'relative',\n }}\n span={24}\n >\n <CloseCircleOutlined\n style={{\n position: 'absolute',\n right: 0,\n top: '5px',\n color: '#4e4e4e',\n cursor: 'pointer',\n }}\n onClick={() => {\n updateInnerVal({\n border: undefined,\n });\n }}\n />\n <span className={styles.label}>Size:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={currentEditVal.size}\n style={{\n width: '100px',\n }}\n unitList={['px']}\n onValueChange={(val) => {\n updateSingleBorderVal({\n ...currentEditVal,\n size: val || '',\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n value={currentEditVal.color || ''}\n onChange={(color) => {\n updateSingleBorderVal({\n ...currentEditVal,\n color: color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Type:</span>\n <Radio.Group\n value={currentEditVal.type}\n size=\"small\"\n onChange={(e) => {\n updateSingleBorderVal({\n ...currentEditVal,\n type: e.target.value || '',\n });\n }}\n >\n <Radio.Button value=\"solid\">Solid</Radio.Button>\n <Radio.Button value=\"dashed\">Dashed</Radio.Button>\n <Radio.Button value=\"dotted\">Dotted</Radio.Button>\n <Radio.Button value=\"none\">None</Radio.Button>\n </Radio.Group>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Radius:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={innerVal['border-radius']}\n onValueChange={(val) => {\n updateInnerVal({\n 'border-radius': val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </div>\n );\n});\n","import { Row, Col, Radio, Input } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { InputCommonRef } from '../type';\nimport { pick } from 'lodash-es';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\nconst CSS_BACKGROUND_KEY_LIST = [\n 'background-color',\n 'background-image',\n 'background-repeat',\n 'background-size',\n] as const;\n\ntype CSSBackgroundKeyType = typeof CSS_BACKGROUND_KEY_LIST[number];\n\ntype Value = Record<CSSBackgroundKeyType, string>;\n\nexport type BackgroundInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nconst getEmptyVal = () => {\n return {\n 'background-color': '',\n 'background-image': '',\n 'background-size': '',\n 'background-repeat': '',\n };\n};\n\nexport const BackgroundInput = forwardRef<InputCommonRef, BackgroundInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n colorRef.current?.updateColor(finalVal['background-color']);\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n const emptyVal = getEmptyVal();\n if (Object.keys(newVal).length) {\n updateInnerVal(\n {\n ...emptyVal,\n ...pick(newVal, CSS_BACKGROUND_KEY_LIST),\n },\n true\n );\n } else {\n updateInnerVal(emptyVal, true);\n }\n },\n setEmptyValue: () => {\n const emptyVal = getEmptyVal();\n updateInnerVal(emptyVal, true);\n },\n };\n },\n [updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n return props.value ?? innerVal;\n }, [props.value, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n value={realValue['background-color'] || ''}\n onChange={(color) => {\n updateInnerVal({\n 'background-color': color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n }}\n >\n <span className={styles.label}>Image:</span>\n <Input\n style={{ flex: 1 }}\n size=\"small\"\n value={/url\\(['|\"|*]?(.+?)['|\"|*]?\\)/.exec(realValue['background-image'])?.[1] || ''}\n onChange={(e) => {\n console.log(`url(\"${e.target.value}\")`);\n updateInnerVal({\n 'background-image': `url(\"${e.target.value}\")`,\n });\n }}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <span className={styles.label}>Size:</span>\n <Radio.Group\n size=\"small\"\n defaultValue=\"a\"\n buttonStyle=\"solid\"\n value={realValue['background-size']}\n onChange={(e) => {\n updateInnerVal({ 'background-size': e.target.value });\n }}\n >\n <Radio.Button value=\"contain\">Contain</Radio.Button>\n <Radio.Button value=\"cover\">Cover</Radio.Button>\n <Radio.Button value=\"auto\">Auto</Radio.Button>\n </Radio.Group>\n </Row>\n <Row className={styles.row}>\n <span className={styles.label}>Repeat:</span>\n <Radio.Group\n size=\"small\"\n buttonStyle=\"solid\"\n value={realValue['background-repeat']}\n onChange={(e) => {\n updateInnerVal({ 'background-repeat': e.target.value });\n }}\n >\n <Radio.Button value=\"repeat\">Repeat</Radio.Button>\n <Radio.Button value=\"no-repeat\">NoRepeat</Radio.Button>\n </Radio.Group>\n </Row>\n </div>\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { BoxShadowObjType, parseBoxShadowString } from '@/utils';\nimport { InputCommonRef } from '../type';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\ntype Value = Record<'box-shadow', string>;\n\nconst getEmptyVal = () => ({\n 'box-shadow': '',\n});\n\nexport type ShadowInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nexport const ShadowInput = forwardRef<InputCommonRef, ShadowInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n\n const realValue = useMemo(() => {\n const tempVal = props.value?.['box-shadow'] ?? innerVal['box-shadow'];\n const obj = parseBoxShadowString(tempVal || '')[0] || {};\n colorRef.current?.updateColor(obj.color || '');\n return obj;\n }, [props.value, innerVal]);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<BoxShadowObjType>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n console.log('set val', oldVal, newVal);\n const tempVal = props.value?.['box-shadow'];\n const obj = parseBoxShadowString(tempVal || '')[0] || {};\n const newUpdateVal = {\n ...obj,\n ...newVal,\n };\n const boxShadowStr = `${newUpdateVal.offsetX || '0'} ${newUpdateVal.offsetY || '0'} ${\n newUpdateVal.blur || '0'\n } ${newUpdateVal.spread || '0'} ${newUpdateVal.color || 'transparent'}`;\n const finalVal: Value = {\n ...oldVal,\n 'box-shadow': boxShadowStr,\n };\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n ...parseBoxShadowString(newVal['box-shadow'] || '')[0],\n },\n true\n );\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...(getEmptyVal() as any),\n },\n true\n );\n },\n };\n },\n [updateInnerVal]\n );\n\n return (\n <div>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>OffsetX:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['offsetX']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n offsetX: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>OffsetY:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['offsetY']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n\n offsetY: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Blur:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['blur']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n\n blur: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Spread:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['spread']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n\n spread: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n onChange={(color) => {\n updateInnerVal({\n ...realValue,\n\n color: color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n </div>\n );\n});\n","import * as csstree from 'css-tree';\n\nexport function parseCssToObject(css: string): Record<string, Record<string, string>> {\n const result: Record<string, Record<string, string>> = {};\n\n const ast = csstree.parse(css, {\n context: 'stylesheet',\n });\n\n csstree.walk(ast, {\n visit: 'Rule',\n enter(node) {\n if (node.type === 'Rule' && node.prelude.type === 'SelectorList') {\n const selector = csstree.generate(node.prelude);\n\n const declarations: Record<string, string> = {};\n if (node.block.type === 'Block') {\n for (const declaration of node.block.children.toArray()) {\n if (declaration.type === 'Declaration') {\n const prop = declaration.property;\n const value = csstree.generate(declaration.value);\n declarations[prop] = value;\n }\n }\n }\n\n result[selector] = declarations;\n }\n },\n });\n\n return result;\n}\n","import { forwardRef, useImperativeHandle, useRef } from 'react';\nimport { MonacoEditor, MonacoEditorInstance } from '../MonacoEditor';\nimport styles from './style.module.scss';\nimport { parseCssToObject } from './helper';\nimport { InputCommonRef } from '../StylePanel/type';\nimport { isEqual } from 'lodash-es';\n\nconst getCssCodeFromStyleObj = (styleObj: Record<any, any> = {}) => {\n let res = `.node {\\n`;\n Object.keys(styleObj).forEach((key) => {\n res += ` ${key}: ${styleObj[key]};\\n`;\n });\n res += '}';\n\n return res;\n};\n\ntype CSSCodeEditorProps = {\n onValueChange?: (newVal: Record<any, any>) => void;\n};\n\nexport type CSSCodeEditorRef = InputCommonRef;\n\nexport const CSSCodeEditor = forwardRef<CSSCodeEditorRef, CSSCodeEditorProps>((props, ref) => {\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const valueRef = useRef({});\n useImperativeHandle(\n ref,\n () => {\n return {\n setEmptyValue: () => {\n valueRef.current = {};\n editorRef.current?.setValue(getCssCodeFromStyleObj({}));\n },\n setValue: (val) => {\n if (isEqual(val, valueRef.current)) {\n return;\n }\n valueRef.current = val;\n editorRef.current?.setValue(getCssCodeFromStyleObj(val));\n },\n };\n },\n []\n );\n\n return (\n <div\n className={styles.cssCodeEditor}\n style={{\n paddingTop: '10px',\n width: '100%',\n height: '150px',\n border: '1px solid rgba(0,0,0,0.2)',\n position: 'relative',\n borderRadius: '4px',\n }}\n >\n <MonacoEditor\n language=\"css\"\n onDidMount={(editor) => {\n editorRef.current = editor;\n editorRef.current?.setValue(getCssCodeFromStyleObj(valueRef.current || {}));\n }}\n onChange={(newVal) => {\n const styleObj = parseCssToObject(newVal || '');\n const newValObj = styleObj['.node'] || {};\n valueRef.current = newValObj;\n props.onValueChange?.(newValObj);\n }}\n options={{\n tabSize: 2,\n minimap: { enabled: false },\n folding: false,\n lineNumbers: 'off',\n hover: {\n // enabled: false, // ✅ 禁用 hoverWidget\n },\n }}\n />\n </div>\n );\n});\n","import { Button, Card, Collapse, CollapseProps, ConfigProvider } from 'antd';\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport styles from './style.module.scss';\nimport { DimensionInput } from './DimensionInput';\nimport { MarginAndPaddingInput } from './MarginAndPaddingInput';\nimport { FontInput } from './FontInput';\nimport { BorderInput } from './BorderInput';\nimport { BackgroundInput } from './BackgroundInput';\nimport { ShadowInput } from './ShadowInput';\nimport { InputCommonRef } from './type';\nimport { waitReactUpdate } from '@/utils';\nimport { isNil, omitBy } from 'lodash-es';\nimport { CSSCodeEditor, CSSCodeEditorRef } from '../CSSCodeEditor';\nimport { Component, SquareCode } from 'lucide-react';\n\nexport type StyleUIPanelProps = {\n initialVal?: Record<string, string>;\n value?: Record<string, string>;\n onValueChange?: (newVal: Record<string, string>) => void;\n noCard?: boolean;\n};\n\nexport type StyleUIPanelRef = InputCommonRef;\n\nexport const StyleUIPanel = forwardRef<StyleUIPanelRef, StyleUIPanelProps>(\n ({ value, initialVal, onValueChange, noCard }, ref) => {\n const [mode, setMode] = useState<'VISUAL' | 'CODE'>(\n (localStorage.getItem('CHAMN_STYLE_EDITOR_MODE') as any) || 'VISUAL'\n );\n const dimensionRef = useRef<InputCommonRef>(null);\n const marinRef = useRef<InputCommonRef>(null);\n const paddingRef = useRef<InputCommonRef>(null);\n const borderRef = useRef<InputCommonRef>(null);\n const backgroundRef = useRef<InputCommonRef>(null);\n const shadowRef = useRef<InputCommonRef>(null);\n const fontRef = useRef<InputCommonRef>(null);\n const cssCodeEditorRef = useRef<CSSCodeEditorRef>(null);\n\n useEffect(() => {\n localStorage.setItem('CHAMN_STYLE_EDITOR_MODE', mode);\n }, [mode]);\n\n const inputRefs = useMemo(() => {\n return [dimensionRef, marinRef, paddingRef, borderRef, backgroundRef, shadowRef, fontRef];\n }, [dimensionRef, marinRef, paddingRef, borderRef, backgroundRef, shadowRef, fontRef]);\n\n const tempValueRef = useRef<any>(null);\n\n const updateInnerVal = useCallback(\n (newVal: any) => {\n if (!newVal) {\n return;\n }\n // 外部赋值\n tempValueRef.current = newVal;\n if (mode === 'CODE') {\n cssCodeEditorRef.current?.setValue(newVal);\n return;\n }\n\n inputRefs.forEach((ref) => {\n setTimeout(() => {\n ref.current?.setValue(newVal);\n });\n });\n },\n [inputRefs, mode]\n );\n\n const onStyleItemChange = useCallback(\n (val: any) => {\n const newVal = {\n ...(tempValueRef.current || {}),\n ...val,\n };\n tempValueRef.current = newVal;\n\n const finalValue = omitBy(newVal, (value) => isNil(value) || value === '');\n onValueChange?.(finalValue);\n },\n [onValueChange]\n );\n\n useEffect(() => {\n updateInnerVal(tempValueRef.current);\n }, [mode, updateInnerVal]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: updateInnerVal,\n setEmptyValue: () => updateInnerVal({}),\n };\n },\n [updateInnerVal]\n );\n\n const items: CollapseProps['items'] = useMemo(() => {\n return [\n {\n key: 'dimension',\n label: 'Dimension',\n children: (\n <DimensionInput\n ref={dimensionRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'margin',\n label: 'Margin',\n children: (\n <MarginAndPaddingInput\n prefix=\"margin\"\n ref={marinRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'padding',\n label: 'Padding',\n children: (\n <MarginAndPaddingInput\n ref={paddingRef}\n initialValue={initialVal as any}\n prefix=\"padding\"\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n\n {\n key: 'background',\n label: 'Background',\n children: (\n <BackgroundInput\n ref={backgroundRef}\n value={value as any}\n initialValue={initialVal as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'font',\n label: 'Font',\n children: (\n <FontInput\n ref={fontRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'border',\n label: 'Border',\n children: <BorderInput ref={borderRef} initialValue={initialVal as any} onChange={onStyleItemChange} />,\n },\n {\n key: 'shadow',\n label: 'Shadow',\n children: (\n <ShadowInput\n ref={shadowRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n ];\n }, [initialVal, onStyleItemChange, value]);\n\n const coreEditView = (\n <>\n {mode === 'CODE' && (\n <CSSCodeEditor\n onValueChange={(newVal) => {\n tempValueRef.current = newVal;\n onValueChange?.(newVal);\n }}\n ref={cssCodeEditorRef}\n />\n )}\n\n {mode !== 'CODE' && (\n <Collapse\n className={styles.styleUIPanel}\n items={items}\n bordered={false}\n defaultActiveKey={['dimension', 'background', 'padding', 'margin']}\n onChange={async () => {\n await waitReactUpdate();\n // 每次展开需要重新同步值\n updateInnerVal(tempValueRef.current);\n }}\n />\n )}\n </>\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 2,\n },\n }}\n >\n {noCard && coreEditView}\n {!noCard && (\n <Card\n size=\"small\"\n type=\"inner\"\n title={<span style={{ fontSize: '12px' }}>Style</span>}\n extra={\n <Button\n type=\"text\"\n size=\"small\"\n onClick={() => {\n setMode((oldVal) => {\n if (oldVal === 'CODE') {\n return 'VISUAL';\n } else {\n return 'CODE';\n }\n });\n }}\n >\n {mode === 'VISUAL' && <SquareCode size={16} />}\n {mode !== 'VISUAL' && <Component size={16} />}\n </Button>\n }\n style={{\n marginBottom: '10px',\n borderRadius: '8px',\n }}\n >\n {coreEditView}\n </Card>\n )}\n </ConfigProvider>\n );\n }\n);\n","import { CSSSizeInputProps } from '@/component/CSSSizeInput';\nimport { CSetter, CSetterProps } from '../type';\nimport { StyleUIPanel, StyleUIPanelRef } from '@/component/StylePanel';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { formatStyleProperty, styleArr2Obj, styleObjToArr } from '@/utils';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { isEqual } from 'lodash-es';\n\nexport const FastLayoutSetter: CSetter<CSSSizeInputProps> = ({\n value,\n setterContext,\n initialValue,\n ...resetProps\n}: CSetterProps<CSSSizeInputProps & { initialValue?: string }>) => {\n const cssUIRef = useRef<StyleUIPanelRef>(null);\n const node = setterContext.nodeModel;\n const lastNode = useRef<CNode | CRootNode>();\n\n const initialValueInner = useMemo(() => {\n const newStyle = node.value.style || [];\n const { normalProperty } = formatStyleProperty(newStyle);\n return styleArr2Obj(normalProperty);\n }, [node.value.style]);\n\n const updatePanelValue = useCallback(() => {\n lastNode.current = node;\n const newStyle = node.value.style || [];\n const { normalProperty } = formatStyleProperty(newStyle);\n cssUIRef.current?.setValue(styleArr2Obj(normalProperty) || {});\n }, [node]);\n\n useEffect(() => {\n updatePanelValue();\n node.emitter.on('onNodeChange', updatePanelValue);\n node.emitter.on('onReloadPage', updatePanelValue);\n return () => {\n node.emitter.off('onNodeChange', updatePanelValue);\n node.emitter.off('onReloadPage', updatePanelValue);\n };\n }, [node.emitter, node.id, updatePanelValue]);\n\n return (\n <StyleUIPanel\n {...resetProps}\n initialVal={initialValueInner}\n ref={cssUIRef}\n onValueChange={(newNormaCss) => {\n const newStyle = styleObjToArr(newNormaCss);\n const { expressionProperty } = formatStyleProperty(node.value.style || []);\n const newStyleList = [...newStyle, ...expressionProperty];\n if (isEqual(node.value.style, newStyleList)) {\n return;\n }\n node.value.style = newStyleList;\n node.updateValue();\n }}\n />\n );\n};\n","import { ConfigProvider, Radio } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CheckboxGroupProps } from 'antd/es/checkbox';\nimport { useEffect, useMemo } from 'react';\n\nconst emptyValMap = {\n _null_: null,\n _undefined_: undefined,\n};\n\nexport const EmptyValueSetter: CSetter<{ emptyValue?: any }> = ({\n onValueChange,\n setterContext,\n initialValue,\n emptyValue,\n hiddenDefaultOption,\n ...props\n}: CSetterProps<{ emptyValue?: string; hiddenDefaultOption?: boolean }>) => {\n const options = useMemo<CheckboxGroupProps<string>['options']>(() => {\n const tempValue = [\n { label: 'Undefined', value: '_undefined_' },\n { label: 'Null', value: '_null_' },\n ];\n if (emptyValue) {\n if (hiddenDefaultOption) {\n return [{ label: emptyValue, value: emptyValue }];\n } else {\n tempValue.push({ label: emptyValue, value: emptyValue });\n }\n }\n\n return tempValue;\n }, [emptyValue, hiddenDefaultOption]);\n\n const innerValue = useMemo(() => {\n const tempValue = initialValue || props.value;\n if (tempValue === undefined) {\n return '_undefined_';\n }\n\n if (tempValue === null) {\n return '_null_';\n }\n\n return tempValue || '_undefined_';\n }, [initialValue, props.value]);\n\n // 切换初始化时,直接强制重置为 undefined\n useEffect(() => {\n onValueChange?.(emptyValue ?? undefined);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 6,\n },\n }}\n >\n <Radio.Group\n block\n options={options}\n defaultValue={initialValue}\n optionType=\"button\"\n size=\"small\"\n {...props}\n value={innerValue}\n onChange={(e) => {\n let newVal = e.target.value;\n if (['_null_', '_undefined_'].includes(newVal)) {\n newVal = emptyValMap[newVal as keyof typeof emptyValMap];\n }\n onValueChange?.(newVal);\n }}\n />\n </ConfigProvider>\n );\n};\n\nEmptyValueSetter.setterName = '空值设置器';\n","import { CSetter } from './type';\nimport { StringSetter } from './StringSetter';\nimport { NumberSetter } from './NumberSetter';\nimport { ArraySetter } from './ArraySetter';\nimport { ShapeSetter } from './ShapeSetter';\nimport { ExpressionSetter } from './ExpressionSetter';\nimport { BooleanSetter } from './BooleanSetter';\nimport { SelectSetter } from './SelectSetter';\nimport { JSONSetter } from './JSONSetter';\nimport { FunctionSetter } from './FunctionSetter';\nimport { TextAreaSetter } from './TextAreaSetter';\nimport { CSSValueSetter } from './CSSValueSetter';\nimport { ColorSetter } from './ColorSetter';\nimport { AntDColorSetter } from './AntDColorSetter';\nimport { SliderSetter } from './SliderSetter';\nimport { RadioGroupSetter } from './RadioGroupSetter';\nimport { CSSSizeSetter } from './CSSSizeSetter';\nimport { FastLayoutSetter } from './FastLayoutSetter';\nimport { EmptyValueSetter } from './EmptyValueSetter';\n\nexport const BUILD_IN_SETTER_MAP = {\n FastLayoutSetter,\n StringSetter,\n ArraySetter,\n ShapeSetter,\n NumberSetter,\n ExpressionSetter,\n BooleanSetter,\n SelectSetter,\n JSONSetter,\n FunctionSetter,\n TextAreaSetter,\n CSSValueSetter,\n ColorSetter,\n SliderSetter,\n AntDColorSetter,\n RadioGroupSetter,\n CSSSizeSetter,\n EmptyValueSetter,\n} as Record<string, CSetter>;\n\nexport default BUILD_IN_SETTER_MAP;\n\nexport * from './type';\n","import React, { isValidElement, ReactNode, useEffect, useState } from 'react';\nimport styles from './style.module.scss';\nimport { Alert, Popover, Tooltip } from 'antd';\nimport { CFormContext } from '../context';\nimport clsx from 'clsx';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\n\nexport type CFiledChildProps = {\n onValueChange?: (val: any) => void;\n initialValue?: any;\n value?: any;\n};\n\nexport type CFieldProps = {\n children: React.ReactNode;\n label?: string;\n labelWidth?: string;\n labelAlign?: 'start' | 'center' | 'end';\n tips?: ReactNode | (() => ReactNode);\n name: string;\n condition?: (formState: Record<string, any>) => boolean;\n onConditionValueChange?: (val: boolean) => void;\n /** 不做任何包裹, 不会渲染 switchSetter */\n noStyle?: boolean;\n /** 隐藏 label, 会渲染 switchSetter */\n hiddenLabel?: boolean;\n valueChangeEventName?: string;\n formatEventValue?: (val: any) => any;\n rules?: { validator?: (value: any) => Promise<boolean | undefined>; required?: boolean; msg?: string }[];\n};\n\nexport const CField = (props: CFieldProps) => {\n const { children, label, tips, name, hiddenLabel } = props;\n const [errorInfo, setErrorInfo] = useState({\n isPass: true,\n errorMsg: '',\n });\n let labelView: ReactNode = label;\n const { formState, updateContext, updateConditionConfig } = React.useContext(CFormContext);\n useEffect(() => {\n if (props.condition) {\n updateConditionConfig(name, props.condition);\n }\n }, [name, props.condition, updateConditionConfig]);\n\n useEffect(() => {\n const condition = props.condition ?? (() => true);\n const canRender = condition(formState);\n props.onConditionValueChange?.(canRender);\n }, [formState, props]);\n\n if (tips) {\n let newTip: any = tips;\n if (typeof tips === 'function') {\n newTip = tips();\n }\n labelView = (\n <Tooltip\n title={<span style={{ color: 'rgba(255,255,255,0.9', fontSize: '12px' }}>{newTip}</span>}\n color=\"rgba(50,50,50,0.8)\"\n >\n <span className={styles.tipsLabel}>{label}</span>\n </Tooltip>\n );\n }\n let newChildren = children;\n\n if (isValidElement(children)) {\n const eventName = props.valueChangeEventName ?? 'onValueChange';\n const extraProps: any = {\n [eventName]: async (val: any) => {\n let tempVal = val;\n if (props.formatEventValue) {\n tempVal = props.formatEventValue(val);\n }\n\n // 先检查数据是否合法\n const rules = props.rules || [];\n const checkResult = await checkValue(props.name, tempVal, rules);\n if (!checkResult.isPass) {\n setErrorInfo(checkResult);\n } else {\n setErrorInfo({\n isPass: true,\n errorMsg: '',\n });\n }\n updateContext(\n {\n ...formState,\n [name]: tempVal,\n },\n [name]\n );\n },\n };\n\n extraProps.value = (formState as any)[name];\n newChildren = React.cloneElement(children, extraProps);\n }\n const condition = props.condition ?? (() => true);\n const canRender = condition(formState);\n if (!canRender) {\n return null;\n }\n if (props.noStyle) {\n return <>{newChildren}</>;\n }\n\n return (\n <div\n className={clsx([styles.fieldBox, !errorInfo.isPass && styles.error])}\n style={{\n alignItems: props.labelAlign ?? 'center',\n }}\n >\n {hiddenLabel !== true && (\n <div\n className={styles.label}\n style={{\n width: props.labelWidth ?? '60px',\n }}\n >\n {labelView}\n </div>\n )}\n <div className={styles.content}>{newChildren}</div>\n {!errorInfo.isPass && (\n <Popover content={<Alert message={errorInfo.errorMsg} type=\"error\" />}>\n <QuestionCircleOutlined className={styles.errorTipIcon} />\n </Popover>\n )}\n </div>\n );\n};\n\nconst checkValue = async (key: string, value: any, rules: CFieldProps['rules'] = []) => {\n let pass = true;\n let errorMsg = '';\n\n for (let i = 0; i < rules.length; i++) {\n if (rules[i].required && !value) {\n pass = false;\n errorMsg = `${key} is required.`;\n break;\n }\n if (rules[i].validator) {\n try {\n const isPass = await rules[i].validator?.(value);\n if (!isPass) {\n pass = false;\n errorMsg = rules[i]?.msg || `${key} is illegal `;\n break;\n }\n } catch (e) {\n pass = false;\n errorMsg = `${String(e)}`;\n break;\n }\n }\n }\n\n return {\n isPass: pass,\n errorMsg,\n };\n};\n","import React, { Ref } from 'react';\nimport { CustomSchemaFormInstance } from './index';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CForm } from './components/Form';\nimport { CFormContextData } from './components/Form/context';\n\nexport type ContextState = Record<string, any>;\n\nexport type CCustomSchemaFormContextData = {\n onSetterChange: (keyPaths: string[], setterName: string) => void;\n /** 存储 field 默认的 setter 类型*/\n defaultSetterConfig: Record<string, { name: string; setter: string }>;\n /** schema 中的全局 setter map 配置*/\n customSetterMap: CFormContextData['customSetterMap'];\n formRef?: Ref<CustomSchemaFormInstance | CForm>;\n pluginCtx?: CPluginCtx;\n /** 当前编辑节点的 id */\n nodeId?: string;\n};\n\nexport const CCustomSchemaFormContext = React.createContext<CCustomSchemaFormContextData>({\n defaultSetterConfig: {},\n onSetterChange: () => {},\n customSetterMap: {},\n});\n","import React, { useContext, useEffect } from 'react';\nimport { SetterObjType } from '@chamn/model';\nimport InnerSetters from '../Setters/index';\nimport { CFieldProps } from '../Form/Field';\nimport { CCustomSchemaFormContext } from '../../context';\nimport { CFormContext } from '../Form/context';\nimport { CSetter, CSetterProps } from '../Setters/type';\nimport { getDefaultSetterByValue } from '../../utils';\n\nexport type SetterSwitcherProps = {\n // 支持的 setter 列表\n setters: SetterObjType[];\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap?: Record<string, CSetter>;\n keyPaths: string[];\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n style?: React.CSSProperties;\n /** 是否实用 CFile 包裹 */\n useField?: boolean;\n} & Omit<CFieldProps, 'children'>;\n\n/** 用于渲染切换设置器 */\nexport const SetterSwitcherCore = ({\n setters,\n keyPaths,\n currentSetter,\n setCurrentSetter,\n customSetterMap: customSetterMapProp,\n ...props\n}: Pick<SetterSwitcherProps, 'setters' | 'keyPaths'> & {\n value?: any;\n setterContext?: Partial<CSetterProps['setterContext']>;\n currentSetter: SetterObjType;\n customSetterMap?: any;\n setCurrentSetter: (setter: SetterObjType) => void;\n}) => {\n const { customSetterMap } = useContext(CFormContext);\n const { defaultSetterConfig } = useContext(CCustomSchemaFormContext);\n const allSetterMap = {\n ...InnerSetters,\n ...(customSetterMapProp || {}),\n ...customSetterMap,\n };\n\n useEffect(() => {\n const currentSetterName = defaultSetterConfig[keyPaths.join('.')]?.setter || '';\n const devConfigSetter = setters.find((el) => el.componentName === currentSetterName);\n const st = devConfigSetter || getDefaultSetterByValue(props.value, setters) || setters[0];\n setCurrentSetter(st);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let CurrentSetterComp = null;\n if (currentSetter?.componentName) {\n CurrentSetterComp = allSetterMap[currentSetter?.componentName] || currentSetter.component;\n }\n if (!CurrentSetterComp) {\n CurrentSetterComp = function EmptySetter() {\n return (\n <div\n style={{\n backgroundColor: 'whitesmoke',\n margin: '5px 0',\n padding: '5px',\n borderRadius: '2px',\n color: 'gray',\n }}\n >{`${currentSetter?.componentName} is not found.`}</div>\n );\n };\n }\n\n return <CurrentSetterComp {...props} />;\n};\n","import React, { useContext, useMemo, useState } from 'react';\nimport { SetterObjType, SetterTypeEnum } from '@chamn/model';\nimport InnerSetters from '../Setters/index';\nimport { CField, CFieldProps } from '../Form/Field';\nimport { Collapse, Dropdown, MenuProps } from 'antd';\nimport { SwapOutlined } from '@ant-design/icons';\nimport styles from './style.module.scss';\nimport { CCustomSchemaFormContext } from '../../context';\nimport { CFormContext } from '../Form/context';\nimport { CSetter } from '../Setters/type';\nimport { SetterSwitcherCore } from './core';\n\nexport type SetterSwitcherProps = {\n // 支持的 setter 列表\n setters: SetterObjType[];\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap?: Record<string, CSetter>;\n keyPaths: string[];\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n style?: React.CSSProperties;\n /** 是否实用 CFile 包裹 */\n useField?: boolean;\n} & Omit<CFieldProps, 'children'>;\n\nexport const SetterSwitcher = ({\n setters: outerSetter,\n keyPaths,\n condition,\n useField = true,\n ...props\n}: SetterSwitcherProps) => {\n const [visible, setVisible] = useState(true);\n const { customSetterMap } = useContext(CFormContext);\n const { onSetterChange, defaultSetterConfig, formRef, pluginCtx, nodeId } = useContext(CCustomSchemaFormContext);\n const allSetterMap = {\n ...InnerSetters,\n ...customSetterMap,\n };\n // 统一添加一些内置的 setter\n const setters = useMemo(() => {\n return [\n ...outerSetter,\n {\n componentName: SetterTypeEnum.EMPTY_VALUE_SETTER,\n },\n ];\n }, [outerSetter]);\n const [currentSetter, setCurrentSetter] = useState<SetterObjType>(() => {\n const currentSetterName = defaultSetterConfig[keyPaths.join('.')]?.setter || '';\n const devConfigSetter = setters.find((el) => el.componentName === currentSetterName);\n return devConfigSetter || setters[0];\n });\n\n const menuItems = setters.map((setter) => {\n const setterName = setter?.componentName || '';\n const setterRuntime = allSetterMap[setterName];\n return {\n key: setter.componentName,\n label: setterRuntime?.setterName || setter.componentName,\n };\n });\n\n const switcher = useMemo(() => {\n const onChooseSetter: MenuProps['onClick'] = ({ key }) => {\n const targetSetter = setters.find((setter) => setter.componentName === key);\n if (targetSetter) {\n setCurrentSetter(targetSetter);\n onSetterChange?.(keyPaths, targetSetter.componentName);\n }\n };\n if (menuItems.length === 1) {\n return null;\n }\n\n return (\n <div\n className={styles.switchBtn}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Dropdown\n trigger={['click']}\n menu={{\n selectable: true,\n items: menuItems,\n onClick: onChooseSetter,\n defaultSelectedKeys: [currentSetter?.componentName || ''],\n }}\n >\n <SwapOutlined />\n </Dropdown>\n </div>\n );\n }, [menuItems, currentSetter?.componentName, setters, onSetterChange, keyPaths]);\n\n const setterProps = useMemo(() => {\n let newProps = {\n ...(currentSetter?.props || {}),\n initialValue: currentSetter?.initialValue,\n };\n const target = setters.find((el) => el.componentName === currentSetter?.componentName);\n if (target) {\n newProps = {\n ...newProps,\n ...target.props,\n };\n }\n return newProps;\n }, [setters, currentSetter]);\n\n const [collapseHeaderExt, setCollapseHeaderExt] = useState<any>([]);\n\n let bodyView: any = null;\n const hiddenLabel = currentSetter?.hiddenLabel === true;\n\n const labelWidth = currentSetter?.labelWidth;\n const labelAlign = currentSetter?.labelAlign || 'center';\n const collapse = (currentSetter?.props as any)?.collapse;\n const specialSetter = ['ArraySetter', 'ShapeSetter'].includes(currentSetter?.componentName);\n const setterContext = useMemo(\n () => ({\n formRef,\n pluginCtx,\n keyPaths: [...keyPaths],\n label: props.label,\n setCollapseHeaderExt: specialSetter ? setCollapseHeaderExt : undefined,\n nodeModel: pluginCtx?.pageModel.getNode(nodeId) as any,\n }),\n [formRef, keyPaths, nodeId, pluginCtx, props.label, specialSetter]\n );\n const filedView = useMemo(() => {\n const customSetterMap = {\n ...(props.customSetterMap || {}),\n };\n\n const cFiledProps = {\n labelWidth,\n labelAlign,\n hiddenLabel,\n condition,\n noStyle: specialSetter ? true : false,\n onConditionValueChange: (val: boolean) => {\n setVisible(val);\n },\n };\n\n if (useField === false) {\n return (\n <SetterSwitcherCore\n setters={setters}\n keyPaths={keyPaths}\n currentSetter={currentSetter}\n setCurrentSetter={setCurrentSetter}\n {...props}\n {...setterProps}\n customSetterMap={customSetterMap}\n setterContext={setterContext}\n />\n );\n }\n return (\n <CField {...cFiledProps} {...props}>\n <SetterSwitcherCore\n setters={setters}\n keyPaths={keyPaths}\n currentSetter={currentSetter}\n setCurrentSetter={setCurrentSetter}\n {...setterProps}\n customSetterMap={customSetterMap}\n setterContext={setterContext}\n />\n </CField>\n );\n }, [\n condition,\n currentSetter,\n hiddenLabel,\n keyPaths,\n labelAlign,\n labelWidth,\n props,\n setterContext,\n setterProps,\n setters,\n specialSetter,\n useField,\n ]);\n\n const renderCollapse = useMemo(\n function renderCollapse() {\n const collapseObj = typeof collapse === 'object' ? collapse : {};\n\n const CollapseComponent = (extraHeaderContent?: React.ReactNode) => (\n <Collapse\n bordered={false}\n {...collapseObj}\n style={{\n marginBottom: '10px',\n flex: 1,\n }}\n defaultActiveKey={[collapseObj.open ? props.name : '']}\n items={[\n {\n key: props.name,\n label: (\n <div className={styles.collapseHeader}>\n <span style={{ flex: 1 }}>{props.label}</span>\n {extraHeaderContent}\n {switcher}\n </div>\n ),\n children: filedView,\n },\n ]}\n />\n );\n\n return CollapseComponent;\n },\n [collapse, props.name, props.label, switcher, filedView]\n );\n\n if (['ArraySetter'].includes(currentSetter?.componentName || '')) {\n bodyView = renderCollapse(collapseHeaderExt);\n } else if (['ShapeSetter'].includes(currentSetter?.componentName || '')) {\n bodyView = (\n <div className={styles.shapeFieldBox}>\n {props.prefix ?? null}\n {(currentSetter?.props as any)?.collapse === false && <div style={{ width: '100%' }}>{filedView}</div>}\n {collapse !== false && renderCollapse()}\n {props.suffix ?? null}\n </div>\n );\n } else {\n bodyView = (\n <div style={{ display: 'flex', alignItems: labelAlign, paddingBottom: '8px' }}>\n {props.prefix ?? null}\n {filedView}\n {switcher}\n {props.suffix ?? null}\n </div>\n );\n }\n\n return <div style={{ display: visible ? 'block' : 'none' }}>{bodyView}</div>;\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React, { Ref } from 'react';\nimport { CMaterialPropsType, getMTitleTip, getMTitle, isSpecialMaterialPropType } from '@chamn/model';\nimport { CForm } from './components/Form';\nimport { SetterSwitcher } from './components/SetterSwitcher';\nimport { getSetterList } from './utils';\nimport styles from './style.module.scss';\nimport { ConfigProvider } from 'antd';\nimport { CCustomSchemaFormContext } from './context';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CFormContextData } from './components/Form/context';\n\nexport type CustomSchemaFormInstance = CForm;\n\nexport type CustomSchemaFormProps = {\n nodeId?: string;\n pluginCtx?: CPluginCtx;\n initialValue: Record<string, any>;\n properties: CMaterialPropsType<any>;\n onValueChange?: (val: any) => void;\n onSetterChange: (keyPaths: string[], setterName: string) => void;\n /** 存储每个字段上次使用的 setter */\n defaultSetterConfig: Record<string, { name: string; setter: string }>;\n customSetterMap?: CFormContextData['customSetterMap'];\n};\n\nconst CustomSchemaFormCore = (props: CustomSchemaFormProps, ref: Ref<CustomSchemaFormInstance | CForm>) => {\n const {\n properties: originProperties,\n initialValue,\n onValueChange,\n onSetterChange,\n defaultSetterConfig,\n pluginCtx,\n customSetterMap,\n } = props;\n const properties: CMaterialPropsType = originProperties;\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig,\n // 设置全局 setter map\n customSetterMap,\n onSetterChange,\n formRef: ref,\n pluginCtx: pluginCtx,\n nodeId: props.nodeId,\n }}\n >\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div className={styles.CFromRenderBox}>\n <CForm\n ref={ref as any}\n name=\"root-form\"\n initialValue={initialValue}\n customSetterMap={customSetterMap}\n onValueChange={(val) => {\n onValueChange?.(val);\n }}\n >\n {properties.map((property) => {\n if (isSpecialMaterialPropType(property)) {\n console.log('Current not Support type config for props, wait future....');\n } else {\n const title = getMTitle(property.title);\n const tip = getMTitleTip(property.title) || property?.description;\n const setterList = getSetterList(property.setters);\n const keyPaths = [property.name];\n return (\n <SetterSwitcher\n key={property.name}\n condition={property.condition}\n keyPaths={keyPaths}\n setters={setterList}\n label={title}\n name={property.name || ''}\n tips={tip}\n />\n );\n }\n })}\n </CForm>\n </div>\n </ConfigProvider>\n </CCustomSchemaFormContext.Provider>\n );\n};\n\nexport const CustomSchemaForm = React.forwardRef(CustomSchemaFormCore);\n\nexport * from './components/SetterSwitcher';\nexport * from './components/Setters';\n","import { TreeDataNode } from 'antd';\n\nexport const getParentKey = (key: React.Key, tree: TreeDataNode[]): React.Key => {\n let parentKey: React.Key;\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (node.children) {\n if (node.children.some((item) => item.key === key)) {\n parentKey = node.key;\n } else if (getParentKey(key, node.children)) {\n parentKey = getParentKey(key, node.children);\n }\n }\n }\n return parentKey!;\n};\n\nexport const getNodeInfo = (key: string, tree: TreeDataNode[]): TreeDataNode | null => {\n const traverse = (nodes: TreeDataNode[]): TreeDataNode | null => {\n for (const node of nodes) {\n if (node.key === key) {\n return node;\n }\n if (node.children?.length) {\n const result = traverse(node.children);\n if (result) {\n return result;\n }\n }\n }\n return null;\n };\n\n return traverse(tree);\n};\n","import { Modal, TreeSelect } from 'antd';\nimport { CPage } from '@chamn/model';\nimport { useRef, useMemo } from 'react';\nimport { transformPageSchemaToTreeData, traverseTree } from '@/plugins/OutlineTree/util';\nimport { getNodeInfo } from '../SelectNodeByTree/util';\n\ninterface SelectNodeModalProps {\n open: boolean;\n onCancel: () => void;\n onOk: (data: { nodeId: string; title: string }) => void;\n pageModel: CPage;\n value?: string;\n}\n\nexport const SelectNodeModal = (props: SelectNodeModalProps) => {\n const { open, onCancel, onOk, pageModel, value } = props;\n const boxDomRef = useRef<HTMLDivElement>(null);\n\n const treeData = useMemo(() => {\n if (!pageModel) return;\n const treeData = transformPageSchemaToTreeData(pageModel?.export(), pageModel);\n traverseTree(treeData, (el: any) => {\n el.sourceData = {\n title: el.title,\n value: el.value,\n };\n el.value = el.key;\n el.title = <div style={{ flexWrap: 'nowrap', display: 'flex', width: '150px' }}>{el.title}</div>;\n\n return false;\n });\n return treeData;\n }, [pageModel]);\n\n return (\n <Modal open={open} onCancel={onCancel} title=\"选择节点\" onOk={() => onOk({ nodeId: value || '', title: '' })}>\n <div ref={boxDomRef} style={{ width: '100%' }}>\n <TreeSelect\n virtual={false}\n showSearch\n style={{ width: '100%' }}\n value={value}\n allowClear\n onClear={() => {\n onOk({\n nodeId: '',\n title: '',\n });\n }}\n filterTreeNode={(inputValue, treeNode: any) => {\n return treeNode.sourceData?.title.toLowerCase().indexOf(inputValue.toLowerCase()) > -1;\n }}\n getPopupContainer={() => boxDomRef.current!}\n treeDefaultExpandAll\n onChange={(newVal) => {\n const nodeInfo = getNodeInfo(newVal, (treeData as any) ?? []);\n onOk({\n nodeId: newVal,\n title: (nodeInfo as any)?.sourceData?.title,\n });\n }}\n treeData={treeData}\n />\n </div>\n </Modal>\n );\n};\n","import { Button } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { CPage } from '@chamn/model';\nimport { SelectNodeModal } from './modal';\n\nexport const SelectNodeByTree = (props: {\n pageModel: CPage;\n onChange?: (data: { nodeId: string; title: string }) => void;\n value?: any;\n}) => {\n const [modalOpen, setModalOpen] = useState(false);\n const [innerValue, setInnerValue] = useState<{ nodeId: string; title: string }>(props.value);\n\n const nodeTitle = useMemo(() => {\n const nodeInfo = props.pageModel.getNode(innerValue?.nodeId || props.value);\n\n if (nodeInfo) {\n return nodeInfo.value.title || nodeInfo.material?.value.title || innerValue?.title || '';\n }\n return '';\n }, [props.pageModel, props?.value, innerValue?.nodeId, innerValue?.title]);\n\n return (\n <>\n <Button\n style={{\n width: '200px',\n }}\n onClick={() => setModalOpen(true)}\n >\n {nodeTitle ?? '选择节点'}\n </Button>\n <SelectNodeModal\n open={modalOpen}\n onCancel={() => setModalOpen(false)}\n onOk={(data) => {\n props.onChange?.(data);\n setInnerValue(data);\n setModalOpen(false);\n }}\n pageModel={props.pageModel}\n value={innerValue?.nodeId || props.value}\n />\n </>\n );\n};\n","import { CPage } from '@chamn/model';\nimport { SelectNodeByTree } from '../SelectNodeByTree';\nimport { Input, Space } from 'antd';\n\nexport const SelectNodeState = (props: {\n value?: {\n nodeId: string;\n keyPath: string;\n };\n pageModel: CPage;\n onChange?: (data: { nodeId: string; keyPath: string }) => void;\n}) => {\n return (\n <div>\n <Space>\n <SelectNodeByTree\n pageModel={props.pageModel}\n value={props.value}\n onChange={(data) => {\n props.onChange?.({\n nodeId: data.nodeId,\n keyPath: props.value?.keyPath || '',\n });\n }}\n />\n <Input\n style={{\n width: 250,\n }}\n value={props.value?.keyPath}\n onChange={(e) => {\n const { value: inputValue } = e.target;\n props.onChange?.({\n nodeId: props.value?.nodeId || '',\n keyPath: String(inputValue),\n });\n }}\n placeholder=\"variable name. support '.'\"\n />\n </Space>\n </div>\n );\n};\n","export function isValidJSVariableName(name: string) {\n // 1. 使用正则表达式验证变量名规则\n const identifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n if (!identifierRegex.test(name)) {\n return false;\n }\n\n // 2. 检测是否为保留关键字\n try {\n new Function(`let ${name};`);\n return true;\n } catch {\n return false;\n }\n}\n","import {\n AssignValueType,\n getRandomStr,\n LogicType,\n TLogicAssignValueItem,\n TLogicCallNodeMethodItem,\n TLogicJumpLinkItem,\n TLogicRequestAPIItem,\n TLogicRunCodeItem,\n} from '@chamn/model';\n\nexport const DEFAULT_NODE_LIST = [\n {\n key: LogicType.ASSIGN_VALUE,\n name: '赋值/创建变量',\n getInitData: () => {\n const id = getRandomStr();\n const assignValueItem: TLogicAssignValueItem = {\n id: id,\n type: LogicType.ASSIGN_VALUE,\n valueType: AssignValueType.STATE,\n currentValue: '',\n targetValueName: '',\n };\n\n return assignValueItem;\n },\n },\n {\n key: LogicType.JUMP_LINK,\n name: '页面跳转',\n getInitData: () => {\n const id = getRandomStr();\n const assignValueItem: TLogicJumpLinkItem = {\n id: id,\n type: LogicType.JUMP_LINK,\n link: '',\n };\n\n return assignValueItem;\n },\n },\n {\n key: LogicType.REQUEST_API,\n name: '请求数据',\n getInitData: () => {\n const id = getRandomStr();\n const requestAPIItem: TLogicRequestAPIItem = {\n id: id,\n type: LogicType.REQUEST_API,\n apiPath: '',\n method: 'GET',\n header: {},\n query: {},\n responseVarName: `responseData_${id}`,\n afterSuccessResponse: [],\n afterFailedResponse: [\n {\n id: getRandomStr(),\n type: LogicType.RUN_CODE,\n value: 'console.error(\"API request failed:\", $$response)',\n },\n ],\n };\n\n return requestAPIItem;\n },\n },\n {\n key: LogicType.CALL_NODE_METHOD,\n name: '调用组件方法',\n getInitData: () => {\n const id = getRandomStr();\n\n const callNodeMethodItem: TLogicCallNodeMethodItem = {\n id: id,\n type: LogicType.CALL_NODE_METHOD,\n nodeId: '',\n methodName: '',\n args: [],\n returnVarName: '',\n };\n\n return callNodeMethodItem;\n },\n },\n {\n key: LogicType.RUN_CODE,\n name: '运行代码',\n getInitData: () => {\n const id = getRandomStr();\n\n const runCodeItem: TLogicRunCodeItem = {\n id: id,\n type: LogicType.RUN_CODE,\n name: `run_code_${id}`,\n value: `console.log('hello world');`,\n };\n\n return runCodeItem;\n },\n },\n];\n","import { Popover } from 'antd';\nimport { useState } from 'react';\nimport { DEFAULT_NODE_LIST } from './initData';\nimport { TLogicItemHandlerFlow } from '@chamn/model';\n\nexport const CreateNewNodePopup = (props: {\n title?: string;\n children: React.ReactNode;\n disabled?: boolean;\n style?: React.CSSProperties;\n onNewNodeAdd: (data: TLogicItemHandlerFlow[number]) => void;\n}) => {\n const { title = 'Next Step' } = props;\n\n const [open, setOpen] = useState(false);\n\n const handleOpenChange = (newOpen: boolean) => {\n setOpen(newOpen);\n };\n\n const nodeList = DEFAULT_NODE_LIST.map((el) => {\n return (\n <div\n onClick={() => {\n setOpen(false);\n props.onNewNodeAdd?.(el.getInitData());\n }}\n key={el.key}\n style={{\n padding: '10px 20px',\n border: '1px solid #c3c3c3b8',\n borderRadius: '4px',\n textAlign: 'center',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {el.name}\n </div>\n );\n });\n\n // 禁用弹窗\n if (props.disabled) {\n return props.children;\n }\n\n return (\n <Popover\n onOpenChange={handleOpenChange}\n open={open}\n trigger={'hover'}\n content={\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n width: '300px',\n gap: '8px',\n justifyContent: 'space-between',\n }}\n >\n {nodeList.map((el) => (\n <div\n key={el.key}\n style={{\n flex: '0 0 calc(50% - 4px)',\n }}\n >\n {el}\n </div>\n ))}\n </div>\n }\n title={title}\n >\n {props.children}\n </Popover>\n );\n};\n","import { Handle, HandleProps, Position } from '@xyflow/react';\nimport { INPUT_HANDLE_ID } from '../../config';\n\nexport const InputHandle = (props: Partial<HandleProps>) => {\n return <Handle type=\"target\" id={INPUT_HANDLE_ID} position={Position.Top} {...props} />;\n};\n","import { Handle, HandleProps, Position } from '@xyflow/react';\nimport { OUTPUT_HANDLE_ID } from '../../config';\n\nexport const OutputHandle = (props: Partial<HandleProps>) => {\n return <Handle type=\"source\" position={Position.Bottom} id={OUTPUT_HANDLE_ID} {...props} />;\n};\n","import { Card, CardProps } from 'antd';\nimport { OUTPUT_HANDLE_ID, REACT_FLOW_DRAG_CLASS_NAME } from '../../config';\nimport { HolderOutlined } from '@ant-design/icons';\nimport styles from './style.module.scss';\nimport { CreateNewNodePopup } from '../CreateNewNodePopup';\nimport { InputHandle } from '../InputHandle';\nimport { OutputHandle } from '../OutputHandle';\nimport { NodeProps, useReactFlow } from '@xyflow/react';\nimport { getNewNodePosInfo, UseNodeHasConnected } from '../../util';\nimport clsx from 'clsx';\n\nexport const NodeCard = ({\n nodeProps,\n customHandle,\n handleNewNodeAdd: outHandleNewNodeAdd,\n useCardStyle,\n outputHandle,\n inputHandle,\n ...props\n}: CardProps & {\n inputHandle?: boolean;\n outputHandle?: boolean;\n useCardStyle?: boolean;\n nodeProps: NodeProps;\n customHandle?: React.ReactNode;\n handleNewNodeAdd?: (newNodeData: any) => void;\n}) => {\n const { data, isConnectable, selected } = nodeProps;\n const reactFlowInstance = useReactFlow();\n const outputNodeHasConnected = UseNodeHasConnected(data, OUTPUT_HANDLE_ID);\n\n const handleNewNodeAdd = (newNodeData: any) => {\n const currentNode = reactFlowInstance.getNode(String(data.id));\n if (!currentNode) {\n console.error(`Not found node by id ${data.id}`);\n return;\n }\n const { newEdge, newNode } = getNewNodePosInfo(currentNode, newNodeData);\n // 更新流程图\n reactFlowInstance.addNodes(newNode);\n reactFlowInstance.addEdges(newEdge);\n };\n\n let customHandleView: any = (\n <>\n {inputHandle !== false && <InputHandle isConnectable={isConnectable} />}\n {outputHandle !== false && (\n <CreateNewNodePopup\n style={{\n position: 'absolute',\n left: '50%',\n bottom: '0',\n }}\n onNewNodeAdd={(data) => {\n /** 外部有自定义 handle 时,取消事件触发 */\n if (customHandle) {\n return;\n }\n if (outHandleNewNodeAdd) {\n outHandleNewNodeAdd(data);\n } else {\n handleNewNodeAdd(data);\n }\n }}\n disabled={outputNodeHasConnected}\n >\n <OutputHandle\n isConnectable={isConnectable}\n style={{\n width: '10px',\n height: '10px',\n }}\n />\n </CreateNewNodePopup>\n )}\n </>\n );\n\n if (customHandle) {\n customHandleView = customHandle;\n }\n\n if (useCardStyle === false) {\n return (\n <div className={clsx([selected ? styles.selectStatus : ''])}>\n <div className={REACT_FLOW_DRAG_CLASS_NAME}>{props.children}</div>\n {customHandleView}\n </div>\n );\n }\n\n return (\n <Card\n {...props}\n classNames={{\n header: REACT_FLOW_DRAG_CLASS_NAME,\n }}\n className={clsx([selected ? styles.selectStatus : ''])}\n styles={{\n body: {\n cursor: 'default',\n },\n }}\n extra={\n <div\n style={{\n display: 'flex',\n }}\n >\n {props.extra}\n <div className={styles.dragBox}>\n <HolderOutlined />\n </div>\n </div>\n }\n >\n {props.children}\n <div className={clsx([REACT_FLOW_DRAG_CLASS_NAME, styles.l])}></div>\n <div className={clsx([REACT_FLOW_DRAG_CLASS_NAME, styles.r])}></div>\n <div className={clsx([REACT_FLOW_DRAG_CLASS_NAME, styles.b])}></div>\n {customHandleView}\n </Card>\n );\n};\n","import { createContext, useContext } from 'react';\nimport { CNode, CPage } from '@chamn/model';\nimport { CPluginCtx } from '@/core/pluginManager';\n\ninterface ActionFlowContextType {\n pluginCtx: CPluginCtx;\n pageModel: CPage;\n /** 数据有改变时,包含节点内部的数据 */\n onDataChange: () => void;\n /** 当前节点 */\n nodeModel: CNode | null;\n}\n\nexport const ActionFlowContext = createContext<ActionFlowContextType>({\n pluginCtx: null as any,\n pageModel: null as any,\n onDataChange: () => {},\n nodeModel: null,\n});\n\nexport const useActionFlow = () => {\n const context = useContext(ActionFlowContext);\n if (!context) {\n throw new Error('useActionFlow must be used within ActionFlowProvider');\n }\n return context;\n};\n","import { useContext, useMemo, useState } from 'react';\nimport { SetterObjType, SetterType } from '@chamn/model';\nimport { Dropdown, MenuProps } from 'antd';\nimport { SwapOutlined } from '@ant-design/icons';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { getSetterList } from '@/component/CustomSchemaForm/utils';\nimport styles from './style.module.scss';\nimport { CField, CFieldProps } from '../Form/Field';\nimport { SetterSwitcherCore } from '../SetterSwitcher/core';\n\nexport const CFiledWithSwitchSetter = (\n props: Omit<CFieldProps, 'children'> & {\n setterList: SetterType[];\n onSetterChange?: (setterName: string) => void;\n defaultSetterName?: string;\n }\n) => {\n const { setterList: setters, defaultSetterName, ...restProps } = props;\n\n const setterList = useMemo(() => {\n return getSetterList(setters);\n }, [setters]);\n\n const { onSetterChange, defaultSetterConfig, pluginCtx, nodeId, customSetterMap } =\n useContext(CCustomSchemaFormContext);\n const keyPaths = [props.name];\n\n const [currentSetter, setCurrentSetter] = useState<SetterObjType>(() => {\n const currentSetterName = defaultSetterConfig[keyPaths.join('.')]?.setter || defaultSetterName || '';\n return [...setterList].find((el) => el.componentName === currentSetterName) || setterList[0];\n });\n\n const menuItems = setterList.map((setter) => {\n const setterName = setter?.componentName || '';\n const setterRuntime = ({} as any)[setterName];\n return {\n key: setter.componentName,\n label: setterRuntime?.setterName || setter.componentName,\n };\n });\n\n const onChooseSetter: MenuProps['onClick'] = ({ key }) => {\n const targetSetter = setterList.find((setter) => setter.componentName === key);\n if (targetSetter) {\n setCurrentSetter(targetSetter);\n onSetterChange?.(keyPaths, targetSetter.componentName);\n props.onSetterChange?.(targetSetter.componentName);\n }\n };\n\n let switcher: any = (\n <div\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className={styles.switchBtn}\n >\n <Dropdown\n trigger={['click']}\n menu={{\n selectable: true,\n items: menuItems,\n onClick: onChooseSetter,\n defaultSelectedKeys: [currentSetter?.componentName || ''],\n }}\n >\n <SwapOutlined />\n </Dropdown>\n </div>\n );\n\n if (menuItems.length === 1) {\n switcher = null;\n }\n\n const setterProps = useMemo(() => {\n let newProps = {\n ...(currentSetter?.props || {}),\n initialValue: currentSetter?.initialValue,\n };\n const target = setterList.find((el) => el.componentName === currentSetter?.componentName);\n if (target) {\n newProps = {\n ...newProps,\n ...target.props,\n };\n }\n return newProps;\n }, [setterList, currentSetter]);\n\n return (\n <div\n className={styles.fieldBox}\n style={{\n alignItems: props.labelAlign ?? 'center',\n }}\n >\n <CField {...restProps}>\n <SetterSwitcherCore\n {...setterProps}\n setters={setterList}\n keyPaths={keyPaths}\n currentSetter={currentSetter}\n customSetterMap={customSetterMap}\n setCurrentSetter={setCurrentSetter}\n setterContext={{\n pluginCtx,\n keyPaths: [props.name],\n label: props.label,\n nodeModel: pluginCtx?.pageModel.getNode(nodeId) as any,\n }}\n />\n </CField>\n {switcher}\n </div>\n );\n};\n","import { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { AssignValueType, DEV_CONFIG_KEY, TLogicAssignValueItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\nimport { Radio } from 'antd';\nimport { useEffect, useRef, useState } from 'react';\nimport { CForm } from '../../../../Form';\nimport { CField } from '../../../../Form/Field';\nimport { SelectNodeState } from '../../component/SelectNodeState/index';\nimport styles from './style.module.scss';\nimport { TTextAreaSetterProps } from '../../../TextAreaSetter';\nimport { isValidJSVariableName } from './util';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { ensureKeyExist } from '@/utils';\nimport { NodeCard } from '../../component/NodeCard';\nimport { CommonDynamicValueSetter } from '../../util';\nimport { useActionFlow } from '../../context';\nimport { CFiledWithSwitchSetter } from '@/component/CustomSchemaForm/components/CFiledWithSwitchSetter';\n\nexport type TAssignValueNode = Node<TLogicAssignValueItem, 'AssignValueNode'>;\n\nexport const AssignValueNode = (props: NodeProps<TAssignValueNode>) => {\n const { data } = props;\n const { onDataChange, pageModel, pluginCtx, nodeModel } = useActionFlow();\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n const devConfigObj = data[DEV_CONFIG_KEY]!;\n const [isReady, setIsReady] = useState(false);\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [formValue, setFormValue] = useState<TLogicAssignValueItem>();\n useEffect(() => {\n const newVal = {\n id: data.id,\n type: data.type,\n valueType: data.valueType,\n currentValue: data.currentValue,\n targetValueName: data.targetValueName || '',\n };\n formRef.current?.setFields(newVal);\n setFormValue(newVal);\n setIsReady(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig: devConfigObj.defaultSetterMap || {},\n formRef: formRef,\n onSetterChange: (keyPaths, setterName) => {\n if (!devConfigObj.defaultSetterMap) {\n devConfigObj.defaultSetterMap = {};\n }\n devConfigObj.defaultSetterMap[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n },\n pluginCtx: pluginCtx,\n nodeId: nodeModel?.id,\n customSetterMap: {},\n }}\n >\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Assign Value\" nodeProps={props}>\n <CForm\n ref={formRef}\n name=\"jump Link\"\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newVal) => {\n Object.assign(data, newVal);\n setFormValue(newVal as any);\n onDataChange();\n }}\n >\n {isReady && (\n <>\n <div className={styles.line}>\n <CField\n name={'valueType'}\n label=\"Var Type\"\n valueChangeEventName=\"onChange\"\n formatEventValue={({ target: { value } }: any) => {\n return value;\n }}\n >\n <Radio.Group\n optionType=\"button\"\n buttonStyle=\"solid\"\n options={[\n { label: 'Memory', value: AssignValueType.MEMORY },\n { label: 'Node', value: AssignValueType.STATE },\n ]}\n />\n </CField>\n </div>\n <div className={styles.line}>\n {formValue?.valueType === 'STATE' && (\n <CField name={'targetValueName'} label=\"Var Name\" valueChangeEventName=\"onChange\">\n <SelectNodeState pageModel={pageModel} />\n </CField>\n )}\n\n {formValue?.valueType === 'MEMORY' && (\n <CFiledWithSwitchSetter\n name={'targetValueName'}\n label=\"Var Name\"\n labelWidth=\"auto\"\n labelAlign={'start'}\n tips={\n '变量名必须以字母(a-z、A-Z)、下划线(_)或美元符号($)开头。后续字符可以是字母、数字(0-9)、下划线或美元符号。变量名不能是保留关键字(例如 if、while 等)'\n }\n setterList={[\n {\n componentName: 'TextAreaSetter',\n props: {\n valueValidator: isValidJSVariableName,\n } as TTextAreaSetterProps,\n },\n ]}\n ></CFiledWithSwitchSetter>\n )}\n </div>\n <div\n className={styles.line}\n style={{\n minWidth: '450px',\n }}\n >\n <CFiledWithSwitchSetter\n name={'currentValue'}\n label=\"Value\"\n labelWidth=\"60px\"\n labelAlign={'start'}\n setterList={CommonDynamicValueSetter}\n ></CFiledWithSwitchSetter>\n </div>\n </>\n )}\n </CForm>\n </NodeCard>\n </div>\n </CCustomSchemaFormContext.Provider>\n );\n};\n","import { NodeProps, Node } from '@xyflow/react';\nimport { NodeCard } from '../component/NodeCard';\n\nexport type CounterNode = Node<any, 'StartNode'>;\n\nexport const StartNode = (props: NodeProps<CounterNode>) => {\n return (\n <NodeCard nodeProps={props} useCardStyle={false} inputHandle={false}>\n <div\n style={{\n minWidth: '100px',\n padding: '10px 20px',\n border: '1px solid #1a192b',\n borderRadius: '4px',\n textAlign: 'center',\n }}\n >\n Start\n </div>\n </NodeCard>\n );\n};\n","import { CMaterialPropsType, CPageNode, isNodeModel } from '@chamn/model';\nimport { CommonDynamicValueSetter } from '../../util';\n\nexport function isValidJSVariableName(name: string) {\n // 1. 使用正则表达式验证变量名规则\n const identifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n if (!identifierRegex.test(name)) {\n return false;\n }\n\n // 2. 检测是否为保留关键字\n try {\n new Function(`let ${name};`);\n return true;\n } catch {\n return false;\n }\n}\n\nconst ARGS_PREFIX = 'args.';\n/**\n *\n * @param node 结合 method 描述,合并为一个 FormSchema, 加 key 前缀是为了避免 key 冲突\n * @param args\n * @returns\n */\nexport const getArgsObjFormSchema = (node: CPageNode, methodName: string) => {\n if (isNodeModel(node)) {\n const methodList = node?.material?.value.methods || [];\n\n const formSchema = methodList\n .find((el) => el.name === methodName)\n ?.params?.map((el, index) => {\n return {\n name: `${ARGS_PREFIX}${index}`,\n title: {\n label: el.name || `arg[${index}]`,\n tip: el.description,\n },\n valueType: 'string',\n setters: CommonDynamicValueSetter,\n } as CMaterialPropsType[number];\n });\n\n return formSchema || [];\n }\n return [];\n};\n\nexport const formatArgsObjToArray = (val: Record<string, any>) => {\n const res = Object.keys(val)\n .map((key) => parseInt(key.replace(ARGS_PREFIX, '')))\n .sort()\n .map((index) => val[`${ARGS_PREFIX}${index}`]);\n return res;\n};\n\nexport const formatArgsToObject = (valArr: any[]) => {\n const res: any = {};\n valArr.forEach((item, index) => {\n res[`${ARGS_PREFIX}${index}`] = item;\n });\n return res;\n};\n","import { BUILD_IN_SETTER_MAP, CustomSchemaForm, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { DEV_CONFIG_KEY, TLogicCallNodeMethodItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\nimport { Input, Select } from 'antd';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { CForm } from '../../../../Form';\nimport styles from './style.module.scss';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { SelectNodeByTree } from '../../component/SelectNodeByTree';\nimport { CField } from '@/component/CustomSchemaForm/components/Form/Field';\nimport { formatArgsObjToArray, formatArgsToObject, getArgsObjFormSchema, isValidJSVariableName } from './util';\nimport { ensureKeyExist } from '@/utils';\nimport { NodeCard } from '../../component/NodeCard';\nimport { useActionFlow } from '../../context';\n\nexport type TCallNodeMethodNode = Node<TLogicCallNodeMethodItem, 'CallNodeMethodNode'>;\n\nexport const CallNodeMethodNode = (props: NodeProps<TCallNodeMethodNode>) => {\n const { data } = props;\n const { pageModel, onDataChange, pluginCtx, nodeModel } = useActionFlow();\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n const devConfigObj = data[DEV_CONFIG_KEY]!;\n\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [formValue, setFormValue] = useState<TLogicCallNodeMethodItem>();\n useEffect(() => {\n const newVal = {\n id: data.id || '',\n type: data.type,\n nodeId: data.nodeId,\n methodName: data.methodName,\n args: data.args,\n returnVarName: data.returnVarName,\n };\n formRef.current?.setFields(newVal);\n\n setFormValue(newVal);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const methodList = useMemo(() => {\n const targetNode = pageModel.getNode(data.nodeId);\n const list = targetNode?.material?.value.methods || [];\n return list;\n }, [data.nodeId, pageModel]);\n\n const methodListOptions = useMemo(() => {\n return methodList?.map((el) => {\n return {\n value: el.name,\n label: el.title,\n };\n });\n }, [methodList]);\n\n const argsFormSchema = useMemo(() => {\n return getArgsObjFormSchema(pageModel.getNode(formValue?.nodeId)!, formValue?.methodName || '');\n }, [pageModel, formValue?.nodeId, formValue?.methodName]);\n\n const updateKeySetterConfig = (keyPaths: string[], setterName: string) => {\n if (!devConfigObj.defaultSetterMap) {\n devConfigObj.defaultSetterMap = {};\n }\n devConfigObj.defaultSetterMap[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig: devConfigObj.defaultSetterMap || {},\n formRef: formRef,\n onSetterChange: updateKeySetterConfig,\n customSetterMap: { ...BUILD_IN_SETTER_MAP },\n }}\n >\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Call Node Method\" nodeProps={props}>\n <CForm\n ref={formRef}\n name=\"Call Node Method\"\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newVal, changeKeys) => {\n if (changeKeys?.includes('nodeId')) {\n newVal = {\n ...newVal,\n methodName: '',\n args: [],\n };\n setTimeout(() => {\n formRef.current?.setFields({\n ...formValue,\n ...newVal,\n });\n });\n }\n Object.assign(data, newVal);\n setFormValue(newVal as any);\n onDataChange();\n }}\n >\n <div className={styles.line}>\n <CField\n label={'组件'}\n name=\"nodeId\"\n valueChangeEventName=\"onChange\"\n formatEventValue={(el) => {\n return el.nodeId;\n }}\n >\n <SelectNodeByTree pageModel={pageModel} />\n </CField>\n </div>\n\n <div className={styles.line}>\n <CField name=\"methodName\" label=\"方法\" valueChangeEventName=\"onChange\">\n <Select style={{ width: 250 }} allowClear options={methodListOptions}></Select>\n </CField>\n </div>\n <div className={styles.line}>\n <CField\n name={'args'}\n label=\"参数\"\n labelWidth=\"60px\"\n labelAlign={'start'}\n condition={() => Boolean(argsFormSchema.length)}\n noStyle\n formatEventValue={(val) => {\n const newVal = formatArgsObjToArray(val);\n return newVal;\n }}\n >\n <CustomSchemaForm\n initialValue={formatArgsToObject(data.args || [])}\n pluginCtx={pluginCtx}\n nodeId={nodeModel?.id}\n properties={argsFormSchema}\n onSetterChange={updateKeySetterConfig}\n defaultSetterConfig={devConfigObj.defaultSetterMap || {}}\n ></CustomSchemaForm>\n </CField>\n </div>\n\n <div className={styles.line}>\n <CField\n name={'returnVarName'}\n label=\"返回值变量名\"\n labelWidth=\"80px\"\n tips={\n '变量名必须以字母(a-z、A-Z)、下划线(_)或美元符号($)开头。后续字符可以是字母、数字(0-9)、下划线或美元符号。变量名不能是保留关键字(例如 if、while 等)'\n }\n rules={[\n {\n validator: async (val) => {\n if (val === '') {\n return true;\n }\n return isValidJSVariableName(val);\n },\n },\n ]}\n valueChangeEventName=\"onChange\"\n formatEventValue={(e) => e.target.value}\n >\n <Input allowClear />\n </CField>\n </div>\n </CForm>\n </NodeCard>\n </div>\n </CCustomSchemaFormContext.Provider>\n );\n};\n","import { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { isExpression, isFunction, TLogicJumpLinkItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { CForm } from '../../../Form';\nimport { NodeCard } from '../component/NodeCard';\nimport { CommonDynamicValueSetter } from '../util';\nimport { useActionFlow } from '../context';\nimport { CFiledWithSwitchSetter } from '../../../CFiledWithSwitchSetter';\n\nexport type TJumpLinkNode = Node<TLogicJumpLinkItem, 'JumpLinkNode'>;\n\nexport const JumpLinkNode = (props: NodeProps<TJumpLinkNode>) => {\n const { data } = props;\n const { onDataChange } = useActionFlow();\n\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n formRef.current?.setFields({\n link: data.link,\n });\n setIsReady(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const defaultLinkSetter = useMemo(() => {\n if (isFunction(data.link)) {\n return 'FunctionSetter';\n } else if (isExpression(data.link)) {\n return 'ExpressionSetter';\n } else {\n return 'TextAreaSetter';\n }\n }, [data.link]);\n\n return (\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Jump Link\" nodeProps={props}>\n <CForm\n ref={formRef}\n name=\"jump Link\"\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newVal) => {\n Object.assign(data, newVal);\n onDataChange();\n }}\n >\n {isReady && (\n <>\n <CFiledWithSwitchSetter\n name={'link'}\n label=\"link\"\n labelWidth=\"auto\"\n labelAlign={'start'}\n defaultSetterName={defaultLinkSetter}\n setterList={CommonDynamicValueSetter}\n ></CFiledWithSwitchSetter>\n </>\n )}\n </CForm>\n </NodeCard>\n </div>\n );\n};\n","import { SetterType } from '@chamn/model';\n\nexport const requestParamsSchemaSetterList: SetterType[] = [\n {\n componentName: 'JSONSetter',\n labelAlign: 'start',\n props: {\n mode: 'inline',\n lineNumbers: 'off',\n editorOptions: {\n lineNumbers: 'off',\n lineDecorationsWidth: 0,\n lineNumbersMinChars: 0,\n glyphMargin: false,\n },\n },\n },\n {\n componentName: 'FunctionSetter',\n labelAlign: 'start',\n props: {\n mode: 'inline',\n minimap: false,\n containerStyle: {\n paddingTop: '10px',\n width: '470px',\n height: '150px',\n },\n lineNumber: false,\n },\n },\n];\n\nexport const methodOptions = [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'PUT', label: 'PUT' },\n { value: 'PATCH', label: 'PATCH' },\n { value: 'DELETE', label: 'DELETE' },\n];\n","import { DEV_CONFIG_KEY, TLogicRequestAPIItem } from '@chamn/model';\nimport { useReactFlow, NodeProps, Node } from '@xyflow/react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Input, Select, Tabs, TabsProps } from 'antd';\nimport { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\n\nimport { ensureKeyExist } from '@/utils';\nimport { NodeCard } from '../../component/NodeCard';\nimport { CForm } from '@/component/CustomSchemaForm/components/Form';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { CField } from '@/component/CustomSchemaForm/components/Form/Field';\nimport { methodOptions, requestParamsSchemaSetterList } from './helper';\nimport { CreateNewNodePopup } from '../../component/CreateNewNodePopup';\nimport { InputHandle } from '../../component/InputHandle';\nimport { OutputHandle } from '../../component/OutputHandle';\nimport {\n INPUT_HANDLE_ID,\n OUTPUT_HANDLE_ID,\n REACT_FLOW_DRAG_CLASS_NAME,\n REQUEST_API_FAILED_HANDLE_ID,\n} from '../../config';\nimport styles from './style.module.scss';\nimport { useActionFlow } from '../../context';\nimport { CFiledWithSwitchSetter } from '@/component/CustomSchemaForm/components/CFiledWithSwitchSetter';\nimport { RightPanelConfig } from '@/plugins/RightPanel/type';\n\nexport type TRequestAPINode = Node<TLogicRequestAPIItem, 'RequestAPINode'>;\n\nexport const RequestAPINode = (props: NodeProps<TRequestAPINode>) => {\n const { data, isConnectable } = props;\n const { onDataChange, pluginCtx } = useActionFlow();\n const pluginConfig: RightPanelConfig = pluginCtx.config || {};\n\n const CustomAPISelectInput: any = useMemo(() => {\n if (pluginConfig.requestAPINode?.customAPIInput) {\n return pluginConfig.requestAPINode?.customAPIInput;\n }\n return Input;\n }, [pluginConfig.requestAPINode?.customAPIInput]);\n\n const reactFlowInstance = useReactFlow();\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n const devConfigObj = data[DEV_CONFIG_KEY]!;\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [formValue, setFormValue] = useState<TLogicRequestAPIItem>();\n const checkHandleConnection = (handleId: string) => {\n const edges = reactFlowInstance.getEdges();\n return edges.some(\n (edge) => edge.source === String(data.id) && (edge.sourceHandle || OUTPUT_HANDLE_ID) === handleId\n );\n };\n\n const isOutputHandleConnected = checkHandleConnection(OUTPUT_HANDLE_ID);\n\n const isAfterFailedResponseHandleConnected = checkHandleConnection(REQUEST_API_FAILED_HANDLE_ID);\n\n useEffect(() => {\n const newVal = {\n id: data.id,\n type: data.type,\n apiPath: data.apiPath,\n body: data.body,\n query: data.query,\n header: data.header,\n method: data.method || 'GET',\n responseVarName: data.responseVarName || '',\n afterSuccessResponse: data.afterSuccessResponse || [],\n afterFailedResponse: data.afterFailedResponse || [],\n } as TLogicRequestAPIItem;\n formRef.current?.setFields(newVal);\n setFormValue(newVal);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const formHandler = useMemo(() => {\n return {\n updateFields: (newValue: any) => {\n const newValueObj = {\n ...formValue,\n ...newValue,\n };\n formRef.current?.setFields({\n ...newValueObj,\n });\n setFormValue(newValueObj);\n },\n getFields: () => {\n return formRef.current?.getFieldsValue();\n },\n };\n }, [formValue]);\n\n const updateKeySetterConfig = (keyPaths: string[], setterName: string) => {\n if (!devConfigObj.defaultSetterMap) {\n devConfigObj.defaultSetterMap = {};\n }\n devConfigObj.defaultSetterMap[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n const tabItems = useMemo(() => {\n const tabTagList = [\n { key: 'header', label: 'Header' },\n { key: 'query', label: 'Query' },\n { key: 'body', label: 'Body' },\n ];\n const items: TabsProps['items'] = tabTagList.map((el) => {\n return {\n ...el,\n disabled: el.key === 'body' && formValue?.method === 'GET',\n children: (\n <div className={styles.line}>\n <CFiledWithSwitchSetter\n name={el.key}\n hiddenLabel={true}\n labelAlign={'start'}\n setterList={requestParamsSchemaSetterList}\n ></CFiledWithSwitchSetter>\n </div>\n ),\n };\n });\n\n return items;\n }, [formValue]);\n\n const handleNewNodeAdd = (newNodeData: any, handleType: string) => {\n const currentNode = reactFlowInstance.getNode(String(data.id));\n if (!currentNode) return;\n\n let offsetX = 0;\n if (handleType !== OUTPUT_HANDLE_ID) {\n offsetX = (currentNode.measured?.width ?? 0) + 150;\n }\n // 计算新节点位置\n const newNodePosition = {\n x: currentNode.position.x + offsetX,\n y: currentNode.position.y + (currentNode.measured?.height ?? 0) + 150,\n };\n\n // 创建新节点\n const newNode = {\n id: newNodeData.id,\n type: newNodeData.type,\n position: newNodePosition,\n /** 必须 */\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n data: {\n ...newNodeData,\n },\n };\n\n // 创建连线\n const newEdge = {\n id: `${data.id}_${newNode.id}`,\n source: String(data.id),\n sourceHandle: handleType,\n target: newNode.id,\n targetHandle: INPUT_HANDLE_ID,\n };\n\n // 更新流程图\n reactFlowInstance.addNodes(newNode);\n reactFlowInstance.addEdges(newEdge);\n if (handleType === OUTPUT_HANDLE_ID) {\n // 更新当前节点的 afterSuccessResponse\n if (!data.afterSuccessResponse) {\n data.afterSuccessResponse = [];\n }\n data.afterSuccessResponse.push(newNodeData);\n } else {\n // 更新当前节点的 afterFailedResponse\n if (!data.afterFailedResponse) {\n data.afterFailedResponse = [];\n }\n data.afterFailedResponse.push(newNodeData);\n }\n };\n\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig: devConfigObj.defaultSetterMap || {},\n formRef: formRef,\n onSetterChange: updateKeySetterConfig,\n customSetterMap: { ...BUILD_IN_SETTER_MAP },\n }}\n >\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard\n title=\"Request Data\"\n customHandle={\n <>\n <InputHandle type=\"target\" isConnectable={isConnectable} />\n <CreateNewNodePopup\n style={{\n position: 'absolute',\n left: '50%',\n bottom: '0',\n }}\n title=\"请求成功时\"\n onNewNodeAdd={(data) => handleNewNodeAdd(data, OUTPUT_HANDLE_ID)}\n disabled={isOutputHandleConnected}\n >\n <OutputHandle\n isConnectable={isConnectable}\n style={{\n width: '10px',\n height: '10px',\n background: '#8BC34A',\n }}\n />\n </CreateNewNodePopup>\n <CreateNewNodePopup\n title=\"请求异常时\"\n onNewNodeAdd={(data) => handleNewNodeAdd(data, REQUEST_API_FAILED_HANDLE_ID)}\n disabled={isAfterFailedResponseHandleConnected}\n >\n <OutputHandle\n style={{\n left: '75%',\n bottom: '0',\n width: '10px',\n height: '10px',\n background: '#ff4d4f',\n }}\n id={REQUEST_API_FAILED_HANDLE_ID}\n isConnectable={isConnectable}\n />\n </CreateNewNodePopup>\n </>\n }\n nodeProps={props}\n handleNewNodeAdd={() => {}}\n >\n <div\n style={{\n width: '500px',\n }}\n >\n <CForm\n name={'requestAPI'}\n ref={formRef}\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newFormData) => {\n setFormValue(newFormData as any);\n Object.assign(data, newFormData);\n onDataChange();\n }}\n >\n <div className={styles.line}>\n <CField\n label={'API'}\n name=\"apiPath\"\n valueChangeEventName=\"onChange\"\n formatEventValue={(el) => el.target.value}\n >\n <CustomAPISelectInput form={formHandler} />\n </CField>\n </div>\n <div className={styles.line}>\n <CField label={'请求方法'} name=\"method\" valueChangeEventName=\"onChange\">\n <Select defaultValue=\"GET\" style={{ width: 230 }} options={methodOptions} />\n </CField>\n </div>\n <div className={styles.line}>\n <CField\n label={'返回值变量'}\n name=\"responseVarName\"\n tips={\n '变量名必须以字母(a-z、A-Z)、下划线(_)或美元符号($)开头。后续字符可以是字母、数字(0-9)、下划线或美元符号。变量名不能是保留关键字(例如 if、while 等)'\n }\n valueChangeEventName=\"onChange\"\n formatEventValue={(el) => el.target.value}\n >\n <Input />\n </CField>\n </div>\n <Tabs defaultActiveKey={formValue?.method === 'POST' ? 'body' : 'query'} items={tabItems} />\n </CForm>\n </div>\n </NodeCard>\n </div>\n </CCustomSchemaFormContext.Provider>\n );\n};\n","import { DEV_CONFIG_KEY, TLogicRunCodeItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\n\nimport { ensureKeyExist } from '@/utils';\nimport { FunctionSetter } from '../../../FunctionSetter';\nimport { NodeCard } from '../../component/NodeCard';\nimport { useActionFlow } from '../../context';\n\nexport type TRunCodeNode = Node<TLogicRunCodeItem, 'RunCodeNode'>;\n\nexport const RunCodeNode = (props: NodeProps<TRunCodeNode>) => {\n const { data } = props;\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n\n const { onDataChange, pluginCtx, nodeModel } = useActionFlow();\n\n return (\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Run Code\" nodeProps={props}>\n <FunctionSetter\n mode=\"inline\"\n initialValue={data.value}\n containerStyle={{\n paddingTop: '10px',\n width: '600px',\n height: '300px',\n }}\n onValueChange={(newVal: any) => {\n data.value = newVal.value;\n onDataChange();\n }}\n setterContext={{\n pluginCtx: pluginCtx,\n setCollapseHeaderExt: undefined,\n onSetterChange: function () {},\n keyPaths: [],\n label: '',\n nodeModel: nodeModel as any,\n }}\n />\n </NodeCard>\n </div>\n );\n};\n","import { LogicType } from '@chamn/model';\nimport { AssignValueNode } from './AssignValueNode';\nimport { StartNode } from './StartNode';\nimport { CallNodeMethodNode } from './CallNodeMethodNode';\nimport { JumpLinkNode } from './JumpLinkNode';\nimport { RequestAPINode } from './RequestAPINode';\nimport { RunCodeNode } from './RunCodeNode';\n\nexport enum NODE_TYPE {\n START_NODE = 'START_NODE',\n JUMP_LINK = LogicType.JUMP_LINK,\n ASSIGN_VALUE = LogicType.ASSIGN_VALUE,\n CALL_NODE_METHOD = LogicType.CALL_NODE_METHOD,\n RUN_CODE = LogicType.RUN_CODE,\n REQUEST_API = LogicType.REQUEST_API,\n}\n\nexport const NODE_MAP = {\n [NODE_TYPE.START_NODE]: StartNode,\n [NODE_TYPE.JUMP_LINK]: JumpLinkNode,\n [NODE_TYPE.ASSIGN_VALUE]: AssignValueNode,\n [NODE_TYPE.CALL_NODE_METHOD]: CallNodeMethodNode,\n [NODE_TYPE.RUN_CODE]: RunCodeNode,\n [NODE_TYPE.REQUEST_API]: RequestAPINode,\n};\n","import { Edge, Node, useReactFlow } from '@xyflow/react';\nimport Dagre from '@dagrejs/dagre';\nimport { getRandomStr, SetterType, TActionLogicItem, TLogicItemHandlerFlow } from '@chamn/model';\nimport { INPUT_HANDLE_ID, OUTPUT_HANDLE_ID, REACT_FLOW_DRAG_CLASS_NAME, REQUEST_API_FAILED_HANDLE_ID } from './config';\nimport { NODE_TYPE } from './node';\nimport { message } from 'antd';\n\n/** 自动布局 flow node */\nexport const calculateElementLayout = (\n nodes: Node[],\n edges: Edge[],\n options: {\n direction: 'TB' | 'LR';\n }\n): { nodes: Node[]; edges: Edge[] } => {\n const g = new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({}));\n g.setGraph({ rankdir: options.direction });\n\n edges.forEach((edge) => g.setEdge(edge.source, edge.target));\n nodes.forEach((node) =>\n g.setNode(node.id, {\n ...node,\n width: node.measured?.width ?? 0,\n height: node.measured?.height ?? 0,\n })\n );\n\n Dagre.layout(g);\n\n return {\n nodes: nodes.map((node) => {\n const position = g.node(node.id);\n // We are shifting the dagre node position (anchor=center center) to the top left\n // so it matches the React Flow node anchor point (top left).\n const x = position.x - (node.measured?.width ?? 0) / 2;\n const y = position.y - (node.measured?.height ?? 0) / 2;\n\n return { ...node, position: { x, y } };\n }),\n edges,\n };\n};\n\nconst createFlowNode = (nodeData: Partial<Node>): Node => {\n const nodeId = nodeData.id || getRandomStr();\n return {\n id: nodeId,\n type: nodeData.type,\n position: { x: 0, y: 0 },\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n selectable: nodeData.type === NODE_TYPE.START_NODE ? false : true,\n data: {\n ...nodeData,\n id: nodeId,\n },\n };\n};\n\n/** 创建边 */\nconst createFlowEdge = (source: string, target: string, sourceHandle = OUTPUT_HANDLE_ID) => {\n return {\n id: `${source}_${target}`,\n source,\n sourceHandle,\n target,\n targetHandle: INPUT_HANDLE_ID,\n };\n};\n\n/** 将 json schema 转换为 react-flow 节点和边信息 */\nexport const parseActionLogicToNodeList = (value: TActionLogicItem) => {\n const nodes: Node[] = [\n createFlowNode({\n id: NODE_TYPE.START_NODE,\n type: NODE_TYPE.START_NODE,\n }),\n ];\n const edges: Edge[] = [];\n\n if (!value?.handler?.length) {\n return { nodes: nodes, edges: edges };\n }\n\n const processNodes = (\n items: TLogicItemHandlerFlow,\n options?: {\n /**\n * 用于标记是从那种类型的 output flag id 导出的 flow\n */\n sourceHandler: string;\n }\n ) => {\n items.forEach((item) => {\n const currentNode = createFlowNode(item);\n nodes.push(currentNode);\n if (item.next) {\n edges.push(createFlowEdge(item.id, String(item.next), options?.sourceHandler));\n }\n\n if (item.type === 'REQUEST_API') {\n // 处理成功分支节点\n if (item.afterSuccessResponse?.length) {\n edges.push(createFlowEdge(item.id, String(item.afterSuccessResponse[0].id)));\n processNodes(item.afterSuccessResponse);\n }\n\n // 处理失败分支节点\n if (item.afterFailedResponse?.length) {\n edges.push(createFlowEdge(item.id, String(item.afterFailedResponse[0].id), REQUEST_API_FAILED_HANDLE_ID));\n\n processNodes(item.afterFailedResponse, {\n sourceHandler: REQUEST_API_FAILED_HANDLE_ID,\n });\n }\n }\n });\n };\n\n const nextItem = value.handler[0];\n edges.push(createFlowEdge(NODE_TYPE.START_NODE, nextItem.id));\n\n processNodes(value.handler);\n return { nodes, edges };\n};\n\n/** 将节点格式化json schema */\nexport const revertNodeToActionLogic = (params: { nodes: Node[]; edges: Edge[] }): TActionLogicItem => {\n const { nodes, edges } = params;\n const result: TActionLogicItem = {\n type: 'ACTION',\n handler: [],\n };\n\n // 找到起始节点\n const startNode = nodes.find((node) => node.type === NODE_TYPE.START_NODE);\n if (!startNode) return result;\n const nodeMap = new Map(nodes.map((node) => [node.id, node]));\n const visited = new Set<string>();\n\n const traverseNodes = (currentNodeId: string) => {\n if (visited.has(currentNodeId)) return [];\n visited.add(currentNodeId);\n\n const currentNode = nodeMap.get(currentNodeId);\n if (!currentNode) return [];\n\n const handlers = [];\n const nodeData: any = { ...currentNode.data, id: currentNodeId };\n\n if (currentNode.type === 'REQUEST_API') {\n // 获取成功分支节点\n const successTargets = edges\n .filter((e) => e.source === currentNodeId && e.sourceHandle === OUTPUT_HANDLE_ID)\n .map((e) => traverseNodes(e.target))\n .flat();\n\n // 获取失败分支节点\n const failedTargets = edges\n .filter((e) => e.source === currentNodeId && e.sourceHandle === REQUEST_API_FAILED_HANDLE_ID)\n .map((e) => traverseNodes(e.target))\n .flat();\n\n nodeData.afterSuccessResponse = successTargets;\n nodeData.afterFailedResponse = failedTargets;\n handlers.push(nodeData);\n\n return handlers;\n }\n\n handlers.push(nodeData);\n\n // 获取下一个主流程节点, 理论上只有能一个, 分叉逻辑需要使用特殊节点处理\n const nextEdges = edges.filter((e) => e.source === currentNodeId && e.sourceHandle === OUTPUT_HANDLE_ID);\n if (nextEdges.length > 1) {\n message.error('不允许存在一个节点连接多个节点');\n throw new Error('不允许存在一个节点连接多个节点');\n }\n if (nextEdges.length !== 0) {\n /** 理论上只会有一个元素 */\n nextEdges.forEach((edge) => {\n const nextHandlers = traverseNodes(edge.target);\n handlers.push(...nextHandlers);\n nodeData.next = nextHandlers[0]?.id ?? null;\n });\n }\n\n return handlers;\n };\n const handler = traverseNodes(startNode.id);\n // 移除 start node\n handler.shift();\n result.handler = handler;\n return result;\n};\n\n/** 通用的 flow action 画布中的 setter 配置 */\nexport const CommonDynamicValueSetter: SetterType[] = [\n 'StringSetter',\n 'NumberSetter',\n 'ExpressionSetter',\n 'JSONSetter',\n {\n componentName: 'FunctionSetter',\n props: {\n mode: 'inline',\n minimap: false,\n lineNumber: false,\n containerStyle: {\n width: '500px',\n height: '250px',\n },\n },\n },\n];\n\nexport const UseNodeHasConnected = function (data: any, handleId: string) {\n const reactFlowInstance = useReactFlow();\n const edges = reactFlowInstance.getEdges();\n return edges.some((edge) => edge.source === String(data.id) && (edge.sourceHandle || OUTPUT_HANDLE_ID) === handleId);\n};\n\nexport const getNewNodePosInfo = function (currentNode: Node, newNodeData: any, sourceHandle?: string) {\n // 计算新节点位置\n const newNodePosition = {\n x: currentNode.position.x,\n y: currentNode.position.y + (currentNode.measured?.height ?? 0) + 150,\n };\n\n // 创建新节点\n const newNode = {\n id: newNodeData.id,\n type: newNodeData.type,\n position: newNodePosition,\n /** 必须 */\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n data: {\n ...newNodeData,\n },\n };\n\n // 创建连线\n const newEdge = {\n id: `${currentNode.data.id}_${newNode.id}`,\n source: String(currentNode.data.id),\n sourceHandle: sourceHandle ?? OUTPUT_HANDLE_ID,\n target: newNode.id,\n targetHandle: INPUT_HANDLE_ID,\n };\n\n return {\n newEdge,\n newNode,\n };\n};\n","import {\n addEdge,\n Background,\n Controls,\n MiniMap,\n OnConnect,\n ReactFlow,\n ReactFlowProvider,\n useEdgesState,\n useNodesState,\n useReactFlow,\n Node,\n} from '@xyflow/react';\nimport '@xyflow/react/dist/style.css';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { TActionLogicItem } from '@chamn/model';\nimport { calculateElementLayout, parseActionLogicToNodeList, revertNodeToActionLogic } from './util';\nimport { NODE_MAP, NODE_TYPE } from './node';\nimport { CSetterProps } from '../type';\nimport { REACT_FLOW_DRAG_CLASS_NAME } from './config';\nimport { ActionFlowContext } from './context';\nimport { Button } from 'antd';\nimport { MoveableModal } from '@/component/MoveableModal';\nimport { HotKeysPluginInstance } from '@/plugins/Hotkeys/type';\n\nexport type TActionFlowSetterCore = CSetterProps<{\n value?: TActionLogicItem;\n children?: React.ReactNode;\n}>;\n\nexport const ActionFlowSetterCore = (props: TActionFlowSetterCore) => {\n const { fitView } = useReactFlow();\n const [flowMount, setFlowMount] = useState(false);\n const [nodes, setNodes, onNodesChange] = useNodesState<any>([\n {\n id: NODE_TYPE.START_NODE,\n data: { id: NODE_TYPE.START_NODE },\n position: { x: 0, y: 0 },\n type: NODE_TYPE.START_NODE,\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n selectable: false,\n },\n ]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<any>([]);\n\n const latesEdgesRef = useRef<any[]>([]);\n latesEdgesRef.current = edges;\n\n const onConnect = useCallback<OnConnect>((params) => setEdges((eds) => addEdge({ ...params }, eds)), [setEdges]);\n\n const latestNodeRef = useRef<Node[]>([]);\n latestNodeRef.current = nodes;\n\n const [dataReady, setDataReady] = useState(false);\n\n /** 重新布局 */\n const layoutGraph = useCallback(\n (options?: { fitView: boolean }) => {\n const layoutInfo = calculateElementLayout(latestNodeRef.current, edges, { direction: 'TB' });\n setNodes([...layoutInfo.nodes]);\n setEdges([...layoutInfo.edges]);\n setTimeout(() => {\n setFlowMount(true);\n if (options?.fitView !== false) {\n fitView({});\n }\n });\n },\n [edges, fitView, setEdges, setNodes]\n );\n\n useEffect(() => {\n // 将 value 转换为 nodes 以及 edges\n const { nodes, edges } = parseActionLogicToNodeList(props.value);\n setNodes(nodes);\n setEdges(edges);\n setTimeout(() => {\n setDataReady(true);\n }, 300);\n }, [props.value, setEdges, setNodes]);\n\n const saveData = useCallback(() => {\n setTimeout(() => {\n const newSchemaValue = revertNodeToActionLogic({ nodes: latestNodeRef.current, edges: latesEdgesRef.current });\n props.onValueChange?.(newSchemaValue);\n });\n }, [props]);\n\n return (\n <ActionFlowContext.Provider\n value={{\n pluginCtx: props.setterContext?.pluginCtx,\n pageModel: props.setterContext?.pluginCtx?.pageModel,\n onDataChange: saveData,\n nodeModel: props.setterContext.nodeModel,\n }}\n >\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n position: 'relative',\n }}\n >\n <div\n style={{\n flex: 1,\n position: 'relative',\n }}\n >\n <Button\n style={{\n position: 'absolute',\n top: '10px',\n right: '20px',\n zIndex: 99,\n }}\n onClick={() => layoutGraph({ fitView: false })}\n >\n Reset Layout\n </Button>\n\n {!flowMount && (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'white',\n zIndex: 999,\n }}\n ></div>\n )}\n {dataReady && (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={(changes) => {\n onNodesChange(changes);\n saveData();\n }}\n onEdgesChange={(changes) => {\n onEdgesChange(changes);\n saveData();\n }}\n onConnect={(connection) => {\n onConnect(connection);\n saveData();\n }}\n defaultEdgeOptions={{\n type: 'smoothstep',\n }}\n minZoom={0.2}\n maxZoom={1}\n onInit={() => {\n layoutGraph();\n }}\n fitView\n nodeTypes={NODE_MAP}\n >\n <Background />\n <Controls />\n <MiniMap />\n </ReactFlow>\n )}\n </div>\n </div>\n </ActionFlowContext.Provider>\n );\n};\n\nexport const ActionFlowSetter = (props: TActionFlowSetterCore) => {\n const [open, setOpen] = useState(false);\n\n const newValueRef = useRef(props.value);\n\n const disableLowcodeHotKey = async (status: boolean) => {\n // 启用 lowcode 编辑器热键\n const hotkey = await props.setterContext?.pluginCtx?.pluginManager?.get<HotKeysPluginInstance>('Hotkeys');\n hotkey?.export.disable(status);\n };\n\n const triggerView = props.children || (\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n >\n Edit Flow\n </Button>\n );\n\n return (\n <>\n <div\n onClick={async () => {\n // 禁用 lowcode 编辑器热键\n await disableLowcodeHotKey(true);\n setOpen(true);\n }}\n >\n {triggerView}\n </div>\n\n <MoveableModal\n destroyOnClose\n open={open}\n centered\n title=\"Edit Flow\"\n width=\"calc(100vw - 200px)\"\n onCancel={() => {\n setOpen(false);\n disableLowcodeHotKey(false);\n }}\n onOk={async () => {\n props.onValueChange?.(newValueRef.current);\n await disableLowcodeHotKey(false);\n setOpen(false);\n }}\n >\n <div\n style={{\n width: '100%',\n height: 'calc(100vh - 200px)',\n }}\n >\n <ReactFlowProvider>\n <ActionFlowSetterCore\n {...props}\n onValueChange={(newVal) => {\n newValueRef.current = newVal;\n }}\n ></ActionFlowSetterCore>\n </ReactFlowProvider>\n </div>\n </MoveableModal>\n </>\n );\n};\n\nActionFlowSetter.setterName = '逻辑流设置器';\n","import { ActionFlowSetter } from './ActionFlowSetter';\nimport { CSetter } from './type';\n\n/** 需要单独导出避免循环以来,因为 ActionFlowSetter 使用了大量内置 setter */\nexport const BUILD_IN_ADVANCE_SETTER_MAP = {\n ActionFlowSetter,\n} as Record<string, CSetter>;\n","import { useEffect, useRef } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { BUILD_IN_ADVANCE_SETTER_MAP } from '@/component/CustomSchemaForm/components/Setters/AdvanceSetterList';\n\nimport styles from './style.module.scss';\nimport { CustomSchemaForm, CustomSchemaFormInstance, CustomSchemaFormProps } from '../../component/CustomSchemaForm';\n\nexport const PropertyPanel = (props: { node: CNode | CRootNode | null; pluginCtx: CPluginCtx }) => {\n const { node } = props;\n const properties = node?.material?.value.props || [];\n const formRef = useRef<CustomSchemaFormInstance>(null);\n\n useEffect(() => {\n const handel = () => {\n const newVal = node?.getPlainProps?.() || {};\n formRef.current?.setFields(newVal);\n };\n handel();\n node?.emitter.on('onNodeChange', handel);\n return () => {\n node?.emitter.off('onNodeChange', handel);\n };\n }, [node]);\n\n const value = node?.getPlainProps?.() || {};\n\n const onValueChange: CustomSchemaFormProps['onValueChange'] = (val) => {\n node?.updateValue({\n props: val,\n });\n };\n\n const onSetterChange: CustomSchemaFormProps['onSetterChange'] = (keyPaths, setterName) => {\n if (!node) {\n return;\n }\n node.value.configure = node.value.configure || {};\n node.value.configure.propsSetter = node.value.configure.propsSetter || {};\n node.value.configure.propsSetter[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n const customSetterMap = props.pluginCtx.config?.customPropertySetterMap;\n\n return (\n <div className={styles.CFromRenderBox}>\n <CustomSchemaForm\n pluginCtx={props.pluginCtx}\n key={node?.id}\n nodeId={node?.id}\n defaultSetterConfig={node?.value.configure.propsSetter || {}}\n onSetterChange={onSetterChange}\n properties={properties}\n initialValue={value}\n ref={formRef}\n customSetterMap={{\n ...BUILD_IN_ADVANCE_SETTER_MAP,\n ...customSetterMap,\n }}\n onValueChange={onValueChange}\n />\n </div>\n );\n};\n","import { CRightPanelItem } from '../RightPanel/view';\nimport { PropertyPanel } from './view';\n\nexport const PropertyPanelConfig: CRightPanelItem = {\n key: 'Property',\n name: 'Property',\n view: ({ node, pluginCtx }) => <PropertyPanel node={node} pluginCtx={pluginCtx} />,\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.property !== false;\n },\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { useEffect, useRef } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CRightPanelItem } from '../RightPanel/view';\nimport { MonacoEditor, MonacoEditorInstance } from '../../component/MonacoEditor';\n\nexport type ComponentStatePanelProps = {\n node: CNode | CRootNode | null;\n pluginCtx: CPluginCtx;\n};\n\nexport const ComponentStatePanel = (props: ComponentStatePanelProps) => {\n const node = props.node!;\n\n const nodeState = node.value.state || {};\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n useEffect(() => {\n const currentState = node.value.state || {};\n editorRef?.current?.setValue(JSON.stringify(currentState, null, 2));\n }, [node]);\n\n const onValueChange = (newValStr?: string) => {\n try {\n const newVal = JSON.parse(newValStr || '{}');\n node.value.state = newVal;\n node.updateValue();\n } catch (e) {\n console.warn(e);\n }\n };\n\n return (\n <>\n <MonacoEditor\n initialValue={JSON.stringify(nodeState, null, 2)}\n language={'json'}\n options={{\n automaticLayout: true,\n // lineDecorationsWidth: 0,\n tabSize: 2,\n minimap: { enabled: false },\n quickSuggestions: false,\n // lineNumbers: 'off',\n suggestOnTriggerCharacters: false,\n folding: false,\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n onChange={onValueChange}\n />\n </>\n );\n};\n\nexport const ComponentStatePanelConfig: CRightPanelItem = {\n key: 'State',\n name: 'State',\n view: ({ node, pluginCtx }) => {\n if (!node) {\n return <></>;\n }\n return <ComponentStatePanel node={node} pluginCtx={pluginCtx} />;\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.state !== false;\n },\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { useEffect, useMemo, useRef } from 'react';\nimport { CMaterialPropsType, CNode, CRootNode } from '@chamn/model';\nimport { CustomSchemaForm, CustomSchemaFormInstance, CustomSchemaFormProps } from '../../component/CustomSchemaForm';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CRightPanelItem } from '../RightPanel/view';\nimport styles from './style.module.scss';\n\nexport type AdvancePanelProps = {\n node: CNode | CRootNode | null;\n pluginCtx: CPluginCtx;\n};\n\nconst properties: CMaterialPropsType = [\n {\n name: 'id',\n title: {\n label: 'id',\n tip: 'node unique id',\n },\n valueType: 'string',\n setters: [\n {\n componentName: 'StringSetter',\n props: {\n disabled: true,\n variant: 'borderless',\n },\n },\n ],\n },\n {\n name: 'condition',\n title: {\n label: 'Render',\n tip: 'controller component render',\n },\n valueType: 'boolean',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'loop',\n title: 'loop render',\n valueType: 'object',\n setters: [\n {\n componentName: 'ShapeSetter',\n props: {\n collapse: {\n open: true,\n },\n elements: [\n {\n name: 'open',\n title: 'open',\n valueType: 'boolean',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'data',\n title: 'data',\n valueType: 'array',\n setters: [\n {\n componentName: 'ArraySetter',\n initialValue: [],\n props: {\n item: {\n setters: ['JSONSetter', 'ExpressionSetter'],\n initialValue: {},\n },\n },\n },\n 'JSONSetter',\n 'ExpressionSetter',\n ],\n },\n {\n name: 'forName',\n title: {\n label: 'name',\n tip: 'loop element name',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'forIndex',\n title: {\n label: 'index',\n tip: 'loop element index',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'key',\n title: {\n label: 'key',\n tip: 'loop element key',\n },\n valueType: 'expression',\n setters: ['ExpressionSetter'],\n },\n {\n name: 'name',\n title: {\n label: 'variable \\n name',\n tip: 'loop variable name',\n },\n valueType: 'string',\n setters: [\n {\n componentName: 'StringSetter',\n props: {\n prefix: 'loopData',\n },\n },\n ],\n },\n ],\n },\n initialValue: {\n open: false,\n data: [],\n },\n },\n ],\n },\n {\n name: 'refId',\n title: {\n label: 'refId',\n tip: 'unique node flag',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'nodeName',\n title: {\n label: (\n <>\n node <br></br> name\n </>\n ) as any,\n tip: 'alias for node',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n];\n\nexport const AdvancePanel = (props: AdvancePanelProps) => {\n const { node } = props;\n\n const innerProperties = useMemo(() => {\n let newList = properties;\n\n // 如果元素是容器不允许 loop, 或者主动指定不然 loop\n const canLoop =\n !node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.loop === false ||\n !node?.material?.value.isContainer;\n if (!canLoop) {\n newList = newList.filter((el) => (el as any)?.name !== 'loop');\n }\n\n // 如果元素是容器不允许 canRender, 或者主动指定不然 canRender\n const canRender = !node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.render === false;\n\n if (!canRender) {\n newList = newList.filter((el) => (el as any)?.name !== 'condition');\n }\n\n return newList;\n }, [\n node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.loop,\n node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.render,\n node?.material?.value.isContainer,\n ]);\n\n const onSetterChange: CustomSchemaFormProps['onSetterChange'] = (keyPaths, setterName) => {\n if (!node) {\n return;\n }\n node.value.configure = node.value.configure || {};\n node.value.configure.advanceSetter = node.value.configure.advanceSetter || {};\n node.value.configure.advanceSetter[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n const formRef = useRef<CustomSchemaFormInstance>(null);\n\n useEffect(() => {\n const loopObj = node?.value.loop;\n const newValue = {\n id: node?.id,\n condition: node?.value.condition ?? true,\n loop: {\n open: loopObj?.open || false,\n data: loopObj?.data || [],\n forName: loopObj?.forName || 'item',\n forIndex: loopObj?.forIndex || 'index',\n key: loopObj?.key || '',\n name: loopObj?.name || '',\n },\n refId: node?.value.refId,\n nodeName: node?.value.nodeName,\n };\n formRef.current?.setFields(newValue);\n }, [node]);\n\n const onValueChange = (newVal: { refId: string; loop: any; condition: any; nodeName: any }) => {\n if (!node) {\n return;\n }\n node.value.loop = newVal.loop;\n node.value.condition = newVal.condition;\n node.value.refId = newVal.refId;\n node.value.nodeName = newVal.nodeName;\n node.updateValue();\n };\n if (!node) {\n return <></>;\n }\n\n return (\n <div className={styles.advanceBox}>\n <CustomSchemaForm\n nodeId={props.node?.id}\n key={node.id}\n pluginCtx={props.pluginCtx}\n defaultSetterConfig={node.value.configure?.advanceSetter || {}}\n onSetterChange={onSetterChange}\n properties={innerProperties}\n initialValue={{}}\n ref={formRef}\n onValueChange={onValueChange}\n />\n </div>\n );\n};\n\nexport const AdvancePanelConfig: CRightPanelItem = {\n key: 'Advance',\n name: 'Advance',\n view: ({ node, pluginCtx }) => {\n if (!node) {\n return <></>;\n }\n return <AdvancePanel node={node} pluginCtx={pluginCtx} />;\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.advance !== false;\n },\n};\n","const CSSSourceInfo = {\n cssColors: {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n },\n cssKeyValue: {\n 'align-content': {\n values: ['center', 'flex-end', 'flex-start', 'space-around', 'space-between', 'stretch'],\n },\n 'align-items': {\n values: ['baseline', 'center', 'flex-end', 'flex-start', 'stretch'],\n },\n 'align-self': {\n values: [\n 'auto',\n 'normal',\n 'self-start',\n 'self-end',\n 'baseline',\n 'center',\n 'start',\n 'end',\n 'flex-end',\n 'flex-start',\n 'safe',\n 'stretch',\n 'unsafe',\n ],\n },\n all: { values: [] },\n animation: { values: [] },\n 'animation-delay': { values: [] },\n 'animation-direction': {\n values: ['alternate', 'alternate-reverse', 'normal', 'reverse'],\n },\n 'animation-duration': { values: [] },\n 'animation-fill-mode': {\n values: ['backwards', 'both', 'forwards', 'none'],\n },\n 'animation-iteration-count': { values: ['infinite'] },\n 'animation-name': { values: ['none'] },\n 'animation-play-state': { values: ['paused', 'running'] },\n 'animation-timing-function': {\n values: ['cubic-bezier()', 'ease', 'ease-in', 'ease-in-out', 'ease-out', 'linear', 'step-end', 'step-start', 'steps()'],\n },\n 'backface-visibility': { values: ['hidden', 'visible'] },\n background: { values: [], type: 'color' },\n 'background-attachment': { values: ['fixed', 'local', 'scroll'] },\n 'background-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'background-clip': { values: ['border-box', 'content-box', 'padding-box'] },\n 'background-color': { values: [], type: 'color' },\n 'background-image': {\n values: ['image()', 'linear-gradient()', 'radial-gradient()', 'repeating-linear-gradient()', 'repeating-radial-gradient()', 'url()'],\n },\n 'background-origin': {\n values: ['border-box', 'content-box', 'padding-box'],\n },\n 'background-position': {\n values: ['left', 'center', 'right', 'bottom', 'top'],\n },\n 'background-repeat': {\n values: ['no-repeat', 'repeat', 'repeat-x', 'repeat-y', 'round', 'space'],\n },\n 'background-size': { values: ['auto', 'contain', 'cover'] },\n border: { values: [] },\n 'border-collapse': { values: ['collapse', 'separate'] },\n 'border-color': { values: [], type: 'color' },\n 'border-spacing': { values: [] },\n 'border-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-bottom': { values: [] },\n 'border-bottom-color': { values: [], type: 'color' },\n 'border-bottom-left-radius': { values: [] },\n 'border-bottom-right-radius': { values: [] },\n 'border-bottom-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-bottom-width': { values: ['medium', 'thin', 'thick'] },\n 'border-image': { values: ['url()'] },\n 'border-image-outset': { values: [] },\n 'border-image-slice': { values: [] },\n 'border-image-source': { values: [] },\n 'border-image-repeat': { values: ['repeat', 'round', 'space', 'stretch'] },\n 'border-image-width': { values: ['auto'] },\n 'border-left': { values: [] },\n 'border-left-color': { values: [], type: 'color' },\n 'border-left-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-left-width': { values: ['medium', 'thin', 'thick'] },\n 'border-radius': { values: [] },\n 'border-right': { values: [] },\n 'border-right-color': { values: [], type: 'color' },\n 'border-right-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-right-width': { values: ['medium', 'thin', 'thick'] },\n 'border-top': { values: [] },\n 'border-top-color': { values: [], type: 'color' },\n 'border-top-left-radius': { values: [] },\n 'border-top-right-radius': { values: [] },\n 'border-top-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-top-width': { values: ['medium', 'thin', 'thick'] },\n 'border-width': { values: ['medium', 'thin', 'thick'] },\n 'box-decoration-break': { values: ['clone', 'slice'] },\n 'box-shadow': { values: ['none'] },\n 'box-sizing': { values: ['border-box', 'content-box'] },\n bottom: { values: ['auto'] },\n 'break-after': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'break-before': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'caption-side': { values: ['bottom', 'top'] },\n 'caret-color': { values: ['auto'], type: 'color' },\n clear: { values: ['both', 'left', 'none', 'right'] },\n clip: { values: ['auto'] },\n color: { values: [], type: 'color' },\n columns: { values: [] },\n 'column-count': { values: [] },\n 'column-fill': { values: ['auto', 'balance'] },\n 'column-gap': { values: ['normal'] },\n 'column-rule': { values: [] },\n 'column-rule-color': { values: [], type: 'color' },\n 'column-rule-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'column-rule-width': { values: ['medium', 'thin', 'thick'] },\n 'column-span': { values: ['all', 'none'] },\n 'column-width': { values: ['auto'] },\n content: {\n values: ['attr()', 'close-quote', 'no-close-quote', 'no-open-quote', 'normal', 'none', 'open-quote'],\n },\n 'counter-increment': { values: ['none'] },\n 'counter-reset': { values: ['none'] },\n cursor: {\n values: [\n 'alias',\n 'all-scroll',\n 'auto',\n 'cell',\n 'col-resize',\n 'context-menu',\n 'copy',\n 'crosshair',\n 'default',\n 'e-resize',\n 'ew-resize',\n 'grab',\n 'grabbing',\n 'help',\n 'move',\n 'n-resize',\n 'ne-resize',\n 'nesw-resize',\n 'no-drop',\n 'none',\n 'not-allowed',\n 'ns-resize',\n 'nw-resize',\n 'nwse-resize',\n 'pointer',\n 'progress',\n 'row-resize',\n 's-resize',\n 'se-resize',\n 'sw-resize',\n 'text',\n 'vertical-text',\n 'w-resize',\n 'wait',\n 'zoom-in',\n 'zoom-out',\n ],\n },\n direction: { values: ['ltr', 'rtl'] },\n display: {\n values: [\n 'block',\n 'contents',\n 'flex',\n 'flow-root',\n 'grid',\n 'inline',\n 'inline-block',\n 'inline-flex',\n 'inline-grid',\n 'inline-table',\n 'list-item',\n 'none',\n 'run-in',\n 'subgrid',\n 'table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row',\n 'table-row-group',\n ],\n },\n 'empty-cells': { values: ['hide', 'show'] },\n fill: { values: [] },\n filter: {\n values: [\n 'blur()',\n 'brightness()',\n 'contrast()',\n 'custom()',\n 'drop-shadow()',\n 'grayscale()',\n 'hue-rotate()',\n 'invert()',\n 'none',\n 'opacity()',\n 'sepia()',\n 'saturate()',\n 'url()',\n ],\n },\n flex: { values: ['auto', 'none'] },\n 'flex-basis': { values: ['auto'] },\n 'flex-direction': {\n values: ['column', 'column-reverse', 'row', 'row-reverse'],\n },\n 'flex-flow': {\n values: ['column', 'column-reverse', 'nowrap', 'row', 'row-reverse', 'wrap', 'wrap-reverse'],\n },\n 'flex-grow': { values: [] },\n 'flex-shrink': { values: [] },\n 'flex-wrap': { values: ['nowrap', 'wrap', 'wrap-reverse'] },\n float: { values: ['left', 'right', 'none', 'inline-start', 'inline-end'] },\n 'flow-into': { values: ['none'], type: 'named-flow' },\n 'flow-from': { values: ['none'], type: 'named-flow' },\n font: { values: [] },\n 'font-display': {\n values: ['auto', 'block', 'swap', 'fallback', 'optional'],\n },\n 'font-family': {\n values: ['auto', 'cursive', 'fantasy', 'monospace', 'sans-serif', 'serif'],\n },\n 'font-feature-settings': { values: ['normal'] },\n 'font-kerning': { values: ['auto', 'none', 'normal'] },\n 'font-language-override': { values: ['normal'] },\n 'font-size': {\n values: ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large', 'larger', 'smaller'],\n },\n 'font-size-adjust': { values: ['auto', 'none'] },\n 'font-stretch': {\n values: [\n 'condensed',\n 'expanded',\n 'extra-condensed',\n 'extra-expanded',\n 'normal',\n 'semi-condensed',\n 'semi-expanded',\n 'ultra-condensed',\n 'ultra-expanded',\n ],\n },\n 'font-style': { values: ['italic', 'normal', 'oblique'] },\n 'font-synthesis': { values: ['none', 'style', 'weight'] },\n 'font-variant': { values: ['normal', 'small-caps'] },\n 'font-variant-alternates': { values: ['normal'] },\n 'font-variant-caps': {\n values: ['normal', 'small-caps', 'all-small-caps', 'petite-caps', 'all-petite-caps', 'unicase', 'titling-caps'],\n },\n 'font-variant-east-asian': { values: ['normal'] },\n 'font-variant-ligatures': { values: ['normal', 'none'] },\n 'font-variant-numeric': { values: ['normal'] },\n 'font-variant-position': { values: ['normal', 'sub', 'super'] },\n 'font-weight': {\n values: ['bold', 'bolder', 'lighter', 'normal', '100', '200', '300', '400', '500', '600', '700', '800', '900'],\n },\n gap: { values: ['revert-layer'] },\n grid: { values: [] },\n 'grid-area': { values: [] },\n 'grid-auto-columns': { values: [] },\n 'grid-auto-flow': { values: ['row', 'column', 'dense'] },\n 'grid-auto-rows': { values: [] },\n 'grid-column': { values: ['auto'] },\n 'grid-column-end': { values: [] },\n 'grid-column-gap': { values: [] },\n 'grid-column-start': { values: [] },\n 'grid-gap': { values: [] },\n 'grid-row': { values: ['auto'] },\n 'grid-row-end': { values: [] },\n 'grid-row-start': { values: [] },\n 'grid-row-gap': { values: [] },\n 'grid-template': { values: ['none'] },\n 'grid-template-areas': { values: [] },\n 'grid-template-columns': { values: ['auto'] },\n 'grid-template-rows': { values: ['auto'] },\n 'hanging-punctuation': {\n values: ['allow-end', 'first', 'force-end', 'last', 'none'],\n },\n height: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n hyphens: { values: ['auto', 'manual', 'none'] },\n 'image-orientation': { values: [] },\n 'image-resolution': { values: ['from-image', 'snap'] },\n isolation: { values: ['auto', 'isolate'] },\n 'justify-content': {\n values: ['center', 'flex-end', 'flex-start', 'space-around', 'space-between'],\n },\n 'justify-items': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n 'legacy',\n ],\n },\n 'justify-self': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n ],\n },\n left: { values: ['auto'] },\n 'letter-spacing': { values: ['normal'] },\n 'line-height': { values: ['normal'] },\n 'list-style': {\n values: [\n 'none',\n 'url()',\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'inside',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'outside',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n 'list-style-image': { values: ['none', 'url()'] },\n 'list-style-position': { values: ['inside', 'outside'] },\n 'list-style-type': {\n values: [\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'none',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n margin: { values: ['auto'] },\n 'margin-bottom': { values: ['auto'] },\n 'margin-left': { values: ['auto'] },\n 'margin-right': { values: ['auto'] },\n 'margin-top': { values: ['auto'] },\n 'max-height': { values: ['none'] },\n 'max-width': { values: ['none'] },\n 'min-height': { values: [] },\n 'min-width': { values: [] },\n 'mix-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'object-fit': {\n values: ['contain', 'cover', 'fill', 'none', 'scale-down'],\n },\n 'object-position': { values: ['left', 'center', 'right', 'bottom', 'top'] },\n opacity: { values: [] },\n order: { values: [] },\n orphans: { values: [] },\n outline: { values: [] },\n 'outline-color': { values: ['invert'], type: 'color' },\n 'outline-offset': { values: [] },\n 'outline-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'outline-width': { values: ['medium', 'thin', 'thick'] },\n overflow: { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-x': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-y': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-wrap': { values: ['normal', 'anywhere', 'break-word'] },\n padding: { values: [] },\n 'padding-bottom': { values: [] },\n 'padding-left': { values: [] },\n 'padding-right': { values: [] },\n 'padding-top': { values: [] },\n 'page-break-after': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-before': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-inside': { values: ['auto', 'avoid'] },\n perspective: { values: ['none'] },\n 'perspective-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'pointer-events': {\n values: ['all', 'auto', 'fill', 'none', 'painted', 'stroke', 'visible', 'visibleFill', 'visiblePainted', 'visibleStroke'],\n },\n position: { values: ['absolute', 'fixed', 'relative', 'static', 'sticky'] },\n quotes: { values: ['none'] },\n 'region-break-after': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'region-break-before': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'region-break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'region-fragment': { values: ['auto', 'break'] },\n resize: { values: ['both', 'horizontal', 'none', 'vertical'] },\n right: { values: ['auto'] },\n 'scroll-behavior': { values: ['auto', 'smooth'] },\n 'scroll-snap-type': {\n values: ['none', 'x', 'y', 'block', 'inline', 'both', 'mandatory', 'proximity'],\n },\n src: { values: ['url()'] },\n 'shape-image-threshold': { values: [] },\n 'shape-inside': {\n values: ['auto', 'circle()', 'ellipse()', 'outside-shape', 'polygon()', 'rectangle()'],\n },\n 'shape-margin': { values: [] },\n 'shape-outside': {\n values: [\n 'none',\n 'circle()',\n 'ellipse()',\n 'polygon()',\n 'inset()',\n 'margin-box',\n 'border-box',\n 'padding-box',\n 'content-box',\n 'url()',\n 'image()',\n 'linear-gradient()',\n 'radial-gradient()',\n 'repeating-linear-gradient()',\n 'repeating-radial-gradient()',\n ],\n },\n 'tab-size': { values: [] },\n 'table-layout': { values: ['auto', 'fixed'] },\n 'text-align': {\n values: ['start', 'end', 'center', 'left', 'justify', 'right', 'match-parent', 'justify-all'],\n },\n 'text-align-last': { values: ['center', 'left', 'justify', 'right'] },\n 'text-decoration': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-color': { values: [], type: 'color' },\n 'text-decoration-line': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-skip': {\n values: ['edges', 'ink', 'none', 'objects', 'spaces'],\n },\n 'text-decoration-style': {\n values: ['dashed', 'dotted', 'double', 'solid', 'wavy'],\n },\n 'text-emphasis': { values: [] },\n 'text-emphasis-color': { values: [], type: 'color' },\n 'text-emphasis-position': { values: ['above', 'below', 'left', 'right'] },\n 'text-emphasis-style': {\n values: ['circle', 'dot', 'double-circle', 'filled', 'none', 'open', 'sesame', 'triangle'],\n },\n 'text-indent': { values: [] },\n 'text-justify': {\n values: ['auto', 'none', 'inter-word', 'inter-character'],\n },\n 'text-overflow': { values: ['clip', 'ellipsis'] },\n 'text-shadow': { values: [] },\n 'text-rendering': {\n values: ['auto', 'geometricPrecision', 'optimizeLegibility', 'optimizeSpeed'],\n },\n 'text-transform': {\n values: ['capitalize', 'full-width', 'lowercase', 'none', 'uppercase'],\n },\n 'text-underline-position': {\n values: ['alphabetic', 'auto', 'below', 'left', 'right'],\n },\n top: { values: ['auto'] },\n transform: {\n values: [\n 'matrix()',\n 'matrix3d()',\n 'none',\n 'perspective()',\n 'rotate()',\n 'rotate3d()',\n 'rotateX()',\n 'rotateY()',\n 'rotateZ()',\n 'scale()',\n 'scale3d()',\n 'scaleX()',\n 'scaleY()',\n 'scaleZ()',\n 'skewX()',\n 'skewY()',\n 'translate()',\n 'translate3d()',\n 'translateX()',\n 'translateY()',\n 'translateZ()',\n ],\n },\n 'transform-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'transform-style': { values: ['flat', 'preserve-3d'] },\n transition: { values: [] },\n 'transition-delay': { values: [] },\n 'transition-duration': { values: [] },\n 'transition-property': { values: ['all', 'none'] },\n 'transition-timing-function': {\n values: ['cubic-bezier()', 'ease', 'ease-in', 'ease-in-out', 'ease-out', 'linear', 'step-end', 'step-start', 'steps()'],\n },\n 'unicode-bidi': { values: ['bidi-override', 'embed', 'normal'] },\n 'unicode-range': { values: [] },\n 'user-select': { values: ['all', 'auto', 'contain', 'none', 'text'] },\n 'vertical-align': {\n values: ['baseline', 'bottom', 'middle', 'sub', 'super', 'text-bottom', 'text-top', 'top'],\n },\n visibility: { values: ['collapse', 'hidden', 'visible'] },\n 'white-space': {\n values: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap'],\n },\n widows: { values: [] },\n width: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n 'will-change': {\n values: ['auto', 'contents', 'opacity', 'scroll-position'],\n },\n 'word-break': { values: ['normal', 'break-all', 'keep-all'] },\n 'word-spacing': { values: ['normal'] },\n 'z-index': { values: ['auto'] },\n },\n};\n\nexport const CSSProperties = CSSSourceInfo.cssKeyValue;\n\nexport const CSSColors = CSSSourceInfo.cssColors;\n\nexport type CSSPropertiesKey = keyof typeof CSSProperties;\n\nexport const CSSPropertyList = Object.keys(CSSSourceInfo.cssKeyValue);\n","import React, { useContext } from 'react';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CSetter } from '@/component';\nimport { CNode, CRootNode } from '@chamn/model';\n\nexport type ContextState = Record<string, any>;\n\nexport type CRightPanelData = {\n /** 存储 field 默认的 setter 类型*/\n defaultSetterConfig: Record<string, { name: string; setter: string }>;\n /** schema 中的全局 setter map 配置*/\n customSetterMap: Record<string, CSetter>;\n pluginCtx?: CPluginCtx;\n /** 当前编辑节点的 id */\n nodeId?: string;\n nodeModel?: CNode | CRootNode;\n};\n\nexport const CRightPanelContext = React.createContext<CRightPanelData>({\n defaultSetterConfig: {},\n customSetterMap: {},\n});\n\nexport const UseCRightPanelContext = () => {\n return useContext(CRightPanelContext);\n};\n","import { AutoComplete, Button, ConfigProvider } from 'antd';\nimport { MinusOutlined, PlusOutlined } from '@ant-design/icons';\nimport { BaseSelectRef } from 'rc-select';\nimport clsx from 'clsx';\nimport { CNodePropsTypeEnum, JSExpressionPropType } from '@chamn/model';\nimport { InputStatus } from 'antd/es/_util/statusUtils';\nimport { CSSPropertyList } from './cssProperties';\nimport { forwardRef, useState, useEffect, useRef, useImperativeHandle } from 'react';\nimport { ExpressionSetter } from '../CustomSchemaForm/components/Setters/ExpressionSetter';\nimport { UseCRightPanelContext } from '@/plugins/RightPanel/context';\nimport styles from './style.module.scss';\n\nconst defaultPropertyOptions = CSSPropertyList.map((el) => {\n return {\n value: el,\n };\n});\n\nexport type InnerSinglePropertyEditorProps = {\n value?: {\n property: string;\n value: JSExpressionPropType | string;\n };\n onValueChange: (value: { property: string; value: JSExpressionPropType | string }) => void;\n onDelete?: () => void;\n onCreate?: (value: { property: string; value: JSExpressionPropType | string }) => {\n errorKey?: string[];\n } | void;\n mod?: 'create' | 'edit';\n};\n\nexport type InnerSinglePropertyEditorRef = {\n reset: () => void;\n};\n\nexport const SinglePropertyEditor = forwardRef<InnerSinglePropertyEditorRef, InnerSinglePropertyEditorProps>(\n function SinglePropertyEditorCore(props, ref) {\n const [keyFormatStatus, setKeyFormatStatus] = useState<InputStatus>('');\n const rightPanelContext = UseCRightPanelContext();\n const { mod = 'create' } = props;\n\n const [innerValue, setInnerVal] = useState<{\n property: string;\n value: JSExpressionPropType | string;\n }>({\n property: props.value?.property || '',\n value: props.value?.value || '',\n });\n\n useEffect(() => {\n if (props.value) {\n setInnerVal(props.value);\n }\n }, [props.value]);\n\n const [propertyOptions, setPropertyOptions] = useState(defaultPropertyOptions);\n\n const onSearch = (searchText: string) => {\n const newOptions = defaultPropertyOptions.filter((el) => el.value.includes(searchText));\n if (!searchText) {\n setPropertyOptions(defaultPropertyOptions);\n } else {\n setPropertyOptions(newOptions);\n }\n };\n\n const updateOuterValue = (newValue: typeof innerValue) => {\n props.onValueChange({\n ...newValue,\n });\n };\n\n const propertyKeyRef = useRef<BaseSelectRef | null>(null);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n reset: () => {\n setInnerVal({\n property: '',\n value: {\n type: CNodePropsTypeEnum.EXPRESSION,\n value: '',\n },\n });\n propertyKeyRef.current?.focus();\n },\n };\n },\n []\n );\n\n /// 创建时\n const innerOnCreate = () => {\n if (innerValue.property === '') {\n setKeyFormatStatus('error');\n return;\n }\n\n setKeyFormatStatus('');\n const res = props.onCreate?.(innerValue);\n if (res?.errorKey?.includes('key')) {\n setKeyFormatStatus('error');\n }\n };\n\n return (\n <>\n <div className={styles.cssFieldBox}>\n <div className={styles.leftBox}>\n <div className={styles.row}>\n <span className={styles.fieldLabel}>Name</span>\n <AutoComplete\n status={keyFormatStatus}\n disabled={mod === 'edit'}\n ref={propertyKeyRef}\n onSearch={onSearch}\n popupMatchSelectWidth={200}\n value={innerValue.property}\n onChange={(val) => {\n setKeyFormatStatus('');\n const newVal = {\n ...innerValue,\n property: val,\n };\n setInnerVal(newVal);\n updateOuterValue(newVal);\n }}\n className={clsx([styles.inputBox])}\n onBlur={() => {\n updateOuterValue(innerValue);\n }}\n placeholder=\"property\"\n options={propertyOptions}\n />\n </div>\n {mod === 'create' && (\n <div>\n <Button\n size=\"small\"\n block\n icon={\n <PlusOutlined\n style={{\n fontSize: '12px',\n display: 'inline-flex',\n }}\n />\n }\n onClick={innerOnCreate}\n ></Button>\n </div>\n )}\n {mod !== 'create' && (\n <div className={styles.row}>\n <span className={styles.fieldLabel}>Value</span>\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div\n style={{\n width: '100%',\n }}\n >\n <ExpressionSetter\n value={innerValue.value as any}\n setterContext={{\n pluginCtx: rightPanelContext.pluginCtx!,\n setCollapseHeaderExt: undefined,\n onSetterChange: function () {},\n keyPaths: [],\n label: '',\n nodeModel: rightPanelContext.nodeModel as any,\n }}\n onValueChange={function (val) {\n const newVal = {\n ...innerValue,\n value: val,\n };\n console.log('newVal', newVal);\n setInnerVal(newVal);\n updateOuterValue(newVal);\n }}\n mode={'modal'}\n />\n </div>\n </ConfigProvider>\n </div>\n )}\n </div>\n <div className={styles.rightBox}>\n <div\n style={{\n height: '30px',\n }}\n >\n {props.onDelete && mod === 'edit' && (\n <Button\n size=\"small\"\n type=\"text\"\n onClick={() => {\n props.onDelete?.();\n }}\n >\n <MinusOutlined\n style={{\n display: 'inline-flex',\n fontSize: '12px',\n }}\n />\n </Button>\n )}\n </div>\n </div>\n </div>\n </>\n );\n }\n);\n","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { ConfigProvider, message } from 'antd';\nimport { JSExpressionPropType } from '@chamn/model';\n\nimport styles from './style.module.scss';\nimport { InnerSinglePropertyEditorRef, SinglePropertyEditor } from './SingleProperty';\n\nexport type CSSPropertiesVariableBindEditorProps = {\n initialValue?: { property: string; value: string | JSExpressionPropType }[];\n onValueChange?: (val: { property: string; value: string }[]) => void;\n};\nexport type CSSPropertiesVariableBindEditorRef = {\n setValue: (val: { property: string; value: string | JSExpressionPropType }[]) => void;\n};\n\nexport const CSSPropertiesVariableBindEditor = forwardRef<\n CSSPropertiesVariableBindEditorRef,\n CSSPropertiesVariableBindEditorProps\n>(function CSSPropertiesVariableBindEditorCore(props, ref) {\n const [propertyList, setPropertyList] = useState<{ property: string; value: any }[]>([]);\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (val) => {\n setPropertyList(val);\n },\n };\n },\n []\n );\n\n useEffect(() => {\n if (props.initialValue) {\n setPropertyList(props.initialValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [newProperty, setNewProperty] = useState<{\n property: string;\n value: JSExpressionPropType | string;\n }>({\n property: '',\n value: {\n type: 'EXPRESSION',\n value: '',\n },\n });\n\n const innerOnValueChange = (val: typeof propertyList) => {\n props.onValueChange?.(val);\n };\n\n const createPropertyRef = useRef<InnerSinglePropertyEditorRef>(null);\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div className={styles.cssBox}>\n {propertyList.map((el, index) => {\n return (\n <div key={index}>\n <SinglePropertyEditor\n value={el}\n mod={'edit'}\n onValueChange={(newVal) => {\n if (newVal.property === '') {\n propertyList.splice(index, 1);\n setPropertyList([...propertyList]);\n return;\n }\n propertyList[index] = newVal;\n setPropertyList([...propertyList]);\n innerOnValueChange(propertyList);\n }}\n onDelete={() => {\n propertyList.splice(index, 1);\n setPropertyList([...propertyList]);\n innerOnValueChange(propertyList);\n }}\n />\n </div>\n );\n })}\n\n <SinglePropertyEditor\n value={newProperty}\n ref={createPropertyRef}\n mod=\"create\"\n onValueChange={(newVal) => {\n setNewProperty(newVal);\n }}\n onCreate={(val) => {\n const hasExits = propertyList.find((el) => el.property === val.property);\n if (hasExits) {\n message.error('The attribute name already exists, please replace');\n return {\n errorKey: [val.property],\n };\n }\n propertyList.push(val);\n setPropertyList([...propertyList]);\n innerOnValueChange(propertyList);\n setNewProperty({\n property: '',\n value: {\n type: 'EXPRESSION',\n value: '',\n },\n });\n }}\n />\n </div>\n </ConfigProvider>\n );\n});\n","import { forwardRef, useImperativeHandle, useRef } from 'react';\nimport { ConfigProvider } from 'antd';\nimport { CustomSchemaForm, CustomSchemaFormInstance } from '../CustomSchemaForm';\nimport { ClassNameType, CMaterialPropsType, CNode } from '@chamn/model';\nimport { CPluginCtx } from '@/core/pluginManager';\n\nexport type ClassNameEditorProps = {\n initialValue?: ClassNameType[];\n onValueChange?: (val: ClassNameType[]) => void;\n pluginContext: CPluginCtx;\n nodeModel: CNode;\n};\nexport type ClassNameEditorRef = {\n setValue: (val: ClassNameType[]) => void;\n};\n\nconst properties: CMaterialPropsType = [\n {\n title: 'Class Names',\n name: 'className',\n valueType: 'array',\n\n setters: [\n {\n componentName: 'ArraySetter',\n props: {\n sortLabelKey: 'name',\n collapse: {\n open: true,\n },\n item: {\n setters: [\n {\n componentName: 'ShapeSetter',\n props: {\n elements: [\n {\n name: 'name',\n title: '类名',\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'status',\n title: '启用',\n valueType: 'boolean',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n ],\n },\n initialValue: {},\n },\n ],\n initialValue: {\n name: '',\n status: true,\n },\n },\n },\n initialValue: [],\n },\n ],\n },\n];\n\nexport const ClassNameEditor = forwardRef<ClassNameEditorRef, ClassNameEditorProps>(function CSSPropertiesEditorCore(\n props,\n ref\n) {\n const formRef = useRef<CustomSchemaFormInstance>(null);\n useImperativeHandle(ref, () => {\n return {\n setValue(newValue) {\n formRef?.current?.setFields({\n className: newValue || [],\n });\n },\n };\n });\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div>\n <CustomSchemaForm\n ref={formRef}\n initialValue={[]}\n nodeId={props.nodeModel.id}\n pluginCtx={props.pluginContext}\n properties={properties}\n onSetterChange={function () {}}\n onValueChange={(newVal) => {\n props.onValueChange?.(newVal.className || []);\n }}\n defaultSetterConfig={{}}\n ></CustomSchemaForm>\n </div>\n </ConfigProvider>\n );\n});\n","import { MinusOutlined, PlusOutlined } from '@ant-design/icons';\nimport { AutoComplete, Button } from 'antd';\nimport { InputStatus } from 'antd/es/_util/statusUtils';\nimport clsx from 'clsx';\nimport { BaseSelectRef } from 'rc-select';\nimport { forwardRef, useState, useMemo, useRef, useImperativeHandle } from 'react';\nimport { defaultPropertyOptions } from '.';\nimport { CSSProperties, CSSPropertiesKey } from './cssProperties';\nimport styles from './style.module.scss';\n\nexport type SinglePropertyEditorProps = {\n mode: 'create' | 'edit';\n value?: {\n property: string;\n value: string;\n };\n allValues: {\n property: string;\n value: string;\n }[];\n onValueChange?: (value: { property: string; value: string }) => void;\n onCreate?: (value: { property: string; value: string }) => void;\n onDelete?: () => void;\n};\n\nexport type SinglePropertyEditorRef = {\n reset: () => void;\n};\n\nexport const SinglePropertyEditor = forwardRef<SinglePropertyEditorRef, SinglePropertyEditorProps>(\n function SinglePropertyEditorCore(props, ref) {\n const [keyFormatStatus] = useState<InputStatus>('');\n const [valueFormatStatus] = useState<InputStatus>('');\n const { mode = 'edit' } = props;\n const isCreate = useMemo(() => {\n return mode === 'create';\n }, [mode]);\n const innerValue = props.value;\n const [propertyOptions, setPropertyOptions] = useState(defaultPropertyOptions);\n\n const [valueOptions, setValueOptions] = useState<{ value: string }[]>([]);\n const [allValueOptions, setAllValueOptions] = useState<{ value: string }[]>([]);\n\n const onSearch = (searchText: string) => {\n const newOptions = defaultPropertyOptions.filter((el) => el.value.includes(searchText));\n if (!searchText) {\n setPropertyOptions(defaultPropertyOptions);\n } else {\n setPropertyOptions(newOptions);\n }\n };\n\n const updateValueOptions = () => {\n let res: any[] = [];\n const tempProperty = CSSProperties[innerValue?.property as unknown as CSSPropertiesKey];\n\n if (tempProperty) {\n res =\n tempProperty.values?.map((val) => {\n return {\n value: val,\n };\n }) || [];\n }\n\n setValueOptions(res);\n setAllValueOptions(res);\n };\n\n const onValueSearch = (searchText: string) => {\n const newOptions = allValueOptions.filter((el) => el.value.includes(searchText));\n if (!searchText) {\n setValueOptions(allValueOptions);\n } else {\n setValueOptions(newOptions);\n }\n };\n\n const updateKeyValue = (keyVal: string) => {\n props.onValueChange?.({\n property: keyVal,\n value: innerValue?.value || '',\n });\n return true;\n };\n\n const propertyValueRef = useRef<BaseSelectRef | null>(null);\n const propertyKeyRef = useRef<BaseSelectRef | null>(null);\n const [focusState, setFocusState] = useState({\n key: false,\n value: false,\n });\n useImperativeHandle(\n ref,\n () => {\n return {\n reset: () => {\n propertyKeyRef.current?.focus();\n },\n };\n },\n []\n );\n\n return (\n <div className={styles.cssFieldBox}>\n <div\n className={clsx([\n styles.keyField,\n isCreate && styles.inputAuto,\n isCreate && focusState.key && styles.active,\n keyFormatStatus === 'error' && styles.error,\n !isCreate && styles.notEdit,\n ])}\n >\n <AutoComplete\n ref={propertyKeyRef}\n variant={'borderless'}\n disabled={!isCreate}\n onSearch={onSearch}\n status={keyFormatStatus}\n popupMatchSelectWidth={200}\n value={innerValue?.property}\n onChange={(val) => {\n updateKeyValue(val);\n }}\n style={{\n width: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n }}\n onFocus={() => {\n setFocusState({\n key: true,\n value: false,\n });\n }}\n onBlur={() => {\n setFocusState({\n key: false,\n value: false,\n });\n }}\n onKeyDown={(e) => {\n if (e.code === 'Enter') {\n if (!keyFormatStatus) {\n propertyValueRef.current?.focus();\n }\n }\n }}\n placeholder=\"property\"\n options={propertyOptions}\n />\n <span\n style={{\n display: 'inline-block',\n visibility: 'hidden',\n minWidth: '60px',\n padding: '0 2px',\n }}\n >\n {innerValue?.property}\n </span>\n </div>\n <span\n style={{\n padding: '0 2px',\n }}\n >\n :\n </span>\n <AutoComplete\n variant={'borderless'}\n ref={propertyValueRef}\n status={valueFormatStatus}\n popupMatchSelectWidth={200}\n value={innerValue?.value}\n onChange={(val) => {\n updateValueOptions();\n props.onValueChange?.({\n property: innerValue?.property || '',\n value: val || '',\n });\n }}\n style={{\n flex: 1,\n }}\n onFocus={() => {\n setFocusState({\n key: false,\n value: true,\n });\n }}\n onBlur={() => {\n setFocusState({\n key: false,\n value: false,\n });\n }}\n className={clsx([styles.inputAuto, focusState.value && styles.active])}\n placeholder=\"value\"\n onSearch={onValueSearch}\n options={valueOptions}\n onKeyDown={(e) => {\n if (e.code === 'Enter') {\n if (isCreate) {\n props.onCreate?.({\n property: innerValue?.property || '',\n value: innerValue?.value || '',\n });\n }\n }\n }}\n ></AutoComplete>\n\n {props.onDelete && mode === 'edit' && (\n <Button\n size=\"small\"\n type=\"text\"\n onClick={() => {\n props.onDelete?.();\n }}\n >\n <MinusOutlined\n style={{\n display: 'inline-flex',\n fontSize: '12px',\n }}\n />\n </Button>\n )}\n {props.onCreate && mode === 'create' && (\n <div>\n <Button\n size=\"small\"\n type=\"text\"\n icon={\n <PlusOutlined\n style={{\n fontSize: '12px',\n display: 'inline-flex',\n }}\n />\n }\n onClick={() => {\n props.onCreate?.({\n property: innerValue?.property || '',\n value: innerValue?.value || '',\n });\n }}\n ></Button>\n </div>\n )}\n </div>\n );\n }\n);\n","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { CSSPropertyList } from './cssProperties';\nimport styles from './style.module.scss';\n\nimport { ConfigProvider } from 'antd';\nimport { SinglePropertyEditorRef, SinglePropertyEditor } from './signleProperty';\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const defaultPropertyOptions = CSSPropertyList.map((el) => {\n return {\n value: el,\n };\n});\n\nexport type CSSPropertiesEditorProps = {\n initialValue?: { property: string; value: string }[];\n onValueChange?: (val: { property: string; value: string }[]) => void;\n};\n\nexport type CSSPropertiesEditorRef = {\n setValue: (val: { property: string; value: string }[]) => void;\n};\n\nexport const CSSPropertiesEditor = forwardRef<CSSPropertiesEditorRef, CSSPropertiesEditorProps>(\n function CSSPropertiesEditorCore(props, ref) {\n const [propertyList, setPropertyList] = useState<{ id?: string; property: string; value: any }[]>([]);\n const [newAddVal, setNewAddVal] = useState({\n property: '',\n value: '',\n });\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (val) => {\n setPropertyList(val);\n },\n };\n },\n []\n );\n\n useEffect(() => {\n if (props.initialValue) {\n setPropertyList([...props.initialValue]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const innerOnValueChange = (val: typeof propertyList) => {\n props.onValueChange?.(val);\n };\n\n const createPropertyRef = useRef<SinglePropertyEditorRef>(null);\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div className={styles.cssBox}>\n {propertyList.map((el, index) => {\n return (\n <div key={index}>\n <SinglePropertyEditor\n mode=\"edit\"\n allValues={propertyList}\n value={el}\n onValueChange={(newVal) => {\n propertyList[index] = newVal;\n const newList = JSON.parse(JSON.stringify(propertyList));\n setPropertyList(newList);\n innerOnValueChange(newList);\n }}\n onDelete={() => {\n propertyList.splice(index, 1);\n const newList = JSON.parse(JSON.stringify(propertyList));\n setPropertyList(newList);\n innerOnValueChange(newList);\n }}\n />\n </div>\n );\n })}\n <SinglePropertyEditor\n key=\"newInput\"\n allValues={propertyList}\n mode=\"create\"\n value={newAddVal}\n ref={createPropertyRef}\n onValueChange={(newCssVal) => {\n setNewAddVal({\n ...newCssVal,\n });\n }}\n onCreate={(newVal) => {\n if (newVal.property && newVal.value) {\n const newList = [...propertyList];\n newList.push(newVal);\n setPropertyList(newList);\n setNewAddVal({\n property: '',\n value: '',\n });\n innerOnValueChange(newList);\n createPropertyRef.current?.reset();\n }\n }}\n />\n </div>\n </ConfigProvider>\n );\n }\n);\n","import { waitReactUpdate } from '@/utils';\nimport { formatCSSTextProperty, StyleArr, styleList2Text } from '@/utils/css';\nimport { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';\nimport { Card, Collapse, Dropdown, Space } from 'antd';\nimport CheckableTag from 'antd/es/tag/CheckableTag';\nimport { MutableRefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { CSSPropertiesEditor, CSSPropertiesEditorRef } from '../CSSPropertiesEditor';\nimport styles from './style.module.scss';\nimport { isEmpty } from 'lodash-es';\n// state: 'normal' | 'hover' | 'active' | 'focus' | 'first' | 'last' | 'even' | 'odd';\n\nconst DOM_CSS_STATUS = [\n 'normal' as const,\n 'hover' as const,\n 'focus' as const,\n 'focus-within' as const,\n 'focus-visible' as const,\n 'checked' as const,\n 'disable' as const,\n 'active' as const,\n];\n\ntype DomCSSStatusType = typeof DOM_CSS_STATUS[number];\n\nconst DOM_CSS_STATUS_LIST = DOM_CSS_STATUS.map((el) => {\n return {\n key: el,\n label: el,\n };\n});\n\ntype MediaQueryItem = {\n key: string;\n maxWidth: string;\n label: string;\n};\n\nexport type CSSVal = Partial<\n Record<\n DomCSSStatusType,\n Record<\n /** media query key */\n string,\n string\n >\n >\n>;\n\nexport type CSSEditorRef = {\n setValue: (val: CSSVal) => void;\n};\n\nexport type CSSEditorProps = {\n onValueChange?: (val: CSSVal) => void;\n initialValue?: CSSVal;\n handler?: MutableRefObject<CSSEditorRef | null>;\n};\n\nexport const CSSEditor = (props: CSSEditorProps) => {\n const [selectedStateTag, setSelectedStateTag] = useState<DomCSSStatusType>('normal');\n const [mediaQueryList] = useState<MediaQueryItem[]>([\n {\n key: '991',\n maxWidth: '991',\n label: 'Medial Query ( <= 991 px )',\n },\n {\n key: '767',\n maxWidth: '767',\n label: 'Medial Query ( <= 767 px )',\n },\n {\n key: '479',\n maxWidth: '479',\n label: 'Medial Query ( <= 479 px )',\n },\n ]);\n const cssPropertyRefMap = useRef<Record<string, CSSPropertiesEditorRef | null>>({});\n const handleChange = (tag: DomCSSStatusType) => {\n setSelectedStateTag(tag);\n };\n const [domStatusList, setDomStatusList] = useState<string[]>([]);\n const cssStatusList = useMemo(() => {\n return DOM_CSS_STATUS_LIST.filter((el) => {\n return !domStatusList.includes(el.key);\n });\n }, [domStatusList]);\n\n const selectCssStatusList = useMemo(() => {\n return DOM_CSS_STATUS_LIST.filter((el) => {\n return domStatusList.includes(el.key);\n });\n }, [domStatusList]);\n\n const [cssVal, setCssVal] = useState<CSSVal>(props.initialValue ?? {});\n\n useEffect(() => {\n const list = Object.keys(cssVal);\n setDomStatusList(list);\n }, [cssVal]);\n\n const currentCssStateVal = useMemo(() => {\n const res = cssVal?.[selectedStateTag];\n if (!res) {\n return {};\n }\n const newVal: Record<string, ReturnType<typeof formatCSSTextProperty>> = {};\n Object.keys(res).forEach((key) => {\n newVal[key] = formatCSSTextProperty(res[key] || '');\n });\n\n return newVal;\n }, [selectedStateTag, cssVal]);\n\n const initVal = useCallback(() => {\n Object.keys(cssPropertyRefMap.current).forEach((key) => {\n const ref = cssPropertyRefMap.current?.[key];\n const cssVal = currentCssStateVal[key] || [];\n if (ref) {\n ref.setValue(cssVal);\n }\n });\n }, [currentCssStateVal]);\n const initRef = useRef<() => void>();\n initRef.current = initVal;\n\n if (props.handler) {\n props.handler.current = {\n setValue: async (newVal) => {\n if (isEmpty(newVal)) {\n setCssVal({\n normal: {\n normal: '',\n },\n });\n } else {\n setCssVal(newVal);\n }\n await waitReactUpdate();\n initRef.current?.();\n },\n };\n }\n\n // 初始化赋值\n useEffect(() => {\n initRef.current?.();\n }, [selectedStateTag]);\n\n const updateCss = useCallback(\n (mediaKey: string, val: StyleArr) => {\n const newVal = {\n ...cssVal,\n [selectedStateTag]: {\n ...(cssVal[selectedStateTag] || {}),\n [mediaKey]: styleList2Text(val),\n },\n };\n props.onValueChange?.(newVal);\n },\n [cssVal, props, selectedStateTag]\n );\n\n return (\n <>\n <Card\n size=\"small\"\n type=\"inner\"\n title={<span style={{ fontSize: '12px' }}>CSS</span>}\n extra={\n <Dropdown\n menu={{\n items: cssStatusList,\n onClick: (el) => {\n setDomStatusList((oldVal) => {\n return [...oldVal, el.key];\n });\n },\n }}\n >\n <PlusOutlined />\n </Dropdown>\n }\n >\n <Space\n size={[0, 8]}\n wrap\n style={{\n paddingBottom: '10px',\n }}\n >\n {selectCssStatusList.map((tag) => {\n const checked = selectedStateTag.includes(tag.key);\n return (\n <CheckableTag\n key={tag.key}\n style={{\n border: !checked ? '1px solid rgb(216 216 216 / 82%)' : '1px solid rgba(0,0,0,0))',\n }}\n checked={checked}\n onChange={() => handleChange(tag.key)}\n className={styles.stateTag}\n >\n {tag.label}\n {tag.key !== 'normal' && (\n <MinusCircleOutlined\n className={styles.stateTagClose}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setDomStatusList((oldVal) => {\n return oldVal.filter((el) => {\n return el !== tag.key;\n });\n });\n setSelectedStateTag('normal');\n }}\n />\n )}\n </CheckableTag>\n );\n })}\n </Space>\n\n <Collapse\n defaultActiveKey={['normal']}\n bordered={false}\n style={{\n marginBottom: '10px',\n }}\n onChange={async () => {\n await waitReactUpdate();\n initRef.current?.();\n }}\n items={[\n {\n key: 'normal',\n label: <span>Default</span>,\n children: (\n <CSSPropertiesEditor\n ref={(ref) => {\n cssPropertyRefMap.current['normal'] = ref;\n }}\n onValueChange={(val) => updateCss('normal', val)}\n initialValue={currentCssStateVal['normal']}\n />\n ),\n },\n ...mediaQueryList.map((el) => {\n return {\n key: el.key,\n label: <span>{el.label}</span>,\n children: (\n <CSSPropertiesEditor\n ref={(ref) => {\n cssPropertyRefMap.current[el.key] = ref;\n }}\n onValueChange={(val) => updateCss(el.key, val)}\n />\n ),\n };\n }),\n ]}\n ></Collapse>\n </Card>\n </>\n );\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CRightPanelItem, RightPanelOptions } from '../RightPanel/view';\n\nimport styles from './style.module.scss';\nimport {\n CSSPropertiesVariableBindEditor,\n CSSPropertiesVariableBindEditorRef,\n} from '../../component/CSSPropertiesVariableBindEditor';\nimport { Collapse } from 'antd';\nimport { ClassNameEditor, ClassNameEditorRef } from '@/component/ClassNameEditor';\nimport { CSSEditor, CSSEditorRef, CSSVal } from '@/component/CSSEditor';\nimport {\n formatStyleProperty,\n formatCssToNodeVal,\n formatNodeValToEditor,\n StyleArr,\n styleArr2Obj,\n styleObjToArr,\n} from '@/utils/css';\nimport { StyleUIPanel, StyleUIPanelRef } from '@/component/StylePanel';\n\nexport const VisualPanelPlus = (props: RightPanelOptions) => {\n const styleVariableRef = useRef<CSSPropertiesVariableBindEditorRef>(null);\n\n const node = props.node!;\n const classNameList = useMemo(() => {\n const tempList = node.value.classNames || [];\n return tempList;\n }, [node]);\n const cssEditorRef = useRef<CSSEditorRef>(null);\n const cssUIRef = useRef<StyleUIPanelRef>(null);\n const classNameEditorRef = useRef<ClassNameEditorRef>(null);\n const formatStyle = useMemo(() => {\n return formatStyleProperty(node.value.style || []);\n }, [node.value.style]);\n\n const lastNode = useRef<CNode | CRootNode>();\n\n const updatePanelValue = useCallback(() => {\n lastNode.current = node;\n const newStyle = node.value.style || [];\n const { expressionProperty, normalProperty } = formatStyleProperty(newStyle);\n const fCss = formatNodeValToEditor(node.value.css);\n styleVariableRef.current?.setValue([...expressionProperty]);\n cssEditorRef.current?.setValue(fCss);\n classNameEditorRef.current?.setValue(node.value.classNames || []);\n cssUIRef.current?.setValue(styleArr2Obj(normalProperty) || {});\n }, [node]);\n\n useEffect(() => {\n updatePanelValue();\n node.emitter.on('onNodeChange', updatePanelValue);\n node.emitter.on('onReloadPage', updatePanelValue);\n return () => {\n node.emitter.off('onNodeChange', updatePanelValue);\n node.emitter.off('onReloadPage', updatePanelValue);\n };\n }, [node.emitter, node.id, props.activeTab, updatePanelValue]);\n\n const onUpdateStyleVariable = (styleArr: StyleArr) => {\n // merge style\n const newStyleList = [...formatStyle.normalProperty, ...styleArr];\n node.value.style = newStyleList;\n node.updateValue();\n };\n\n const onUpdateStyle = (styleArr: StyleArr) => {\n // merge style\n const newStyleList = [...styleArr, ...formatStyle.expressionProperty];\n node.value.style = newStyleList;\n node.updateValue();\n };\n\n const onUpdateCss = (val: CSSVal) => {\n // class name 不能以数字开头,这里使用c_前缀\n node.value.css = formatCssToNodeVal(`c_${node.id}`, val);\n node.updateValue();\n };\n\n return (\n <div className={styles.visualPanelBox}>\n <div\n style={{\n marginBottom: '10px',\n }}\n >\n <StyleUIPanel\n ref={cssUIRef}\n onValueChange={(newNormaCss) => {\n onUpdateStyle(styleObjToArr(newNormaCss));\n }}\n />\n <Collapse\n bordered={false}\n style={{\n marginBottom: '10px',\n }}\n defaultActiveKey={['origin-css-edit']}\n onChange={(val) => {\n if (val.length) {\n updatePanelValue();\n }\n }}\n items={[\n {\n key: 'origin-css-edit',\n label: <span className={styles.header}>Style Variable</span>,\n children: (\n <CSSPropertiesVariableBindEditor\n ref={styleVariableRef}\n initialValue={formatStyle.expressionProperty}\n onValueChange={(val) => {\n onUpdateStyleVariable(val);\n }}\n />\n ),\n },\n ]}\n ></Collapse>\n <div\n style={{\n paddingTop: '10px',\n }}\n >\n <ClassNameEditor\n nodeModel={props.node as any}\n initialValue={classNameList}\n ref={classNameEditorRef}\n pluginContext={props.pluginCtx}\n onValueChange={(newVal) => {\n node.value.classNames = newVal;\n node.updateValue();\n }}\n />\n </div>\n <CSSEditor handler={cssEditorRef} onValueChange={onUpdateCss} />\n </div>\n </div>\n );\n};\n\nexport const VisualPanelPlusConfig: CRightPanelItem = {\n key: 'VisualPanelPlus',\n name: 'Visual',\n view: ({ node, pluginCtx, activeTab }) => {\n if (node) {\n return <VisualPanelPlus node={node} pluginCtx={pluginCtx} activeTab={activeTab} />;\n } else {\n return <></>;\n }\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.visual !== false;\n },\n};\n","import { useEffect, useState } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport styles from './style.module.scss';\nimport { Button, Select } from 'antd';\nimport { ActionFlowSetter } from '@/component/CustomSchemaForm/components/Setters/ActionFlowSetter';\nimport { DeleteOutlined } from '@ant-design/icons';\nimport { ON_DID_RENDER, ON_WILL_DESTROY } from '@chamn/render';\n\nexport type EventPanelProps = {\n node: CNode | CRootNode | null;\n pluginCtx: CPluginCtx;\n};\n\nconst INNER_EVENT_LIST_MAP = [\n {\n label: '初始化完成后',\n value: ON_DID_RENDER,\n },\n {\n label: '组件销毁之前',\n value: ON_WILL_DESTROY,\n },\n];\n\nexport const EventPanel = (props: EventPanelProps) => {\n const { node } = props;\n const [eventList, updateEventList] = useState<\n {\n label: string;\n value: string;\n }[]\n >([]);\n\n const nodeEventList = node?.value.eventListener;\n\n useEffect(() => {\n const list =\n node?.material?.value.events?.map((evt) => {\n if (typeof evt === 'string') {\n return {\n label: evt,\n value: evt,\n };\n }\n return {\n label: evt.name || evt.event,\n value: evt.event,\n };\n }) || [];\n updateEventList([...INNER_EVENT_LIST_MAP, ...list]);\n }, [node?.id, node?.material?.value.events]);\n const [currentEvent, updateCurrentEvent] = useState<string>();\n\n const onChange = (value: string) => {\n updateCurrentEvent(value);\n };\n\n if (!node) {\n return <></>;\n }\n\n return (\n <div className={styles.eventBox}>\n <div style={{ display: 'flex' }}>\n <Select\n value={currentEvent}\n showSearch\n placeholder=\"Select a person\"\n optionFilterProp=\"label\"\n onChange={onChange}\n allowClear\n style={{ width: '100%' }}\n options={eventList}\n />\n <Button\n type=\"primary\"\n style={{ marginLeft: '10px' }}\n onClick={() => {\n const newEvent = currentEvent;\n if (!newEvent) {\n return;\n }\n node.value.eventListener = [\n ...(node.value.eventListener || []),\n {\n name: newEvent,\n func: {\n type: 'ACTION',\n handler: [],\n // TODO: 待实现\n params: [],\n },\n },\n ];\n node.updateValue();\n updateCurrentEvent(undefined);\n }}\n >\n Add\n </Button>\n </div>\n <div style={{ marginTop: '16px' }}>\n {nodeEventList?.map((event: any, index: number) => {\n const eventLabel = eventList.find((el) => el.value === event.name);\n return (\n <div\n key={index}\n style={{\n padding: '8px 12px',\n borderRadius: '4px',\n backgroundColor: '#f5f5f5',\n marginBottom: '8px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n width: '100%',\n }}\n >\n <ActionFlowSetter\n value={event.func}\n onValueChange={(val: { handler: any }) => {\n event.func.handler = val.handler;\n node?.updateValue();\n }}\n setterContext={{\n pluginCtx: props.pluginCtx,\n onSetterChange: () => {},\n keyPaths: [''],\n label: '',\n nodeModel: node as any,\n }}\n >\n <span>{eventLabel?.label || event.name}</span>\n </ActionFlowSetter>\n </div>\n <Button\n type=\"text\"\n size=\"small\"\n danger\n icon={<DeleteOutlined />}\n onClick={(e) => {\n e.stopPropagation();\n const newEventList = [...(node?.value.eventListener || [])];\n newEventList.splice(index, 1);\n node!.value.eventListener = newEventList;\n node?.updateValue();\n }}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n","import { CRightPanelItem } from '../RightPanel/view';\nimport { EventPanel } from './panel';\n\nexport const EventPanelConfig: CRightPanelItem = {\n key: 'Event',\n name: 'Event',\n view: ({ node, pluginCtx }) => {\n if (!node) {\n return <></>;\n }\n return <EventPanel node={node} pluginCtx={pluginCtx} />;\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.advance !== false;\n },\n};\n","import { CNode, CRootNode } from '@chamn/model';\nimport { Empty, Tabs } from 'antd';\nimport React from 'react';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { PropertyPanelConfig } from '../PropertyPanel';\nimport { ComponentStatePanelConfig } from '../ComponentStatePanel';\nimport { AdvancePanelConfig } from '../AdvancePanel';\nimport styles from './style.module.scss';\nimport { VisualPanelPlusConfig } from '../VisualPanelPlus';\nimport { EventPanelConfig } from '../EventPanel';\nimport { CRightPanelContext } from './context';\n\nexport type RightPanelOptions = { node: CNode | CRootNode | null; pluginCtx: CPluginCtx; activeTab: string };\n\nexport type CRightPanelItem = {\n key: string;\n name: string | ((props: RightPanelOptions) => React.ReactNode);\n view: (props: RightPanelOptions) => React.ReactNode;\n show?: (options: RightPanelOptions) => boolean;\n};\n\ninterface RightPanelProps {\n pluginCtx: CPluginCtx;\n}\n\ninterface RightPanelState {\n node: CNode | CRootNode | null;\n activeKey: string;\n panels: CRightPanelItem[];\n displayPanels: CRightPanelItem[];\n}\n\nexport class RightPanel extends React.Component<RightPanelProps, RightPanelState> {\n constructor(props: RightPanelProps) {\n super(props);\n this.state = {\n node: props.pluginCtx.engine.getActiveNode(),\n activeKey: 'Visual',\n panels: [\n // AdvancePanelConfig,\n PropertyPanelConfig,\n VisualPanelPlusConfig,\n EventPanelConfig,\n ComponentStatePanelConfig,\n AdvancePanelConfig,\n ],\n displayPanels: [],\n };\n }\n\n addPanel = (panel: CRightPanelItem) => {\n const newPanels = [...this.state.panels, panel];\n this.setState({\n panels: newPanels,\n });\n this.updatePanels();\n };\n\n removePanel = (panelName: string) => {\n const newPanels = this.state.panels.filter((el) => el.name !== panelName);\n this.setState({\n panels: newPanels,\n });\n this.updatePanels();\n };\n\n replacePanel = (panelName: string, newPanel: CRightPanelItem) => {\n const targetIndex = this.state.panels.findIndex((el) => el.name === panelName);\n const newPanels = [...this.state.panels];\n if (targetIndex > -1) {\n newPanels[targetIndex] = newPanel;\n }\n this.setState({\n panels: newPanels,\n });\n this.updatePanels();\n };\n\n choosePanel = (panelName: string) => {\n this.setState({\n activeKey: panelName,\n });\n this.updatePanels();\n };\n\n /** 更新被展示的 panel, 根据 panel 的 show 方法 */\n updatePanels = () => {\n const { pluginCtx } = this.props;\n const { node, panels } = this.state;\n const newPanels = panels;\n let val: {\n panels: CRightPanelItem[];\n displayPanels: CRightPanelItem[];\n } = { panels: [], displayPanels: [] };\n if (node) {\n const panelParams: RightPanelOptions = { node: node, pluginCtx, activeTab: this.state.activeKey };\n const displayPanels = newPanels.filter((panel) => {\n if (panel.show === undefined) {\n return true;\n } else {\n return panel.show(panelParams);\n }\n });\n // 获取物料中的自定义 panel\n const customTabs = node.material?.value.advanceCustom?.rightPanel?.customTabs || [];\n displayPanels.concat(customTabs);\n val = {\n panels: newPanels,\n displayPanels,\n };\n } else {\n val = {\n panels: newPanels,\n displayPanels: [],\n };\n }\n this.setState(val);\n return val;\n };\n\n onNodeChange = ({ node }: any) => {\n const { pluginCtx } = this.props;\n const { panels, activeKey } = this.state;\n const panelParams: RightPanelOptions = { node: node, pluginCtx, activeTab: this.state.activeKey };\n const displayPanels = panels.filter((panel) => {\n if (panel.show === undefined) {\n return true;\n } else {\n return panel.show(panelParams);\n }\n });\n const firstPanelKey = displayPanels.find((_, index) => index === 0)?.key || '';\n const isExitsCurrent = displayPanels.find((el) => el.key === activeKey);\n if (!isExitsCurrent) {\n this.setState({\n activeKey: firstPanelKey,\n node,\n displayPanels,\n });\n } else {\n this.setState({\n node,\n displayPanels,\n });\n }\n };\n\n componentDidMount(): void {\n const { pluginCtx } = this.props;\n pluginCtx.globalEmitter.on('onSelectNodeChange', (args) => {\n setTimeout(() => {\n this.onNodeChange(args);\n }, 10);\n });\n pluginCtx.pageModel.emitter.on('*', () => {\n const currentSelectNode = pluginCtx.engine.getActiveNode();\n this.onNodeChange({ node: currentSelectNode });\n });\n const { displayPanels } = this.updatePanels();\n const firstPanelKey = displayPanels.find((_, index) => index === 0)?.key || '';\n const isExitsCurrent = displayPanels.find((el) => el.key === this.state.activeKey);\n\n if (!isExitsCurrent) {\n this.setState({\n activeKey: firstPanelKey,\n });\n }\n\n pluginCtx.pluginReadyOk();\n }\n\n render() {\n const { displayPanels, node, activeKey } = this.state;\n const { pluginCtx } = this.props;\n if (!node) {\n return (\n <div style={{ overflow: 'hidden' }}>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={'Please select a node from left view'} />\n </div>\n );\n }\n const panelParams = { node: node, pluginCtx, activeTab: this.state.activeKey };\n const customSetterMap = pluginCtx.config?.customPropertySetterMap;\n\n return (\n <CRightPanelContext.Provider\n value={{\n customSetterMap: { ...customSetterMap },\n defaultSetterConfig: {},\n nodeId: this.state.node?.id,\n nodeModel: this.state.node as any,\n pluginCtx: this.props.pluginCtx,\n }}\n >\n <div className={styles.rightPanelContainer}>\n <Tabs\n activeKey={activeKey}\n tabPosition=\"top\"\n style={{\n flex: 1,\n height: '100%',\n }}\n onChange={(activeKey) => {\n this.setState({\n activeKey,\n });\n }}\n items={displayPanels.map((p) => {\n return {\n label: (\n <div style={{ padding: '0 10px' }}>{typeof p.name === 'string' ? p.name : p.name?.(panelParams)}</div>\n ),\n key: p.key,\n children: p.view(panelParams),\n };\n })}\n />\n </div>\n </CRightPanelContext.Provider>\n );\n }\n}\n","import React from 'react';\nimport { CPlugin } from '../../core/pluginManager';\nimport { RightPanel } from './view';\nimport { RightPanelConfig } from './type';\n\nconst PLUGIN_NAME = 'RightPanel';\nexport const RightPanelPlugin: CPlugin<RightPanelConfig> = () => {\n const uiHandle = React.createRef<RightPanel>();\n return {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const workbench = ctx.getWorkbench();\n workbench.replaceRightView(<RightPanel ref={uiHandle} pluginCtx={ctx} />);\n },\n async destroy() {},\n export: () => {\n return uiHandle?.current;\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n };\n};\n\nRightPanelPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const zh_CN: Record<string, any> = {\n pluginName: '全局状态',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Global State',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","/* eslint-disable react-refresh/only-export-components */\nimport { useEffect, useRef } from 'react';\nimport { DatabaseOutlined } from '@ant-design/icons';\nimport { CPlugin, CPluginCtx } from '../../core/pluginManager';\nimport { withTranslation } from 'react-i18next';\nimport localize from './localize';\nimport { MonacoEditor, MonacoEditorInstance } from '../../component/MonacoEditor';\nimport styles from './style.module.scss';\n\nconst PLUGIN_NAME = 'GlobalState';\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\ntype GlobalStatePanelProps = {\n pluginCtx: CPluginCtx;\n};\n\nlet triggerChangeBySelf = false;\n\nconst GlobalStatePanel = (props: GlobalStatePanelProps) => {\n const { pluginCtx } = props;\n const rootState = pluginCtx.pageModel.value.componentsTree.value.state || {};\n // 表示是不是自己触发的值更新\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n useEffect(() => {\n editorRef?.current?.setValue(JSON.stringify(rootState, null, 2));\n // 正常情况下, 只有 reloadPage 才需要同步数据\n pluginCtx.pageModel.emitter.on('onReloadPage', () => {\n if (triggerChangeBySelf) {\n triggerChangeBySelf = false;\n return;\n }\n editorRef.current?.setValue(JSON.stringify(pluginCtx.pageModel.value.componentsTree.value.state, null, 2));\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onValueChange = (newValStr?: string) => {\n try {\n const newVal = JSON.parse(newValStr || '{}');\n pluginCtx.pageModel.value.componentsTree.value.state = newVal;\n triggerChangeBySelf = true;\n pluginCtx.pageModel.value.componentsTree.updateValue();\n } catch (e) {\n console.warn(e);\n }\n };\n\n return (\n <div className={styles.box}>\n <MonacoEditor\n initialValue={JSON.stringify(pluginCtx.pageModel.value.componentsTree.value.state, null, 2)}\n language={'json'}\n options={{\n automaticLayout: true,\n tabSize: 2,\n minimap: { enabled: false },\n quickSuggestions: false,\n suggestOnTriggerCharacters: false,\n folding: false,\n comments: {},\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n beforeMount={() => {\n // monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n // validate: true,\n // allowComments: true, // 启用注释\n // });\n }}\n onChange={onValueChange}\n />\n </div>\n );\n};\n\nexport const GlobalStatePanelPlugin: CPlugin = {\n name: PLUGIN_NAME,\n async init(ctx) {\n const { i18n } = ctx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n const GlobalStatePanelWithLocalize = withTranslation(i18nNamespace)(GlobalStatePanel);\n const Title = withTranslation(i18nNamespace)(({ t }) => <>{t('pluginName')}</>);\n const workbench = ctx.getWorkbench();\n workbench.addLeftPanel({\n title: <Title />,\n name: PLUGIN_NAME,\n icon: <DatabaseOutlined />,\n render: <GlobalStatePanelWithLocalize pluginCtx={ctx} />,\n });\n },\n async destroy() {},\n export: () => {\n return {};\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\nGlobalStatePanelPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","import React, { useRef, useState } from 'react';\nimport { Modal } from 'antd';\nimport { MonacoEditor, MonacoEditorInstance } from '../../component/MonacoEditor';\nimport { CPage } from '@chamn/model';\nimport { waitReactUpdate } from '../../utils';\nimport { DesignerPluginInstance } from '../Designer/type';\nimport { EnginContext } from '@/type';\n\nexport type DisplaySourceSchemaProps = {\n pageModel: CPage;\n engineCtx: EnginContext;\n children: React.ReactNode;\n};\n\nexport const DisplaySourceSchema = (props: DisplaySourceSchemaProps) => {\n const initialValue = props.pageModel.export();\n const { engineCtx } = props;\n const [open, setOpen] = useState(false);\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n return (\n <>\n <div\n onClick={() => {\n setOpen(true);\n }}\n >\n {props.children}\n </div>\n <Modal\n open={open}\n title=\"Source Schema\"\n width={'100%'}\n onCancel={() => setOpen(false)}\n onOk={async () => {\n setOpen(false);\n const newPage = editorRef.current?.getValue();\n if (!newPage) {\n return;\n }\n const newPageJSON = JSON.parse(newPage);\n props.pageModel.updatePage(newPageJSON);\n await waitReactUpdate();\n const currentSelectNode = engineCtx.engine.getActiveNode();\n const designerPluginInstance = await engineCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n const nodeId = currentSelectNode?.id || '';\n designerPluginInstance?.ctx.emitter.on('ready', () => {\n const designerExport = designerPluginInstance.export;\n designerExport.selectNode(nodeId);\n });\n if (designerPluginInstance) {\n const designerExport = designerPluginInstance.export;\n designerExport.selectNode(nodeId);\n }\n }}\n style={{\n height: 'calc(100vh - 50px)',\n top: '25px',\n }}\n destroyOnClose\n >\n <div style={{ width: '100%', height: 'calc(100vh - 200px)' }}>\n <MonacoEditor\n initialValue={JSON.stringify(initialValue, null, 2)}\n language={'json'}\n options={{\n automaticLayout: true,\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n />\n </div>\n </Modal>\n </>\n );\n};\n","import { waitReactUpdate } from '@/utils';\nimport { CPageDataType } from '@chamn/model';\nimport { cloneDeep, debounce } from 'lodash-es';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { HistoryPluginType } from './type';\n\nconst PLUGIN_NAME = 'History' as const;\n\nexport const HistoryPlugin: HistoryPluginType = (ctx) => {\n const CTX: CPluginCtx | null = ctx;\n const dataStore = {\n historyRecords: [] as CPageDataType[],\n currentStepIndex: 0,\n };\n\n let originalPageRecord: CPageDataType | null = null;\n const pageSchema = ctx.pageModel.export();\n originalPageRecord = pageSchema;\n dataStore.historyRecords.push(pageSchema);\n\n const loadPage = async (page: CPageDataType) => {\n if (!CTX) {\n return;\n }\n CTX.pageModel.reloadPage(page);\n await waitReactUpdate();\n };\n\n const resObj = {\n addStep: () => {\n const { currentStepIndex, historyRecords } = dataStore;\n const newPage = ctx.pageModel.export();\n if (currentStepIndex !== historyRecords.length - 1) {\n dataStore.historyRecords = historyRecords.slice(0, currentStepIndex + 1);\n }\n dataStore.historyRecords.push(newPage);\n dataStore.currentStepIndex = historyRecords.length - 1;\n },\n reset: async () => {\n const ctx = CTX;\n if (!ctx) {\n console.warn('plugin ctx is null, pls check it');\n return;\n }\n if (!originalPageRecord) {\n return;\n }\n dataStore.historyRecords = [];\n loadPage(originalPageRecord);\n },\n preStep: () => {\n const { currentStepIndex, historyRecords } = dataStore;\n if (!resObj.canGoPreStep()) {\n return;\n }\n const newIndex = currentStepIndex - 1;\n dataStore.currentStepIndex = newIndex;\n const page = cloneDeep(historyRecords[newIndex]);\n loadPage(page);\n },\n nextStep: () => {\n if (!resObj.canGoNextStep()) {\n return;\n }\n const { currentStepIndex, historyRecords } = dataStore;\n const newIndex = currentStepIndex + 1;\n dataStore.currentStepIndex = newIndex;\n const page = cloneDeep(historyRecords[newIndex]);\n return loadPage(page);\n },\n canGoPreStep: () => {\n const { currentStepIndex } = dataStore;\n if (currentStepIndex <= 0) {\n return false;\n }\n return true;\n },\n canGoNextStep: () => {\n const { currentStepIndex, historyRecords } = dataStore;\n if (currentStepIndex >= historyRecords.length - 1) {\n return false;\n }\n return true;\n },\n };\n\n const debounceAddStep = debounce(() => {\n resObj.addStep();\n }, 500);\n\n return {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n ctx.pageModel.emitter.on('onNodeChange', () => {\n debounceAddStep();\n });\n ctx.pageModel.emitter.on('onPageChange', () => {\n resObj.addStep();\n });\n ctx.pluginReadyOk();\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return resObj;\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n };\n};\n\nHistoryPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false;\n\n// Special Keys\nexport const _keyMap: Record<string, number> = {\n backspace: 8,\n '⌫': 8,\n tab: 9,\n clear: 12,\n enter: 13,\n '↩': 13,\n return: 13,\n esc: 27,\n escape: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n del: 46,\n delete: 46,\n ins: 45,\n insert: 45,\n home: 36,\n end: 35,\n pageup: 33,\n pagedown: 34,\n capslock: 20,\n num_0: 96,\n num_1: 97,\n num_2: 98,\n num_3: 99,\n num_4: 100,\n num_5: 101,\n num_6: 102,\n num_7: 103,\n num_8: 104,\n num_9: 105,\n num_multiply: 106,\n num_add: 107,\n num_enter: 108,\n num_subtract: 109,\n num_decimal: 110,\n num_divide: 111,\n '⇪': 20,\n ',': 188,\n '.': 190,\n '/': 191,\n '`': 192,\n '-': isff ? 173 : 189,\n '=': isff ? 61 : 187,\n ';': isff ? 59 : 186,\n \"'\": 222,\n '[': 219,\n ']': 221,\n '\\\\': 220,\n};\n\n// Modifier Keys\nexport const _modifier: any = {\n // shiftKey\n '⇧': 16,\n shift: 16,\n // altKey\n '⌥': 18,\n alt: 18,\n option: 18,\n // ctrlKey\n '⌃': 17,\n ctrl: 17,\n control: 17,\n // metaKey\n '⌘': 91,\n cmd: 91,\n command: 91,\n};\n\nexport const modifierMap = {\n 16: 'shiftKey',\n 18: 'altKey',\n 17: 'ctrlKey',\n 91: 'metaKey',\n\n shiftKey: 16,\n ctrlKey: 17,\n altKey: 18,\n metaKey: 91,\n};\n\nexport const _mods = {\n 16: false,\n 18: false,\n 17: false,\n 91: false,\n};\n\n// F1~F12 special key\nfor (let k = 1; k < 20; k++) {\n _keyMap[`f${k}`] = 111 + k;\n}\n\n// 返回键码\nexport const defaultGetCode = (x: string) =>\n _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\n\nconst getKey = (x: number) => Object.keys(_keyMap).find((k) => _keyMap[k] === x);\nconst getModifier = (x: number) => Object.keys(_modifier).find((k) => _modifier[k] === x);\n\nexport const getKeyString = (c: number) => {\n return getKey(c) || getModifier(c) || String.fromCharCode(c);\n};\n","import { defaultGetCode, getKeyString } from './keymap';\n\nexport class HotKeysManager {\n private splitStr = '_';\n // 按下的键盘按键列表\n private downKeyCodeList: number[] = [];\n private elements: HTMLElement[];\n private disposeEventCbList: (() => void)[] = [];\n\n /** 是否禁用热键 */\n private disable: boolean = false;\n\n /** 快捷操作按键记录 */\n private hotActionMap: Record<string, () => void> = {};\n\n constructor(options: { elements: HTMLElement[]; customGetKeyCodeByEvent?: (event: KeyboardEvent) => number }) {\n this.elements = options.elements;\n this.init();\n }\n\n setDisable(status: boolean) {\n this.disable = status;\n }\n\n init() {\n // 处理 keyup , 移除按键记录\n const disposeListCb = this.elements.map((el) => this.registerKeyEvent(el));\n this.disposeEventCbList = [...disposeListCb];\n }\n\n addElement(el: HTMLElement) {\n const disposeCb = this.registerKeyEvent(el);\n this.disposeEventCbList.push(disposeCb);\n }\n\n registerKeyEvent(el: HTMLElement) {\n const triggerAction = this.getTriggerHotkeyDebounce();\n // 收集所有的 keys\n const keydownCb = (event: KeyboardEvent) => {\n // 表单控件过滤 默认表单控件不触发快捷键\n if (this.filterInputElement(event)) return;\n\n const key = event.keyCode || event.which || event.charCode;\n if (!this.downKeyCodeList.includes(key)) {\n this.downKeyCodeList.push(key);\n }\n triggerAction();\n };\n el?.addEventListener('keydown', keydownCb);\n\n const keyupCb = (event: KeyboardEvent) => {\n setTimeout(() => {\n // 表单控件过滤 默认表单控件不触发快捷键\n if (this.filterInputElement(event)) return;\n\n const key = event.keyCode || event.which || event.charCode;\n\n const findKeyIndex = this.downKeyCodeList.findIndex((el) => el === key);\n if (findKeyIndex >= 0) {\n this.downKeyCodeList.splice(findKeyIndex, 1);\n }\n\n // 用户释放了所有的按键\n }, 0);\n };\n el?.addEventListener('keyup', keyupCb);\n\n const clearKeyDownList = () => {\n this.downKeyCodeList = [];\n };\n // 修正某些意外情况下,文档失焦,导致快捷键失效等情况\n window?.addEventListener('blur', clearKeyDownList);\n\n return () => {\n el.removeEventListener('keydown', keydownCb);\n el.removeEventListener('keyup', keyupCb);\n window?.removeEventListener('blur', clearKeyDownList);\n };\n }\n\n /** 添加快捷操作 */\n addHotAction(keys: (number | string)[], cb: () => void) {\n const newKeysCode = keys.map((el) => {\n if (typeof el !== 'number') {\n return this.getKeyCodeByLabel(el);\n } else {\n return el;\n }\n });\n this.hotActionMap[newKeysCode.join(this.splitStr)] = () => {\n // 可以自做一些拦截操作\n if (this.disable) {\n return;\n }\n cb();\n };\n }\n\n triggerHotKey() {\n const hotActionId = this.downKeyCodeList.join(this.splitStr);\n // 本次快捷操作回合已经触发过,跳过触发\n const cb = this.hotActionMap[hotActionId];\n\n cb?.();\n }\n\n /**\n * @param time ms\n * @returns\n */\n getTriggerHotkeyDebounce() {\n return this.triggerHotKey.bind(this);\n }\n\n /** 根据可识别的字符串获取对应的键码 */\n getKeyCodeByLabel(label: string) {\n return defaultGetCode(label);\n }\n\n getKeyString(code: number) {\n return getKeyString(code);\n }\n\n /**\n * 表单控件控件判断\n * 如果是编辑控件返回 true\n * hotkey is effective only when filter return true\n * @param event\n * @returns\n */\n filterInputElement(event: KeyboardEvent) {\n const target: any = event.target || event.srcElement;\n if (!target) {\n return false;\n }\n const { tagName } = target as HTMLInputElement;\n let flag = false;\n const isInput =\n tagName === 'INPUT' &&\n !['checkbox', 'radio', 'range', 'button', 'file', 'reset', 'submit', 'color'].includes(target.type);\n // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n if (\n (target as HTMLDivElement).isContentEditable ||\n ((isInput || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly)\n ) {\n flag = true;\n }\n return flag;\n }\n\n destroy() {\n this.disposeEventCbList.forEach((el) => el());\n }\n}\n","export const zh_CN: Record<string, any> = {\n pluginName: '快捷键',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Hot Keys',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","import { CPluginCtx } from '@/core/pluginManager';\nimport { DesignerPluginInstance } from '../Designer/type';\nimport { CNode } from '@chamn/model';\nimport { HistoryPluginInstance } from '../History/type';\nimport { message } from 'antd';\n\nexport const actionMap = {\n deleteNode: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n if (activeNode) {\n const flag = await designer?.export?.deleteNode(activeNode.id);\n if (!flag) {\n message.error('该节点不能删除');\n }\n return flag;\n }\n },\n copyNode: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n if (activeNode) {\n const flag = await designer?.export?.copyNode(activeNode.id);\n return flag;\n }\n },\n moveToUp: async (ctx: CPluginCtx) => {\n const res = await actionMap.moveToSiblingUp(ctx);\n if (res) {\n return;\n }\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n const parentNode = activeNode?.parent;\n if (parentNode && parentNode.nodeType !== 'PAGE') {\n const flag = await designer?.export?.selectNode(parentNode.id);\n return flag;\n }\n },\n moveToSiblingUp: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n const parentNode = activeNode?.parent;\n if (parentNode?.nodeType === 'PAGE' || !activeNode) {\n return;\n }\n const parentNodeValue = parentNode?.value as any;\n const children: CNode[] = parentNodeValue.children || parentNodeValue.value;\n const targetIndex = children.findIndex((el) => el.id === activeNode.id);\n const nextIndex = targetIndex - 1;\n if (nextIndex < 0) {\n return;\n }\n const child = children?.[nextIndex] as CNode;\n if (child && (child as any).id) {\n return await designer?.export?.selectNode(child.id);\n }\n },\n moveToDown: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n const children = activeNode?.value.children;\n const child = children?.[0] as CNode;\n if (child && (child as any).id) {\n return await designer?.export?.selectNode(child.id);\n }\n\n return await actionMap.moveToSiblingDown(ctx);\n },\n moveToSiblingDown: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n\n const activeNode = ctx.engine.getActiveNode();\n const parentNode = activeNode?.parent;\n if (parentNode?.nodeType === 'PAGE' || !activeNode) {\n return;\n }\n const parentNodeValue = parentNode?.value as any;\n const children: CNode[] = parentNodeValue.children || parentNodeValue.value;\n const targetIndex = children.findIndex((el) => el.id === activeNode.id);\n const nextIndex = targetIndex + 1;\n if (nextIndex >= children.length) {\n return;\n }\n const child = children?.[nextIndex] as CNode;\n if (child && (child as any).id) {\n return await designer?.export?.selectNode(child.id);\n }\n },\n redo: async (ctx: CPluginCtx) => {\n const historyStack = await ctx.pluginManager.get<HistoryPluginInstance>('History');\n if (historyStack?.export.canGoNextStep()) {\n historyStack?.export.nextStep();\n return true;\n }\n },\n undo: async (ctx: CPluginCtx) => {\n const historyStack = await ctx.pluginManager.get<HistoryPluginInstance>('History');\n if (historyStack?.export.canGoPreStep()) {\n historyStack?.export.preStep();\n return true;\n }\n },\n};\n","import { DesignerPluginInstance } from '../Designer/type';\nimport { HotKeysManager } from './hotKeyManager';\nimport localize from './localize';\nimport { actionMap } from './action';\nimport { HotKeysPluginType } from './type';\n\nconst PLUGIN_NAME = 'Hotkeys' as const;\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\nexport const HotkeysPlugin: HotKeysPluginType = {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const { i18n } = ctx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n\n const subWin = designer?.export.getDesignerWindow();\n\n const hotkeyManager = new HotKeysManager({\n elements: [window.document.body, subWin!.document.body],\n });\n\n ctx.engine.pageModel.emitter.on('onReloadPage', () => {\n const subWin = designer?.export.getDesignerWindow();\n setTimeout(() => {\n hotkeyManager.addElement(subWin!.document.body);\n }, 1000);\n });\n\n hotkeyManager.addHotAction(['ctrl', 'c'], () => {\n actionMap.copyNode(ctx);\n });\n\n hotkeyManager.addHotAction(['ctrl', 'z'], () => {\n actionMap.undo(ctx);\n });\n\n hotkeyManager.addHotAction(['ctrl', 'shift', 'z'], () => {\n actionMap.redo(ctx);\n });\n\n hotkeyManager.addHotAction(['up'], () => {\n actionMap.moveToUp(ctx);\n });\n\n hotkeyManager.addHotAction(['w'], () => {\n actionMap.moveToUp(ctx);\n });\n\n hotkeyManager.addHotAction(['shift', 'w'], () => {\n actionMap.moveToSiblingUp(ctx);\n });\n\n hotkeyManager.addHotAction(['down'], () => {\n actionMap.moveToDown(ctx);\n });\n\n hotkeyManager.addHotAction(['s'], () => {\n actionMap.moveToDown(ctx);\n });\n\n hotkeyManager.addHotAction(['shift', 's'], () => {\n actionMap.moveToSiblingDown(ctx);\n });\n\n hotkeyManager.addHotAction(['backspace'], () => {\n actionMap.deleteNode(ctx);\n });\n (ctx as any).hotkeyManager = hotkeyManager;\n ctx.pluginReadyOk();\n },\n async destroy(ctx) {\n const hotkeyManager: HotKeysManager = (ctx as any).hotkeyManager;\n hotkeyManager?.destroy();\n },\n export: (ctx) => {\n return {\n /** 注册快捷操作 */\n addHotAction: (actionKey: (string | number)[], cb: () => void) => {\n const hotkeyManager: HotKeysManager = (ctx as any).hotkeyManager;\n hotkeyManager.addHotAction(actionKey, cb);\n },\n disable: (status: boolean) => {\n const hotkeyManager: HotKeysManager = (ctx as any).hotkeyManager;\n hotkeyManager.setDisable(status);\n },\n };\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\n/** 必须 */\nHotkeysPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","/* eslint-disable react-refresh/only-export-components */\nimport { CPlugin } from '../core/pluginManager';\nimport { ComponentLibPlugin } from './ComponentLibrary';\nimport { DesignerPlugin } from './Designer';\nimport { OutlineTreePlugin } from './OutlineTree';\nimport { RightPanelPlugin } from './RightPanel';\nimport { GlobalStatePanelPlugin } from './GlobalStatePanel';\nimport { DisplaySourceSchema } from './DisplaySourceSchema';\nimport { HistoryPlugin } from './History';\nimport { HotkeysPlugin } from './Hotkeys';\n\nexport const DEFAULT_PLUGIN_LIST: CPlugin[] = [\n DesignerPlugin,\n OutlineTreePlugin,\n ComponentLibPlugin,\n GlobalStatePanelPlugin,\n RightPanelPlugin,\n HistoryPlugin,\n HotkeysPlugin,\n];\n\nexport {\n DesignerPlugin,\n ComponentLibPlugin,\n RightPanelPlugin,\n OutlineTreePlugin,\n GlobalStatePanelPlugin,\n HistoryPlugin,\n DisplaySourceSchema,\n HotkeysPlugin,\n};\n\n/** 组件唯一名 */\nexport const DEFAULT_PLUGIN_NAME_MAP = {\n HotkeysPlugin: HotkeysPlugin['PLUGIN_NAME']!,\n ComponentLibPlugin: ComponentLibPlugin['PLUGIN_NAME']!,\n RightPanelPlugin: RightPanelPlugin['PLUGIN_NAME']!,\n GlobalStatePanelPlugin: GlobalStatePanelPlugin['PLUGIN_NAME']!,\n HistoryPlugin: HistoryPlugin['PLUGIN_NAME']!,\n DesignerPlugin: DesignerPlugin['PLUGIN_NAME']!,\n OutlineTreePlugin: OutlineTreePlugin['PLUGIN_NAME']!,\n};\n\nexport * from './AdvancePanel/index';\nexport * from './ComponentLibrary/index';\nexport * from './ComponentStatePanel/index';\nexport * from './Designer/index';\nexport * from './DisplaySourceSchema/index';\nexport * from './GlobalStatePanel/index';\nexport * from './History';\nexport * from './OutlineTree';\nexport * from './PropertyPanel';\nexport * from './RightPanel';\nexport * from './RightPanel/type';\nexport * from './VisualPanelPlus';\nexport * from './Hotkeys';\n","import { DesignerPluginInstance } from '@/plugins/Designer/type';\nimport { EnginContext } from '@/type';\nimport { BorderOutlined, MobileOutlined } from '@ant-design/icons';\nimport { InputNumber, Segmented, Space } from 'antd';\nimport { debounce } from 'lodash-es';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nexport const DesignerSizer = (props: { ctx: EnginContext }) => {\n const designerRef = useRef<DesignerPluginInstance>();\n\n const [currentSize, setCurrentSize] = useState('AUTO');\n const [width, setWith] = useState(1200);\n const getSubWindowWidth = useCallback(() => {\n const designer = designerRef.current;\n const subWin = designer?.export.getDesignerWindow();\n const w = subWin?.innerWidth;\n setWith(Number(w));\n }, []);\n\n useEffect(() => {\n let resizeHandler: any;\n let subWin: Window | null;\n props.ctx.pluginManager.onPluginReadyOk('Designer').then((designer: DesignerPluginInstance) => {\n designerRef.current = designer;\n subWin = designer?.export.getDesignerWindow();\n resizeHandler = () => {\n setWith(Number(subWin?.innerWidth));\n };\n subWin?.addEventListener('resize', resizeHandler);\n getSubWindowWidth();\n });\n\n return () => {\n subWin?.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const setCanvasWidth = useCallback(\n debounce((w: number) => {\n const designer = designerRef.current;\n designer?.export.setCanvasWidth(w);\n }, 100),\n []\n );\n return (\n <Space>\n <Segmented\n defaultValue={currentSize}\n onChange={(value) => {\n const designer = designerRef.current;\n if (!designer) {\n return;\n }\n if (value === 'AUTO') {\n designer.export.setCanvasWidth('100%');\n getSubWindowWidth();\n } else if (value === 'IPAD') {\n designer.export.setCanvasWidth(768);\n } else {\n designer.export.setCanvasWidth(350);\n }\n setCurrentSize(value);\n }}\n options={[\n {\n label: (\n <span>\n <span\n onClick={() => {\n const designer = designerRef.current;\n designer?.export.setCanvasWidth('100%');\n getSubWindowWidth();\n }}\n >\n Auto\n </span>\n {currentSize === 'AUTO' && (\n <InputNumber\n size=\"small\"\n style={{\n marginLeft: '10px',\n }}\n controls={false}\n changeOnWheel\n suffix=\"px\"\n value={width}\n min={350}\n max={1920}\n onChange={(val) => {\n setWith(Number(val));\n setCanvasWidth(Number(val));\n }}\n ></InputNumber>\n )}\n </span>\n ),\n value: 'AUTO',\n },\n {\n label: <BorderOutlined />,\n value: 'IPAD',\n },\n {\n label: <MobileOutlined />,\n value: 'MOBILE',\n },\n ]}\n />\n </Space>\n );\n};\n","import { CMaterialPropsType } from '@chamn/model';\n\nexport const containerProps: CMaterialPropsType<'FastLayoutSetter'> = [\n {\n name: 'style',\n title: '布局',\n valueType: 'string',\n setters: [\n {\n componentName: 'FastLayoutSetter',\n initialValue: {},\n hiddenLabel: true,\n props: {},\n },\n ],\n },\n];\n","import { CMaterialPropsType, CMaterialType, DEFAULT_EVENT_LIST, HTMl_TAGS } from '@chamn/model';\nimport { capitalize } from 'lodash-es';\nimport { containerProps } from './container.meta';\n\nconst customAttributesMeta: CMaterialPropsType[number] = {\n name: '$$attributes',\n title: '属性',\n valueType: 'object',\n setters: [\n {\n componentName: 'ArraySetter',\n props: {\n collapse: {\n open: true,\n },\n sortLabelKey: 'key',\n item: {\n setters: [\n {\n componentName: 'ShapeSetter',\n props: {\n elements: [\n {\n name: 'key',\n title: '属性名',\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'value',\n title: '值',\n valueType: 'string',\n setters: ['StringSetter', 'NumberSetter', 'JSONSetter', 'FunctionSetter', 'ExpressionSetter'],\n },\n ],\n },\n initialValue: {},\n },\n ],\n initialValue: {},\n },\n },\n initialValue: [],\n },\n ],\n};\n\nconst groupName = '内置组件';\nconst categoryName = '原子组件';\n\nconst INNER_META_VERSION = '1.0.0';\nconst PKG_NAME = 'CHAMELEON_INNER_PKG';\n\nconst htmlNativeComponentMeta = HTMl_TAGS.map((tag) => {\n const DivMeta: CMaterialType = {\n title: capitalize(tag),\n componentName: tag,\n props: [customAttributesMeta],\n snippets: [],\n npm: {\n name: tag,\n package: PKG_NAME,\n version: INNER_META_VERSION,\n },\n };\n\n return DivMeta;\n});\n\nconst BaseComponentMeta: CMaterialType[] = [\n {\n title: '块',\n componentName: 'CBlock',\n props: [\n {\n name: 'children',\n title: '文本',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n groupName: groupName,\n snippets: [\n {\n title: '块',\n snapshotText: 'Block',\n category: categoryName,\n schema: {\n props: {},\n css: {\n value: [\n {\n state: 'normal',\n media: [],\n text: 'background: white ; width: 100%; height: 100px',\n },\n ],\n },\n },\n },\n ],\n },\n {\n title: '容器',\n componentName: 'CContainer',\n isContainer: true,\n props: [...(containerProps as any), customAttributesMeta],\n groupName: groupName,\n snippets: [\n {\n title: '容器',\n snapshotText: 'Con',\n category: categoryName,\n schema: {\n css: {\n value: [\n {\n state: 'normal',\n media: [],\n text: 'background: white;width: 100%;',\n },\n ],\n },\n },\n },\n ],\n },\n {\n title: '图片',\n componentName: 'CImage',\n props: [\n {\n name: 'src',\n title: '地址',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n advanceCustom: {\n wrapComponent: (comp) => {\n return (props: any) => {\n const Comp = comp;\n return <Comp {...props} style={{ ...(props.style || {}), userSelect: 'none', WebkitUserDrag: 'none' }} />;\n };\n },\n },\n\n groupName: groupName,\n snippets: [\n {\n title: '图片',\n snapshotText: 'Img',\n category: categoryName,\n schema: {\n css: {\n value: [\n {\n text: 'background:white;width:500px;height:300px;overflow:auto;',\n media: [],\n state: 'normal',\n },\n ],\n },\n props: {\n src: 'https://images.unsplash.com/photo-1584080277544-2db5b2c2d9dd?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1470&q=80',\n },\n },\n },\n ],\n },\n {\n title: '视频',\n componentName: 'CVideo',\n props: [\n {\n name: 'src',\n title: '地址',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n {\n name: 'autoPlay',\n title: '自动播放',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'controls',\n title: '控制面板',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n fixedProps: {\n autoPlay: false,\n },\n advanceCustom: {\n wrapComponent: (Comp) => {\n return (props) => {\n // 原生的控制面板会阻断页面级别的事件监听,导致拖拽失效,这里在编辑态禁用 video 的控制面板相关事件触发\n return (\n <div\n style={{\n ...props.style,\n display: 'inline-flex',\n }}\n >\n <Comp\n {...props}\n style={{\n ...props.style,\n pointerEvents: 'none',\n }}\n ></Comp>\n </div>\n );\n };\n },\n },\n groupName: groupName,\n snippets: [\n {\n title: '视频',\n snapshotText: 'Video',\n category: categoryName,\n schema: {\n props: {\n src: 'https://vjs.zencdn.net/v/oceans.mp4',\n },\n css: {\n value: [\n {\n state: 'normal',\n media: [],\n text: 'background:white;width:300px;height:150px;',\n },\n ],\n },\n },\n },\n ],\n },\n {\n title: '音频',\n groupName: groupName,\n componentName: 'CAudio',\n props: [\n {\n name: 'src',\n title: '地址',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n {\n name: 'autoPlay',\n title: '自动播放',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'controls',\n title: '控制面板',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n advanceCustom: {\n wrapComponent: () => {\n return (props) => {\n return (\n <div\n style={{\n display: 'inline-block',\n fontSize: 0,\n }}\n >\n <audio\n {...props}\n style={{\n pointerEvents: 'none',\n ...props.style,\n }}\n ></audio>\n </div>\n );\n };\n },\n },\n snippets: [\n {\n title: '音频',\n snapshotText: 'Audio',\n category: categoryName,\n schema: {\n props: {\n src: 'https://vjs.zencdn.net/v/oceans.mp4',\n controls: true,\n },\n },\n },\n ],\n },\n {\n title: '文本',\n componentName: 'CText',\n groupName: groupName,\n props: [\n {\n name: 'content',\n title: '内容',\n valueType: 'string',\n setters: ['TextAreaSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n snippets: [\n {\n title: '文本',\n snapshotText: 'Text',\n category: categoryName,\n schema: {\n props: {\n content: 'text',\n },\n },\n },\n ],\n },\n {\n title: 'Canvas',\n componentName: 'CCanvas',\n props: [\n {\n name: 'afterMount',\n title: '渲染之后',\n valueType: 'function',\n setters: ['FunctionSetter', 'ExpressionSetter', 'ActionFlowSetter' as any],\n },\n {\n name: 'beforeDestroy',\n title: '销毁之前',\n valueType: 'function',\n setters: ['FunctionSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n groupName: groupName,\n advanceCustom: {\n onNewAdd: async (node) => {\n const props = node.getPlainProps();\n const id = Math.random().toString(32).slice(3, 9);\n props.$$attributes = [\n {\n key: 'id',\n value: id,\n },\n {\n key: 'style',\n value: {\n display: 'block',\n margin: '0 auto',\n },\n },\n ];\n props.afterMount.value = props.afterMount.value.replace('$[id]', id);\n node.updateWithPlainObj({\n props,\n });\n return {\n addNode: node,\n };\n },\n },\n snippets: [\n {\n title: '画布',\n snapshotText: 'Cavs',\n category: categoryName,\n schema: {\n props: {\n width: '600px',\n height: '150px',\n style: {\n margin: '0 auto',\n },\n afterMount: {\n type: 'FUNCTION',\n value: `\n function run () {\n var ctx = document.getElementById(\"$[id]\").getContext(\"2d\");\n ctx.font = \"48px serif\";\n ctx.fillText(\"Hello Canvas\", 10, 50);\n }\n `,\n },\n },\n },\n },\n ],\n },\n {\n title: 'HTML 标签',\n componentName: 'CNativeTag',\n props: [\n {\n name: 'htmlTag',\n title: '标签名',\n valueType: 'string',\n setters: [\n {\n componentName: 'SelectSetter',\n props: {\n options: HTMl_TAGS.map((tag) => {\n return {\n name: tag,\n value: tag,\n };\n }),\n },\n },\n ],\n },\n customAttributesMeta,\n ],\n isContainer: true,\n groupName: groupName,\n snippets: [\n {\n title: 'HTML',\n snapshotText: 'HTML',\n category: categoryName,\n schema: {\n props: {\n htmlTag: 'div',\n },\n },\n },\n ],\n },\n];\nBaseComponentMeta.forEach((el) => {\n el.events = DEFAULT_EVENT_LIST;\n});\n\nconst BaseComponentMetaWithVersion = BaseComponentMeta.map((el) => {\n return {\n ...el,\n npm: {\n name: el.componentName,\n package: PKG_NAME,\n version: INNER_META_VERSION,\n },\n };\n});\n\nexport const InnerComponentMeta = [...BaseComponentMetaWithVersion, ...htmlNativeComponentMeta];\n","/* eslint-disable react-refresh/only-export-components */\nimport React from 'react';\nimport { TWidgetVisible, Workbench } from './component/Workbench';\nimport { loader } from '@monaco-editor/react';\n\nimport styles from './Engine.module.scss';\nimport i18n from './i18n/index';\nimport { PluginManager } from './core/pluginManager';\nimport mitt, { Emitter } from 'mitt';\nimport { AssetPackage, CMaterialType, CNode, CPage, CPageDataType, CRootNode, EmptyPage } from '@chamn/model';\nimport { getDefaultRender, beforeInitRender } from './utils/defaultEngineConfig';\nimport { DesignerPluginInstance } from './plugins/Designer/type';\nimport clsx from 'clsx';\nimport { AssetLoader, ComponentsType, collectVariable } from '@chamn/render';\nimport { AssetsPackageListManager } from './core/assetPackagesListManage';\nimport { flatObject } from '@chamn/render';\nimport customI18n from './i18n/index';\nimport { EngineProps } from './type';\n\nexport class Engine extends React.Component<EngineProps> {\n static version = __PACKAGE_VERSION__;\n currentSelectNode: CNode | CRootNode | null;\n\n pluginManager!: PluginManager;\n workbenchRef = React.createRef<Workbench>();\n pageSchema: CPageDataType | undefined;\n pageModel: CPage;\n material: CMaterialType[] | undefined;\n emitter: Emitter<any>;\n assetsPackageListManager: AssetsPackageListManager;\n\n workbenchConfig?: EngineProps['workbenchConfig'] = {};\n _oldHiddenWidgetConfig:\n | { hiddenTopBar: boolean | undefined; hiddenLeftPanel: boolean | undefined; hiddenRightPanel: boolean | undefined }\n | undefined;\n\n constructor(props: EngineProps) {\n super(props);\n this.pageSchema = props.schema;\n this.material = props.material;\n this.currentSelectNode = null;\n (window as any).__CHAMELEON_ENG__ = this;\n this.assetsPackageListManager = new AssetsPackageListManager(props.assetPackagesList || []);\n this.workbenchConfig = props.workbenchConfig || {};\n\n if (props.monacoEditor?.cndUrl) {\n loader.config({\n paths: {\n vs: props.monacoEditor?.cndUrl,\n },\n });\n }\n\n try {\n this.pageModel = new CPage(this.pageSchema, {\n materials: this.material || [],\n assetPackagesList: props.assetPackagesList || [],\n });\n } catch (e) {\n console.error(e);\n this.pageModel = new CPage(EmptyPage);\n }\n this.emitter = mitt();\n }\n\n updateCurrentSelectNode(node: CNode | CRootNode | null) {\n this.currentSelectNode = node;\n this.emitter.emit('onSelectNodeChange', {\n node,\n });\n }\n\n async componentDidMount() {\n (window as any).__C_ENGINE__ = this;\n const plugins = this.props.plugins;\n const pluginManager = new PluginManager({\n engine: this,\n getWorkbench: () => this.workbenchRef.current!,\n emitter: this.emitter,\n pageModel: this.pageModel,\n i18n,\n assetsPackageListManager: this.assetsPackageListManager,\n });\n this.pluginManager = pluginManager;\n // 使用默认的渲染策略\n pluginManager.customPlugin<DesignerPluginInstance>('Designer', (pluginInstance) => {\n pluginInstance.ctx.config.beforeInitRender = beforeInitRender;\n pluginInstance.ctx.config.customRender = getDefaultRender({\n components: this.props.components || {},\n renderProps: this.props.renderProps || {},\n });\n pluginInstance.ctx.config.components = this.props.components;\n return pluginInstance;\n });\n this.props.beforePluginRun?.({\n pluginManager: this.pluginManager,\n });\n\n const pList = plugins.map((p) => {\n return this.pluginManager.add(p);\n });\n\n this.props.onMount?.({\n pluginManager: this.pluginManager,\n engine: this,\n });\n\n await Promise.all(pList);\n\n this.pageModel.emitter.on('onReloadPage', () => {\n if (!this.currentSelectNode) {\n return;\n }\n const newSelectNode = this.pageModel.getNode(this.currentSelectNode?.id);\n if (newSelectNode) {\n this.updateCurrentSelectNode(newSelectNode);\n }\n });\n\n this.props.onReady?.({\n pluginManager: this.pluginManager,\n engine: this,\n });\n }\n\n getActiveNode() {\n if (!this.currentSelectNode?.id) {\n return null;\n }\n const node = this.pageModel.getNode(this.currentSelectNode.id) ?? null;\n this.currentSelectNode = node;\n return node;\n }\n\n updatePage = (page: CPageDataType) => {\n this.pageModel.updatePage(page);\n };\n\n updateMaterials = async (\n materials: CMaterialType[],\n assetPackagesList: AssetPackage[],\n options?: {\n formatComponents?: (componentMap: ComponentsType) => ComponentsType;\n }\n ) => {\n const designerPlugin = await this.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerPluginExport = designerPlugin?.export;\n\n this.pluginManager.assetsPackageListManager.setList(assetPackagesList);\n this.pageModel.assetPackagesList = this.pluginManager.assetsPackageListManager.getList();\n\n const subWin = designerPluginExport?.getDesignerWindow();\n\n if (!subWin) {\n console.warn('subWin not exits');\n return;\n }\n\n // 从子窗口获取物料对象\n const assetLoader = new AssetLoader(assetPackagesList, subWin);\n await assetLoader.load();\n const componentCollection = collectVariable(assetPackagesList, subWin);\n // 排平\n let newComponents = flatObject(componentCollection);\n if (options?.formatComponents) {\n newComponents = options.formatComponents(newComponents);\n }\n // 更新 render 中的组件库\n designerPluginExport?.updateRenderComponents(newComponents);\n this.pageModel.materialsModel.addMaterials(materials);\n this.emitter.emit('updateMaterials');\n };\n\n refresh = async () => {\n this.pageModel.reloadPage(this.pageModel.export('design'));\n };\n\n getWorkbench = () => {\n return this.workbenchRef.current;\n };\n\n /** return i18n object */\n getI18n() {\n return customI18n;\n }\n\n /** 进入预览模式 */\n async preview() {\n const oldHiddenWidgetConfig = this.workbenchRef.current?.getHiddenWidgetConfig();\n this._oldHiddenWidgetConfig = oldHiddenWidgetConfig;\n this.workbenchRef.current?.hiddenWidget({\n hiddenLeftPanel: true,\n hiddenRightPanel: true,\n hiddenTopBar: true,\n canvasFull: true,\n });\n\n const designerPlugin = await this.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerPluginExport = designerPlugin?.export;\n designerPluginExport?.setPreviewMode();\n }\n\n async existPreview() {\n this.workbenchRef.current?.hiddenWidget({\n ...(this._oldHiddenWidgetConfig || {}),\n canvasFull: false,\n });\n const designerPlugin = await this.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerPluginExport = designerPlugin?.export;\n designerPluginExport?.setEditMode();\n }\n\n hiddenWidget(config: Partial<TWidgetVisible>) {\n this.workbenchRef.current?.hiddenWidget(config || {});\n }\n\n render() {\n return (\n <div className={clsx([styles.engineContainer, this.props.className])} style={this.props.style}>\n <Workbench ref={this.workbenchRef} emitter={this.emitter} {...this.workbenchConfig} />\n </div>\n );\n }\n}\n\nexport * as plugins from './plugins';\nexport * from './plugins';\nexport * from './component';\nexport * from '@chamn/layout';\n\nexport * from './material/innerMaterial';\nexport * from './component/CustomSchemaForm/components/Setters/type';\nexport * from './utils/index';\n\n/** 注册自定义 setter */\nexport { registerCustomSetter } from './component/CustomSchemaForm/components/Form';\n\nexport * from './type';\nexport * from './core/pluginManager';\nexport * from './core/assetPackagesListManage';\n"],"names":["styleArr2Obj","val","res","item","styleObjToArr","obj","tempRes","key","styleList2Text","formatStyleProperty","styleList","isPlainObject","normalProperty","expressionProperty","allProperty","it","isExpression","formatCSSTextProperty","cssText","ast","csstree","cssList","node","getRandomStr","formatCssToNodeVal","className","state","currentStateCss","tempVal","mediaKey","formatNodeValToEditor","list","el","tempStyle","_a","getColorFromStr","str","hexColorPattern","rgbaColorPattern","rgbColorPattern","hsbColorPattern","hexColors","rgbaColors","rgbColors","hsbColors","parseBoxShadowString","colorsList","color16Map","c","Color","tempStr","shadowItem","newStr","color","newStrArr","sizeArr","i","AssetsPackageListManager","assets","__publicField","newAssets","tempList","newList","getUniqueAssetsList","idMap","beforeInitRender","iframe","subWin","getDefaultRender","options","iframeContainer","page","pageModel","ready","renderJSUrl","iframeWindow","iframeDoc","IframeReact","IframeReactDOM","CRender","pageInfo","allAssets","allLibs","collectVariable","componentsLibs","flatObject","thirdLibs","getThirdLibs","App","designRenderInstance","LOGGER","consola","waitReactUpdate","time","cb","resolve","ensureKeyExist","defaultValue","sageJSONParse","jsonStr","errorValue","Workbench","React","props","panel","panelName","newPanel","targetIndex","newPanels","currentActiveLeftPanel","newActive","leftBoxVisible","rightBoxSize","newView","rightBoxVisible","newVisible","_e","_direction","_ref","d","newW","mitt","config","view","newViewList","leftBoxSize","leftBoxFixed","leftPanels","bodyView","rightView","topToolBarView","subTopToolBarView","customViewList","hiddenTopBar","hiddenLeftPanel","hiddenRightPanel","leftBoContentStyle","currentActivePluginObj","CurrentPluginRenderView","onPluginIconClick","toggleRightPanel","toggleLeftPanel","onLeftBoxResizeStop","jsxs","styles","jsx","clsx","pl","Resizable","Button","PushpinOutlined","CloseOutlined","DoubleRightOutlined","createPortal","zh_CN","en_US","resources","i18n","initReactI18next","customI18n","PluginManager","getWorkbench","emitter","assetsPackageListManager","engine","pluginName","customPluginHook","customPluginHooks","hookList","plugin","ctx","innerPlugin","pluginCtx","pluginInstance","name","p","pluginObj","newPluginObj","localize$4","DragComponentItem","dragInfo","DRAG_ITEM_KEY","icon","useMemo","contentView","Popover","ListView","dataSource","defaultActiveKey","items","category","Collapse","getTargetMNodeKeyVal","dom","searchComponentSnippets","componentList","searchKeyWords","newResList","searchString","snippets","hit","_b","_c","_d","PLUGIN_NAME","i18nNamespace","TabTitle","children","ComponentLibView","visible","targetDom","targetNodeId","meta","containerRef","designerHandle","dnd","boxSensor","Sensor","eventObj","newNode","designerExport","dragStart","workbench","event","selectedNodeId","selectedNode","containerNode","findContainerNode","pos","dropNode","isPageModel","rootNode","designerInstance","addFlag","addNodeInfo","materialsModel","allSnippets","df","localize","lng","componentsList","searchResultList","searchMode","toAddNewNode","CustomSearchBar","capitalize","defaultSearchValue","Input","SearchOutlined","e","Tabs","ComponentLibPlugin","ComponentLibViewWithLocalize","withTranslation","Title","t","Fragment","AppstoreAddOutlined","localize$3","LayoutSelect","onSelect","hover","setHover","useState","getDefaultToolbarItem","nodeList","toSelectNode","toDelete","toCopy","toHidden","currentNode","parentNodeItems","nodeMeta","label","copyItem","CopyOutlined","deleteItem","DeleteOutlined","visibleItem","EyeInvisibleOutlined","nodeLayout","DefaultSelectToolBar","getClosestNodeList","level","count","isNodeModel","GhostView","AdvanceCustomHook","dragNode","nodeAdvanceCustom","dropNodeAdvanceCustom","commonParams","canAcceptFlag","material","resNode","onCopy","newRes","onDelete","Designer","extraData","layoutRef","dropPosInfo","posFlag","_f","_g","_h","_i","_j","_k","flag","toolbarView","commonParam","canDragFlag","dragFlag","ghostView","CustomGhostView","nodeId","id","cpNode","targetNodeModel","devState","toolbarProps","defaultToolbarItem","ToolbarView","newState","selectViewProps","selectRectViewRender","Comp","selectNode","hoverViewProps","hoverRectViewRender","dropViewProps","dropViewRender","newComponentMap","newComponents","layoutInstance","onSelectNode","onDragStart","onHoverNode","onNodeDrop","onNodeDragging","onNodeDragEnd","hoverToolbarView","selectToolbarView","portalView","advanceCustomProps","Layout","DesignerPlugin","designerRef","newMode","LayoutMode","width","map","transformNodeSchemaToTreeData","nodeSchema","parent","tb","nodeChild","newCurrentNode","propsNodeList","slotNode","treeNodeView","processProps","keys","isJSSlotPropNode","pageModeNode","propsTitle","tempTitle","getPropsLabel","getMTitle","plainTitle","tempNode","propValue","newKey","index","nodeModel","keyPath","propsLabelMap","getNodePropsLabelMap","newKeyPath","childNodeList","transformPageSchemaToTreeData","pageSchema","tree","child","traverseTree","handler","tempTree","stop","traverseCb","conditionCb","calculateDropPosInfo","params","point","mousePos","targetRect","targetDomH","xCenter","yCenter","resMap","singleProcessUnit","paths","newPaths","objSetter","componentName","arrItemSetter","parentTitle","currentTitle","newObjPaths","it2","targetItem","isSpecialMaterialPropType","itemArr","DragState","CTreeContext","TreeNode","allStateRef","useRef","nodeVisible","setNodeVisible","ctxState","updateState","onDeleteNode","getDesignerHandler","onCopyNode","useContext","titleEditable","setTitleEditable","editInputValue","setEditInputValue","expanded","toggleExpandNode","open","newExpandKeys","selected","titleEditInputRef","toggleSelectNode","newKeys","singPadding","indent","canBeSelected","dragKeyProps","updateExpandKeyRef","ctxStateRef","oldExpandKeys","domRef","useEffect","timerHandler","clickHandle","sunWin","designerPluginInstance","designerHandler","win","toggleNodeVisible","titleView","compInstances","RightOutlined","inputValue","EyeOutlined","TreeView","plainTreeData","tempTreeData","targetKey","treeData","target","parentPaths","parentNode","targetNode","sensor","targetTreeNode","nodeCanDragRes","canDragResInfo","startNode","dropInfo","nodeCanDropRes","dropDom","rect","newDropInfo","currentSelectNode","dragState","sk","designer","newVal","message","localize$2","OutlineTreePlugin","TreeViewWithLocalize","ApartmentOutlined","REACT_FLOW_DRAG_CLASS_NAME","INPUT_HANDLE_ID","OUTPUT_HANDLE_ID","REQUEST_API_FAILED_HANDLE_ID","CFormContext","CUSTOM_SETTER_MAP","registerCustomSetter","customSetterMap","CForm","data","conditionConfig","changeKeys","StringSetter","onValueChange","setterContext","initialValue","ConfigProvider","NumberSetter","InputNumber","value","getSetterList","setters","setter","setterTypeMap","getValueType","getDefaultSetterByValue","setterList","valueType","setterName","ArrayItem","keyPaths","style","objectValue","formRef","SetterSwitcher","SortItemOrderModal","sortLabelKey","modalProps","listValue","setListValue","innerList","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","active","over","oldIndex","newIndex","newInnerListVal","arrayMove","modalTransform","setModalTransform","Modal","modal","DndContext","delta","ModalDragView","restrictToVerticalAxis","SortableContext","SortableItem","transform","setNodeRef","attributes","listeners","tempTransform","useDraggable","finalTransform","CSS","transition","useSortable","labelText","formatValue","ArraySetter","itemInitialValue","itemLabelPrefix","itemLabelPrefixKey","sortVisible","setSortVisible","innerSetters","ShapeSetter","elements","title","tip","getMTitleTip","MonacoEditor","handleEditorBeforeMount","monaco","handleEditorDidMount","editor","Editor","DefaultTslibSource","quicktypeJSON","typeName","jsonString","jsonInput","jsonInputForTargetLanguage","inputData","InputData","quicktype","getPageTypeDefined","stateTypeMap","pList","traversePageNode","InnerComponentNameEnum","globalStateDts","pageStateDts","nodeIdList","k","body","getBodyDefined","dtsContent","currentNodeDtsText","dtsStr","ExpressionSetter","editorOptions","mode","editorRef","setOpen","onInnerValueChange","newValStr","CNodePropsTypeEnum","lineNumberOptions","editorView","realtimeDts","libUri","BooleanSetter","Switch","SelectSetter","Select","option","MoveableModal","oldValue","EditorConfig","JsonEditor","onChange","height","oldValueRef","oldVal","editorInstance","JSONSetter","FunctionSetter","TextAreaSetter","valueValidator","checkValueStatus","setCheckValueStatus","newValue","CSSSourceInfo","CSSProperties","CSSPropertyList","CSSValueSetter","propertyKey","propertyValueRef","innerValue","setInnerVal","focusState","setFocusState","updateOuterValue","optionsValue","AutoComplete","ColorSetter","SketchPicker","newColor","newColorStr","DEFAULT_PRESET_COLORS","AntDColorSetter","restProps","ColorPicker","SliderSetter","Slider","RadioGroupSetter","Radio","InputNumberPlus","min","max","addonAfter","updateInnerVal","processUpdateVal","num","resVal","isLegal","newNum","UNIT_LIST","useDragSize","cumulativeInfo","processEnd","useCallback","processing","onMouseDown","processMove","start","tempCumulativeX","tempCumulativeY","shakeDIstance","startInfo","minX","maxX","globalMoveDispose","addEventListenerReturnCancel","globalUpDispose","globalLeaveDispose","CSSSizeInput","outValue","dragSizing","setDragSizing","originalValObj","unit","currentUnitList","currentMinMix","valObj","updateValue","valStr","processNewVal","cumulativeData","onDragMoveChange","nV","onDragEnd","handleRef","dragSizeHandle","unitSelect","CSSSizeSetter","keyList","getDefaultValue","maxVal","DimensionInput","forwardRef","ref","innerVal","noTrigger","finalVal","pick","useImperativeHandle","realValue","Row","Col","ArrowRightFromLine","ArrowLeftFromLine","ArrowDownFromLine","ArrowUpFromLine","SquareX","AlignHorizontalDistributeStart","AlignHorizontalDistributeEnd","StretchVertical","AlignHorizontalSpaceBetween","AlignHorizontalSpaceAround","AlignVerticalJustifyStart","AlignVerticalJustifyEnd","StretchHorizontal","AlignVerticalSpaceBetween","AlignVerticalSpaceAround","MoveHorizontal","MoveVertical","inputW","getEmptyVal","MarginAndPaddingInput","outVal","prefix","CustomColorPicker","setColor","FONT_CSS_KEY_LIST","alignOptions","fontWeightOptions","FontInput","colorRef","CSS_BORDER_KEY_LIST","BorderInput","emptyVal","currentEditVal","tmpVal","updateSingleBorderVal","newBorderVal","CloseCircleOutlined","CSS_BACKGROUND_KEY_LIST","BackgroundInput","ShadowInput","newUpdateVal","boxShadowStr","parseCssToObject","css","result","selector","declarations","declaration","prop","getCssCodeFromStyleObj","styleObj","CSSCodeEditor","valueRef","isEqual","newValObj","StyleUIPanel","initialVal","noCard","setMode","dimensionRef","marinRef","paddingRef","borderRef","backgroundRef","shadowRef","fontRef","cssCodeEditorRef","inputRefs","tempValueRef","onStyleItemChange","finalValue","omitBy","isNil","coreEditView","Card","SquareCode","Component","FastLayoutSetter","resetProps","cssUIRef","lastNode","initialValueInner","newStyle","updatePanelValue","newNormaCss","newStyleList","emptyValMap","EmptyValueSetter","emptyValue","hiddenDefaultOption","tempValue","BUILD_IN_SETTER_MAP","CField","tips","hiddenLabel","errorInfo","setErrorInfo","labelView","formState","updateContext","updateConditionConfig","canRender","newTip","Tooltip","newChildren","isValidElement","extraProps","rules","checkResult","checkValue","Alert","QuestionCircleOutlined","pass","errorMsg","CCustomSchemaFormContext","SetterSwitcherCore","currentSetter","setCurrentSetter","customSetterMapProp","defaultSetterConfig","allSetterMap","InnerSetters","currentSetterName","st","CurrentSetterComp","outerSetter","condition","useField","setVisible","onSetterChange","SetterTypeEnum","menuItems","setterRuntime","switcher","onChooseSetter","targetSetter","Dropdown","SwapOutlined","setterProps","newProps","collapseHeaderExt","setCollapseHeaderExt","labelWidth","labelAlign","collapse","specialSetter","filedView","cFiledProps","renderCollapse","collapseObj","extraHeaderContent","CustomSchemaFormCore","originProperties","properties","property","CustomSchemaForm","getNodeInfo","traverse","nodes","SelectNodeModal","onCancel","onOk","boxDomRef","TreeSelect","treeNode","nodeInfo","SelectNodeByTree","modalOpen","setModalOpen","setInnerValue","nodeTitle","SelectNodeState","Space","isValidJSVariableName","DEFAULT_NODE_LIST","LogicType","AssignValueType","CreateNewNodePopup","handleOpenChange","newOpen","InputHandle","Handle","Position","OutputHandle","NodeCard","nodeProps","customHandle","outHandleNewNodeAdd","useCardStyle","outputHandle","inputHandle","isConnectable","reactFlowInstance","useReactFlow","outputNodeHasConnected","UseNodeHasConnected","handleNewNodeAdd","newNodeData","newEdge","getNewNodePosInfo","customHandleView","HolderOutlined","ActionFlowContext","createContext","useActionFlow","context","CFiledWithSwitchSetter","defaultSetterName","AssignValueNode","onDataChange","DEV_CONFIG_KEY","devConfigObj","isReady","setIsReady","formValue","setFormValue","CommonDynamicValueSetter","StartNode","ARGS_PREFIX","getArgsObjFormSchema","methodName","formatArgsObjToArray","formatArgsToObject","valArr","CallNodeMethodNode","methodList","methodListOptions","argsFormSchema","updateKeySetterConfig","JumpLinkNode","defaultLinkSetter","isFunction","requestParamsSchemaSetterList","methodOptions","RequestAPINode","pluginConfig","CustomAPISelectInput","checkHandleConnection","handleId","edge","isOutputHandleConnected","isAfterFailedResponseHandleConnected","formHandler","newValueObj","tabItems","handleType","offsetX","newNodePosition","newFormData","RunCodeNode","NODE_TYPE","NODE_MAP","calculateElementLayout","edges","g","Dagre","position","x","y","createFlowNode","nodeData","createFlowEdge","source","sourceHandle","parseActionLogicToNodeList","processNodes","nextItem","revertNodeToActionLogic","nodeMap","visited","traverseNodes","currentNodeId","handlers","successTargets","failedTargets","nextEdges","nextHandlers","ActionFlowSetterCore","fitView","flowMount","setFlowMount","setNodes","onNodesChange","useNodesState","setEdges","onEdgesChange","useEdgesState","latesEdgesRef","onConnect","eds","addEdge","latestNodeRef","dataReady","setDataReady","layoutGraph","layoutInfo","saveData","newSchemaValue","ReactFlow","changes","connection","Background","Controls","MiniMap","ActionFlowSetter","newValueRef","disableLowcodeHotKey","status","hotkey","triggerView","ReactFlowProvider","BUILD_IN_ADVANCE_SETTER_MAP","PropertyPanel","handel","PropertyPanelConfig","ComponentStatePanel","nodeState","currentState","ComponentStatePanelConfig","AdvancePanel","innerProperties","loopObj","AdvancePanelConfig","CRightPanelContext","UseCRightPanelContext","defaultPropertyOptions","SinglePropertyEditor","keyFormatStatus","setKeyFormatStatus","rightPanelContext","mod","propertyOptions","setPropertyOptions","onSearch","searchText","newOptions","propertyKeyRef","innerOnCreate","PlusOutlined","MinusOutlined","CSSPropertiesVariableBindEditor","propertyList","setPropertyList","newProperty","setNewProperty","innerOnValueChange","createPropertyRef","ClassNameEditor","valueFormatStatus","isCreate","valueOptions","setValueOptions","allValueOptions","setAllValueOptions","updateValueOptions","tempProperty","onValueSearch","updateKeyValue","keyVal","CSSPropertiesEditor","newAddVal","setNewAddVal","newCssVal","DOM_CSS_STATUS","DOM_CSS_STATUS_LIST","CSSEditor","selectedStateTag","setSelectedStateTag","mediaQueryList","cssPropertyRefMap","handleChange","tag","domStatusList","setDomStatusList","cssStatusList","selectCssStatusList","cssVal","setCssVal","currentCssStateVal","initVal","initRef","isEmpty","updateCss","checked","CheckableTag","MinusCircleOutlined","VisualPanelPlus","styleVariableRef","classNameList","cssEditorRef","classNameEditorRef","formatStyle","fCss","onUpdateStyleVariable","styleArr","onUpdateStyle","onUpdateCss","VisualPanelPlusConfig","activeTab","INNER_EVENT_LIST_MAP","ON_DID_RENDER","ON_WILL_DESTROY","EventPanel","eventList","updateEventList","nodeEventList","evt","currentEvent","updateCurrentEvent","newEvent","eventLabel","newEventList","EventPanelConfig","RightPanel","panels","panelParams","displayPanels","customTabs","activeKey","firstPanelKey","_","args","Empty","RightPanelPlugin","uiHandle","localize$1","triggerChangeBySelf","GlobalStatePanel","rootState","GlobalStatePanelPlugin","GlobalStatePanelWithLocalize","DatabaseOutlined","DisplaySourceSchema","engineCtx","newPage","newPageJSON","HistoryPlugin","CTX","dataStore","originalPageRecord","loadPage","resObj","currentStepIndex","historyRecords","cloneDeep","debounceAddStep","debounce","isff","_keyMap","_modifier","defaultGetCode","getKey","getModifier","getKeyString","HotKeysManager","disposeListCb","disposeCb","triggerAction","keydownCb","keyupCb","findKeyIndex","clearKeyDownList","newKeysCode","hotActionId","code","tagName","isInput","actionMap","activeNode","parentNodeValue","nextIndex","historyStack","HotkeysPlugin","hotkeyManager","actionKey","DEFAULT_PLUGIN_LIST","DEFAULT_PLUGIN_NAME_MAP","DesignerSizer","currentSize","setCurrentSize","setWith","getSubWindowWidth","w","resizeHandler","setCanvasWidth","Segmented","BorderOutlined","MobileOutlined","containerProps","customAttributesMeta","groupName","categoryName","INNER_META_VERSION","PKG_NAME","htmlNativeComponentMeta","HTMl_TAGS","BaseComponentMeta","comp","DEFAULT_EVENT_LIST","BaseComponentMetaWithVersion","InnerComponentMeta","Engine","materials","assetPackagesList","designerPlugin","designerPluginExport","AssetLoader","componentCollection","loader","CPage","EmptyPage","plugins","pluginManager","newSelectNode","oldHiddenWidgetConfig"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/utils/css.ts","../src/core/assetPackagesListManage.ts","../src/utils/defaultEngineConfig.tsx","../src/utils/logger.ts","../src/utils/index.ts","../src/component/Workbench/index.tsx","../src/i18n/zh_CN/index.ts","../src/i18n/en_US/index.ts","../src/i18n/index.ts","../src/core/pluginManager.ts","../src/plugins/ComponentLibrary/localize/zh_CN/index.ts","../src/plugins/ComponentLibrary/localize/en_US/index.ts","../src/plugins/ComponentLibrary/localize/index.ts","../src/plugins/ComponentLibrary/components/DragItem/index.tsx","../src/plugins/ComponentLibrary/components/ListView/index.tsx","../src/plugins/ComponentLibrary/util.ts","../src/plugins/ComponentLibrary/index.tsx","../src/plugins/Designer/config.ts","../src/plugins/Designer/localize/zh_CN/index.ts","../src/plugins/Designer/localize/en_US/index.ts","../src/plugins/Designer/localize/index.ts","../src/plugins/Designer/components/DefaultSelectToolBar/index.tsx","../src/plugins/Designer/util.ts","../src/plugins/Designer/components/GhostView/index.tsx","../src/plugins/Designer/components/Canvas/advanceCustomHook.ts","../src/plugins/Designer/components/Canvas/index.tsx","../src/plugins/Designer/index.tsx","../src/plugins/OutlineTree/util.tsx","../src/plugins/OutlineTree/components/TreeView/context.ts","../src/plugins/OutlineTree/components/TreeView/treeNode.tsx","../src/plugins/OutlineTree/components/TreeView/index.tsx","../src/plugins/OutlineTree/localize/zh_CN/index.ts","../src/plugins/OutlineTree/localize/en_US/index.ts","../src/plugins/OutlineTree/localize/index.ts","../src/plugins/OutlineTree/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/config.ts","../src/component/CustomSchemaForm/components/Form/context.ts","../src/component/CustomSchemaForm/components/Form/index.tsx","../src/component/CustomSchemaForm/components/Setters/StringSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/NumberSetter/index.tsx","../src/component/CustomSchemaForm/utils.ts","../src/component/CustomSchemaForm/components/Setters/ArraySetter/ArrayItem.tsx","../src/component/CustomSchemaForm/components/Setters/ArraySetter/SortItemOrderModal.tsx","../src/component/CustomSchemaForm/components/Setters/ArraySetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/ShapeSetter/index.tsx","../src/component/MonacoEditor/index.tsx","../src/component/CustomSchemaForm/components/Setters/FunctionSetter/defaultDts.ts?raw","../src/component/CustomSchemaForm/components/Setters/FunctionSetter/helper.ts","../src/component/CustomSchemaForm/components/Setters/ExpressionSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/BooleanSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/SelectSetter/index.tsx","../src/component/MoveableModal/index.tsx","../src/component/CustomSchemaForm/components/Setters/JSONSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/FunctionSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/TextAreaSetter/index.tsx","../src/component/CSSPropertiesEditor/cssProperties.ts","../src/component/CustomSchemaForm/components/Setters/CSSValueSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/ColorSetter/index.tsx","../src/config/colorPickerColorList.ts","../src/component/CustomSchemaForm/components/Setters/AntDColorSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/SliderSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/RadioGroupSetter/index.tsx","../src/component/InputNumberPlus/index.tsx","../src/component/CSSSizeInput/index.tsx","../src/component/CustomSchemaForm/components/Setters/CSSSizeSetter/index.tsx","../src/component/StylePanel/DimensionInput/index.tsx","../src/component/StylePanel/MarginAndPaddingInput/index.tsx","../src/component/CustomColorPicker/index.tsx","../src/component/StylePanel/FontInput/index.tsx","../src/component/StylePanel/BorderInput/index.tsx","../src/component/StylePanel/BackgroundInput/index.tsx","../src/component/StylePanel/ShadowInput/index.tsx","../src/component/CSSCodeEditor/helper.ts","../src/component/CSSCodeEditor/index.tsx","../src/component/StylePanel/index.tsx","../src/component/CustomSchemaForm/components/Setters/FastLayoutSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/EmptyValueSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/index.ts","../src/component/CustomSchemaForm/components/Form/Field/index.tsx","../src/component/CustomSchemaForm/context.ts","../src/component/CustomSchemaForm/components/SetterSwitcher/core.tsx","../src/component/CustomSchemaForm/components/SetterSwitcher/index.tsx","../src/component/CustomSchemaForm/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/modal.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeState/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/CreateNewNodePopup/initData.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/CreateNewNodePopup/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/InputHandle/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/OutputHandle/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/NodeCard/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/context.ts","../src/component/CustomSchemaForm/components/CFiledWithSwitchSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/StartNode.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/JumpLinkNode.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/helper.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RunCodeNode/index.tsx","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/index.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/util.ts","../src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/index.tsx","../src/component/CustomSchemaForm/components/Setters/AdvanceSetterList.ts","../src/plugins/PropertyPanel/view.tsx","../src/plugins/PropertyPanel/index.tsx","../src/plugins/ComponentStatePanel/index.tsx","../src/plugins/AdvancePanel/index.tsx","../src/component/CSSPropertiesVariableBindEditor/cssProperties.ts","../src/plugins/RightPanel/context.ts","../src/component/CSSPropertiesVariableBindEditor/SingleProperty.tsx","../src/component/CSSPropertiesVariableBindEditor/index.tsx","../src/component/ClassNameEditor/index.tsx","../src/component/CSSPropertiesEditor/signleProperty.tsx","../src/component/CSSPropertiesEditor/index.tsx","../src/component/CSSEditor/index.tsx","../src/plugins/VisualPanelPlus/index.tsx","../src/plugins/EventPanel/panel.tsx","../src/plugins/EventPanel/index.tsx","../src/plugins/RightPanel/view.tsx","../src/plugins/RightPanel/index.tsx","../src/plugins/GlobalStatePanel/localize/zh_CN/index.ts","../src/plugins/GlobalStatePanel/localize/en_US/index.ts","../src/plugins/GlobalStatePanel/localize/index.ts","../src/plugins/GlobalStatePanel/index.tsx","../src/plugins/DisplaySourceSchema/index.tsx","../src/plugins/History/index.tsx","../src/plugins/Hotkeys/keymap.ts","../src/plugins/Hotkeys/hotKeyManager.ts","../src/plugins/Hotkeys/localize/zh_CN/index.ts","../src/plugins/Hotkeys/localize/en_US/index.ts","../src/plugins/Hotkeys/localize/index.ts","../src/plugins/Hotkeys/action.ts","../src/plugins/Hotkeys/index.ts","../src/plugins/index.tsx","../src/component/DesignerSizer/index.tsx","../src/material/container.meta.ts","../src/material/innerMaterial.tsx","../src/index.tsx"],"sourcesContent":["import { CSSVal } from '@/component/CSSEditor';\nimport { CNodeModelDataType, CSSType, CSSValue, JSExpressionPropType, getRandomStr, isExpression } from '@chamn/model';\nimport Color from 'color';\nimport { isPlainObject } from 'lodash-es';\nimport * as csstree from 'css-tree';\n\nexport type StyleArr = {\n property: string;\n value: any;\n}[];\n\nexport const styleArr2Obj = (val: StyleArr) => {\n const res: Record<string, any> = {};\n val.forEach((item) => {\n res[item.property] = item.value;\n });\n return res;\n};\n\nexport const styleObjToArr = (obj: Record<string, any> = {}) => {\n const res: StyleArr = Object.keys(obj).reduce((tempRes, key) => {\n return [\n ...tempRes,\n {\n property: key,\n value: obj[key],\n },\n ];\n }, [] as StyleArr);\n\n return res;\n};\n\nexport const styleList2Text = (val: StyleArr) => {\n let res = '';\n val.forEach((item) => {\n res += `${item.property}:${item.value};`;\n });\n return res;\n};\n\nexport const formatStyleProperty = (styleList: CNodeModelDataType['style'] = []) => {\n // 遗留数据结构兼容, 正式版本会移除\n if (isPlainObject(styleList)) {\n styleList = Object.keys(styleList).map((key) => {\n return {\n property: key,\n value: (styleList as any)[key],\n };\n });\n }\n const normalProperty: { property: string; value: string }[] = [];\n const expressionProperty: { property: string; value: JSExpressionPropType }[] = [];\n const allProperty: { property: string; value: any }[] = [];\n styleList.forEach((it) => {\n const val = it.value;\n const obj = {\n property: it.property,\n value: val,\n };\n\n allProperty.push(obj);\n if (isExpression(val)) {\n expressionProperty.push({\n ...obj,\n value: val as unknown as JSExpressionPropType,\n });\n } else {\n normalProperty.push({\n ...obj,\n value: val as unknown as string,\n });\n }\n });\n const res = {\n normalProperty,\n expressionProperty,\n allProperty,\n };\n return res;\n};\n\nexport const formatCSSTextProperty = (cssText: string) => {\n // 解析 CSS 代码\n const ast = csstree.parse(`.node {${cssText}}`);\n\n const cssList: { id: string; property: string; value: string }[] = [];\n\n // 遍历 AST 获取属性\n csstree.walk(ast, function (node) {\n if (node.type === 'Declaration') {\n cssList.push({\n id: getRandomStr(),\n property: node.property,\n value: csstree.generate(node.value),\n });\n }\n });\n\n return cssList;\n};\n\nexport const formatCssToNodeVal = (className: string, val: CSSVal): CSSType => {\n type StateType = keyof CSSVal;\n const res: CSSType = {\n class: className,\n value: [],\n };\n const cssList: CSSValue[] = [];\n Object.keys(val).forEach((state) => {\n const currentStateCss = val[state as StateType];\n const tempVal: CSSValue = {\n state: state,\n media: [],\n text: currentStateCss?.['normal'] || '',\n };\n Object.keys(currentStateCss || ({} as any)).forEach((mediaKey) => {\n tempVal.media = tempVal.media || [];\n if (mediaKey !== 'normal') {\n tempVal.media.push({\n type: 'max-width',\n value: mediaKey,\n text: currentStateCss?.[mediaKey] || '',\n });\n }\n });\n cssList.push(tempVal);\n });\n res.value = cssList;\n return res;\n};\n\nexport const formatNodeValToEditor = (val?: CSSType): CSSVal => {\n if (!val) {\n return {};\n }\n const list = val.value;\n const res: CSSVal = {};\n\n list.forEach((el) => {\n const tempStyle = (el as any).style;\n // 遗留数据兼容,正式版本会移除\n if (!el.text && tempStyle) {\n el.text = Object.keys(tempStyle).reduce((cssText, key) => {\n cssText += `${key}: ${tempStyle[key]};`;\n return cssText;\n }, '');\n }\n\n const currentStateCss: Record<string, string> = {\n normal: el.text || '',\n };\n el.media?.forEach((it) => {\n currentStateCss[it.value] = it.text || '';\n });\n res[el.state as keyof CSSVal] = currentStateCss;\n });\n\n return res;\n};\n\nexport const getColorFromStr = (str: string) => {\n // 匹配16进制颜色(包括#号)\n const hexColorPattern = /#(?:[0-9a-fA-F]{3}){1,2}\\b/g;\n\n // 匹配RGBA颜色\n const rgbaColorPattern = /rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*(?:\\d*\\.\\d+|\\d+\\.\\d*|\\d+)\\s*\\)/g;\n\n // 匹配RGB颜色\n const rgbColorPattern = /rgb?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)/g;\n\n // 匹配HSB颜色\n const hsbColorPattern = /hsb?\\(\\s*\\d+\\s*,\\s*\\d+%\\s*,\\s*\\d+%\\s*\\)/g;\n const hexColors = str.match(hexColorPattern) || [];\n const rgbaColors = str.match(rgbaColorPattern) || [];\n const rgbColors = str.match(rgbColorPattern) || [];\n const hsbColors = str.match(hsbColorPattern) || [];\n\n return [...hexColors, ...rgbaColors, ...rgbColors, ...hsbColors];\n};\n\nexport type BoxShadowObjType = {\n offsetX: string | undefined;\n offsetY: string | undefined;\n blur: string | undefined;\n spread: string | undefined;\n color: string | undefined;\n type?: 'inset' | '';\n};\n\nexport const parseBoxShadowString = (str: string) => {\n // 先匹配所有的 rgb(a), 转换为对应的 16 进制,\n const colorsList = getColorFromStr(str);\n const color16Map = colorsList.reduce((res, c) => {\n res[c] = Color(c).hexa();\n return res;\n }, {} as any);\n // 替换字符串中所有的颜色为 16 进制,避免逗号影响分隔\n let tempStr = str;\n colorsList.forEach((c) => {\n tempStr = tempStr.replaceAll(c, color16Map[c]);\n });\n\n // 分割逗号\n const res = tempStr.split(',').map((el) => {\n const shadowItem: BoxShadowObjType = {\n offsetX: undefined,\n offsetY: undefined,\n blur: undefined,\n spread: undefined,\n color: undefined,\n type: undefined,\n };\n let newStr = el;\n if (newStr.includes('inset')) {\n shadowItem.type = 'inset';\n newStr = newStr.replace('inset', '').trim();\n }\n\n const color = getColorFromStr(newStr);\n if (color.length) {\n shadowItem.color = color[0];\n newStr = newStr.replace(shadowItem.color, '').trim();\n }\n\n const newStrArr = newStr.split(' ');\n const sizeArr = [];\n for (let i = 0; i < newStrArr.length; i++) {\n if (!isNaN(parseInt(newStrArr[i]))) {\n sizeArr.push(newStrArr[i]);\n } else {\n break;\n }\n }\n shadowItem.offsetX = sizeArr[0];\n shadowItem.offsetY = sizeArr[1];\n shadowItem.blur = sizeArr[2] || '';\n shadowItem.spread = sizeArr[3] || '';\n // 获取单词颜色\n if (!shadowItem.color) {\n shadowItem.color = newStrArr[sizeArr.length];\n }\n return shadowItem;\n });\n\n return res;\n};\n","import { AssetPackage } from '@chamn/model';\n\nexport class AssetsPackageListManager {\n private _assets: AssetPackage[];\n constructor(assets: AssetPackage[]) {\n this._assets = assets;\n }\n\n getList() {\n return this._assets;\n }\n\n setList(newAssets: AssetPackage[]) {\n const tempList = [...newAssets, ...this._assets];\n const newList = getUniqueAssetsList(tempList);\n // 去重复\n this._assets = newList;\n }\n}\n\nexport const getUniqueAssetsList = (tempList: AssetPackage[]) => {\n const newList: AssetPackage[] = [];\n const idMap: Record<string, any> = {};\n tempList.forEach((el) => {\n if (!idMap[el.package]) {\n idMap[el.package] = el;\n newList.push(el);\n }\n });\n\n return newList;\n};\n","import { getUniqueAssetsList } from '@/core/assetPackagesListManage';\nimport { LayoutPropsType } from '@chamn/layout';\nimport { collectVariable, flatObject, getThirdLibs, RenderPropsType } from '@chamn/render';\n\n/** 默认使用 react 18 模式渲染 */\nexport const beforeInitRender: LayoutPropsType['beforeInitRender'] = async ({ iframe }) => {\n const subWin = iframe.getWindow();\n if (!subWin) {\n return;\n }\n (subWin as any).React = window.React;\n (subWin as any).ReactDOM = window.ReactDOM;\n (subWin as any).ReactDOMClient = (window as any).ReactDOMClient;\n};\n\n/** 默认使用 react 18 模式渲染 */\nexport const getDefaultRender = (options: {\n components: Record<string, any>;\n renderProps: Partial<RenderPropsType>;\n}) => {\n const defaultRender: LayoutPropsType['customRender'] = async ({\n iframe: iframeContainer,\n assets,\n page,\n pageModel,\n ready,\n renderJSUrl,\n }) => {\n await iframeContainer.injectJS(renderJSUrl || '');\n const iframeWindow = iframeContainer.getWindow()!;\n const iframeDoc = iframeContainer.getDocument()!;\n const IframeReact = iframeWindow.React!;\n const IframeReactDOM = iframeWindow.ReactDOMClient!;\n const CRender = iframeWindow.CRender!;\n\n // 从子窗口获取物料对象\n const pageInfo = page || pageModel?.export();\n if (!pageInfo) {\n console.log('page schema is empty');\n return;\n }\n const allAssets = getUniqueAssetsList([...assets, ...(pageInfo.assets || [])]);\n // 注入组件物料资源\n const assetLoader = new CRender.AssetLoader(allAssets, {\n window: iframeContainer.getWindow()!,\n });\n assetLoader\n .onSuccess(() => {\n const allLibs = collectVariable(allAssets, iframeWindow);\n const componentsLibs = flatObject(allLibs);\n const thirdLibs = getThirdLibs(allLibs, pageInfo.thirdLibs || []);\n const App = IframeReact?.createElement(CRender.DesignRender, {\n adapter: CRender?.ReactAdapter,\n page: page,\n pageModel: pageModel,\n components: { ...componentsLibs, ...(options.components || {}) },\n $$context: {\n thirdLibs,\n },\n onMount: (designRenderInstance) => {\n ready(designRenderInstance);\n },\n ...((options?.renderProps as any) || {}),\n });\n IframeReactDOM.createRoot(iframeDoc.getElementById('app')!).render(App);\n })\n .onError(() => {\n console.log('资源加载出错');\n })\n .load();\n };\n\n return defaultRender;\n};\n","import { consola } from 'consola';\nexport const LOGGER = consola.create({\n level: 1,\n});\n","/**\n *\n * @param time 毫秒\n * @returns\n */\nexport const waitReactUpdate = ({ time = 1000 / 60, cb }: { time?: number; cb?: (...args: any[]) => void } = {}) => {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve('ok');\n cb?.();\n }, time);\n });\n};\n/** 确保 key 一定存在 */\nexport const ensureKeyExist = (obj: any, key: string, defaultValue: any) => {\n if (obj[key] !== undefined) {\n return;\n }\n obj[key] = defaultValue;\n};\n\nexport const sageJSONParse = function (jsonStr: string, errorValue: any) {\n try {\n const res = JSON.parse(jsonStr);\n return res;\n } catch (_e) {\n return errorValue ?? null;\n }\n};\n\nexport * from './css';\nexport * from './defaultEngineConfig';\nexport * from './logger';\n","import React from 'react';\nimport { Resizable, ResizeCallback } from 're-resizable';\nimport styles from './style.module.scss';\nimport { Button } from 'antd';\nimport { CloseOutlined, DoubleRightOutlined, PushpinOutlined } from '@ant-design/icons';\nimport clsx from 'clsx';\nimport mitt, { Emitter } from 'mitt';\nimport { waitReactUpdate } from '../../utils';\nimport { createPortal } from 'react-dom';\n\nexport interface PluginContext {\n openPanel: () => void;\n closePanel: () => void;\n getPlugin: (pluginName: string) => any;\n emitter: Emitter<any>;\n}\n\ntype PanelItem = {\n name: string;\n title: string | React.ReactNode;\n icon: React.ReactNode;\n render: React.ReactNode;\n};\n\nexport type WorkbenchCustomView = {\n key: string;\n view: React.ReactNode;\n};\n\nexport type TWidgetVisible = {\n hiddenTopBar?: boolean;\n hiddenLeftPanel?: boolean;\n hiddenRightPanel?: boolean;\n /** canvas 区域不添加任何 padding margining */\n canvasFull?: boolean;\n};\n\ntype WorkbenchStateType = {\n leftBoxVisible: boolean;\n leftBoxSize: {\n width: number;\n height: number | string;\n };\n leftBoxFixed: boolean;\n rightBoxSize: {\n width: number;\n height: number | string;\n };\n rightBoxVisible: boolean;\n currentActiveLeftPanel: string;\n leftPanels: PanelItem[];\n bodyView: React.ReactNode | null;\n rightView: React.ReactNode | null;\n topToolBarView: React.ReactNode | null;\n subTopToolBarView: React.ReactNode | null;\n customViewList: WorkbenchCustomView[];\n} & TWidgetVisible;\n\nexport type WorkbenchPropsType = {\n emitter: Emitter<any>;\n} & TWidgetVisible;\n\nexport class Workbench extends React.Component<WorkbenchPropsType, WorkbenchStateType> {\n emitter: Emitter<any>;\n leftPanelContentRef: React.RefObject<HTMLDivElement>;\n constructor(props: WorkbenchPropsType) {\n super(props);\n this.emitter = props.emitter || mitt();\n this.leftPanelContentRef = React.createRef<HTMLDivElement>();\n this.state = {\n leftBoxVisible: true,\n leftBoxSize: {\n width: 300,\n height: '100%',\n },\n leftBoxFixed: true,\n rightBoxVisible: true,\n rightBoxSize: {\n width: 350,\n height: '100%',\n },\n currentActiveLeftPanel: 'ComponentLib',\n leftPanels: [],\n bodyView: null,\n rightView: null,\n topToolBarView: null,\n subTopToolBarView: null,\n customViewList: [],\n hiddenTopBar: props.hiddenTopBar ?? false,\n hiddenLeftPanel: props.hiddenLeftPanel ?? false,\n hiddenRightPanel: props.hiddenRightPanel ?? false,\n canvasFull: props.canvasFull ?? false,\n };\n }\n\n getHiddenWidgetConfig() {\n return {\n hiddenTopBar: this.state.hiddenTopBar,\n hiddenLeftPanel: this.state.hiddenLeftPanel,\n hiddenRightPanel: this.state.hiddenRightPanel,\n };\n }\n\n /** 隐藏编辑器的小部件 */\n hiddenWidget(config: Partial<TWidgetVisible>) {\n this.setState({\n ...(config || {}),\n });\n }\n\n addLeftPanel = (panel: PanelItem) => {\n this.state.leftPanels.push(panel);\n this.setState({\n leftPanels: [...this.state.leftPanels],\n });\n };\n\n /** 替换对应的 panel */\n replaceLeftPanel = (panelName: string, newPanel: PanelItem) => {\n const targetIndex = this.state.leftPanels.findIndex((el) => el.name === panelName);\n if (targetIndex > -1) {\n const newPanels = [...this.state.leftPanels];\n newPanels[targetIndex] = newPanel;\n this.setState({\n leftPanels: newPanels,\n });\n }\n };\n\n /**\n * 添加属于插件的自定义视图\n * @param view\n * @returns dispose: 调用后移除 view\n */\n addCustomView(view: WorkbenchCustomView) {\n const newViewList = this.state.customViewList;\n newViewList.push(view);\n\n this.setState({\n customViewList: [...newViewList],\n });\n\n return () => {\n const newViewList = this.state.customViewList.filter((el) => el !== view);\n this.setState({\n customViewList: [...newViewList],\n });\n };\n }\n\n openLeftPanel = async (currentActiveLeftPanel?: string) => {\n const newActive = currentActiveLeftPanel || this.state.currentActiveLeftPanel;\n this.setState({\n leftBoxVisible: true,\n leftBoxSize: {\n width: 350,\n height: '100%',\n },\n currentActiveLeftPanel: newActive,\n });\n\n await waitReactUpdate();\n this.emitter.emit('leftPanelVisible', {\n visible: true,\n panelName: newActive,\n });\n };\n\n closeLeftPanel = async () => {\n this.setState({\n leftBoxVisible: false,\n leftBoxSize: {\n width: 0,\n height: '100%',\n },\n });\n await waitReactUpdate();\n this.emitter.emit('leftPanelVisible', {\n visible: false,\n panelName: this.state.currentActiveLeftPanel,\n });\n };\n\n toggleLeftPanel = () => {\n const { leftBoxVisible } = this.state;\n const newVisible = !leftBoxVisible;\n if (newVisible) {\n this.openLeftPanel();\n } else {\n this.closeLeftPanel();\n }\n };\n\n onPluginIconClick = (panel: PanelItem) => {\n const { currentActiveLeftPanel } = this.state;\n if (currentActiveLeftPanel === panel.name && this.state.leftBoxVisible) {\n this.closeLeftPanel();\n } else {\n this.openLeftPanel(panel.name);\n }\n };\n\n openRightPanel = () => {\n const { rightBoxSize } = this.state;\n this.setState({\n rightBoxVisible: true,\n rightBoxSize: {\n width: 400,\n height: rightBoxSize.height,\n },\n });\n };\n\n closeRightPanel = () => {\n const { rightBoxSize } = this.state;\n this.setState({\n rightBoxVisible: false,\n rightBoxSize: {\n width: 0,\n height: rightBoxSize.height,\n },\n });\n };\n\n replaceBodyView = (newView: React.ReactNode) => {\n this.setState({\n bodyView: newView,\n });\n };\n\n replaceRightView = (newView: React.ReactNode) => {\n this.setState({\n rightView: newView,\n });\n };\n\n replaceTopBarView = (newView: React.ReactNode) => {\n this.setState({\n topToolBarView: newView,\n });\n };\n\n replaceSubTopBarView = (newView: React.ReactNode) => {\n this.setState({\n subTopToolBarView: newView,\n });\n };\n\n toggleRightPanel = () => {\n const { rightBoxVisible, rightBoxSize } = this.state;\n const newVisible = !rightBoxVisible;\n this.setState({\n rightBoxVisible: newVisible,\n rightBoxSize: {\n width: newVisible ? 400 : 0,\n height: rightBoxSize.height,\n },\n });\n };\n\n onLeftBoxResizeStop: ResizeCallback = (_e, _direction, _ref, d) => {\n const newW = this.state.leftBoxSize.width + d.width;\n this.setState({\n leftBoxSize: {\n width: newW,\n height: this.state.leftBoxSize.height,\n },\n });\n };\n\n onGlobalClick = (e: MouseEvent) => {\n if (e.target && this.leftPanelContentRef.current?.contains(e.target as any)) {\n return;\n }\n\n if (!this.state.leftBoxFixed && this.state.leftBoxVisible) {\n this.closeLeftPanel();\n }\n };\n\n componentDidMount() {\n document.addEventListener('click', this.onGlobalClick);\n }\n\n render() {\n const {\n leftBoxVisible,\n leftBoxSize,\n leftBoxFixed,\n rightBoxSize,\n rightBoxVisible,\n leftPanels,\n currentActiveLeftPanel,\n bodyView,\n rightView,\n topToolBarView,\n subTopToolBarView,\n customViewList,\n hiddenTopBar,\n hiddenLeftPanel,\n hiddenRightPanel,\n } = this.state;\n const leftBoContentStyle: React.CSSProperties = {};\n if (!leftBoxFixed) {\n leftBoContentStyle.position = 'absolute';\n leftBoContentStyle.left = '50px';\n leftBoContentStyle.top = 0;\n }\n\n const currentActivePluginObj = leftPanels.find((el) => el.name === currentActiveLeftPanel);\n\n const CurrentPluginRenderView = currentActivePluginObj?.render || null;\n const { onPluginIconClick, toggleRightPanel, toggleLeftPanel, onLeftBoxResizeStop } = this;\n return (\n <div className={styles.workbenchContainer}>\n {!hiddenTopBar && (\n <div className={styles.topToolBarBox}>\n <div className={styles.topToolBarView}>{topToolBarView}</div>\n </div>\n )}\n\n <div className={styles.bodyContent}>\n {!hiddenLeftPanel && (\n <div\n className={clsx([styles.leftBox, hiddenLeftPanel ?? styles.hiddenLeftPanel])}\n ref={this.leftPanelContentRef}\n >\n <div className={styles.pluginIconBar}>\n {leftPanels.map((pl) => {\n return (\n <div\n key={pl.name}\n onClick={() => onPluginIconClick(pl)}\n className={clsx([\n styles.pluginIconItem,\n currentActivePluginObj?.name === pl.name && styles.active,\n ])}\n >\n {pl.icon}\n </div>\n );\n })}\n </div>\n {leftBoxVisible && (\n <Resizable\n className={styles.pluginPanelBoxResizeBox}\n size={leftBoxSize}\n style={leftBoContentStyle}\n minWidth={300}\n maxWidth={600}\n enable={{\n right: leftBoxVisible,\n }}\n onResizeStop={onLeftBoxResizeStop}\n >\n <div className={styles.pluginHeader}>\n <span className={styles.pluginNameText}>\n {currentActivePluginObj?.title || currentActivePluginObj?.name}\n </span>\n <Button\n className={clsx([styles.fixedBtn])}\n type=\"text\"\n size=\"small\"\n onClick={() => {\n this.setState({\n leftBoxFixed: !this.state.leftBoxFixed,\n });\n }}\n >\n <PushpinOutlined className={clsx([leftBoxFixed && styles.active])} />\n </Button>\n <Button className={styles.closeBtn} type=\"text\" size=\"small\" onClick={toggleLeftPanel}>\n <CloseOutlined />\n </Button>\n </div>\n <div className={styles.pluginPanelBox}>{CurrentPluginRenderView}</div>\n </Resizable>\n )}\n </div>\n )}\n\n <div className={styles.centerBox}>\n {subTopToolBarView && <div className={styles.subTopToolbarBox}>{subTopToolBarView}</div>}\n <div className={clsx([styles.canvasBox, this.state.canvasFull !== true && styles.canvasBoxPadding])}>\n <div className={styles.scrollBox}>{bodyView}</div>\n </div>\n </div>\n\n <div className={clsx([styles.rightResizeBox, hiddenRightPanel && styles.hiddenRightPanel])}>\n <div className={styles.arrowCursor} onClick={toggleRightPanel}>\n <DoubleRightOutlined className={clsx([!rightBoxVisible && styles.active])} />\n </div>\n <div\n style={{\n display: rightBoxVisible ? 'block' : 'none',\n height: '100%',\n }}\n >\n <Resizable\n minWidth={400}\n maxWidth={600}\n enable={{\n left: rightBoxVisible,\n }}\n size={rightBoxSize}\n onResizeStop={(_e, _direction, _ref, d) => {\n this.setState({\n rightBoxSize: {\n width: this.state.rightBoxSize.width + d.width,\n height: this.state.rightBoxSize.height,\n },\n });\n }}\n >\n <div className={styles.rightBox}>{rightView}</div>\n </Resizable>\n </div>\n </div>\n </div>\n {createPortal(\n <div className={styles.customViewBox}>\n {customViewList.map((el) => {\n return (\n <div\n key={el.key}\n style={{\n pointerEvents: 'auto',\n display: 'inline-block',\n }}\n >\n {el.view}\n </div>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n }\n}\n","export const zh_CN = {\n translation: {\n 'Welcome to React': '欢迎使用 React',\n },\n};\n","export const en_US = {\n translation: {\n 'Welcome to React': 'Welcome to React and react-i18next',\n },\n};\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\n\n// the translations\n// (tip move them in a JSON file and import them,\n// or even better, manage them separated from your code: https://react.i18next.com/guides/multiple-translation-files)\nconst resources = {\n zh_CN,\n en_US,\n};\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .init({\n resources,\n lng: 'zh_CN', // language to use, more information here: https://www.i18next.com/overview/configuration-options#languages-namespaces-resources\n // you can use the i18n.changeLanguage function to change the language manually: https://www.i18next.com/overview/api#changelanguage\n // if you're using a language detector, do not define the lng option\n react: {\n bindI18n: 'added languageChanged',\n bindI18nStore: 'added',\n },\n });\n\nexport type CustomI18n = typeof i18n & {\n update: () => void;\n};\n\nconst customI18n: CustomI18n = i18n as any;\n\ncustomI18n.update = () => {\n setTimeout(() => {\n i18n.emit('added');\n }, 0);\n};\n\ncustomI18n.changeLanguage('en_US');\n\nexport default customI18n;\n","import { Engine } from '@/index';\nimport { CPage } from '@chamn/model';\nimport mitt, { Emitter } from 'mitt';\nimport { Workbench } from '../component/Workbench';\nimport { CustomI18n } from '../i18n';\nimport { AssetsPackageListManager } from './assetPackagesListManage';\n\nexport type PluginObj<C, E = any> = {\n name: string;\n PLUGIN_NAME?: string;\n init: (ctx: CPluginCtx<C>) => Promise<void>;\n destroy: (ctx: CPluginCtx<C>) => Promise<void>;\n /** 用于暴露给外部重载插件 */\n reload?: (ctx: CPluginCtx<C>) => Promise<void>;\n /** 插件暴露给外部可以调用的方法 */\n export: (ctx: CPluginCtx<C>) => E;\n meta: {\n engine: {\n version: string;\n };\n };\n};\n\ninterface PluginFunction<C, E> {\n (ctx: CPluginCtx<C>): PluginObj<C, E>;\n ['PLUGIN_NAME']?: string;\n}\n\nexport type CPlugin<C = Record<string, any>, E = any> = PluginObj<C, E> | PluginFunction<C, E>;\n\ntype PluginManagerOptions = {\n getWorkbench: () => Workbench;\n emitter: Emitter<any>;\n pageModel: CPage;\n i18n: CustomI18n;\n assetsPackageListManager: AssetsPackageListManager;\n engine: Engine;\n};\n\nexport type CPluginCtx<C = any> = {\n name?: string;\n globalEmitter: Emitter<any>;\n /** 当前插件外部传入的配置 **/\n config: C;\n pluginManager: PluginManager;\n pluginReadyOk: () => void;\n} & PluginManagerOptions;\n\nexport type PluginInstance<C = any, E = any> = {\n ctx: CPluginCtx<C>;\n export: E;\n source: PluginObj<C, E>;\n ready: boolean;\n};\n\nexport type CustomPluginHook<P extends PluginInstance<any, any> = any> = (pluginInstance: P) => P;\n\nexport class PluginManager {\n plugins: Map<string, PluginInstance> = new Map();\n emitter: Emitter<any> = mitt();\n getWorkbench!: () => Workbench;\n pageModel!: CPage;\n i18n: CustomI18n;\n assetsPackageListManager: AssetsPackageListManager;\n engine: Engine;\n customPluginHooks: Record<string, CustomPluginHook[]> = {};\n\n constructor({ getWorkbench, emitter, pageModel, i18n, assetsPackageListManager, engine }: PluginManagerOptions) {\n this.getWorkbench = getWorkbench;\n this.emitter = emitter;\n this.pageModel = pageModel;\n this.i18n = i18n;\n this.assetsPackageListManager = assetsPackageListManager;\n this.engine = engine;\n }\n\n /** 自定义插件, 可以修改插件的配置 */\n customPlugin = <P extends PluginInstance<any, any>>(pluginName: string, customPluginHook: CustomPluginHook<P>) => {\n const customPluginHooks = this.customPluginHooks;\n const hookList = customPluginHooks[pluginName] || [];\n hookList.push(customPluginHook);\n customPluginHooks[pluginName] = hookList;\n this.customPluginHooks = customPluginHooks;\n };\n\n createPluginCtx = () => {\n const ctx: CPluginCtx = {\n globalEmitter: this.emitter,\n emitter: mitt(),\n config: {},\n getWorkbench: this.getWorkbench,\n pluginManager: this,\n pageModel: this.pageModel,\n i18n: this.i18n,\n assetsPackageListManager: this.assetsPackageListManager,\n engine: this.engine,\n pluginReadyOk: () => {},\n };\n return ctx;\n };\n\n async add(plugin: CPlugin) {\n const ctx = this.createPluginCtx();\n\n let innerPlugin: PluginObj<any, any>;\n if (typeof plugin === 'function') {\n innerPlugin = plugin(ctx);\n } else {\n innerPlugin = plugin;\n }\n let pluginCtx: PluginInstance = {\n source: innerPlugin,\n ctx: ctx,\n export: innerPlugin.export?.(ctx) || {},\n ready: false,\n };\n const customHookList = this.customPluginHooks[innerPlugin.name] || [];\n customHookList.forEach((cb) => {\n pluginCtx = cb(pluginCtx);\n });\n ctx.pluginReadyOk = () => {\n this.emitter.emit(`${innerPlugin.name}:ready`);\n pluginCtx.ready = true;\n };\n this.plugins.set(innerPlugin.name, pluginCtx);\n await innerPlugin.init(ctx);\n }\n\n async get<P extends PluginInstance<any, any>>(pluginName: string): Promise<P | undefined> {\n const pluginInstance = this.plugins.get(pluginName);\n if (pluginInstance?.ready) {\n return pluginInstance as any;\n } else {\n await this.onPluginReadyOk(pluginName);\n return pluginInstance as any;\n }\n }\n\n async remove(name: string) {\n const p = this.plugins.get(name);\n await p?.source.destroy(p.ctx);\n this.plugins.delete(name);\n }\n\n onPluginReadyOk(pluginName: string, cb?: (pluginHandle: PluginInstance) => void) {\n return new Promise<PluginInstance>((resolve) => {\n const pluginObj = this.plugins.get(pluginName);\n if (pluginObj?.ready) {\n resolve(pluginObj);\n } else if (pluginObj === undefined) {\n console.warn(`plugin: ${pluginName} not found.`);\n }\n this.emitter.on(`${pluginName}:ready`, () => {\n const newPluginObj = this.plugins.get(pluginName);\n if (newPluginObj) {\n newPluginObj.ready = true;\n cb?.(newPluginObj);\n resolve(newPluginObj);\n }\n });\n });\n }\n}\n","export const zh_CN: Record<string, any> = {\n pluginName: '组件库',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Components',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","import { Popover } from 'antd';\nimport clsx from 'clsx';\nimport React, { useMemo } from 'react';\nimport styles from './style.module.scss';\n\nexport type DragComponentItemProps = {\n id: string;\n name: string;\n description?: any;\n icon: React.ReactNode | string;\n iconText?: string;\n style?: React.CSSProperties;\n containerClassName?: string;\n};\n\nexport const DragComponentItem = (props: DragComponentItemProps) => {\n const dragInfo = {\n [DRAG_ITEM_KEY]: props.id,\n };\n\n const icon = useMemo(() => {\n if (props.iconText) {\n return <div className={styles.iconText}>{String(props.iconText).toUpperCase()}</div>;\n }\n if (typeof props.icon === 'string') {\n return <img className={styles.iconImg} src={props.icon} draggable={false} />;\n } else {\n return props.icon;\n }\n }, [props.icon, props.iconText]);\n\n const contentView = (\n <div className={clsx([styles.square, props.containerClassName])}>\n <div {...dragInfo} className={styles.componentItem} style={props.style}>\n <div className={styles.iconBox}>{icon}</div>\n <span>{props.name}</span>\n </div>\n </div>\n );\n\n if (props.description) {\n return (\n <Popover\n overlayInnerStyle={{\n maxWidth: '300px',\n maxHeight: '200px',\n overflow: 'auto',\n }}\n content={props.description || ''}\n zIndex={1000}\n placement=\"right\"\n >\n {contentView}\n </Popover>\n );\n } else {\n return contentView;\n }\n};\n\nexport const DRAG_ITEM_KEY = 'data-drag-key';\n","import { useMemo } from 'react';\nimport { SnippetsType } from '@chamn/model';\nimport { Collapse } from 'antd';\nimport { DragComponentItem } from '../DragItem';\nimport styles from './style.module.scss';\n\nexport type ListViewProps = {\n dataSource: {\n name: string;\n list: SnippetsType[];\n }[];\n};\nexport const ListView = (props: ListViewProps) => {\n const { dataSource } = props;\n const defaultActiveKey = dataSource.map((el) => el.name || '');\n\n const items = useMemo(() => {\n return dataSource.map((el) => {\n const category = el.name || '';\n const contentView = (\n <div className={styles.collapsePanel}>\n {el.list.map((it) => {\n return (\n <DragComponentItem\n id={it.id!}\n key={it.id!}\n name={it.title}\n icon={it.snapshot || it.snapshotText}\n iconText={it.snapshotText}\n description={it.description || ''}\n />\n );\n })}\n </div>\n );\n\n return {\n key: category,\n label: category,\n children: contentView,\n };\n });\n }, [dataSource]);\n\n if (!dataSource.length) {\n return null;\n }\n\n return (\n <div className={styles.ListBox}>\n <Collapse style={{ width: '100%' }} defaultActiveKey={defaultActiveKey} items={items}></Collapse>\n </div>\n );\n};\n","import { SnippetsCollection, SnippetsType } from '@chamn/model';\n\nexport const getTargetMNodeKeyVal = (dom: HTMLElement | null, key: string): null | string => {\n if (!dom) {\n return null;\n }\n const val = dom.getAttribute(key);\n if (!val) {\n return getTargetMNodeKeyVal(dom.parentElement, key);\n } else {\n return val;\n }\n};\n\nexport const searchComponentSnippets = (componentList: SnippetsCollection, searchKeyWords: string) => {\n const newResList: {\n name: string;\n list: SnippetsType[];\n }[] = [];\n const searchString = searchKeyWords?.toLowerCase();\n componentList.forEach((el) => {\n // category\n const tempList = [...el.list];\n tempList.forEach((it) => {\n const snippets = it.list.filter((i) => {\n let hit: boolean | undefined = false;\n if (typeof i.description === 'string') {\n hit = i.description?.includes(searchString);\n }\n hit = hit || i.title?.toLowerCase().includes(searchString);\n hit = hit || i.snapshotText?.toLowerCase().includes(searchString);\n hit = hit || i.category?.toLowerCase().includes(searchString);\n return hit;\n });\n if (snippets.length) {\n newResList.push({\n name: it.name,\n list: snippets,\n });\n }\n });\n });\n\n return newResList;\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React, { DOMAttributes } from 'react';\nimport { AppstoreAddOutlined, SearchOutlined } from '@ant-design/icons';\nimport { LayoutDragAndDropExtraDataType, Sensor } from '@chamn/layout';\nimport { Input, Tabs } from 'antd';\nimport { CPlugin, CPluginCtx } from '../../core/pluginManager';\nimport localize from './localize';\nimport styles from './style.module.scss';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { ListView } from './components/ListView';\nimport { getTargetMNodeKeyVal, searchComponentSnippets } from './util';\nimport { DRAG_ITEM_KEY } from './components/DragItem';\nimport {\n CNode,\n CRootNode,\n CSlot,\n DragAndDropEventExtraData,\n findContainerNode,\n isPageModel,\n SnippetsCollection,\n SnippetsType,\n} from '@chamn/model';\nimport { capitalize } from 'lodash-es';\nimport { InsertNodePosType } from '@chamn/model/src';\nimport { DesignerPluginInstance } from '../Designer/type';\n\ninterface ComponentLibViewProps extends WithTranslation {\n pluginCtx: CPluginCtx<ComponentLibPluginConfig>;\n}\n\nexport const PLUGIN_NAME = 'ComponentLib';\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\nconst TabTitle = ({ children }: { children: any }) => {\n return <div className={styles.tabTitle}>{children}</div>;\n};\n\ntype ComponentLibViewState = {\n componentsList: SnippetsCollection;\n searchString: string;\n searchMode: boolean;\n searchResultList: {\n name: string;\n list: SnippetsType[];\n }[];\n};\n\nexport type ComponentLibPluginConfig = {\n customSearchBar?: (props: {\n defaultInputView: React.ReactNode;\n updateState: (newState: Partial<ComponentLibViewState>) => string;\n }) => React.ReactNode;\n};\n\nclass ComponentLibView extends React.Component<ComponentLibViewProps, ComponentLibViewState> {\n containerRef: React.RefObject<HTMLDivElement>;\n disposeList: (() => void)[] = [];\n boxSensor!: Sensor<DragAndDropEventExtraData>;\n\n constructor(props: ComponentLibViewProps) {\n super(props);\n this.containerRef = React.createRef<HTMLDivElement>();\n this.state = {\n componentsList: [],\n searchString: '',\n searchMode: false,\n searchResultList: [],\n };\n }\n\n leftPanelVisibleCb = async ({ visible, panelName }: { visible: boolean; panelName: string }) => {\n await this.props.pluginCtx.pluginManager.onPluginReadyOk('Designer');\n if (panelName === PLUGIN_NAME && visible) {\n this.registerDragEvent();\n }\n };\n\n updateComponentsList() {\n const { pluginCtx } = this.props;\n const { pageModel } = pluginCtx;\n const { materialsModel } = pageModel;\n const allSnippets = materialsModel.getAllSnippets();\n\n if (allSnippets.length && allSnippets[0].name === 'default') {\n const df = allSnippets.shift();\n if (df) {\n allSnippets.push(df);\n }\n }\n\n this.setState({\n componentsList: allSnippets,\n });\n }\n\n async componentDidMount() {\n await this.props.pluginCtx.pluginManager.onPluginReadyOk('Designer');\n this.registerDragEvent();\n const { pluginCtx } = this.props;\n const { i18n } = pluginCtx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n i18n.update();\n this.updateComponentsList();\n pluginCtx.globalEmitter.on('updateMaterials', () => {\n this.updateComponentsList();\n });\n }\n\n componentWillUnmount(): void {\n this.disposeList.map((el) => el());\n }\n\n getNewNode = (targetDom: HTMLElement | null) => {\n const { pluginCtx } = this.props;\n const pageModel = pluginCtx.pageModel;\n\n if (!targetDom) {\n return;\n }\n const targetNodeId = getTargetMNodeKeyVal(targetDom as HTMLElement, DRAG_ITEM_KEY);\n\n if (!targetNodeId) {\n return;\n }\n\n const meta = pageModel.materialsModel.findSnippetById(targetNodeId);\n if (!meta) {\n return;\n }\n return pageModel?.createNode(meta.schema);\n };\n\n registerDragEvent = async () => {\n const { containerRef } = this;\n const { pluginCtx } = this.props;\n const designerHandle = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n\n if (!designerHandle) {\n return;\n }\n if (!containerRef.current) {\n return;\n }\n const designerExport = designerHandle.export;\n const dnd = designerExport.getDnd()!;\n const boxSensor = new Sensor<LayoutDragAndDropExtraDataType>({\n name: 'ComponentListBox',\n container: containerRef.current,\n mainDocument: document,\n });\n\n this.boxSensor = boxSensor;\n\n boxSensor.setCanDrag(async (eventObj) => {\n const newNode = this.getNewNode(eventObj.event.target as any);\n\n this.props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer').then((designerHandle) => {\n const designerExport = designerHandle?.export;\n designerExport?.selectNode('');\n });\n\n return {\n ...eventObj,\n extraData: {\n dropType: 'NEW_ADD',\n dragNode: newNode,\n },\n };\n });\n dnd.registerSensor(boxSensor);\n\n const dragStart = () => {\n const { getWorkbench } = this.props.pluginCtx;\n const workbench = getWorkbench();\n if (!workbench.state.leftBoxFixed) {\n workbench.closeLeftPanel();\n }\n };\n\n this.disposeList.push(() => {\n dnd.emitter.off('dragStart', dragStart);\n });\n dnd.emitter.on('dragStart', dragStart);\n };\n\n toAddNewNode: DOMAttributes<HTMLDivElement>['onClick'] = async (event) => {\n const newNode = this.getNewNode(event.nativeEvent.target as HTMLElement);\n if (!newNode) {\n return;\n }\n\n const { pageModel } = this.props.pluginCtx;\n\n return this.props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer').then(async (designerHandle) => {\n const designerExport = designerHandle?.export;\n // 获取当前选中,如果存在,就插入到当前选中的下面,否则就插入到根节点下面\n const selectedNodeId = designerExport?.getSelectedNodeId();\n const selectedNode = pageModel.getNode(selectedNodeId);\n const containerNode = findContainerNode(selectedNode);\n let pos: InsertNodePosType = 'CHILD_END';\n let dropNode: CNode | CRootNode | CSlot | null = selectedNode ?? null;\n if (selectedNode) {\n // 当前节点的父级节点是容器时\n if (containerNode === selectedNode.parent) {\n if (selectedNode.isContainer()) {\n pos = 'CHILD_END';\n dropNode = selectedNode;\n } else {\n pos = 'AFTER';\n dropNode = selectedNode;\n }\n } else if (containerNode && !isPageModel(containerNode)) {\n pos = 'CHILD_END';\n dropNode = containerNode;\n }\n } else {\n const rootNode = pageModel.getRootNode();\n if (rootNode) {\n pos = 'CHILD_END';\n dropNode = rootNode;\n }\n }\n const designerInstance = designerExport?.getInstance();\n\n const addFlag = await designerInstance?.customAdvanceHook.onNewAdd({\n dragNode: newNode,\n dropNode: dropNode as any,\n eventObj: {\n from: event.nativeEvent,\n fromSensor: this.boxSensor,\n pointer: null as any,\n fromPointer: null as any,\n extraData: {},\n },\n });\n if (addFlag === false) {\n return;\n }\n let addNodeInfo = {\n dragNode: newNode,\n dropNode: dropNode,\n pos: pos,\n };\n if (typeof addFlag === 'object') {\n addNodeInfo = {\n ...addNodeInfo,\n dragNode: (addFlag.addNode as any) ?? addNodeInfo.dragNode,\n dropNode: (addFlag.dropNode as any) ?? addNodeInfo.dropNode,\n pos: (addFlag.dropPosInfo?.pos as any) ?? addNodeInfo.pos,\n };\n }\n pageModel.addNode(addNodeInfo.dragNode, addNodeInfo.dropNode as CNode, addNodeInfo.pos);\n setTimeout(() => {\n designerExport?.selectNode(addNodeInfo.dragNode.id);\n }, 16);\n });\n };\n\n onSearch = () => {\n if (!this.state.searchString.length) {\n this.setState({\n searchResultList: [],\n searchMode: false,\n });\n return;\n }\n const newList = searchComponentSnippets(this.state.componentsList, this.state.searchString);\n this.setState({\n searchResultList: newList,\n searchMode: true,\n });\n };\n\n render(): React.ReactNode {\n const { componentsList, searchString, searchResultList, searchMode } = this.state;\n const { toAddNewNode } = this;\n const CustomSearchBar = this.props.pluginCtx.config.customSearchBar;\n const items = componentsList.map((el) => {\n return {\n label: <TabTitle>{capitalize(el.name)}</TabTitle>,\n key: el.name,\n children: <ListView dataSource={el.list} />,\n };\n });\n\n const defaultSearchValue = (\n <Input\n value={searchString}\n placeholder=\"input search text\"\n suffix={<SearchOutlined style={{ color: 'rgba(0,0,0,.25)' }} />}\n onPressEnter={this.onSearch}\n allowClear\n onClear={() => {\n this.setState({\n searchMode: false,\n searchResultList: [],\n });\n }}\n onChange={(e) => {\n this.setState({\n searchString: e.target.value,\n });\n }}\n />\n );\n return (\n <div ref={this.containerRef} className={styles.container} onClick={toAddNewNode}>\n <div className={styles.header}>\n {CustomSearchBar ? (\n <CustomSearchBar defaultInputView={defaultSearchValue} updateState={this.setState.bind(this) as any} />\n ) : (\n defaultSearchValue\n )}\n </div>\n {searchMode && (\n <div>\n {!searchResultList.length && <div className={styles.notFoundComponent}>暂无相关组件</div>}\n <ListView dataSource={searchResultList} />\n </div>\n )}\n {!searchResultList.length && !searchMode && (\n <Tabs\n defaultActiveKey=\"BaseComponent\"\n items={items}\n style={{\n width: '100%',\n }}\n />\n )}\n </div>\n );\n }\n}\n\nexport const ComponentLibPlugin: CPlugin<ComponentLibPluginConfig> = {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const ComponentLibViewWithLocalize = withTranslation(i18nNamespace)(ComponentLibView);\n const Title = withTranslation(i18nNamespace)(({ t }) => {\n return <>{t('pluginName')}</>;\n });\n const workbench = ctx.getWorkbench();\n workbench.addLeftPanel({\n title: <Title />,\n name: 'ComponentLib',\n icon: <AppstoreAddOutlined />,\n render: <ComponentLibViewWithLocalize pluginCtx={ctx} />,\n });\n ctx.pluginReadyOk();\n },\n reload: async () => {\n console.log(PLUGIN_NAME, 'not suooprt reload');\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return {};\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\nComponentLibPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const PLUGIN_NAME = 'Designer';\n","export const zh_CN: Record<string, any> = {\n pluginName: '组件库',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Designer Canvas',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","/* eslint-disable react-refresh/only-export-components */\nimport React, { useMemo, useState } from 'react';\nimport { CopyOutlined, DeleteOutlined, EyeInvisibleOutlined } from '@ant-design/icons';\nimport styles from './style.module.scss';\nimport { CNode } from '@chamn/model';\nimport clsx from 'clsx';\n\nexport type DefaultSelectToolBarProps = {\n nodeList: CNode[];\n toSelectNode: (id: string) => void;\n toDelete: (id: string) => void;\n toCopy: (idd: string) => void;\n toHidden: (idd: string) => void;\n};\n\nconst LayoutSelect = ({\n dataSource,\n children,\n onSelect,\n}: {\n dataSource: { key: string; label: string }[];\n children: React.ReactNode;\n onSelect: (key: string) => void;\n}) => {\n const [hover, setHover] = useState(false);\n return (\n <div className={styles.layoutSelectBox}>\n <div className={clsx([styles.hoverBox, hover && styles.hoverBoxActive])}>\n {dataSource.map((el) => {\n return (\n <div className={styles.hoverItem} key={el.key} onClick={() => onSelect(el.key)}>\n {el.label}\n </div>\n );\n })}\n </div>\n <div className={styles.placeholder} onMouseOver={() => setHover(true)} onMouseOut={() => setHover(false)}>\n {children}\n </div>\n </div>\n );\n};\n\nexport const getDefaultToolbarItem = (props: DefaultSelectToolBarProps) => {\n const { nodeList, toSelectNode, toDelete, toCopy, toHidden } = props;\n const tempList = [...nodeList];\n const currentNode = tempList.shift();\n const parentNodeItems = tempList.map((el) => {\n const node = el;\n const nodeMeta = node.materialsModel.findByComponentName(node.value.componentName)?.value.title;\n const label = node.value.title || nodeMeta || node.value.componentName || '';\n return {\n key: el.id,\n label: label || 'Empty',\n };\n });\n\n const copyItem = (\n <div className={styles.item} onClick={() => toCopy(currentNode?.id || '')} key={'CopyOutlined'}>\n <CopyOutlined />\n </div>\n );\n\n const deleteItem = (\n <div className={styles.item} onClick={() => toDelete(currentNode?.id || '')} key={'DeleteOutlined'}>\n <DeleteOutlined />\n </div>\n );\n\n const visibleItem = (\n <div className={styles.item} onClick={() => toHidden(currentNode?.id || '')} key={'EyeInvisibleOutlined'}>\n <EyeInvisibleOutlined />\n </div>\n );\n\n const nodeLayout = (\n <LayoutSelect dataSource={parentNodeItems.reverse()} onSelect={toSelectNode} key={'LayoutSelect'}>\n <div>{currentNode?.value.title || currentNode?.material?.value.title || 'Empty'}</div>\n </LayoutSelect>\n );\n\n return {\n map: { copyItem, deleteItem, visibleItem, nodeLayout },\n list: [nodeLayout, visibleItem, copyItem, deleteItem],\n };\n};\n\nexport const DefaultSelectToolBar = (props: DefaultSelectToolBarProps) => {\n const { copyItem, deleteItem, visibleItem, nodeLayout } = useMemo(() => {\n return getDefaultToolbarItem(props).map;\n }, [props]);\n\n return (\n <div className={styles.toolBarBox}>\n {nodeLayout}\n {visibleItem}\n {copyItem}\n {deleteItem}\n </div>\n );\n};\n","import { CNode, CPage, CProp, CRootNode, CSlot, isNodeModel } from '@chamn/model';\n\nexport const getClosestNodeList = (node: CNode | CRootNode, level = 5) => {\n const res = [];\n let count = 0;\n let currentNode: CNode | CRootNode | CSlot | CProp | CPage | null = node;\n\n while (count < level && currentNode) {\n if (isNodeModel(currentNode)) {\n res.push(currentNode);\n count++;\n }\n\n currentNode = currentNode.parent || null;\n }\n\n return res;\n};\n","import React from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\n\nexport const GhostView = ({ node }: { node: CNode | CRootNode }) => {\n return (\n <div\n style={{\n backgroundColor: 'rgba(100,100,100)',\n padding: '3px 10px 3px 15px',\n borderRadius: '2px',\n opacity: 0.9,\n color: 'rgba(220,220,220)',\n }}\n >\n {node.value.componentName}\n </div>\n );\n};\n","import { CPluginCtx } from '@/core/pluginManager';\nimport { Layout, LayoutDragAndDropExtraDataType, LayoutDragEvent } from '@/index';\nimport { waitReactUpdate } from '@/utils';\nimport { AdvanceCustom, CNode, CRootNode } from '@chamn/model';\n\nexport interface AdvanceCustomHookOptions {\n getPortalViewCtx: () => {\n setView: (view: React.ReactNode) => void;\n clearView: () => void;\n };\n ctx: CPluginCtx;\n layoutRef: React.RefObject<Layout>;\n}\n\nexport type HookParameter = {\n dragNode?: CNode | CRootNode;\n dropNode?: CNode | CRootNode;\n eventObj: LayoutDragEvent<LayoutDragAndDropExtraDataType>;\n};\n\nexport class AdvanceCustomHook {\n getPortalViewCtx!: AdvanceCustomHookOptions['getPortalViewCtx'];\n ctx: CPluginCtx;\n layoutRef: AdvanceCustomHookOptions['layoutRef'];\n constructor(options: AdvanceCustomHookOptions) {\n this.getPortalViewCtx = options.getPortalViewCtx;\n this.ctx = options.ctx;\n this.layoutRef = options.layoutRef;\n }\n\n async canDrag({ dragNode, eventObj }: HookParameter): ReturnType<Required<AdvanceCustom>['canDragNode']> {\n const nodeAdvanceCustom = dragNode?.material?.value.advanceCustom;\n if (nodeAdvanceCustom?.canDragNode) {\n const res = nodeAdvanceCustom?.canDragNode(dragNode!, {\n context: this.ctx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: eventObj.extraData,\n });\n return res;\n }\n\n return true;\n }\n\n async canDrop({ dragNode, dropNode, eventObj }: HookParameter): ReturnType<Required<AdvanceCustom>['canDropNode']> {\n const nodeAdvanceCustom = dragNode?.material?.value.advanceCustom;\n const dropNodeAdvanceCustom = dropNode!.material?.value.advanceCustom;\n let res: Awaited<ReturnType<Required<AdvanceCustom>['canDropNode']>> = {} as any;\n const commonParams = {\n dropNode,\n context: this.ctx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: eventObj.extraData!,\n };\n if (nodeAdvanceCustom?.canDropNode) {\n res = await nodeAdvanceCustom.canDropNode(dragNode!, commonParams)!;\n\n // 判断 dropNode 是否可以接受 dragNode\n if (dropNodeAdvanceCustom?.canAcceptNode) {\n let canAcceptFlag: Awaited<ReturnType<Required<AdvanceCustom>['canAcceptNode']>>;\n if (typeof res === 'object') {\n canAcceptFlag = await dropNodeAdvanceCustom?.canAcceptNode(res.dragNode!, {\n ...commonParams,\n ...res,\n });\n } else {\n canAcceptFlag = await dropNodeAdvanceCustom?.canAcceptNode(dragNode!, {\n ...commonParams,\n });\n }\n return canAcceptFlag;\n } else {\n return res;\n }\n } else if (dropNodeAdvanceCustom?.canAcceptNode) {\n const canAcceptFlag = await dropNodeAdvanceCustom?.canAcceptNode(dragNode!, {\n ...commonParams,\n });\n return canAcceptFlag;\n }\n return true;\n }\n\n async onNewAdd({ dragNode, dropNode, eventObj }: HookParameter): ReturnType<Required<AdvanceCustom>['onNewAdd']> {\n const res = await dragNode!.material?.value.advanceCustom?.onNewAdd?.(dragNode!, {\n dropNode: dropNode,\n context: this.ctx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: eventObj.extraData!,\n });\n if (res === false) {\n return false;\n }\n return res;\n }\n\n getSelectRectViewRender(node: CNode | CRootNode) {\n const material = node.material;\n return material?.value.advanceCustom?.selectRectViewRender;\n }\n\n getHoverRectViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.hoverRectViewRender;\n }\n\n getDropViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.dropViewRender;\n }\n\n getGhostViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.ghostViewRender;\n }\n getToolbarViewRender(node?: CNode | CRootNode | null) {\n if (!node) {\n return null;\n }\n const material = node.material;\n return material?.value.advanceCustom?.toolbarViewRender;\n }\n\n async onCopy(node: CNode | CRootNode) {\n let resNode = node;\n const ctx = this.ctx;\n const material = node.material;\n const onCopy = material?.value.advanceCustom?.onCopy;\n if (onCopy) {\n const newRes = await onCopy(node, {\n viewPortal: this.getPortalViewCtx(),\n context: ctx,\n extra: {},\n });\n if (newRes === false) {\n return false;\n }\n if (typeof newRes === 'object') {\n resNode = newRes.copyNode ?? resNode;\n }\n }\n\n if (resNode) {\n const newNode = ctx.pageModel.copyNode(resNode as CNode);\n if (newNode) {\n await waitReactUpdate();\n }\n }\n\n return resNode;\n }\n\n async onDelete(node: CNode | CRootNode) {\n let resNode = node;\n const ctx = this.ctx;\n const material = node.material;\n const onDelete = material?.value.advanceCustom?.onDelete;\n\n if (onDelete) {\n const newRes = await onDelete(node, {\n viewPortal: this.getPortalViewCtx(),\n context: ctx,\n extra: {},\n });\n if (newRes === false) {\n return false;\n }\n if (typeof newRes === 'object') {\n resNode = newRes.deleteNode ?? resNode;\n }\n }\n\n if (resNode) {\n const newNode = ctx.pageModel.deleteNode(resNode as CNode);\n if (newNode) {\n await waitReactUpdate();\n }\n }\n\n return resNode;\n }\n}\n","import React from 'react';\nimport { Layout, LayoutPropsType } from '@chamn/layout';\nimport { AdvanceCustom, CNode, CPage, CRootNode, InsertNodePosType } from '@chamn/model';\nimport localize from '../../localize';\nimport { PLUGIN_NAME } from '../../config';\nimport { DefaultSelectToolBar, DefaultSelectToolBarProps, getDefaultToolbarItem } from '../DefaultSelectToolBar';\nimport { getClosestNodeList } from '../../util';\nimport { GhostView } from '../GhostView';\n\nimport styles from './style.module.scss';\nimport '@chamn/layout/dist/style.css';\nimport { AssetPackage } from '@chamn/model';\nimport { createPortal } from 'react-dom';\nimport { CPluginCtx } from '@/core/pluginManager';\nimport { AdvanceCustomHook } from './advanceCustomHook';\nimport { DesignerPluginConfig } from '../../type';\nimport { AdvanceCustomFuncParam } from '@chamn/model';\n\nexport type DesignerCtx = CPluginCtx<DesignerPluginConfig>;\nexport type DesignerPropsType = {\n pluginCtx: DesignerCtx;\n};\n\nexport type WrapComponentOptionsType = {\n ctx: DesignerCtx;\n node: CNode | CRootNode;\n};\n\ntype DesignerStateType = {\n pageModel: CPage;\n hoverToolbarView: React.ReactNode;\n selectToolbarView: React.ReactNode;\n selectRectViewRender: AdvanceCustom['selectRectViewRender'] | null;\n hoverRectViewRender: AdvanceCustom['hoverRectViewRender'] | null;\n dropViewRender: AdvanceCustom['dropViewRender'] | null;\n ghostView: React.ReactNode;\n portalView: React.ReactNode;\n};\n\nexport class Designer extends React.Component<DesignerPropsType, DesignerStateType> {\n layoutRef: React.RefObject<Layout>;\n customAdvanceHook: AdvanceCustomHook;\n constructor(props: DesignerPropsType) {\n super(props);\n\n this.state = {\n pageModel: props.pluginCtx.pageModel,\n hoverToolbarView: null,\n selectToolbarView: null,\n ghostView: null,\n portalView: null,\n selectRectViewRender: null,\n hoverRectViewRender: null,\n dropViewRender: null,\n };\n this.layoutRef = React.createRef<Layout>();\n this.customAdvanceHook = new AdvanceCustomHook({\n getPortalViewCtx: this.getPortalViewCtx,\n ctx: this.props.pluginCtx,\n layoutRef: this.layoutRef,\n });\n }\n\n getPortalViewCtx = () => {\n return {\n setView: (view: React.ReactNode) => {\n this.setState({\n portalView: view,\n });\n },\n clearView: () => {\n this.setState({\n portalView: null,\n });\n },\n };\n };\n\n /**\n * 更新 render 中的 components ;\n */\n async updateRenderComponents(newComponentMap: Record<string, any> = {}) {\n const oldComponents = this.props.pluginCtx.config.components || {};\n const newComponents = {\n ...oldComponents,\n ...newComponentMap,\n };\n this.props.pluginCtx.config.components = newComponents;\n const { layoutRef } = this;\n if (!layoutRef.current) {\n console.warn('layout not ready ok');\n return;\n }\n\n await layoutRef.current.ready();\n\n const layoutInstance = layoutRef.current;\n // 直接修改到 render 中去\n layoutInstance?.designRenderRef?.current?.updateComponents(newComponents);\n }\n\n componentDidMount(): void {\n const { i18n } = this.props.pluginCtx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, `plugin:${PLUGIN_NAME}`, localize[lng], true, true);\n });\n this.init();\n }\n\n getIframeDom() {\n return this.layoutRef.current?.iframeContainer;\n }\n\n reloadRender() {\n this.layoutRef.current?.reload();\n this.props.pluginCtx.pageModel.reloadPage();\n }\n\n async init() {\n const { layoutRef } = this;\n const { pluginCtx } = this.props;\n if (!layoutRef.current) {\n console.warn('layout not ready ok');\n return;\n }\n\n await layoutRef.current.ready();\n const layoutInstance = layoutRef.current;\n\n pluginCtx.emitter.emit('ready', {\n UIInstance: this,\n });\n\n layoutInstance.dnd.emitter.on('click', ({ event }: { event: MouseEvent }) => {\n const workbench = pluginCtx.getWorkbench();\n workbench.onGlobalClick(event);\n });\n\n this.props.pluginCtx.pageModel.emitter.on('onPageChange', ({ node }) => {\n layoutRef.current?.designRenderRef?.current?.rerender(node);\n });\n\n this.props.pluginCtx.pageModel.emitter.on('onReloadPage', ({ node }) => {\n layoutRef.current?.designRenderRef?.current?.rerender(node);\n });\n\n pluginCtx.pluginReadyOk();\n }\n\n onNodeDragging: LayoutPropsType['onNodeDragging'] = async (eventObj) => {\n const extraData = eventObj.extraData;\n const dragNode = extraData?.dragNode;\n if (dragNode) {\n const res = dragNode.material?.value.advanceCustom?.onDragging?.(dragNode, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: extraData,\n });\n return res;\n }\n };\n\n onNodeDragEnd: LayoutPropsType['onNodeDraEnd'] = async () => {\n this.setState({\n ...this.state,\n dropViewRender: this.props.pluginCtx.config.dropViewRender,\n });\n };\n\n onNodeDrop: LayoutPropsType['onNodeDrop'] = async (eventObj) => {\n const { layoutRef } = this;\n const pageModel = this.props.pluginCtx.pageModel;\n const extraData = eventObj.extraData;\n const dropPosInfo = extraData?.dropPosInfo;\n const posFlag = {\n before: 'BEFORE',\n after: 'AFTER',\n current: 'CHILD_START',\n }[dropPosInfo?.pos || 'after'] as InsertNodePosType;\n const dragNode = extraData?.dragNode;\n if (dragNode) {\n const res = await dragNode.material?.value.advanceCustom?.onDrop?.(dragNode, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: extraData,\n });\n if (res === false) {\n return false;\n }\n }\n if (!extraData?.dropNode) {\n console.warn('cancel drop, because drop node is null');\n return false;\n }\n if (extraData.dropType === 'NEW_ADD') {\n if (dragNode) {\n const res = await dragNode.material?.value.advanceCustom?.onNewAdd?.(dragNode, {\n dropNode: extraData.dropNode,\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: eventObj,\n extra: extraData,\n });\n if (res === false) {\n return false;\n }\n }\n // 说明是根节点,直接插入到 第一个 child\n if (extraData.dropNode?.nodeType !== 'NODE') {\n pageModel?.addNode(extraData.dragNode as CNode, extraData.dropNode!, 'CHILD_START');\n } else {\n pageModel?.addNode(extraData.dragNode as CNode, extraData.dropNode!, posFlag);\n }\n } else {\n if (extraData.dropNode?.id === extraData.dragNode?.id) {\n console.warn('dragNode and dropNode id is the same');\n return false;\n }\n const res = pageModel.moveNodeById(extraData.dragNode?.id || '', extraData?.dropNode?.id || '', posFlag);\n if (!res) {\n console.warn('drop failed');\n return false;\n }\n }\n\n this.props.pluginCtx.emitter.emit('onDrop', eventObj);\n return new Promise((resolve) => {\n // 延迟去选中,因为节点放置下去,可能还没有渲染\n setTimeout(async () => {\n if (dragNode) {\n const flag = await this.onSelectNode(dragNode, null);\n if (flag === false) {\n layoutRef.current?.selectNode('');\n return resolve(false);\n }\n }\n layoutRef.current?.selectNode(extraData.dragNode?.id || '');\n resolve(true);\n }, 16);\n });\n };\n\n onSelectNode: Required<LayoutPropsType>['onSelectNode'] = async (node: CNode | CRootNode | null, event) => {\n const { pluginCtx } = this.props;\n const { layoutRef } = this;\n\n if (!node) {\n pluginCtx.engine.updateCurrentSelectNode(null);\n layoutRef.current?.selectNode('');\n this.setState({\n selectToolbarView: null,\n });\n return false;\n }\n const flag = await node.material?.value.advanceCustom?.onSelect?.(node, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: event,\n extra: {},\n });\n if (flag === false) {\n return flag;\n }\n\n const toolbarView = this.getToolbarView(node);\n this.setState({\n selectToolbarView: toolbarView,\n selectRectViewRender:\n this.customAdvanceHook.getSelectRectViewRender(node) || this.props.pluginCtx.config.selectRectViewRender,\n });\n\n // 延迟发送选中事件\n setTimeout(() => {\n pluginCtx.engine.updateCurrentSelectNode(node);\n }, 16.66);\n\n return true;\n };\n\n onDragStart: LayoutPropsType['onNodeDragStart'] = async (e) => {\n const extraData = e.extraData;\n const dragNode = extraData?.dragNode;\n if (!dragNode) {\n return false;\n }\n\n const commonParam = {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: e,\n extra: extraData,\n };\n\n const canDragFlag = await dragNode.material?.value.advanceCustom?.canDragNode?.(dragNode, {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: e,\n extra: {},\n });\n\n if (canDragFlag === false) {\n return canDragFlag;\n }\n\n const dragFlag = await dragNode.material?.value.advanceCustom?.onDragStart?.(dragNode, { ...commonParam });\n if (dragFlag === false) {\n return dragFlag;\n }\n\n const ghostView = this.getGhostView(dragNode, commonParam);\n this.setState({\n ...this.state,\n ghostView: ghostView,\n dropViewRender: this.customAdvanceHook.getDropViewRender(dragNode) || this.props.pluginCtx.config.dropViewRender,\n });\n return true;\n };\n\n getGhostView = (dragNode: CNode | CRootNode, commonParam: AdvanceCustomFuncParam) => {\n let ghostView: React.ReactElement = <GhostView node={dragNode} />;\n const nodeGhostView = this.customAdvanceHook.getGhostViewRender(dragNode);\n const CustomGhostView = nodeGhostView || this.props.pluginCtx.config.ghostViewRender;\n\n if (CustomGhostView) {\n ghostView = <CustomGhostView node={dragNode} params={commonParam} />;\n }\n return ghostView;\n };\n\n toSelectNode = async (nodeId: string) => {\n const ctx = this.props.pluginCtx;\n const node = ctx.pageModel.getNode(nodeId);\n const flag = await this.onSelectNode(node || null, null);\n if (flag === false) {\n return false;\n } else {\n this.layoutRef.current?.selectNode(nodeId);\n return true;\n }\n };\n\n toCopyNode = async (id: string) => {\n const ctx = this.props.pluginCtx;\n const cpNode = ctx.pageModel.getNode(id);\n const newNode = await this.customAdvanceHook.onCopy(cpNode as CNode);\n if (newNode) {\n this.toSelectNode(newNode.id);\n return true;\n }\n };\n\n toDeleteNode = async (nodeId: string) => {\n const ctx = this.props.pluginCtx;\n const node = ctx.pageModel.getNode(nodeId);\n if (!node) {\n return;\n }\n const delRes = await this.customAdvanceHook.onDelete(node);\n if (delRes === false) {\n return false;\n }\n this.toSelectNode('');\n return true;\n };\n\n toHidden = (id: string) => {\n const targetNodeModel = this.props.pluginCtx.pageModel.getNode(id) as CNode;\n if (!targetNodeModel) {\n return;\n }\n const devState = targetNodeModel.value.configure.devState ?? {};\n devState.condition = false;\n targetNodeModel.value.configure.devState = devState;\n targetNodeModel.updateValue();\n return true;\n };\n\n getToolbarView = (node: CNode | CRootNode) => {\n const list = getClosestNodeList(node, 5);\n const toolbarProps: DefaultSelectToolBarProps = {\n nodeList: list,\n toSelectNode: this.toSelectNode,\n toCopy: this.toCopyNode,\n toDelete: this.toDeleteNode,\n toHidden: this.toHidden,\n };\n const defaultToolbarItem = getDefaultToolbarItem(toolbarProps);\n let toolbarView = <DefaultSelectToolBar {...toolbarProps} />;\n const ToolbarView =\n this.customAdvanceHook.getToolbarViewRender(node) || this.props.pluginCtx.config.toolbarViewRender;\n if (ToolbarView) {\n toolbarView = (\n <ToolbarView\n node={node}\n context={this.props.pluginCtx}\n toolBarItems={defaultToolbarItem.map}\n toolBarItemList={defaultToolbarItem.list}\n />\n );\n }\n return toolbarView;\n };\n\n onHoverNode: LayoutPropsType['onHoverNode'] = (node, dragNode, e) => {\n this.props.pluginCtx.emitter.emit('onHover', node);\n const material = node?.material;\n if (!material) {\n console.warn('material not found', node);\n }\n const commonParam = {\n context: this.props.pluginCtx,\n viewPortal: this.getPortalViewCtx(),\n event: e,\n extra: {},\n };\n const ghostView = this.getGhostView(dragNode, commonParam);\n\n const newState = {\n hoverToolbarView: <div className={styles.hoverTips}>{material?.value.title || material?.componentName}</div>,\n ghostView: ghostView,\n hoverRectViewRender:\n this.customAdvanceHook.getHoverRectViewRender(node) || this.props.pluginCtx.config.hoverRectViewRender,\n };\n if (!dragNode) {\n newState.ghostView = null as any;\n }\n this.setState({\n ...newState,\n });\n };\n\n nodeCanDrag: LayoutPropsType['nodeCanDrag'] = async (e) => {\n const extraData = e.extraData;\n const dragNode = extraData?.dragNode;\n const res = await this.customAdvanceHook.canDrag({\n dragNode,\n eventObj: e,\n });\n return res;\n };\n\n nodeCanDrop: LayoutPropsType['nodeCanDrop'] = async (e) => {\n const extraData = e.extraData;\n const dragNode = extraData?.dragNode;\n const res = await this.customAdvanceHook.canDrop({\n dragNode,\n eventObj: e,\n ...extraData,\n });\n return res;\n };\n\n innerSelectRectViewRender: LayoutPropsType['selectRectViewRender'] = (selectViewProps) => {\n const { selectRectViewRender } = this.state;\n const { pluginCtx } = this.props;\n\n const Comp = selectRectViewRender;\n const selectNode = pluginCtx.engine.getActiveNode();\n\n if (!Comp || !selectNode) {\n return <></>;\n }\n return (\n <Comp\n node={selectNode}\n componentInstance={selectViewProps.instance}\n componentInstanceIndex={selectViewProps.index}\n params={{\n viewPortal: this.getPortalViewCtx(),\n context: this.props.pluginCtx,\n extra: {},\n }}\n />\n );\n };\n\n innerHoverRectViewRender: LayoutPropsType['hoverRectViewRender'] = (hoverViewProps) => {\n const { hoverRectViewRender } = this.state;\n\n const Comp = hoverRectViewRender;\n\n if (!Comp) {\n return <></>;\n }\n return (\n <Comp\n node={hoverViewProps.instance._NODE_MODEL}\n componentInstance={hoverViewProps.instance}\n componentInstanceIndex={hoverViewProps.index}\n params={{\n viewPortal: this.getPortalViewCtx(),\n context: this.props.pluginCtx,\n extra: {},\n }}\n />\n );\n };\n\n innerDropViewRender: LayoutPropsType['dropViewRender'] = (dropViewProps) => {\n const { dropViewRender } = this.state;\n\n const Comp = dropViewRender;\n\n if (!Comp) {\n return <></>;\n }\n return (\n <Comp\n {...(dropViewProps as any)}\n node={dropViewProps.instance._NODE_MODEL}\n componentInstance={dropViewProps.instance}\n componentInstanceIndex={dropViewProps.index}\n params={{\n viewPortal: this.getPortalViewCtx(),\n context: this.props.pluginCtx,\n extra: {},\n }}\n />\n );\n };\n\n render() {\n const { layoutRef, props, onSelectNode, onDragStart, onHoverNode, onNodeDrop, onNodeDragging, onNodeDragEnd } =\n this;\n const {\n pageModel,\n hoverToolbarView,\n selectToolbarView,\n ghostView,\n portalView,\n selectRectViewRender,\n hoverRectViewRender,\n dropViewRender,\n } = this.state;\n\n const { pluginCtx } = props;\n const assets = pluginCtx.assetsPackageListManager.getList() || ([] as AssetPackage[]);\n\n const renderJSUrl = pluginCtx.engine.props.renderJSUrl || './render.umd.js';\n const advanceCustomProps: LayoutPropsType = {};\n\n if (selectRectViewRender) {\n advanceCustomProps.selectRectViewRender = this.innerSelectRectViewRender;\n }\n\n if (hoverRectViewRender) {\n advanceCustomProps.hoverRectViewRender = this.innerHoverRectViewRender;\n }\n\n if (dropViewRender) {\n advanceCustomProps.dropViewRender = this.innerDropViewRender;\n }\n if (selectToolbarView) {\n advanceCustomProps.selectToolbarView = this.state.selectToolbarView;\n }\n\n return (\n <>\n <Layout\n beforeInitRender={props.pluginCtx.config.beforeInitRender}\n customRender={props.pluginCtx.config.customRender}\n ref={layoutRef}\n pageModel={pageModel}\n renderJSUrl={renderJSUrl}\n {...props}\n hoverToolBarView={hoverToolbarView}\n selectBoxStyle={{}}\n hoverBoxStyle={{}}\n nodeCanDrag={this.nodeCanDrag}\n nodeCanDrop={this.nodeCanDrop}\n onSelectNode={onSelectNode}\n onNodeDragStart={onDragStart}\n onHoverNode={onHoverNode}\n onNodeDrop={onNodeDrop}\n onNodeDragging={onNodeDragging}\n onNodeDraEnd={onNodeDragEnd}\n {...advanceCustomProps}\n ghostView={ghostView}\n assets={assets}\n pluginCtx={this.props.pluginCtx}\n />\n {portalView && createPortal(portalView, document.body)}\n </>\n );\n }\n}\n","import React from 'react';\nimport { CPage, CPageDataType } from '@chamn/model';\n\nimport { PLUGIN_NAME } from './config';\nimport { Designer } from './components/Canvas';\nimport { DesignerPluginType } from './type';\nimport { LayoutMode } from '@chamn/layout';\n\nexport const DesignerPlugin: DesignerPluginType = () => {\n const designerRef = React.createRef<Designer>();\n return {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n ctx.name = PLUGIN_NAME;\n const workbench = ctx.getWorkbench();\n workbench.replaceBodyView(<Designer ref={designerRef} pluginCtx={ctx} />);\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return {\n /** 设置 canvas 的渲染模式 */\n setMode(newMode) {\n return designerRef.current?.layoutRef.current?.setMode(newMode);\n },\n setPreviewMode() {\n return designerRef.current?.layoutRef.current?.setMode(LayoutMode.PREVIEW);\n },\n setEditMode() {\n return designerRef.current?.layoutRef.current?.setMode(LayoutMode.EDIT);\n },\n setCanvasWidth(width: number | string) {\n const iframeContainer = designerRef.current?.getIframeDom();\n\n if (iframeContainer?.containerDom) {\n let newW = width;\n if (typeof width === 'number') {\n newW = `${width}px`;\n }\n iframeContainer.containerDom.style.width = String(newW);\n iframeContainer.containerDom.style.margin = '0 auto';\n }\n },\n getIframeDom() {\n return designerRef.current?.getIframeDom();\n },\n getInstance: () => {\n return designerRef.current;\n },\n getDnd: () => {\n return designerRef.current?.layoutRef.current?.dnd;\n },\n selectNode: async (nodeId) => {\n return await designerRef.current?.toSelectNode(nodeId);\n },\n copyNode: async (nodeId) => {\n return await designerRef.current?.toCopyNode(nodeId);\n },\n deleteNode: async (nodeId) => {\n return await designerRef.current?.toDeleteNode(nodeId);\n },\n getSelectedNodeId: () => {\n return designerRef.current?.layoutRef.current?.state.currentSelectId;\n },\n updatePage: (page: CPageDataType | CPage) => {\n designerRef.current?.layoutRef.current?.designRenderRef?.current?.rerender(page);\n },\n reload: () => {\n designerRef.current?.reloadRender();\n },\n getComponentInstances: (id: string) => {\n return designerRef.current?.layoutRef.current?.designRenderRef.current?.getInstancesById(id) || [];\n },\n getDynamicComponentInstances: (id: string) => {\n const map =\n designerRef.current?.layoutRef.current?.designRenderRef.current?.renderRef.current\n ?.dynamicComponentInstanceMap;\n return map?.get(id) || ([] as any);\n },\n getLayoutRef: () => {\n return designerRef.current?.layoutRef as any;\n },\n getDesignerWindow: () => {\n return designerRef.current?.layoutRef.current?.iframeContainer.getWindow() as any;\n },\n updateRenderComponents: (newComponents: Record<string, string>) => {\n return designerRef.current?.updateRenderComponents(newComponents);\n },\n };\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n };\n};\n\nDesignerPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","import {\n ArraySetterObjType,\n CNode,\n CNodeDataType,\n CPage,\n CPageDataType,\n DropPosType,\n getMTitle,\n isJSSlotPropNode,\n isSpecialMaterialPropType,\n MaterialPropType,\n MTitle,\n RenderPropType,\n SetterObjType,\n SetterType,\n ShapeSetterObjType,\n} from '@chamn/model';\nimport { isPlainObject } from 'lodash-es';\nimport { TreeNodeData } from './components/TreeView/dataStruct';\n\nexport const getTargetMNodeKeyVal = (dom: HTMLElement | null, key: string): null | string => {\n if (!dom) {\n return null;\n }\n const val = dom.getAttribute(key);\n if (!val) {\n return getTargetMNodeKeyVal(dom.parentElement, key);\n } else {\n return val;\n }\n};\n\nexport const transformNodeSchemaToTreeData = (\n nodeSchema: CNodeDataType | CNodeDataType[],\n parent: TreeNodeData,\n pageModel: CPage\n): TreeNodeData | TreeNodeData[] => {\n const tb = (node: CNodeDataType, parent?: TreeNodeData | null): TreeNodeData => {\n let nodeChild: any[] = node.children || [];\n if (!Array.isArray(nodeChild)) {\n // TODO: 暂时不处理字符串的情况\n nodeChild = [];\n }\n // 过滤掉字符串的情况\n nodeChild = nodeChild.filter((el) => typeof el !== 'string');\n const nodeMeta = pageModel.materialsModel.findByComponentName(node.componentName)?.value.title;\n const newCurrentNode: TreeNodeData = {\n title: node.title || nodeMeta || node.componentName,\n key: node.id,\n children: [],\n parent: parent,\n canDropPos: pageModel.getNode(node.id || '')?.isContainer() ? undefined : ['after', 'before'],\n };\n // 还需要处理 props 中的节点\n const propsNodeList: TreeNodeData[] = [];\n const slotNode: TreeNodeData = {\n title: 'SLOT',\n key: `${node.id}-SLOT`,\n children: propsNodeList,\n canBeSelected: false,\n canDropPos: false,\n parent: null,\n containerRender: ({ treeNodeView }) => {\n return (\n <div\n style={{\n border: '1px solid #a97cf8',\n borderTopWidth: '6px',\n marginRight: '2px',\n marginTop: '5px',\n }}\n >\n {treeNodeView}\n </div>\n );\n },\n };\n const props = node.props || {};\n\n const processProps = (val: unknown, key: string, keys: string[]) => {\n const flag = isJSSlotPropNode(val);\n\n if (flag) {\n const tempVal = val as RenderPropType;\n const pageModeNode = pageModel.getNode(node.id!);\n let propsTitle = '';\n if (pageModeNode) {\n const tempTitle = getPropsLabel(pageModeNode as CNode, [...keys, key]);\n propsTitle = getMTitle(tempTitle);\n }\n let plainTitle = key;\n if (propsTitle) {\n plainTitle = getMTitle(propsTitle) || key;\n }\n const tempNode: TreeNodeData = {\n title: plainTitle,\n key: `${node.id}-${keys.join('_')}`,\n children: [],\n canBeSelected: false,\n canDrag: false,\n canDropPos: ['current'],\n parent: slotNode,\n };\n\n let propValue: CNodeDataType[] = [];\n if (tempVal.value && !Array.isArray(tempVal.value)) {\n propValue = [tempVal.value];\n } else {\n propValue = tempVal.value;\n }\n\n tempNode.children = transformNodeSchemaToTreeData(propValue, tempNode, pageModel) as TreeNodeData[];\n propsNodeList.push(tempNode);\n return;\n }\n if (isPlainObject(val)) {\n const tempVal = val as any;\n Object.keys(tempVal).forEach((newKey) => {\n processProps(tempVal[newKey], newKey, [...keys, key]);\n });\n }\n if (Array.isArray(val)) {\n const tempVal = val as any[];\n tempVal.forEach((item, index) => {\n processProps(item, String(index), [...keys, key]);\n });\n }\n };\n\n const getPropsLabel = (nodeModel: CNode, keyPath: string[]) => {\n const propsLabelMap = getNodePropsLabelMap(nodeModel);\n const newKeyPath = keyPath.map((el) => {\n if (String(parseInt(el, 10)) === el) {\n return '$NUM';\n } else {\n return el;\n }\n });\n return propsLabelMap[newKeyPath.join('.')] || '';\n };\n\n Object.keys(props).forEach((key) => {\n processProps(props[key], key, []);\n });\n\n if (propsNodeList.length > 0) {\n newCurrentNode.children?.push(slotNode);\n slotNode.parent = newCurrentNode;\n }\n const childNodeList = nodeChild.map((el) => tb(el, newCurrentNode)) || [];\n newCurrentNode.children = [...newCurrentNode.children!, ...childNodeList];\n return newCurrentNode;\n };\n\n if (Array.isArray(nodeSchema)) {\n return nodeSchema.map((el) => {\n return tb(el, parent);\n });\n } else {\n return tb(nodeSchema, parent);\n }\n};\n\nexport const transformPageSchemaToTreeData = (pageSchema: CPageDataType, pageModel: CPage): TreeNodeData[] => {\n const tree = pageSchema.componentsTree;\n let child = (tree.children || []) as CNodeDataType[];\n if (!Array.isArray(child)) {\n child = [];\n }\n\n const rootNode: TreeNodeData = {\n title: 'Page',\n key: tree.id || 'globalState',\n rootNode: true,\n children: [],\n };\n rootNode.children = transformNodeSchemaToTreeData(child, rootNode, pageModel) as TreeNodeData[];\n return [rootNode];\n};\n\nexport const traverseTree = (\n tree: TreeNodeData | TreeNodeData[],\n handler: (node: TreeNodeData) => boolean | undefined\n) => {\n let tempTree: TreeNodeData[] = [];\n if (Array.isArray(tree)) {\n tempTree = tree;\n } else {\n tempTree = [tree];\n }\n\n let stop = false;\n\n const traverseCb = (node: TreeNodeData, conditionCb: (node: TreeNodeData) => boolean | undefined) => {\n if (stop) {\n return;\n }\n const res = conditionCb(node);\n if (res) {\n stop = true;\n } else {\n node.children?.forEach((el) => {\n traverseCb(el, conditionCb);\n });\n }\n };\n tempTree.forEach((el) => {\n traverseCb(el, handler);\n });\n};\n\nexport function calculateDropPosInfo(params: { point: { x: number; y: number }; dom: HTMLElement }): DropPosType {\n const { point, dom } = params;\n let pos: DropPosType['pos'];\n\n const mousePos = point;\n const targetRect = dom.getBoundingClientRect();\n const targetDomH = targetRect.height;\n const xCenter = targetRect.x + 50;\n const yCenter = targetRect.y + Math.round(targetDomH / 2);\n\n if (mousePos.y > yCenter) {\n pos = 'after';\n } else {\n pos = 'before';\n }\n\n if (mousePos.x > xCenter && pos === 'after') {\n pos = 'current';\n }\n\n return {\n pos,\n direction: 'vertical',\n };\n}\n\n//TODO: 移动到 model 包中去\nexport const getNodePropsLabelMap = (node: CNode) => {\n const resMap: Record<string, MTitle> = {};\n const props = node.material?.value.props;\n if (!props) {\n return resMap;\n }\n const singleProcessUnit = (val: SetterType, paths: string[]) => {\n if (isPlainObject(val)) {\n const newPaths = [...paths];\n const objSetter = val as SetterObjType;\n const componentName = objSetter.componentName;\n if (componentName === 'ArraySetter') {\n const setter = objSetter as ArraySetterObjType;\n const arrItemSetter = setter.props?.item.setters || [];\n const parentTitle = resMap[paths.join('.')];\n let currentTitle = '';\n if (typeof parentTitle === 'string') {\n currentTitle = parentTitle;\n } else {\n currentTitle = parentTitle.label;\n }\n newPaths.push('$NUM');\n arrItemSetter.forEach((el) => {\n currentTitle = `${currentTitle}`;\n resMap[newPaths.join('.')] = currentTitle;\n singleProcessUnit(el, newPaths);\n });\n } else if (componentName === 'ShapeSetter') {\n const setter = objSetter as ShapeSetterObjType;\n const elements = setter.props?.elements || [];\n elements.forEach((it) => {\n const newObjPaths = [...newPaths];\n newObjPaths.push(it.name);\n resMap[newObjPaths.join('.')] = it.title;\n const subSetter = it.setters || [];\n subSetter.forEach((it2) => {\n singleProcessUnit(it2, [...newObjPaths]);\n });\n });\n }\n }\n };\n\n props.forEach((item) => {\n let targetItem: MaterialPropType | MaterialPropType[] | null = null;\n if (isSpecialMaterialPropType(item)) {\n targetItem = item.content;\n } else {\n targetItem = item;\n }\n let itemArr: MaterialPropType[] = [];\n if (Array.isArray(targetItem)) {\n itemArr = targetItem;\n } else {\n itemArr = [targetItem];\n }\n\n itemArr.forEach((it) => {\n const newPaths: string[] = [it.name];\n resMap[newPaths.join('.')] = it.title;\n it.setters?.forEach((it2) => {\n singleProcessUnit(it2, newPaths);\n });\n });\n });\n\n return resMap;\n};\n","import { Sensor } from '@chamn/layout';\nimport { CPage } from '@chamn/model';\nimport React from 'react';\nimport { TreeNodeData } from './dataStruct';\nimport { DesignerExport } from '@/plugins/Designer/type';\nexport enum DragState {\n DRAGGING = 'DRAGGING',\n NORMAL = 'NORMAL',\n}\nexport type ContextState = {\n treeData: TreeNodeData[];\n currentSelectNodeKeys: string[];\n expandKeys: string[];\n multiSelect: boolean;\n dragState: DragState;\n pageModel: CPage | null;\n};\n\nexport type CTreeContextData = {\n sensor?: Sensor;\n state: ContextState;\n updateState: (state: Partial<ContextState>) => void;\n onSelectNode: (params: { keys: string[]; node: TreeNodeData }) => Promise<boolean | undefined>;\n onDeleteNode: (id: string) => Promise<boolean | undefined>;\n onCopyNode: (id: string) => Promise<boolean | undefined>;\n getDesignerHandler?: () => Promise<DesignerExport>;\n};\n\nexport const CTreeContext = React.createContext<CTreeContextData>({\n state: {\n treeData: [],\n currentSelectNodeKeys: [],\n expandKeys: [],\n multiSelect: false,\n dragState: DragState.NORMAL,\n pageModel: null,\n },\n updateState: () => {},\n onSelectNode: async () => {\n return true;\n },\n onDeleteNode: async () => {\n return true;\n },\n onCopyNode: async () => {\n return true;\n },\n});\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport { CopyOutlined, DeleteOutlined, EyeInvisibleOutlined, EyeOutlined, RightOutlined } from '@ant-design/icons';\nimport clsx from 'clsx';\nimport { CTreeContext, DragState } from './context';\nimport { TreeNodeData } from './dataStruct';\nimport styles from './style.module.scss';\nimport { CNode } from '@chamn/model';\nimport { Input, InputRef } from 'antd';\nimport { CPluginCtx } from '@/core/pluginManager';\nimport { DesignerPluginInstance } from '@/plugins/Designer/type';\n\nexport const DRAG_ITEM_KEY = 'data-drag-key';\n\nexport type TreeNodeProps = {\n item: TreeNodeData;\n level?: number;\n paths?: (string | number)[];\n pluginCtx: CPluginCtx;\n};\nexport const TreeNode = (props: TreeNodeProps) => {\n const allStateRef = useRef<{ titleEditable: boolean }>({\n titleEditable: false,\n });\n const { level = 0, item, paths = ['0'] } = props;\n const [nodeVisible, setNodeVisible] = useState(true);\n const {\n state: ctxState,\n updateState,\n onSelectNode,\n onDeleteNode,\n getDesignerHandler,\n onCopyNode,\n } = useContext(CTreeContext);\n\n const [titleEditable, setTitleEditable] = useState(allStateRef.current?.titleEditable);\n const [editInputValue, setEditInputValue] = useState('');\n allStateRef.current.titleEditable = titleEditable;\n const expanded = ctxState.expandKeys.find((el) => el === item.key);\n const toggleExpandNode = (open?: boolean) => {\n let newExpandKeys = ctxState.expandKeys;\n if (open !== undefined) {\n if (open === true) {\n if (!expanded) {\n newExpandKeys.push(item.key || '');\n }\n } else {\n if (expanded) {\n newExpandKeys = newExpandKeys.filter((el) => el !== item.key);\n }\n }\n } else {\n if (expanded) {\n newExpandKeys = newExpandKeys.filter((el) => el !== item.key);\n } else {\n newExpandKeys.push(item.key || '');\n }\n }\n\n updateState({\n expandKeys: newExpandKeys,\n });\n };\n const selected = ctxState.currentSelectNodeKeys.find((el) => el === item.key);\n const titleEditInputRef = useRef<InputRef>(null);\n const toggleSelectNode = async () => {\n toggleExpandNode(true);\n if (titleEditable) {\n titleEditInputRef?.current?.focus();\n return;\n }\n if (item.canBeSelected !== undefined && item.canBeSelected === false) {\n return;\n }\n let newKeys = ctxState.currentSelectNodeKeys;\n if (!ctxState.multiSelect) {\n if (item.key) {\n const flag = await onSelectNode?.({ keys: [item.key], node: item });\n if (flag) {\n updateState({\n currentSelectNodeKeys: [String(item.key)],\n });\n }\n } else {\n onSelectNode?.({ keys: [], node: item });\n }\n\n return;\n }\n if (selected) {\n newKeys = newKeys.filter((el) => el !== item.key);\n } else {\n newKeys.push(String(item.key));\n }\n onSelectNode?.({ keys: newKeys, node: item });\n updateState({\n currentSelectNodeKeys: newKeys,\n });\n };\n const singPadding = 20;\n const indent = singPadding * level;\n const canBeSelected = item.canBeSelected ?? true;\n\n const dragKeyProps = {\n [DRAG_ITEM_KEY]: item.key,\n };\n const updateExpandKeyRef = useRef<(key: string) => void>();\n const ctxStateRef = useRef<typeof ctxState>();\n ctxStateRef.current = ctxState;\n updateExpandKeyRef.current = (key) => {\n const oldExpandKeys = ctxState.expandKeys;\n const newExpandKeys = Array.from(new Set([...oldExpandKeys, key]));\n updateState({\n expandKeys: newExpandKeys,\n });\n };\n const domRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n // auto expand on dragging\n let timerHandler = 0;\n domRef.current?.addEventListener('mouseenter', () => {\n timerHandler = window.setTimeout(() => {\n if (ctxStateRef.current?.dragState === DragState.DRAGGING) {\n updateExpandKeyRef.current?.(item.key || '');\n }\n }, 0.8 * 1000);\n });\n domRef.current?.addEventListener('mouseleave', () => {\n clearTimeout(timerHandler);\n });\n\n const clickHandle = (e: MouseEvent) => {\n if (allStateRef.current.titleEditable) {\n if (e.target === titleEditInputRef.current?.input) {\n return;\n }\n setTitleEditable(false);\n targetNodeModel.updateValue();\n }\n };\n let sunWin: Window | null;\n const registerDesignerClick = async () => {\n const designerPluginInstance = await props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerHandler = designerPluginInstance?.export;\n const win = designerHandler?.getDesignerWindow();\n win?.addEventListener('click', clickHandle);\n sunWin = win || null;\n };\n\n registerDesignerClick();\n document.addEventListener('click', clickHandle);\n\n return () => {\n if (timerHandler) {\n clearTimeout(timerHandler);\n }\n document.removeEventListener('click', clickHandle);\n sunWin?.removeEventListener('click', clickHandle);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const targetNodeModel = ctxState.pageModel?.getNode(item.key || '') as CNode;\n\n const toggleNodeVisible = () => {\n const newVisible = !nodeVisible;\n\n if (!targetNodeModel) {\n return;\n }\n const devState = targetNodeModel.value.configure.devState ?? {};\n devState.condition = newVisible;\n targetNodeModel.value.configure.devState = devState;\n targetNodeModel.updateValue();\n setNodeVisible(newVisible);\n };\n\n let titleView = item.title;\n if (item.titleViewRender) {\n titleView = item.titleViewRender({\n item,\n titleView: item.title,\n });\n }\n\n const bodyView = (\n <div className={styles.nodeBox}>\n <div\n className={clsx([styles.nodeContent, selected && canBeSelected && styles.selected])}\n style={{ marginLeft: `${-indent}px`, paddingLeft: `${indent + 8}px` }}\n onMouseMove={async () => {\n if (!item.key) {\n return;\n }\n const designerHandler = await getDesignerHandler?.();\n const compInstances = designerHandler?.getDynamicComponentInstances(item.key);\n if (typeof compInstances?._CONDITION !== 'undefined') {\n setNodeVisible(compInstances?._CONDITION);\n }\n }}\n >\n {item.children?.length ? (\n <span style={{ paddingRight: '5px' }} className={styles.arrowSpan} onClickCapture={() => toggleExpandNode()}>\n <RightOutlined className={clsx([styles.nodeArrow, expanded && styles.expanded])} />\n </span>\n ) : null}\n <div\n className={styles.nodeRenderView}\n {...dragKeyProps}\n ref={domRef}\n onClick={toggleSelectNode}\n onDoubleClick={() => {\n // slot 节点,属性节点不能编辑 title\n if (!targetNodeModel) {\n return;\n }\n const node = targetNodeModel;\n const nodeMeta = node.materialsModel.findByComponentName(node.value.componentName)?.value.title;\n const inputValue = node.value.title || nodeMeta || node.value.componentName || '';\n setEditInputValue(inputValue);\n setTitleEditable(true);\n setTimeout(() => {\n titleEditInputRef.current?.focus();\n }, 16.66);\n }}\n >\n {!titleEditable && titleView}\n {titleEditable && (\n <div\n style={{\n paddingRight: '10px',\n }}\n >\n <Input\n size=\"small\"\n maxLength={20}\n style={{}}\n ref={titleEditInputRef}\n value={editInputValue}\n onPressEnter={() => {\n setTitleEditable(false);\n targetNodeModel.updateValue();\n }}\n onChange={(e) => {\n targetNodeModel.value.title = e.target.value;\n setEditInputValue(e.target.value);\n }}\n />\n </div>\n )}\n </div>\n\n {!titleEditable && !item.rootNode && (\n <div className={styles.toolbarBox}>\n <div className={styles.iconItem}>\n {!nodeVisible && <EyeOutlined onClick={toggleNodeVisible} />}\n {nodeVisible && <EyeInvisibleOutlined onClick={toggleNodeVisible} />}\n </div>\n <div\n className={styles.iconItem}\n onClick={() => {\n onCopyNode(item.key || '');\n }}\n >\n <CopyOutlined />\n </div>\n <div\n className={styles.iconItem}\n onClick={() => {\n onDeleteNode(item.key || '');\n }}\n >\n <DeleteOutlined />\n </div>\n </div>\n )}\n </div>\n <div\n className={clsx([styles.nodeChildren, selected && styles.selected])}\n style={{\n paddingLeft: `${singPadding}px`,\n height: expanded ? 'auto' : '0',\n }}\n >\n {expanded &&\n item.children?.map((el, index) => {\n const key = `${el.key}-${index}`;\n return (\n <TreeNode key={key} item={el} paths={[...paths, index]} level={level + 1} pluginCtx={props.pluginCtx} />\n );\n })}\n </div>\n </div>\n );\n if (item.containerRender) {\n const containerView = item.containerRender({\n item: item,\n treeNodeView: bodyView,\n });\n return containerView;\n }\n return bodyView;\n};\n","import { LayoutDragAndDropExtraDataType, Sensor } from '@chamn/layout';\nimport { CNode, CRootNode, DropPosType } from '@chamn/model';\nimport React from 'react';\nimport { WithTranslation } from 'react-i18next';\nimport { CPluginCtx } from '../../../../core/pluginManager';\nimport { LOGGER } from '../../../../utils/logger';\nimport { calculateDropPosInfo, getTargetMNodeKeyVal, transformPageSchemaToTreeData, traverseTree } from '../../util';\nimport { ContextState, CTreeContext, DragState } from './context';\nimport { TreeNodeData } from './dataStruct';\nimport styles from './style.module.scss';\nimport { DRAG_ITEM_KEY, TreeNode } from './treeNode';\nimport { DesignerPluginInstance } from '@/plugins/Designer/type';\nimport { message } from 'antd';\n\ninterface TreeViewProps extends WithTranslation {\n pluginCtx: CPluginCtx;\n multiSelect?: boolean;\n}\n\nexport class TreeView extends React.Component<\n TreeViewProps,\n ContextState & {\n dropPosInfo: { x: number; y: number } | null;\n }\n> {\n domRef: React.RefObject<HTMLDivElement>;\n disposeCbList: (() => void)[] = [];\n sensor?: Sensor;\n constructor(props: TreeViewProps) {\n super(props);\n this.domRef = React.createRef<HTMLDivElement>();\n\n this.state = {\n treeData: [],\n currentSelectNodeKeys: [],\n expandKeys: [],\n multiSelect: props.multiSelect || false,\n dropPosInfo: {\n x: 0,\n y: 0,\n },\n pageModel: props.pluginCtx.pageModel,\n dragState: DragState.NORMAL,\n };\n }\n\n getDesignerHandler = async () => {\n const designerPluginInstance = await this.props.pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerHandler = designerPluginInstance?.export;\n return designerHandler!;\n };\n\n updateTreeDataFromNode = () => {\n const { pluginCtx } = this.props;\n const { pageModel } = pluginCtx;\n const plainTreeData = pageModel.export();\n const tempTreeData = transformPageSchemaToTreeData(plainTreeData, pageModel);\n this.setState({\n treeData: tempTreeData,\n });\n };\n\n getParentKeyPaths = (targetKey: string) => {\n const { treeData } = this.state;\n let target: TreeNodeData = null as any;\n traverseTree(treeData, (node) => {\n if (node.key === targetKey) {\n target = node;\n return true;\n }\n return false;\n });\n if (target) {\n let tempNode = target?.parent as TreeNodeData | undefined | null;\n const res = [];\n while (tempNode) {\n if (tempNode.key) {\n res.push(tempNode.key);\n }\n tempNode = tempNode.parent;\n }\n return res;\n } else {\n return [];\n }\n };\n\n scrollNodeToView = (key: string) => {\n const dom = document.querySelector(`[${DRAG_ITEM_KEY}=\"${key}\"]`);\n dom?.scrollIntoView?.({\n behavior: 'smooth',\n block: 'center',\n });\n };\n\n async componentDidMount() {\n this.updateTreeDataFromNode();\n const { pluginCtx } = this.props;\n const { pageModel } = pluginCtx;\n\n pageModel.emitter.on('*', () => {\n this.updateTreeDataFromNode();\n });\n\n pluginCtx.globalEmitter.on('onSelectNodeChange', ({ node }) => {\n this.toSelectTreeNode(node);\n });\n\n const workbench = pluginCtx.getWorkbench();\n\n workbench.emitter.on('leftPanelVisible', ({ visible, panelName }) => {\n if (visible && panelName === 'OutlineTree') {\n console.log('visible, panelName', visible, panelName);\n const currentSelectNode = pluginCtx.engine.getActiveNode();\n if (currentSelectNode) {\n this.toSelectTreeNode(currentSelectNode);\n }\n }\n });\n\n const currentSelectNode = pluginCtx.engine.getActiveNode();\n if (currentSelectNode) {\n this.toSelectTreeNode(currentSelectNode);\n }\n\n await this.props.pluginCtx.pluginManager.onPluginReadyOk('Designer');\n this.registerDragEvent();\n // 页面重载时重新注册拖拽事件\n this.props.pluginCtx.engine.pageModel.emitter.on('onReloadPage', () => {\n this.registerDragEvent();\n });\n }\n\n toSelectTreeNode = (node: CNode | CRootNode | null) => {\n if (!node) {\n this.setState({\n currentSelectNodeKeys: [],\n });\n return;\n }\n const parentPaths = this.getParentKeyPaths(node.id);\n LOGGER.debug('onSelectNodeChange parent path', parentPaths, node);\n const newExpandKeys = Array.from(new Set([...this.state.expandKeys, ...parentPaths]));\n\n LOGGER.debug('onSelectNodeChange newExpandKeys', newExpandKeys, node);\n\n this.setState({\n currentSelectNodeKeys: [node.id],\n expandKeys: newExpandKeys,\n });\n\n setTimeout(() => {\n this.scrollNodeToView(node.id);\n }, 16);\n };\n\n containNode = (parentNode: TreeNodeData, targetNode: TreeNodeData) => {\n let res = null;\n traverseTree(parentNode, (node) => {\n if (node.key === targetNode.key) {\n res = node;\n return true;\n }\n return false;\n });\n return res;\n };\n\n getTreeNodeByKey = (key: string): TreeNodeData | null => {\n const { treeData } = this.state;\n let target: TreeNodeData | null = null;\n traverseTree(treeData, (node) => {\n if (node.key === key) {\n target = node;\n return true;\n }\n return false;\n });\n return target;\n };\n\n registerDragEvent = async () => {\n if (!this.domRef.current) {\n return;\n }\n const sensor = new Sensor<LayoutDragAndDropExtraDataType>({\n container: this.domRef.current,\n name: 'OutlineTree',\n eventPriority: 999,\n mainDocument: document,\n });\n const { pluginCtx } = this.props;\n\n const pageModel = pluginCtx.pageModel;\n const designerExport = await this.getDesignerHandler();\n const dnd = designerExport!.getDnd()!;\n\n sensor.setCanDrag(async (eventObj) => {\n const targetDom = eventObj.event.target as HTMLDivElement;\n if (!targetDom) {\n return;\n }\n const targetNodeId = getTargetMNodeKeyVal(targetDom, DRAG_ITEM_KEY);\n\n if (!targetNodeId) {\n return;\n }\n\n const targetNode = pageModel.getNode(targetNodeId);\n const targetTreeNode = this.getTreeNodeByKey(targetNodeId);\n // 判断当前节点是否可以在节点树上拖动,比如 jsslot 容器节点不能被拖动,大纲树特有\n if (targetTreeNode?.canDrag !== undefined && targetTreeNode?.canDrag === false) {\n return;\n }\n\n // 判断节点本身是否可以拖动\n const designerInstance = designerExport!.getInstance();\n const nodeCanDragRes = await designerInstance?.customAdvanceHook.canDrag({\n dragNode: targetNode,\n eventObj: {\n extraData: {},\n ...eventObj,\n from: eventObj.event,\n fromSensor: sensor,\n fromPointer: eventObj.pointer,\n },\n });\n // 节点不能拖动\n if (nodeCanDragRes === false) {\n return false;\n }\n\n if (!targetNode) {\n console.log('targetNode not found');\n return;\n }\n\n const canDragResInfo = {\n ...eventObj,\n extraData: {\n dragNode: targetNode,\n dragNodeUID: targetNode.id,\n },\n };\n\n if (typeof nodeCanDragRes === 'object') {\n canDragResInfo.extraData.dragNode = nodeCanDragRes.dragNode!;\n canDragResInfo.extraData.dragNodeUID = nodeCanDragRes.dragNode?.id || '';\n }\n\n return canDragResInfo;\n });\n\n sensor.setCanDrop(async (eventObj) => {\n const targetDom = eventObj.event.target as HTMLDivElement;\n\n if (!targetDom) {\n LOGGER.debug('drop dom not found');\n return eventObj;\n }\n const targetNodeId = getTargetMNodeKeyVal(targetDom, DRAG_ITEM_KEY);\n\n if (!targetNodeId) {\n LOGGER.debug('targetNodeId dom not found', eventObj, targetDom, DRAG_ITEM_KEY);\n return eventObj;\n }\n const targetTreeNode = this.getTreeNodeByKey(targetNodeId);\n if (targetTreeNode?.canDropPos !== undefined && targetTreeNode.canDropPos === false) {\n LOGGER.debug('node can not be drop by tree node config');\n return eventObj;\n }\n\n const targetNode = pageModel.getNode(targetNodeId);\n\n if (!targetNode) {\n LOGGER.debug('targetNode not found');\n return eventObj;\n }\n const startNode = eventObj.extraData?.dragNode as CNode;\n if (!startNode) {\n LOGGER.debug('startNode not found');\n return eventObj;\n }\n\n if (startNode?.id === targetNode.id) {\n LOGGER.debug('startNode and dropNode is the same');\n return eventObj;\n }\n const hasContain = startNode.contains(targetNode.id);\n\n if (hasContain) {\n LOGGER.debug('startNode contain dropNode');\n return eventObj;\n }\n\n const dropInfo = calculateDropPosInfo({\n point: eventObj.pointer,\n dom: targetDom,\n });\n\n if (Array.isArray(targetTreeNode?.canDropPos) && !targetTreeNode?.canDropPos.includes(dropInfo.pos)) {\n return false;\n }\n\n LOGGER.info('can dropNode', targetNode);\n\n const res = {\n ...eventObj,\n extraData: {\n ...eventObj.extraData,\n dropPosInfo: dropInfo,\n dropNode: targetNode,\n dropNodeUID: targetNode.id,\n },\n };\n\n // 判断节点本身是否可以拖动\n const designerInstance = designerExport!.getInstance();\n const nodeCanDropRes = await designerInstance?.customAdvanceHook.canDrop({\n dragNode: res.extraData.dragNode,\n dropNode: targetNode,\n eventObj: {\n ...res,\n from: res.event,\n fromSensor: sensor,\n fromPointer: res.pointer,\n },\n });\n\n if (nodeCanDropRes === false) {\n return false;\n }\n\n if (typeof nodeCanDropRes === 'object') {\n res.extraData = {\n ...res.extraData,\n ...nodeCanDropRes,\n };\n }\n return res;\n });\n\n dnd.registerSensor(sensor);\n\n sensor.emitter.on('dragging', (e) => {\n const dropNode = e.extraData.dropNode as CNode;\n this.setState({\n dragState: DragState.DRAGGING,\n });\n\n if (!dropNode) {\n this.setState({\n dropPosInfo: null,\n });\n return;\n }\n const dropDom = document.querySelectorAll(`[${DRAG_ITEM_KEY}=\"${dropNode.id}\"]`)?.[0];\n if (!dropDom) {\n return;\n }\n const dropPosInfo = e.extraData?.dropPosInfo || ({} as DropPosType);\n const rect = dropDom.getBoundingClientRect();\n const newDropInfo = { x: 0, y: 0 };\n\n newDropInfo.x = rect.x;\n if (dropPosInfo.pos === 'before') {\n newDropInfo.y = rect.y;\n } else if (dropPosInfo.pos === 'after') {\n newDropInfo.y = rect.y + rect.height;\n } else {\n newDropInfo.y = rect.y + rect.height;\n newDropInfo.x = rect.x + 20;\n }\n this.setState({\n dropPosInfo: newDropInfo,\n });\n });\n\n sensor.emitter.on('dragEnd', () => {\n this.setState({\n dragState: DragState.NORMAL,\n });\n });\n this.sensor = sensor;\n };\n\n render() {\n const { treeData, dragState, dropPosInfo } = this.state;\n const { pluginCtx } = this.props;\n\n return (\n <CTreeContext.Provider\n value={{\n sensor: this.sensor,\n state: this.state,\n getDesignerHandler: this.getDesignerHandler,\n onSelectNode: async ({ keys: sk }) => {\n const designer = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n if (!designer) {\n console.warn('Designer is empty');\n return false;\n }\n const nodeId = sk?.[0] || '';\n const nn = pluginCtx.pageModel.getNode(nodeId);\n if (!nn) {\n return false;\n }\n\n const designerExport = designer.export;\n const flag = await designerExport.selectNode(nodeId);\n return flag;\n },\n updateState: (newVal) => {\n this.setState(newVal as any);\n },\n onDeleteNode: async (id) => {\n const designer = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n if (!designer) {\n console.warn('Designer is empty');\n return false;\n }\n const designerExport = designer.export;\n const nodeId = id;\n const nn = pluginCtx.pageModel.getNode(nodeId);\n if (!nn) {\n message.error('该节点不能删除');\n return false;\n }\n const flag = await designerExport.deleteNode(id);\n if (!flag) {\n message.error('该节点不能删除');\n }\n return flag;\n },\n onCopyNode: async (id) => {\n const designer = await pluginCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n if (!designer) {\n console.warn('Designer is empty');\n return false;\n }\n const designerExport = designer.export;\n return await designerExport.copyNode(id);\n },\n }}\n >\n <div className={styles.contentBox} ref={this.domRef}>\n {treeData.map((item, index) => {\n return <TreeNode item={item} key={item.key + `${index}`} pluginCtx={this.props.pluginCtx}></TreeNode>;\n })}\n {dragState === DragState.DRAGGING && dropPosInfo && (\n <div\n className={styles.dropAnchorLine}\n style={{\n left: `${dropPosInfo.x}px`,\n top: `${dropPosInfo.y}px`,\n }}\n ></div>\n )}\n </div>\n </CTreeContext.Provider>\n );\n }\n}\n","export const zh_CN: Record<string, any> = {\n pluginName: '大纲树',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Layout Tree',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","import { ApartmentOutlined } from '@ant-design/icons';\nimport { CPlugin } from '../../core/pluginManager';\nimport { withTranslation } from 'react-i18next';\nimport { TreeView } from './components/TreeView';\nimport localize from './localize';\n\nconst PLUGIN_NAME = 'OutlineTree';\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\nexport const OutlineTreePlugin: CPlugin = {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const { i18n } = ctx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n const TreeViewWithLocalize = withTranslation(i18nNamespace)(TreeView);\n const Title = withTranslation(i18nNamespace)(({ t }) => <>{t('pluginName')}</>);\n const workbench = ctx.getWorkbench();\n workbench.addLeftPanel({\n title: <Title />,\n name: PLUGIN_NAME,\n icon: <ApartmentOutlined />,\n render: <TreeViewWithLocalize pluginCtx={ctx} />,\n });\n\n ctx.pluginReadyOk();\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return {};\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\nOutlineTreePlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const REACT_FLOW_DRAG_CLASS_NAME = 'chamn-action-drag-handler';\n\nexport const INPUT_HANDLE_ID = 'INPUT_HANDLE_ID';\n\nexport const OUTPUT_HANDLE_ID = 'OUTPUT_HANDLE_ID';\n\nexport const REQUEST_API_FAILED_HANDLE_ID = 'REQUEST_API_FAILED_HANDLE_ID';\n","import React from 'react';\nimport { CSetter } from '../Setters/type';\n\nexport type ContextState = Record<string, any>;\n\nexport type CFormContextData = {\n formName: string;\n formState: ContextState;\n conditionConfig: Record<string, (state: ContextState) => boolean>;\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap?: Record<string, CSetter>;\n updateContext: (newState: ContextState, changeKeys?: string[]) => void;\n updateConditionConfig: (name: string, cb: (state: ContextState) => boolean) => void;\n};\n\nexport const CFormContext = React.createContext<CFormContextData>({\n formName: '',\n formState: {},\n conditionConfig: {},\n updateContext: () => {},\n updateConditionConfig: () => {},\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap: {},\n});\n","import React from 'react';\nimport { ReactNode } from 'react';\nimport { CFormContext, CFormContextData, ContextState } from './context';\n\nexport type CFormProps = {\n name: string;\n children?: ReactNode | ReactNode[];\n initialValue?: Record<string, any>;\n customSetterMap: CFormContextData['customSetterMap'];\n onValueChange?: (formData: Record<string, any>, changeKeys?: string[]) => void;\n} & Partial<ContextState>;\n\nconst CUSTOM_SETTER_MAP = {};\n\nlet updateState = () => {};\n\nexport const registerCustomSetter = (customSetterMap: CFormContextData['customSetterMap']) => {\n Object.assign(CUSTOM_SETTER_MAP, customSetterMap);\n updateState?.();\n};\nexport class CForm extends React.Component<CFormProps, CFormContextData> {\n updateContext: (newState: ContextState) => void;\n isMount = false;\n constructor(props: CFormProps) {\n super(props);\n this.updateContext = (newState: ContextState, changeKeys?: string[]) => {\n this.setState({\n formState: newState,\n customSetterMap: CUSTOM_SETTER_MAP,\n });\n this.props.onValueChange?.(this.formatValue(newState), changeKeys);\n };\n updateState = () => {\n if (!this.isMount) {\n return;\n }\n this.setState({\n customSetterMap: { ...CUSTOM_SETTER_MAP, ...this.props.customSetterMap },\n });\n };\n registerCustomSetter(props.customSetterMap || {});\n this.state = {\n formName: props.name,\n formState: props.initialValue ?? {},\n conditionConfig: {},\n customSetterMap: props.customSetterMap || {},\n\n updateContext: this.updateContext,\n updateConditionConfig: (name: string, cb: (state: Record<string, any>) => boolean) => {\n this.setState({\n conditionConfig: {\n ...this.state.conditionConfig,\n [name]: cb,\n },\n });\n },\n };\n }\n\n componentDidMount(): void {\n this.isMount = true;\n }\n\n componentWillUnmount(): void {\n this.isMount = false;\n }\n\n getFieldsValue = () => {\n return this.formatValue(this.state.formState);\n };\n\n setFields = (state: Record<string, any>) => {\n this.setState({\n formState: state,\n });\n };\n\n formatValue = (data: Record<string, any>) => {\n const res: Record<string, any> = {};\n const conditionConfig = this.state.conditionConfig;\n Object.keys(data).forEach((key) => {\n const isValid = conditionConfig[key]?.(data) ?? true;\n if (isValid) {\n res[key] = data[key];\n }\n });\n return res;\n };\n\n render(): ReactNode {\n const { state } = this;\n const { children } = this.props;\n\n return <CFormContext.Provider value={state}>{children}</CFormContext.Provider>;\n }\n}\n","import { ConfigProvider, Input, InputProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { useState, useRef, useEffect } from 'react';\n\nexport const StringSetter: CSetter<InputProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<InputProps & { initialValue?: string }>) => {\n const [internalValue, setInternalValue] = useState(props.value ?? initialValue ?? '');\n const lastExternalValueRef = useRef(props.value ?? initialValue);\n\n // 监听外部值变化,同步到内部状态(避免重复更新)\n useEffect(() => {\n const externalValue = props.value ?? initialValue;\n if (externalValue !== lastExternalValueRef.current) {\n lastExternalValueRef.current = externalValue;\n setInternalValue(externalValue ?? '');\n }\n }, [props.value, initialValue]);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Input\n {...props}\n value={internalValue}\n onChange={(e) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n }}\n onBlur={(e) => {\n // blur 时才触发 onChange 和更新值到外部\n const finalValue = e.target.value;\n lastExternalValueRef.current = finalValue;\n props.onChange?.(e);\n onValueChange?.(finalValue);\n props.onBlur?.(e);\n }}\n />\n </ConfigProvider>\n );\n};\n\nStringSetter.setterName = '字符设置器';\n","import React from 'react';\nimport { ConfigProvider, InputNumber, InputNumberProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\nexport const NumberSetter: CSetter<InputNumberProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<InputNumberProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <InputNumber\n style={{\n width: '100%',\n }}\n {...props}\n value={props.value ?? initialValue}\n onChange={(value) => {\n props.onChange?.(value);\n onValueChange?.(value);\n }}\n />\n </ConfigProvider>\n );\n};\n\nNumberSetter.setterName = '数字设置器';\n","import { SetterBasicType, SetterObjType, SetterType } from '@chamn/model';\n\nexport const getSetterList = <T extends SetterBasicType = ''>(setters: SetterType<T>[] = []): SetterObjType<T>[] => {\n return setters.map((setter) => {\n if (typeof setter === 'string') {\n return {\n componentName: setter as any,\n };\n } else {\n return setter;\n }\n });\n};\n\nconst setterTypeMap = {\n string: 'StringSetter',\n number: 'NumberSetter',\n boolean: 'BooleanSetter',\n array: 'ArraySetter',\n expression: 'ExpressionSetter',\n function: 'FunctionSetter',\n json: 'JSONSetter',\n} as const;\n\nconst getValueType = (value: any): keyof typeof setterTypeMap => {\n if (value === undefined || value === null) {\n return 'string';\n }\n\n if (Array.isArray(value)) {\n return 'array';\n }\n\n if (typeof value === 'object') {\n if (value.type === 'EXPRESSION') return 'expression';\n if (value.type === 'FUNCTION') return 'function';\n return 'json';\n }\n\n return typeof value as keyof typeof setterTypeMap;\n};\n\n/** 根据值获取默认的 setter */\nexport const getDefaultSetterByValue = (value: any, setterList: SetterObjType[]) => {\n const valueType = getValueType(value);\n const setterName = setterTypeMap[valueType];\n return setterList.find((setter) => setter.componentName === setterName);\n};\n","import React, { useEffect, useRef } from 'react';\nimport { CForm } from '../../Form';\nimport { SetterSwitcher } from '../../SetterSwitcher';\nimport { DeleteOutlined } from '@ant-design/icons';\nimport { SetterObjType } from '@chamn/model';\n\nexport function ArrayItem(props: {\n index: number;\n labelPrefix?: string;\n keyPaths: string[];\n value: Record<string, any>;\n setters: SetterObjType[];\n style: React.CSSProperties;\n onValueChange: (val: Record<string, any>) => void;\n onDelete: () => void;\n}) {\n const { index, keyPaths, setters } = props;\n\n const style = {\n ...props.style,\n };\n const objectValue = {\n [index]: props.value,\n };\n const formRef = useRef<CForm>(null);\n useEffect(() => {\n formRef.current?.setFields({\n [index]: props.value,\n });\n }, [index, props.value]);\n\n return (\n <div style={style}>\n <CForm\n ref={formRef}\n name={String(index)}\n initialValue={objectValue || {}}\n onValueChange={props.onValueChange}\n customSetterMap={{}}\n >\n <SetterSwitcher\n suffix={\n <div\n style={{\n marginLeft: '8px',\n cursor: 'pointer',\n fontSize: '12px',\n }}\n >\n <DeleteOutlined onClick={props.onDelete} />\n </div>\n }\n name={String(index)}\n label={`${props.labelPrefix ?? `元素-${index}`}`}\n keyPaths={[...keyPaths, String(index)]}\n setters={setters}\n ></SetterSwitcher>\n </CForm>\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { CSS, Transform } from '@dnd-kit/utilities';\nimport { Modal, ModalProps } from 'antd';\nimport {\n DndContext,\n DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useDraggable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { arrayMove, SortableContext, sortableKeyboardCoordinates, useSortable } from '@dnd-kit/sortable';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { getRandomStr } from '@chamn/model';\nimport styles from './style.module.scss';\n\nexport type SortItemOrderProps = {\n list: any[];\n keyPaths: string[];\n label: string;\n sortLabelKey?: string;\n onValueChange?: (newList: any[]) => void;\n} & ModalProps;\n\nexport const SortItemOrderModal = ({\n list,\n onValueChange,\n keyPaths,\n label,\n sortLabelKey,\n ...modalProps\n}: SortItemOrderProps) => {\n const [listValue, setListValue] = useState<{ val: any; id: string }[]>([]);\n useEffect(() => {\n const innerList = list.map((el, index) => ({\n val: el,\n oldIndex: index,\n id: getRandomStr(),\n }));\n setListValue(innerList);\n }, [list, modalProps.open]);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 15,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n function handleDragEnd(event: DragEndEvent) {\n const { active, over } = event;\n if (active.id !== over?.id) {\n const oldIndex = listValue.findIndex((el) => el.id === active?.id);\n const newIndex = listValue.findIndex((el) => el.id === over?.id);\n const newInnerListVal = arrayMove(listValue, oldIndex, newIndex);\n const newVal = newInnerListVal.map((el) => {\n return el.val;\n });\n setListValue(newInnerListVal);\n onValueChange?.(newVal);\n }\n }\n\n const [modalTransform, setModalTransform] = useState<Transform>({\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n });\n\n return (\n <Modal\n {...modalProps}\n title={`Sort: ${label} [${keyPaths.join('.')}]`}\n styles={{\n mask: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n },\n }}\n modalRender={(modal) => {\n return (\n <DndContext\n sensors={sensors}\n onDragEnd={({ delta }) => {\n const res = {\n ...modalTransform,\n ...delta,\n x: modalTransform.x + (delta?.x || 0),\n y: modalTransform.y + (delta?.y || 0),\n };\n setModalTransform(res);\n }}\n >\n <ModalDragView modal={modal} transform={modalTransform} />\n </DndContext>\n );\n }}\n >\n <div className={styles.sortModalBox}>\n <DndContext sensors={sensors} onDragEnd={handleDragEnd} modifiers={[restrictToVerticalAxis]}>\n <SortableContext items={listValue}>\n {listValue.map(({ id, val }, index) => {\n return <SortableItem key={id} id={id} index={index} label={val[sortLabelKey || '']} />;\n })}\n </SortableContext>\n </DndContext>\n </div>\n </Modal>\n );\n};\n\nconst ModalDragView = ({ modal, transform }: { modal: React.ReactNode; transform: Transform }) => {\n const id = useRef(getRandomStr());\n const {\n setNodeRef,\n attributes,\n listeners,\n transform: tempTransform,\n } = useDraggable({\n id: id.current,\n });\n\n const finalTransform = {\n ...transform,\n ...tempTransform,\n x: transform.x + (tempTransform?.x || 0),\n y: transform.y + (tempTransform?.y || 0),\n };\n\n return (\n <div\n ref={setNodeRef}\n style={{\n pointerEvents: 'auto',\n transform: CSS.Transform.toString(finalTransform),\n }}\n {...attributes}\n {...listeners}\n >\n {modal}\n </div>\n );\n};\n\nconst SortableItem = (props: { id: string; index: string | number; label?: string }) => {\n const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id: props.id });\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n const labelText = props.label || `Ele ${props.index}`;\n return (\n <div className={styles.dragItem} ref={setNodeRef} style={style} {...attributes} {...listeners}>\n {labelText}\n </div>\n );\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { Button, ConfigProvider } from 'antd';\nimport { CSetterProps } from '../type';\nimport { getSetterList } from '../../../utils';\nimport { SetterType } from '@chamn/model';\n\nimport { ArrayItem } from './ArrayItem';\nimport { SortItemOrderModal } from './SortItemOrderModal';\nimport styles from './style.module.scss';\n\nexport type CArraySetterProps = {\n item: {\n setters: SetterType[];\n initialValue?: any;\n };\n itemLabelPrefix?: string;\n sortLabelKey?: string;\n itemLabelPrefixKey?: string;\n};\n\nfunction formatValue(value: unknown) {\n if (Array.isArray(value)) {\n return value;\n } else {\n return [];\n }\n}\n\nexport const ArraySetter = ({\n onValueChange,\n setterContext,\n item: { setters, initialValue: itemInitialValue },\n sortLabelKey,\n initialValue,\n itemLabelPrefix,\n itemLabelPrefixKey,\n ...props\n}: CSetterProps<CArraySetterProps>) => {\n const { keyPaths, label } = setterContext;\n const listValue: any[] = useMemo(() => {\n return formatValue(props.value ?? initialValue);\n }, [initialValue, props.value]);\n\n const [sortVisible, setSortVisible] = useState(false);\n const innerSetters = getSetterList(\n setters || [\n {\n component: 'StringSetter',\n },\n ]\n );\n\n useEffect(() => {\n if (setterContext.setCollapseHeaderExt) {\n setterContext.setCollapseHeaderExt?.(\n <Button\n type=\"text\"\n size=\"small\"\n style={{\n color: 'gray',\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSortVisible(true);\n }}\n >\n sort\n </Button>\n );\n }\n }, [setterContext]);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n {listValue.map((val, index) => {\n return (\n <ArrayItem\n labelPrefix={val[itemLabelPrefixKey || sortLabelKey || ''] || itemLabelPrefix}\n key={index}\n style={{ paddingBottom: '10px' }}\n index={index}\n keyPaths={keyPaths}\n value={val}\n onValueChange={(val) => {\n listValue[index] = val[index];\n onValueChange?.([...listValue]);\n }}\n setters={innerSetters}\n onDelete={() => {\n const newVal = [...listValue];\n newVal.splice(index, 1);\n onValueChange?.(newVal);\n }}\n />\n );\n })}\n\n <Button\n className={styles.addOneBtn}\n size=\"small\"\n onClick={() => {\n const newVal = [...listValue];\n onValueChange?.([...newVal, itemInitialValue ?? '']);\n }}\n >\n Add One\n </Button>\n <SortItemOrderModal\n label={label}\n sortLabelKey={sortLabelKey}\n onValueChange={(newVal) => {\n onValueChange?.([...newVal]);\n }}\n open={sortVisible}\n list={listValue}\n keyPaths={keyPaths}\n onCancel={() => {\n setSortVisible(false);\n }}\n onOk={() => {\n setSortVisible(false);\n }}\n />\n </ConfigProvider>\n );\n};\n\nArraySetter.setterName = '数组设置器';\n","import { useEffect, useRef } from 'react';\nimport { ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CForm } from '../../Form';\nimport { SetterSwitcher } from '../../SetterSwitcher';\nimport { getSetterList } from '../../../utils';\nimport { getMTitle, getMTitleTip, MaterialPropType } from '@chamn/model';\n\nexport type CShapeSetterProps = {\n elements: MaterialPropType[];\n initialValue?: Record<string, any>;\n value: Record<string, any>;\n};\n\nexport const ShapeSetter: CSetter<CShapeSetterProps> = ({\n onValueChange,\n elements,\n value,\n setterContext,\n initialValue,\n}: CSetterProps<CShapeSetterProps>) => {\n const { keyPaths } = setterContext;\n const formRef = useRef<CForm>(null);\n useEffect(() => {\n formRef.current?.setFields(value || {});\n }, [value]);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <CForm\n ref={formRef}\n name={keyPaths.join('.')}\n initialValue={value || initialValue || {}}\n onValueChange={(val) => {\n onValueChange?.(val);\n }}\n customSetterMap={{}}\n >\n {elements.map((el, index) => {\n const setters = getSetterList(el.setters);\n const title = getMTitle(el.title);\n const tip = getMTitleTip(el.title) || el?.description;\n return (\n <div key={index}>\n <SetterSwitcher\n name={el.name}\n label={title}\n tips={tip}\n condition={el.condition}\n keyPaths={[...keyPaths, el.name]}\n setters={setters}\n />\n </div>\n );\n })}\n </CForm>\n </ConfigProvider>\n );\n};\n\nShapeSetter.setterName = '对象设置器';\n","import Editor, { EditorProps, Monaco } from '@monaco-editor/react';\n\nexport type EditorType = EditorProps;\n\nexport type MonacoEditorInstance = Parameters<Required<EditorType>['onMount']>[0];\n\nexport type MonacoEditorProps = {\n beforeMount?: (monaco: Monaco) => void;\n onDidMount?: (editor: MonacoEditorInstance) => void;\n options?: EditorType['options'];\n onChange?: EditorType['onChange'];\n initialValue?: string;\n language?: 'json' | 'javascript' | 'typescript' | 'css';\n theme?: 'vs-dark' | 'light';\n};\n\nexport const MonacoEditor = (props: MonacoEditorProps) => {\n const handleEditorBeforeMount: EditorType['beforeMount'] = (monaco) => {\n props.beforeMount?.(monaco);\n };\n\n const handleEditorDidMount: EditorType['onMount'] = (editor) => {\n props.onDidMount?.(editor);\n };\n\n return (\n <Editor\n height=\"100%\"\n width=\"100%\"\n defaultLanguage={props.language}\n defaultValue={props.initialValue}\n beforeMount={handleEditorBeforeMount}\n onMount={handleEditorDidMount}\n options={props.options}\n theme={props.theme}\n onChange={props.onChange}\n />\n );\n};\n","export default \"type SetStateInternal<T> = {\\n _(\\n partial:\\n | T\\n | Partial<T>\\n | {\\n _(state: T): T | Partial<T>;\\n }['_'],\\n replace?: boolean | undefined\\n ): void;\\n}['_'];\\nexport interface StoreApi<T> {\\n setState: SetStateInternal<T>;\\n getState: () => T;\\n subscribe: (listener: (state: T, prevState: T) => void) => () => void;\\n /**\\n * @deprecated Use `unsubscribe` returned by `subscribe`\\n */\\n destroy: () => void;\\n}\\n\\ntype PageState = any;\\n\\ntype NodeId = keyof PageState;\\n\\ntype MethodsManager = any;\\n\\ntype GlobalState = any;\\n\\ntype CurrentNodeState = any;\\n\\ntype PageStateManager<K extends keyof PageState> = {\\n state: PageState[K];\\n updateState: (newState: Partial<PageState[K]>) => void;\\n};\\n\\ntype PageStateManagerMap = {\\n [K in keyof PageState]: PageStateManager<K>;\\n};\\n\\ntype ContextType = {\\n /** 渲染函数的入口参数 */\\n params?: Record<any, any>;\\n /** 全局状态 */\\n globalState?: GlobalState;\\n /** 更新全局状态 */\\n updateGlobalState?: (newState: Partial<GlobalState>) => void;\\n /** 存储当前节点的数据,不具有响应性, 可能不是最新的值, 可以直接赋值 **/\\n staticVar?: Record<string | number, any>;\\n methods?: Record<string, (...arg: any) => any>;\\n /** 当前节点状态 **/\\n state?: CurrentNodeState;\\n /** 更新当前节点状态 */\\n updateState?: (newState: Partial<CurrentNodeState>) => void;\\n /** 获取当前节点状态最新 */\\n /** 用于访访问和管理页面被注册为全局的局部 state 快照,在闭包中使用会存在值不是最新的情况 */\\n stateManager: PageStateManagerMap;\\n /** 循环数据 */\\n loopData?: {\\n item: any;\\n index: number;\\n };\\n /** 组件节点的 Ref, 可以通过 current 直接调用节点提供的方法,需要判断是否在存在 */\\n nodeRefs?: { get: (/** 节点 id */ nodeId: NodeId) => { current?: any } };\\n /** 运行时全局的 store 管理 */\\n storeManager?: StoreManager<NodeId>;\\n /** 第三方辅助库 */\\n thirdLibs?: Record<string, any>;\\n};\\n\\ndeclare class StoreManager<T extends NodeId> {\\n storeMap: Map<T, StoreApi<PageState[T]>>;\\n getStore(storeName: T): StoreApi<PageState[T]> | undefined;\\n getState(nodeId: T): any;\\n getStateObj(nodeId: T): {\\n state: PageState[T];\\n updateState: (newState: Partial<PageState[T]>) => void;\\n };\\n setState(nodeId: NodeId, newState: Partial<PageState[T]>): void | undefined;\\n connect<T extends NodeId>(name: string, cb: (newState: PageState[T]) => void): () => void;\\n getStateSnapshot(): PageState;\\n destroy(): void;\\n}\\n\\ntype UpdaterMap = {\\n [K in NodeId /** 更新对应 nodeId 的数据 **/]: (newState: Partial<PageState[K]>) => void;\\n};\\n\\ndeclare global {\\n /** 运行时上下文 */\\n const $CTX: ContextType;\\n\\n /** 当前节点的 state */\\n const $STATE: CurrentNodeState;\\n\\n /** global state */\\n const $G_STATE: GlobalState;\\n\\n /** 当前页面所有节点的 state */\\n const $ALL_STATE: PageState;\\n\\n /** 状态更新函数 */\\n const $U_STATE: UpdaterMap;\\n\\n /** 节点方法调用 */\\n const $M: MethodsManager;\\n\\n /** 当前节点 ID */\\n const $N_ID: string;\\n\\n /** 存储所有节点的 id */\\n const $IDS: Record<NodeId, NodeId>;\\n\\n /** 上一个 API 返回的数据,可能不存在 */\\n const $RESPONSE: any;\\n\\n /** 循环数据,如果存在 */\\n const $LOOP_DATA: ContextType['loopData'];\\n\\n /** 函数在配置面板传入的参数 */\\n const $PARAMS: ContextType['params'];\\n\\n /** 事件传入的第一个参数,如果需要获取第二个参数,请使用 $ARGS 数组获取*/\\n const $EVENT_PARAMS: any;\\n\\n /** 事件对象 */\\n const $EVENT: MouseEvent;\\n\\n /** 函数执行时传入的入参 */\\n const $ARGS: any[];\\n\\n /** action flow 中的局部变量 */\\n const $ACTION_VAR_SPACE: any;\\n}\\n\"","import { CNode, CPage, InnerComponentNameEnum, traversePageNode } from '@chamn/model';\nimport DefaultTslibSource from './defaultDts?raw';\n\nimport { quicktype, InputData, jsonInputForTargetLanguage } from 'quicktype-core';\n\nexport async function quicktypeJSON(typeName: string, jsonString: string) {\n const jsonInput = jsonInputForTargetLanguage('typescript');\n\n // We could add multiple samples for the same desired\n // type, or many sources for other types. Here we're\n // just making one type from one piece of sample JSON.\n await jsonInput.addSource({\n name: typeName,\n samples: [jsonString],\n });\n\n const inputData = new InputData();\n inputData.addInput(jsonInput);\n\n return await quicktype({\n inputData,\n lang: 'typescript',\n rendererOptions: {\n 'just-types': 'true',\n 'nice-property-names': 'false',\n 'acronym-style': 'original',\n },\n });\n}\n\nexport const getPageTypeDefined = async (pageModel: CPage, currentNode: CNode) => {\n const stateTypeMap: Record<\n string,\n {\n stateTypeDefined: string;\n methodsTypeDefined: string;\n }\n > = {} as any;\n const pList: any[] = [];\n traversePageNode(pageModel, (node) => {\n stateTypeMap[node.id] = {\n stateTypeDefined: '',\n methodsTypeDefined: '',\n };\n if (node.value.state) {\n const cb = async () => {\n let typeName = `CNode${node.id.toUpperCase()}`;\n let id = node.id;\n if (node.value.componentName === InnerComponentNameEnum.ROOT_CONTAINER) {\n typeName = 'GlobalState';\n id = 'GlobalState';\n }\n const tempRes = await quicktypeJSON(typeName, JSON.stringify(node.value.state));\n stateTypeMap[id] = {\n stateTypeDefined: tempRes.lines.join('\\n'),\n methodsTypeDefined: '',\n };\n };\n\n pList.push(cb());\n }\n });\n\n await Promise.all(pList);\n\n const globalStateDts = stateTypeMap['GlobalState'];\n delete stateTypeMap.GlobalState;\n\n // 拼接 整体的 page state 类型定义\n let pageStateDts = '';\n\n pageStateDts += `type PageState = {\\n`;\n const nodeIdList: string[] = [];\n\n Object.keys(stateTypeMap).forEach((k) => {\n if (stateTypeMap[k].stateTypeDefined) {\n const body = getBodyDefined(`CNode${k.toUpperCase()}`, stateTypeMap[k].stateTypeDefined);\n pageStateDts += ` '${k}': ${body},\\n`;\n nodeIdList.push(`'${k}'`);\n }\n });\n\n pageStateDts += `};\\n\\n`;\n\n let dtsContent = DefaultTslibSource.replace('type PageState = any;', pageStateDts);\n dtsContent = dtsContent.replace('type NodeId = any;', `type NodeId = ${nodeIdList.join(' | ')};`);\n if (globalStateDts?.stateTypeDefined) {\n dtsContent = dtsContent.replace('type GlobalState = any;', globalStateDts.stateTypeDefined);\n dtsContent = dtsContent.replace(\n 'Partial<GlobalState>',\n getBodyDefined('GlobalState', globalStateDts.stateTypeDefined)\n );\n }\n\n // 处理当前 node 的 types\n const currentNodeDts = await quicktypeJSON('CurrentNodeState', JSON.stringify(currentNode.value.state || {}));\n const currentNodeDtsText = currentNodeDts.lines.join('\\n');\n dtsContent = dtsContent.replace('type CurrentNodeState = any;', currentNodeDtsText);\n dtsContent = dtsContent.replace('Partial<CurrentNodeState>', getBodyDefined('CurrentNodeState', currentNodeDtsText));\n\n // 处理 methods 调用\n return dtsContent;\n};\n\nconst getBodyDefined = (\n typeName: string,\n dtsStr: string,\n options?: {\n isPartial: true;\n }\n) => {\n const body = dtsStr.replace(`export interface ${typeName}`, '').trim();\n if (!options?.isPartial) {\n return body;\n }\n return `Partial<${body}>`;\n};\n","import React, { useRef, useState } from 'react';\nimport { Button, ConfigProvider, Modal } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { EditorType, MonacoEditor, MonacoEditorInstance } from '../../../../MonacoEditor';\nimport DefaultTslibSource from '../FunctionSetter//defaultDts?raw';\nimport { CNodePropsTypeEnum } from '@chamn/model';\nimport styles from './style.module.scss';\nimport { getPageTypeDefined } from '../FunctionSetter/helper';\nexport type ExpressionSetterProps = CSetterProps<{\n value: {\n type: string;\n value: string;\n };\n mode: 'modal' | 'inline';\n containerStyle?: React.CSSProperties;\n minimap?: boolean;\n lineNumber?: boolean;\n editorOptions?: EditorType['options'];\n}>;\n\nexport const ExpressionSetter: CSetter<ExpressionSetterProps> = ({\n onValueChange,\n initialValue,\n setterContext,\n editorOptions,\n\n mode = 'modal',\n ...props\n}) => {\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const [open, setOpen] = useState(false);\n const onInnerValueChange = () => {\n const newValStr = editorRef.current?.getValue() || '';\n onValueChange?.({\n type: CNodePropsTypeEnum.EXPRESSION,\n value: newValStr,\n });\n };\n\n let lineNumberOptions = {};\n if (props.lineNumber === false || mode === 'inline') {\n lineNumberOptions = {\n lineNumbers: 'off',\n lineDecorationsWidth: 0,\n lineNumbersMinChars: 0,\n glyphMargin: false,\n };\n }\n\n const editorView = (\n <MonacoEditor\n beforeMount={async (monaco) => {\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: true,\n noSyntaxValidation: false,\n });\n\n // compiler options\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES5,\n allowNonTsExtensions: true,\n });\n\n const realtimeDts = await getPageTypeDefined(setterContext.pluginCtx.pageModel, setterContext.nodeModel);\n\n const libUri = 'ts:filename/chameleon.default.variable.d.ts';\n monaco.languages.typescript.javascriptDefaults.addExtraLib(realtimeDts, libUri);\n // When resolving definitions and references, the editor will try to use created models.\n // Creating a model for the library allows \"peek definition/references\" commands to work with the library.\n const model = monaco.editor.getModel(monaco.Uri.parse(libUri));\n if (!model) {\n monaco.editor.createModel(DefaultTslibSource, 'typescript', monaco.Uri.parse(libUri));\n }\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n initialValue={props.value?.value ?? initialValue}\n language={'javascript'}\n options={{\n automaticLayout: true,\n tabSize: 2,\n minimap: { enabled: false },\n folding: false,\n hover: {\n // enabled: false, // ✅ 禁用 hoverWidget\n },\n ...lineNumberOptions,\n ...(editorOptions || {}),\n }}\n onChange={() => {\n if (mode === 'inline') {\n // TODO: 需要节流每 1 秒触发一次\n onInnerValueChange();\n }\n }}\n />\n );\n\n if (mode === 'inline') {\n return (\n <div\n className={styles.expressionCodeEditor}\n style={{\n border: '1px solid rgba(0,0,0, 0.2)',\n ...(props.containerStyle || {}),\n height: '100px',\n }}\n >\n {editorView}\n </div>\n );\n }\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n onClick={() => {\n setOpen(true);\n }}\n >\n {props.value?.value || 'Edit Expression'}\n </Button>\n <Modal\n destroyOnClose\n open={open}\n title=\"Expression Editor\"\n onCancel={() => setOpen(false)}\n width=\"calc(100vw - 100px)\"\n onOk={() => {\n onInnerValueChange();\n setOpen(false);\n }}\n style={{\n maxWidth: '800px',\n }}\n styles={{\n body: {\n height: '300px',\n },\n }}\n >\n <div style={{ height: '100%' }}>{open && editorView}</div>\n </Modal>\n </ConfigProvider>\n );\n};\n\nExpressionSetter.setterName = '表达式';\n","import React from 'react';\nimport { ConfigProvider, Switch, SwitchProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\ntype BooleanSetterProps = SwitchProps;\n\nexport const BooleanSetter: CSetter<BooleanSetterProps & { initialValue?: boolean }> = ({\n onValueChange,\n initialValue,\n setterContext,\n ...props\n}: CSetterProps<BooleanSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Switch\n {...props}\n checked={(props.value ?? initialValue) as boolean}\n onChange={(open, e) => {\n props.onChange?.(open, e);\n onValueChange?.(open);\n }}\n />\n </ConfigProvider>\n );\n};\n\nBooleanSetter.setterName = 'Bool 设置器';\n","import React from 'react';\nimport { ConfigProvider, Select, SelectProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\nexport const SelectSetter: CSetter<SelectProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<SelectProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Select\n showSearch\n style={{\n width: '100%',\n }}\n {...props}\n value={props.value ?? initialValue}\n onChange={(val, option) => {\n props.onChange?.(val, option);\n onValueChange?.(val);\n }}\n />\n </ConfigProvider>\n );\n};\n\nSelectSetter.setterName = '选择设置器';\n","import React, { useRef, useState } from 'react';\nimport { CSS, Transform } from '@dnd-kit/utilities';\nimport { Modal, ModalProps } from 'antd';\nimport { DndContext, PointerSensor, useDraggable, useSensor, useSensors } from '@dnd-kit/core';\nimport { getRandomStr } from '@chamn/model';\n\nexport type SortItemOrderProps = {} & ModalProps;\n\n/** 可拖拽移动的 Modal */\nexport const MoveableModal = (props: ModalProps) => {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 15,\n },\n })\n );\n\n const [modalTransform, setModalTransform] = useState<Transform>({\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n });\n\n return (\n <Modal\n {...props}\n styles={{\n mask: {\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n pointerEvents: 'none',\n },\n }}\n modalRender={(modal) => {\n return (\n <DndContext\n sensors={sensors}\n onDragEnd={({ delta }) => {\n const res = {\n ...modalTransform,\n ...delta,\n x: modalTransform.x + (delta?.x || 0),\n y: modalTransform.y + (delta?.y || 0),\n };\n setModalTransform(res);\n }}\n >\n <ModalDragView modal={modal} transform={modalTransform} setModalTransform={setModalTransform} />\n </DndContext>\n );\n }}\n ></Modal>\n );\n};\n\nconst ModalDragView = ({\n modal,\n transform,\n setModalTransform,\n}: {\n modal: React.ReactNode;\n transform: Transform;\n setModalTransform: any;\n}) => {\n const id = useRef(getRandomStr());\n const {\n setNodeRef,\n attributes,\n listeners,\n transform: tempTransform,\n } = useDraggable({\n id: id.current,\n });\n\n const finalTransform = {\n ...transform,\n ...tempTransform,\n x: transform.x + (tempTransform?.x || 0),\n y: transform.y + (tempTransform?.y || 0),\n };\n\n return (\n <div\n style={{\n pointerEvents: 'auto',\n transform: CSS.Transform.toString(finalTransform),\n }}\n >\n <div\n onDoubleClick={() => {\n setModalTransform((oldValue: any) => {\n return {\n ...oldValue,\n x: 0,\n y: 0,\n };\n });\n }}\n ref={setNodeRef}\n style={{\n cursor: 'move',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: '55px',\n zIndex: 1,\n }}\n {...attributes}\n {...listeners}\n />\n {modal}\n </div>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Button, ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { EditorType, MonacoEditor, MonacoEditorInstance } from '../../../../MonacoEditor';\nimport { MoveableModal } from '@/component/MoveableModal';\nimport { sageJSONParse } from '@/utils';\n\nconst EditorConfig = {\n options: {\n automaticLayout: true,\n tabSize: 2,\n suggestOnTriggerCharacters: false,\n minimap: { enabled: false },\n },\n style: {\n height: '200px',\n border: '1px solid #d9d9d9',\n borderRadius: '4px',\n },\n};\n\nconst JsonEditor = ({ editor, value, initialValue, onChange, height, editorOptions }: any) => {\n const editorRef = useRef<MonacoEditorInstance>();\n const oldValueRef = useRef();\n oldValueRef.current = value;\n useEffect(() => {\n const oldVal = sageJSONParse(editorRef.current?.getValue() || '', {});\n if (JSON.stringify(value) === JSON.stringify(oldVal)) {\n return;\n }\n editorRef.current?.setValue(JSON.stringify(value, null, 2));\n }, [value]);\n return (\n <div style={{ height: height || EditorConfig.style.height }}>\n <MonacoEditor\n onDidMount={(editorInstance) => {\n editor.current = editorInstance;\n editorRef.current = editorInstance;\n }}\n onChange={onChange}\n initialValue={JSON.stringify(value ?? (initialValue || {}), null, 2)}\n language=\"json\"\n options={{\n ...EditorConfig.options,\n ...editorOptions,\n }}\n />\n </div>\n );\n};\nexport const JSONSetter: CSetter<any> = ({\n onValueChange,\n initialValue,\n mode = 'modal',\n editorOptions,\n setterContext,\n ...props\n}: CSetterProps<{\n mode: 'modal' | 'inline';\n containerStyle?: React.CSSProperties;\n minimap?: boolean;\n lineNumber?: 'on' | 'off';\n editorOptions?: EditorType['options'];\n}>) => {\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const [open, setOpen] = useState(false);\n\n const onInnerValueChange = () => {\n const newValStr = editorRef.current?.getValue() || '';\n try {\n const newVal = JSON.parse(newValStr);\n onValueChange?.(newVal);\n } catch (e) {\n console.warn(e);\n }\n };\n\n return (\n <ConfigProvider theme={{ token: { borderRadius: 4 } }}>\n {mode === 'inline' ? (\n <div style={EditorConfig.style}>\n <JsonEditor\n editor={editorRef}\n value={props.value}\n initialValue={initialValue}\n onChange={onInnerValueChange}\n editorOptions={editorOptions || {}}\n />\n </div>\n ) : (\n <>\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n onClick={() => setOpen(true)}\n >\n Edit\n </Button>\n <MoveableModal\n destroyOnClose\n open={open}\n title=\"JSON Editor\"\n width=\"800px\"\n onCancel={() => setOpen(false)}\n onOk={() => {\n onInnerValueChange();\n setOpen(false);\n }}\n >\n {open && (\n <JsonEditor\n editor={editorRef}\n value={props.value}\n initialValue={initialValue}\n height=\"500px\"\n editorOptions={editorOptions || {}}\n />\n )}\n </MoveableModal>\n </>\n )}\n </ConfigProvider>\n );\n};\n\nJSONSetter.setterName = 'JSON 设置器';\n","import React, { useRef, useState } from 'react';\nimport { Button, ConfigProvider, Modal } from 'antd';\nimport { CSetter } from '../type';\nimport { EditorType, MonacoEditor, MonacoEditorInstance } from '../../../../MonacoEditor';\nimport DefaultTslibSource from './defaultDts?raw';\nimport { CNodePropsTypeEnum } from '@chamn/model';\nimport { getPageTypeDefined } from './helper';\n\nexport const FunctionSetter: CSetter<{\n mode: 'modal' | 'inline';\n containerStyle?: React.CSSProperties;\n minimap?: boolean;\n lineNumber?: boolean;\n editorOptions?: EditorType['options'];\n}> = ({ onValueChange, initialValue, setterContext, editorOptions, ...props }) => {\n getPageTypeDefined(setterContext.pluginCtx.pageModel, setterContext.nodeModel);\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const [open, setOpen] = useState(false);\n const onInnerValueChange = () => {\n const newValStr = editorRef.current?.getValue() || '';\n onValueChange?.({\n type: CNodePropsTypeEnum.FUNCTION,\n value: newValStr,\n });\n };\n\n let lineNumberOptions = {};\n if (props.lineNumber === false) {\n lineNumberOptions = {\n lineNumbers: 'off',\n lineDecorationsWidth: 0,\n lineNumbersMinChars: 0,\n glyphMargin: false,\n };\n }\n\n const editorView = (\n <MonacoEditor\n beforeMount={async (monaco) => {\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: true,\n noSyntaxValidation: false,\n });\n\n // compiler options\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES5,\n allowNonTsExtensions: true,\n });\n\n const realtimeDts = await getPageTypeDefined(setterContext.pluginCtx.pageModel, setterContext.nodeModel);\n\n const libUri = 'ts:filename/chameleon.default.variable.d.ts';\n monaco.languages.typescript.javascriptDefaults.addExtraLib(realtimeDts, libUri);\n // When resolving definitions and references, the editor will try to use created models.\n // Creating a model for the library allows \"peek definition/references\" commands to work with the library.\n const model = monaco.editor.getModel(monaco.Uri.parse(libUri));\n if (!model) {\n monaco.editor.createModel(DefaultTslibSource, 'typescript', monaco.Uri.parse(libUri));\n }\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n initialValue={props.value?.value ?? (initialValue || 'function run() {\\n}')}\n language={'javascript'}\n options={{\n automaticLayout: true,\n tabSize: 2,\n\n minimap: {\n enabled: props.minimap ?? true,\n },\n ...lineNumberOptions,\n ...(editorOptions || {}),\n }}\n onChange={() => {\n if (props.mode === 'inline') {\n // TODO: 需要节流每 1 秒触发一次\n onInnerValueChange();\n }\n }}\n />\n );\n\n if (props.mode === 'inline') {\n return (\n <div\n style={{\n border: '1px solid rgba(0,0,0, 0.2)',\n ...(props.containerStyle || {}),\n }}\n >\n {editorView}\n </div>\n );\n }\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n onClick={() => {\n setOpen(true);\n }}\n >\n Edit Function\n </Button>\n <Modal\n centered\n destroyOnClose\n open={open}\n title=\"Function Editor\"\n onCancel={() => setOpen(false)}\n width=\"calc(100vw - 100px)\"\n onOk={() => {\n onInnerValueChange();\n setOpen(false);\n }}\n style={{\n maxWidth: '1300px',\n }}\n styles={{\n body: {\n minHeight: '500px',\n height: 'calc(100vh - 280px)',\n },\n }}\n >\n <div style={{ height: '100%' }}>{open && editorView}</div>\n </Modal>\n </ConfigProvider>\n );\n};\n\nFunctionSetter.setterName = '函数设置器';\n","import { ConfigProvider, Input } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { TextAreaProps } from 'antd/es/input';\nimport { useState, useRef, useEffect } from 'react';\n\nexport type TTextAreaSetterProps = TextAreaProps & {\n valueValidator?: (value: string) => boolean;\n};\n\nexport const TextAreaSetter: CSetter<TTextAreaSetterProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n valueValidator,\n ...props\n}: CSetterProps<TTextAreaSetterProps>) => {\n const [checkValueStatus, setCheckValueStatus] = useState<TextAreaProps['status']>('');\n const [internalValue, setInternalValue] = useState(props.value ?? initialValue ?? '');\n const lastExternalValueRef = useRef(props.value ?? initialValue);\n\n // 监听外部值变化,同步到内部状态(避免重复更新)\n useEffect(() => {\n const externalValue = props.value ?? initialValue;\n if (externalValue !== lastExternalValueRef.current) {\n lastExternalValueRef.current = externalValue;\n setInternalValue(externalValue ?? '');\n }\n }, [props.value, initialValue]);\n\n const validateValue = (value: string) => {\n if (valueValidator !== undefined) {\n const res = valueValidator(value);\n if (!res) {\n setCheckValueStatus('error');\n } else {\n setCheckValueStatus('');\n }\n }\n };\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Input.TextArea\n status={checkValueStatus}\n {...props}\n value={internalValue}\n onChange={(e) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n validateValue(newValue);\n }}\n onBlur={(e) => {\n // blur 时才触发 onChange 和更新值到外部\n const finalValue = e.target.value;\n lastExternalValueRef.current = finalValue;\n props.onChange?.(e as any);\n onValueChange?.(finalValue);\n props.onBlur?.(e);\n }}\n />\n </ConfigProvider>\n );\n};\n\nTextAreaSetter.setterName = '长文本设置器';\n","const CSSSourceInfo = {\n cssColors: {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n },\n cssKeyValue: {\n 'align-content': {\n values: [\n 'center',\n 'flex-end',\n 'flex-start',\n 'space-around',\n 'space-between',\n 'stretch',\n ],\n },\n 'align-items': {\n values: ['baseline', 'center', 'flex-end', 'flex-start', 'stretch'],\n },\n 'align-self': {\n values: [\n 'auto',\n 'normal',\n 'self-start',\n 'self-end',\n 'baseline',\n 'center',\n 'start',\n 'end',\n 'flex-end',\n 'flex-start',\n 'safe',\n 'stretch',\n 'unsafe',\n ],\n },\n all: { values: [] },\n animation: { values: [] },\n 'animation-delay': { values: [] },\n 'animation-direction': {\n values: ['alternate', 'alternate-reverse', 'normal', 'reverse'],\n },\n 'animation-duration': { values: [] },\n 'animation-fill-mode': {\n values: ['backwards', 'both', 'forwards', 'none'],\n },\n 'animation-iteration-count': { values: ['infinite'] },\n 'animation-name': { values: ['none'] },\n 'animation-play-state': { values: ['paused', 'running'] },\n 'animation-timing-function': {\n values: [\n 'cubic-bezier()',\n 'ease',\n 'ease-in',\n 'ease-in-out',\n 'ease-out',\n 'linear',\n 'step-end',\n 'step-start',\n 'steps()',\n ],\n },\n 'backface-visibility': { values: ['hidden', 'visible'] },\n background: { values: [], type: 'color' },\n 'background-attachment': { values: ['fixed', 'local', 'scroll'] },\n 'background-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'background-clip': { values: ['border-box', 'content-box', 'padding-box'] },\n 'background-color': { values: [], type: 'color' },\n 'background-image': {\n values: [\n 'image()',\n 'linear-gradient()',\n 'radial-gradient()',\n 'repeating-linear-gradient()',\n 'repeating-radial-gradient()',\n 'url()',\n ],\n },\n 'background-origin': {\n values: ['border-box', 'content-box', 'padding-box'],\n },\n 'background-position': {\n values: ['left', 'center', 'right', 'bottom', 'top'],\n },\n 'background-repeat': {\n values: ['no-repeat', 'repeat', 'repeat-x', 'repeat-y', 'round', 'space'],\n },\n 'background-size': { values: ['auto', 'contain', 'cover'] },\n border: { values: [] },\n 'border-collapse': { values: ['collapse', 'separate'] },\n 'border-color': { values: [], type: 'color' },\n 'border-spacing': { values: [] },\n 'border-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-bottom': { values: [] },\n 'border-bottom-color': { values: [], type: 'color' },\n 'border-bottom-left-radius': { values: [] },\n 'border-bottom-right-radius': { values: [] },\n 'border-bottom-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-bottom-width': { values: ['medium', 'thin', 'thick'] },\n 'border-image': { values: ['url()'] },\n 'border-image-outset': { values: [] },\n 'border-image-slice': { values: [] },\n 'border-image-source': { values: [] },\n 'border-image-repeat': { values: ['repeat', 'round', 'space', 'stretch'] },\n 'border-image-width': { values: ['auto'] },\n 'border-left': { values: [] },\n 'border-left-color': { values: [], type: 'color' },\n 'border-left-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-left-width': { values: ['medium', 'thin', 'thick'] },\n 'border-radius': { values: [] },\n 'border-right': { values: [] },\n 'border-right-color': { values: [], type: 'color' },\n 'border-right-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-right-width': { values: ['medium', 'thin', 'thick'] },\n 'border-top': { values: [] },\n 'border-top-color': { values: [], type: 'color' },\n 'border-top-left-radius': { values: [] },\n 'border-top-right-radius': { values: [] },\n 'border-top-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'border-top-width': { values: ['medium', 'thin', 'thick'] },\n 'border-width': { values: ['medium', 'thin', 'thick'] },\n 'box-decoration-break': { values: ['clone', 'slice'] },\n 'box-shadow': { values: ['none'] },\n 'box-sizing': { values: ['border-box', 'content-box'] },\n bottom: { values: ['auto'] },\n 'break-after': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'break-before': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'caption-side': { values: ['bottom', 'top'] },\n 'caret-color': { values: ['auto'], type: 'color' },\n clear: { values: ['both', 'left', 'none', 'right'] },\n clip: { values: ['auto'] },\n color: { values: [], type: 'color' },\n columns: { values: [] },\n 'column-count': { values: [] },\n 'column-fill': { values: ['auto', 'balance'] },\n 'column-gap': { values: ['normal'] },\n 'column-rule': { values: [] },\n 'column-rule-color': { values: [], type: 'color' },\n 'column-rule-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'column-rule-width': { values: ['medium', 'thin', 'thick'] },\n 'column-span': { values: ['all', 'none'] },\n 'column-width': { values: ['auto'] },\n content: {\n values: [\n 'attr()',\n 'close-quote',\n 'no-close-quote',\n 'no-open-quote',\n 'normal',\n 'none',\n 'open-quote',\n ],\n },\n 'counter-increment': { values: ['none'] },\n 'counter-reset': { values: ['none'] },\n cursor: {\n values: [\n 'alias',\n 'all-scroll',\n 'auto',\n 'cell',\n 'col-resize',\n 'context-menu',\n 'copy',\n 'crosshair',\n 'default',\n 'e-resize',\n 'ew-resize',\n 'grab',\n 'grabbing',\n 'help',\n 'move',\n 'n-resize',\n 'ne-resize',\n 'nesw-resize',\n 'no-drop',\n 'none',\n 'not-allowed',\n 'ns-resize',\n 'nw-resize',\n 'nwse-resize',\n 'pointer',\n 'progress',\n 'row-resize',\n 's-resize',\n 'se-resize',\n 'sw-resize',\n 'text',\n 'vertical-text',\n 'w-resize',\n 'wait',\n 'zoom-in',\n 'zoom-out',\n ],\n },\n direction: { values: ['ltr', 'rtl'] },\n display: {\n values: [\n 'block',\n 'contents',\n 'flex',\n 'flow-root',\n 'grid',\n 'inline',\n 'inline-block',\n 'inline-flex',\n 'inline-grid',\n 'inline-table',\n 'list-item',\n 'none',\n 'run-in',\n 'subgrid',\n 'table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row',\n 'table-row-group',\n ],\n },\n 'empty-cells': { values: ['hide', 'show'] },\n fill: { values: [] },\n filter: {\n values: [\n 'blur()',\n 'brightness()',\n 'contrast()',\n 'custom()',\n 'drop-shadow()',\n 'grayscale()',\n 'hue-rotate()',\n 'invert()',\n 'none',\n 'opacity()',\n 'sepia()',\n 'saturate()',\n 'url()',\n ],\n },\n flex: { values: ['auto', 'none'] },\n 'flex-basis': { values: ['auto'] },\n 'flex-direction': {\n values: ['column', 'column-reverse', 'row', 'row-reverse'],\n },\n 'flex-flow': {\n values: [\n 'column',\n 'column-reverse',\n 'nowrap',\n 'row',\n 'row-reverse',\n 'wrap',\n 'wrap-reverse',\n ],\n },\n 'flex-grow': { values: [] },\n 'flex-shrink': { values: [] },\n 'flex-wrap': { values: ['nowrap', 'wrap', 'wrap-reverse'] },\n float: { values: ['left', 'right', 'none', 'inline-start', 'inline-end'] },\n 'flow-into': { values: ['none'], type: 'named-flow' },\n 'flow-from': { values: ['none'], type: 'named-flow' },\n font: { values: [] },\n 'font-display': {\n values: ['auto', 'block', 'swap', 'fallback', 'optional'],\n },\n 'font-family': {\n values: [\n 'auto',\n 'cursive',\n 'fantasy',\n 'monospace',\n 'sans-serif',\n 'serif',\n ],\n },\n 'font-feature-settings': { values: ['normal'] },\n 'font-kerning': { values: ['auto', 'none', 'normal'] },\n 'font-language-override': { values: ['normal'] },\n 'font-size': {\n values: [\n 'xx-small',\n 'x-small',\n 'small',\n 'medium',\n 'large',\n 'x-large',\n 'xx-large',\n 'xxx-large',\n 'larger',\n 'smaller',\n ],\n },\n 'font-size-adjust': { values: ['auto', 'none'] },\n 'font-stretch': {\n values: [\n 'condensed',\n 'expanded',\n 'extra-condensed',\n 'extra-expanded',\n 'normal',\n 'semi-condensed',\n 'semi-expanded',\n 'ultra-condensed',\n 'ultra-expanded',\n ],\n },\n 'font-style': { values: ['italic', 'normal', 'oblique'] },\n 'font-synthesis': { values: ['none', 'style', 'weight'] },\n 'font-variant': { values: ['normal', 'small-caps'] },\n 'font-variant-alternates': { values: ['normal'] },\n 'font-variant-caps': {\n values: [\n 'normal',\n 'small-caps',\n 'all-small-caps',\n 'petite-caps',\n 'all-petite-caps',\n 'unicase',\n 'titling-caps',\n ],\n },\n 'font-variant-east-asian': { values: ['normal'] },\n 'font-variant-ligatures': { values: ['normal', 'none'] },\n 'font-variant-numeric': { values: ['normal'] },\n 'font-variant-position': { values: ['normal', 'sub', 'super'] },\n 'font-weight': {\n values: [\n 'bold',\n 'bolder',\n 'lighter',\n 'normal',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n ],\n },\n gap: { values: ['revert-layer'] },\n grid: { values: [] },\n 'grid-area': { values: [] },\n 'grid-auto-columns': { values: [] },\n 'grid-auto-flow': { values: ['row', 'column', 'dense'] },\n 'grid-auto-rows': { values: [] },\n 'grid-column': { values: ['auto'] },\n 'grid-column-end': { values: [] },\n 'grid-column-gap': { values: [] },\n 'grid-column-start': { values: [] },\n 'grid-gap': { values: [] },\n 'grid-row': { values: ['auto'] },\n 'grid-row-end': { values: [] },\n 'grid-row-start': { values: [] },\n 'grid-row-gap': { values: [] },\n 'grid-template': { values: ['none'] },\n 'grid-template-areas': { values: [] },\n 'grid-template-columns': { values: ['auto'] },\n 'grid-template-rows': { values: ['auto'] },\n 'hanging-punctuation': {\n values: ['allow-end', 'first', 'force-end', 'last', 'none'],\n },\n height: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n hyphens: { values: ['auto', 'manual', 'none'] },\n 'image-orientation': { values: [] },\n 'image-resolution': { values: ['from-image', 'snap'] },\n isolation: { values: ['auto', 'isolate'] },\n 'justify-content': {\n values: [\n 'center',\n 'flex-end',\n 'flex-start',\n 'space-around',\n 'space-between',\n ],\n },\n 'justify-items': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n 'legacy',\n ],\n },\n 'justify-self': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n ],\n },\n left: { values: ['auto'] },\n 'letter-spacing': { values: ['normal'] },\n 'line-height': { values: ['normal'] },\n 'list-style': {\n values: [\n 'none',\n 'url()',\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'inside',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'outside',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n 'list-style-image': { values: ['none', 'url()'] },\n 'list-style-position': { values: ['inside', 'outside'] },\n 'list-style-type': {\n values: [\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'none',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n margin: { values: ['auto'] },\n 'margin-bottom': { values: ['auto'] },\n 'margin-left': { values: ['auto'] },\n 'margin-right': { values: ['auto'] },\n 'margin-top': { values: ['auto'] },\n 'max-height': { values: ['none'] },\n 'max-width': { values: ['none'] },\n 'min-height': { values: [] },\n 'min-width': { values: [] },\n 'mix-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'object-fit': {\n values: ['contain', 'cover', 'fill', 'none', 'scale-down'],\n },\n 'object-position': { values: ['left', 'center', 'right', 'bottom', 'top'] },\n opacity: { values: [] },\n order: { values: [] },\n orphans: { values: [] },\n outline: { values: [] },\n 'outline-color': { values: ['invert'], type: 'color' },\n 'outline-offset': { values: [] },\n 'outline-style': {\n values: [\n 'dashed',\n 'dotted',\n 'double',\n 'groove',\n 'hidden',\n 'inset',\n 'none',\n 'outset',\n 'ridge',\n 'solid',\n ],\n },\n 'outline-width': { values: ['medium', 'thin', 'thick'] },\n overflow: { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-x': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-y': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-wrap': { values: ['normal', 'anywhere', 'break-word'] },\n padding: { values: [] },\n 'padding-bottom': { values: [] },\n 'padding-left': { values: [] },\n 'padding-right': { values: [] },\n 'padding-top': { values: [] },\n 'page-break-after': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-before': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-inside': { values: ['auto', 'avoid'] },\n perspective: { values: ['none'] },\n 'perspective-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'pointer-events': {\n values: [\n 'all',\n 'auto',\n 'fill',\n 'none',\n 'painted',\n 'stroke',\n 'visible',\n 'visibleFill',\n 'visiblePainted',\n 'visibleStroke',\n ],\n },\n position: { values: ['absolute', 'fixed', 'relative', 'static', 'sticky'] },\n quotes: { values: ['none'] },\n 'region-break-after': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'region-break-before': {\n values: [\n 'always',\n 'auto',\n 'avoid',\n 'avoid-column',\n 'avoid-page',\n 'avoid-region',\n 'column',\n 'left',\n 'page',\n 'region',\n 'right',\n ],\n },\n 'region-break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'region-fragment': { values: ['auto', 'break'] },\n resize: { values: ['both', 'horizontal', 'none', 'vertical'] },\n right: { values: ['auto'] },\n 'scroll-behavior': { values: ['auto', 'smooth'] },\n 'scroll-snap-type': {\n values: [\n 'none',\n 'x',\n 'y',\n 'block',\n 'inline',\n 'both',\n 'mandatory',\n 'proximity',\n ],\n },\n src: { values: ['url()'] },\n 'shape-image-threshold': { values: [] },\n 'shape-inside': {\n values: [\n 'auto',\n 'circle()',\n 'ellipse()',\n 'outside-shape',\n 'polygon()',\n 'rectangle()',\n ],\n },\n 'shape-margin': { values: [] },\n 'shape-outside': {\n values: [\n 'none',\n 'circle()',\n 'ellipse()',\n 'polygon()',\n 'inset()',\n 'margin-box',\n 'border-box',\n 'padding-box',\n 'content-box',\n 'url()',\n 'image()',\n 'linear-gradient()',\n 'radial-gradient()',\n 'repeating-linear-gradient()',\n 'repeating-radial-gradient()',\n ],\n },\n 'tab-size': { values: [] },\n 'table-layout': { values: ['auto', 'fixed'] },\n 'text-align': {\n values: [\n 'start',\n 'end',\n 'center',\n 'left',\n 'justify',\n 'right',\n 'match-parent',\n 'justify-all',\n ],\n },\n 'text-align-last': { values: ['center', 'left', 'justify', 'right'] },\n 'text-decoration': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-color': { values: [], type: 'color' },\n 'text-decoration-line': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-skip': {\n values: ['edges', 'ink', 'none', 'objects', 'spaces'],\n },\n 'text-decoration-style': {\n values: ['dashed', 'dotted', 'double', 'solid', 'wavy'],\n },\n 'text-emphasis': { values: [] },\n 'text-emphasis-color': { values: [], type: 'color' },\n 'text-emphasis-position': { values: ['above', 'below', 'left', 'right'] },\n 'text-emphasis-style': {\n values: [\n 'circle',\n 'dot',\n 'double-circle',\n 'filled',\n 'none',\n 'open',\n 'sesame',\n 'triangle',\n ],\n },\n 'text-indent': { values: [] },\n 'text-justify': {\n values: ['auto', 'none', 'inter-word', 'inter-character'],\n },\n 'text-overflow': { values: ['clip', 'ellipsis'] },\n 'text-shadow': { values: [] },\n 'text-rendering': {\n values: [\n 'auto',\n 'geometricPrecision',\n 'optimizeLegibility',\n 'optimizeSpeed',\n ],\n },\n 'text-transform': {\n values: ['capitalize', 'full-width', 'lowercase', 'none', 'uppercase'],\n },\n 'text-underline-position': {\n values: ['alphabetic', 'auto', 'below', 'left', 'right'],\n },\n top: { values: ['auto'] },\n transform: {\n values: [\n 'matrix()',\n 'matrix3d()',\n 'none',\n 'perspective()',\n 'rotate()',\n 'rotate3d()',\n 'rotateX()',\n 'rotateY()',\n 'rotateZ()',\n 'scale()',\n 'scale3d()',\n 'scaleX()',\n 'scaleY()',\n 'scaleZ()',\n 'skewX()',\n 'skewY()',\n 'translate()',\n 'translate3d()',\n 'translateX()',\n 'translateY()',\n 'translateZ()',\n ],\n },\n 'transform-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'transform-style': { values: ['flat', 'preserve-3d'] },\n transition: { values: [] },\n 'transition-delay': { values: [] },\n 'transition-duration': { values: [] },\n 'transition-property': { values: ['all', 'none'] },\n 'transition-timing-function': {\n values: [\n 'cubic-bezier()',\n 'ease',\n 'ease-in',\n 'ease-in-out',\n 'ease-out',\n 'linear',\n 'step-end',\n 'step-start',\n 'steps()',\n ],\n },\n 'unicode-bidi': { values: ['bidi-override', 'embed', 'normal'] },\n 'unicode-range': { values: [] },\n 'user-select': { values: ['all', 'auto', 'contain', 'none', 'text'] },\n 'vertical-align': {\n values: [\n 'baseline',\n 'bottom',\n 'middle',\n 'sub',\n 'super',\n 'text-bottom',\n 'text-top',\n 'top',\n ],\n },\n visibility: { values: ['collapse', 'hidden', 'visible'] },\n 'white-space': {\n values: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap'],\n },\n widows: { values: [] },\n width: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n 'will-change': {\n values: ['auto', 'contents', 'opacity', 'scroll-position'],\n },\n 'word-break': { values: ['normal', 'break-all', 'keep-all'] },\n 'word-spacing': { values: ['normal'] },\n 'z-index': { values: ['auto'] },\n },\n};\n\nexport const CSSProperties = CSSSourceInfo.cssKeyValue;\n\nexport const CSSColors = CSSSourceInfo.cssColors;\n\nexport type CSSPropertiesKey = keyof typeof CSSProperties;\n\nexport const CSSPropertyList = Object.keys(CSSSourceInfo.cssKeyValue);\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { AutoComplete, ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { BaseSelectRef } from 'rc-select';\nimport clsx from 'clsx';\nimport styles from './style.module.scss';\nimport { CSSProperties, CSSPropertiesKey } from '../../../../CSSPropertiesEditor/cssProperties';\n\ntype CSSValueSetterProps = {\n propertyKey: string;\n};\n\nexport const CSSValueSetter: CSetter<CSSValueSetterProps> = ({\n onValueChange,\n propertyKey = '',\n value,\n initialValue,\n}: CSetterProps<CSSValueSetterProps>) => {\n // const { keyPaths, onSetterChange } = setterContext;\n const propertyValueRef = useRef<BaseSelectRef | null>(null);\n const [innerValue, setInnerVal] = useState<any>(value ?? (initialValue || ''));\n const [focusState, setFocusState] = useState(false);\n const updateOuterValue = () => {\n onValueChange?.(innerValue);\n };\n useEffect(() => {\n setInnerVal(value);\n }, [value]);\n\n const optionsValue = useMemo(() => {\n const list = CSSProperties[propertyKey as unknown as CSSPropertiesKey]?.values || [];\n return list.map((el) => {\n return {\n value: el,\n };\n });\n }, [propertyKey]);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <AutoComplete\n ref={propertyValueRef}\n popupMatchSelectWidth={200}\n variant={'borderless'}\n value={innerValue}\n onChange={(val) => {\n setInnerVal(val);\n updateOuterValue();\n }}\n style={{\n flex: 1,\n }}\n onFocus={() => {\n setFocusState(true);\n }}\n onBlur={() => {\n setFocusState(false);\n }}\n className={clsx([styles.inputAuto, focusState && styles.active])}\n placeholder=\"value\"\n options={optionsValue}\n ></AutoComplete>\n </ConfigProvider>\n );\n};\n\nCSSValueSetter.setterName = 'CSS值设置器';\n","import { ConfigProvider, Input, Popover } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { SketchPicker } from 'react-color';\n\ntype ColorSetterProps = {\n initialValue: string;\n};\n\nexport const ColorSetter: CSetter = ({ onValueChange, initialValue, value }: CSetterProps<ColorSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Popover\n trigger=\"click\"\n content={\n <SketchPicker\n color={value || initialValue}\n onChange={(newColor) => {\n const newColorStr = `rgba(${newColor.rgb.r},${newColor.rgb.g},${newColor.rgb.b}, ${newColor.rgb.a || 1})`;\n onValueChange?.(newColorStr);\n }}\n />\n }\n placement={'bottomLeft'}\n styles={{\n body: {\n padding: 0,\n },\n }}\n arrow={{\n pointAtCenter: false,\n }}\n >\n <Input\n placeholder=\"color\"\n value={value}\n onChange={(e) => {\n onValueChange?.(e.target.value);\n }}\n prefix={\n <div\n style={{\n backgroundColor: value || 'transparent',\n width: '10px',\n height: '10px',\n borderRadius: '4px',\n overflow: 'hidden',\n }}\n ></div>\n }\n />\n </Popover>\n </ConfigProvider>\n );\n};\n\nColorSetter.setterName = '颜色设置器';\n","export const DEFAULT_PRESET_COLORS = [\n {\n label: 'Recommended',\n colors: [\n '#000000',\n '#000000E0',\n '#000000A6',\n '#00000073',\n '#00000040',\n '#00000026',\n '#0000001A',\n '#00000012',\n '#0000000A',\n '#00000005',\n '#F5222D',\n '#FA8C16',\n '#FADB14',\n '#8BBB11',\n '#52C41A',\n '#13A8A8',\n '#1677FF',\n '#2F54EB',\n '#722ED1',\n '#EB2F96',\n '#F5222D4D',\n '#FA8C164D',\n '#FADB144D',\n '#8BBB114D',\n '#52C41A4D',\n '#13A8A84D',\n '#1677FF4D',\n '#2F54EB4D',\n '#722ED14D',\n '#EB2F964D',\n ],\n },\n];\n","import { ColorPicker, ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\n\ntype ColorSetterProps = {\n initialValue: string;\n};\n\nexport const AntDColorSetter: CSetter = ({\n onValueChange,\n initialValue,\n value,\n setterContext,\n ...restProps\n}: CSetterProps<ColorSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <ColorPicker\n showText={true}\n allowClear\n value={value ?? initialValue}\n onChangeComplete={(color) => {\n onValueChange?.(color.toRgbString());\n }}\n presets={DEFAULT_PRESET_COLORS}\n {...restProps}\n />\n </ConfigProvider>\n );\n};\n\nAntDColorSetter.setterName = '颜色设置器';\n","import { Slider, SliderSingleProps } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\nexport const SliderSetter: CSetter<SliderSingleProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<SliderSingleProps & { initialValue?: string }>) => {\n return (\n <Slider\n {...props}\n value={props.value ?? initialValue}\n onChange={(newValue) => {\n props.onChange?.(newValue);\n onValueChange?.(newValue);\n }}\n />\n );\n};\n\nSliderSetter.setterName = '滑动条设置器';\n","import { ConfigProvider, Radio } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\n\ntype ColorSetterProps = {\n initialValue: string;\n};\n\nexport const RadioGroupSetter: CSetter = ({\n onValueChange,\n value,\n initialValue,\n setterContext,\n ...restProps\n}: CSetterProps<ColorSetterProps>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <Radio.Group\n onChange={(e) => {\n onValueChange?.(e.target.value);\n }}\n defaultValue={initialValue}\n value={value}\n {...restProps}\n />\n </ConfigProvider>\n );\n};\n\nRadioGroupSetter.setterName = '单选设置器';\n","import { Input, InputProps } from 'antd';\nimport styles from './style.module.scss';\nimport { useMemo } from 'react';\n\nexport type InputNumberPlusProps = Omit<InputProps, 'onChange'> & {\n min?: number;\n max?: number;\n value?: number;\n onChange?: (newVal: number | undefined) => void;\n};\n\nexport const InputNumberPlus = ({ min, max, value, onChange, addonAfter, ...restProps }: InputNumberPlusProps) => {\n const updateInnerVal = (newVal: number | undefined) => {\n onChange?.(newVal);\n };\n\n const processUpdateVal = (num: number) => {\n let resVal = num;\n if (min !== undefined) {\n resVal = Math.max(min, resVal);\n }\n if (max !== undefined) {\n resVal = Math.min(max, resVal);\n }\n updateInnerVal(resVal);\n };\n // 是否是合法的值\n const isLegal = useMemo(() => {\n if (value === undefined) {\n return true;\n }\n let tempVal = value;\n if (min !== undefined) {\n tempVal = Math.max(min, tempVal);\n }\n if (max !== undefined) {\n tempVal = Math.min(max, tempVal);\n }\n\n if (tempVal !== value) {\n return false;\n }\n return true;\n }, [max, min, value]);\n\n return (\n <div className={styles.inputNumberPlus}>\n <div\n style={{\n display: 'flex',\n position: 'relative',\n }}\n >\n <Input\n allowClear\n {...restProps}\n status={isLegal ? undefined : 'error'}\n value={value}\n onClear={() => {\n updateInnerVal(undefined);\n }}\n onChange={(e) => {\n const newNum = parseInt(e.target.value || '0', 10);\n processUpdateVal(newNum);\n }}\n addonAfter={addonAfter}\n />\n </div>\n </div>\n );\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { ConfigProvider, InputProps, Select } from 'antd';\nimport { MouseEventHandler, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport styles from './style.module.scss';\nimport { addEventListenerReturnCancel } from '@chamn/layout';\nimport { InputNumberPlus } from '../InputNumberPlus';\nimport clsx from 'clsx';\n\ntype CumulativeInfoType = {\n x: number;\n y: number;\n cumulativeX: number;\n cumulativeY: number;\n};\n\nconst UNIT_LIST = [\n { value: 'px', label: 'px' },\n { value: '%', label: '%' },\n { value: 'vw', label: 'vw' },\n { value: 'vh', label: 'vh' },\n { value: 'rem', label: 'rem' },\n];\n\nexport const useDragSize = function (options?: {\n onStart?: (data: CumulativeInfoType) => void;\n onChange?: (data: CumulativeInfoType) => void;\n onEnd?: (data: CumulativeInfoType) => void;\n limitCumulative?: {\n x?: [number | undefined, number | undefined];\n y?: [number | undefined, number | undefined];\n };\n}) {\n const cumulativeInfo = useRef<{\n status: 'running' | '';\n start: CumulativeInfoType;\n processing: CumulativeInfoType;\n mouseDown: boolean;\n }>({\n status: '',\n start: {\n x: 0,\n y: 0,\n cumulativeX: 0,\n cumulativeY: 0,\n },\n processing: {\n x: 0,\n y: 0,\n cumulativeX: 0,\n cumulativeY: 0,\n },\n mouseDown: false,\n });\n\n const processEnd: MouseEventHandler<any> = useCallback(() => {\n cumulativeInfo.current.mouseDown = false;\n const { processing } = cumulativeInfo.current;\n\n options?.onEnd?.({ ...processing });\n cumulativeInfo.current.status = '';\n cumulativeInfo.current.processing.cumulativeX = 0;\n cumulativeInfo.current.processing.cumulativeY = 0;\n }, [options]);\n\n const onMouseDown: MouseEventHandler<any> = useCallback(() => {\n cumulativeInfo.current.mouseDown = true;\n }, []);\n\n const processMove: MouseEventHandler<any> = useCallback(\n (e) => {\n if (!cumulativeInfo.current.mouseDown) {\n return;\n }\n const { start, processing } = cumulativeInfo.current;\n // 判断是否是拖拽\n const tempCumulativeX = e.clientX - start.x;\n const tempCumulativeY = e.clientY - start.y;\n\n const shakeDIstance = 10;\n if (\n cumulativeInfo.current.status !== 'running' &&\n (Math.abs(tempCumulativeX) > shakeDIstance || Math.abs(tempCumulativeY) > shakeDIstance)\n ) {\n cumulativeInfo.current.status = 'running';\n const startInfo = cumulativeInfo.current.start;\n startInfo.x = e.clientX;\n startInfo.y = e.clientY;\n options?.onStart?.({ ...startInfo });\n }\n\n if (cumulativeInfo.current.status !== 'running') {\n return;\n }\n processing.x = e.clientX;\n processing.y = e.clientY;\n\n processing.cumulativeX = e.clientX - start.x;\n processing.cumulativeY = e.clientY - start.y;\n\n // 超出最大累积便宜,直接结束拖拽\n const [minX, maxX] = options?.limitCumulative?.x || [];\n if (minX !== undefined && processing.cumulativeX < minX) {\n processEnd(e);\n return;\n }\n\n if (maxX !== undefined && processing.cumulativeX > maxX) {\n processEnd(e);\n return;\n }\n\n options?.onChange?.({ ...processing });\n },\n [options, processEnd]\n );\n\n useEffect(() => {\n const globalMoveDispose = addEventListenerReturnCancel(document.body, 'mousemove', (e) => {\n processMove(e as any);\n });\n\n const globalUpDispose = addEventListenerReturnCancel(document.body, 'mouseup', (e) => {\n processEnd(e as any);\n });\n const globalLeaveDispose = addEventListenerReturnCancel(document.body, 'mouseleave', (e) => {\n processEnd(e as any);\n });\n\n return () => {\n globalMoveDispose();\n globalUpDispose();\n globalLeaveDispose();\n };\n }, [processEnd, processMove]);\n\n return {\n onMouseDown,\n };\n};\n\ntype MinMaxType = {\n px?: number;\n vw?: number;\n vh?: number;\n rem?: number;\n};\n\nexport type CSSSizeInputProps = {\n value?: string;\n onValueChange?: (newVal: string | undefined) => void;\n min?: MinMaxType | number;\n max?: MinMaxType | number;\n size?: InputProps['size'];\n style?: React.CSSProperties;\n\n className?: string;\n unit?: boolean;\n /** 累计的偏移量,映射为具体的值,默认 1:1 */\n cumulativeTransform?: (params: CumulativeInfoType) => CumulativeInfoType;\n unitList?: (keyof MinMaxType)[];\n};\n\nexport const CSSSizeInput = (props: CSSSizeInputProps) => {\n const outValue = String(props.value);\n const [dragSizing, setDragSizing] = useState({\n value: 0,\n status: '',\n });\n\n const originalValObj = useMemo(() => {\n const res: {\n value: number | undefined;\n unit: keyof MinMaxType;\n } = {\n value: undefined,\n unit: 'px' as any,\n };\n\n if (props.value === undefined) {\n return res;\n }\n const tempVal = parseFloat(props.value || '');\n if (!isNaN(tempVal)) {\n res.value = tempVal;\n }\n\n let unit: keyof MinMaxType = 'px';\n if (res.value !== undefined) {\n unit = outValue.replace(String(res.value), '').trim() as keyof MinMaxType;\n }\n if (['px', '%', 'rem', 'vw', 'vx'].includes(unit)) {\n res.unit = unit || 'px';\n }\n return res;\n }, [outValue, props.value]);\n\n const currentUnitList = useMemo<typeof UNIT_LIST>(() => {\n if (!props.unitList) {\n return UNIT_LIST;\n }\n return props.unitList\n .map((el) => {\n return UNIT_LIST.find((it) => it.value === el);\n })\n .filter(Boolean) as typeof UNIT_LIST;\n }, [props.unitList]);\n\n const currentMinMix = useMemo(() => {\n return {\n min: typeof props.min === 'number' ? props.min : props.min?.[originalValObj.unit],\n max: typeof props.max === 'number' ? props.max : props.max?.[originalValObj.unit],\n };\n }, [props, originalValObj]);\n\n const valObj = useMemo(() => {\n const res = { ...originalValObj };\n if (dragSizing.status === 'dragging') {\n res.value = dragSizing.value;\n }\n\n return res;\n }, [originalValObj, dragSizing]);\n\n const updateValue = useCallback(\n (val: { value: number | undefined; unit: string }) => {\n let valStr: string | undefined = `${val.value}${val.unit}`;\n if (val.value === undefined) {\n valStr = undefined;\n }\n props.onValueChange?.(valStr);\n },\n [props]\n );\n\n const processNewVal = useCallback(\n (cumulativeData: CumulativeInfoType, value: number | undefined) => {\n let data = { ...cumulativeData };\n if (props.cumulativeTransform) {\n data = props.cumulativeTransform(data);\n }\n\n let num = value ?? 0;\n if (isNaN(num)) {\n num = 0;\n }\n let newVal = num + data.cumulativeX;\n\n if (currentMinMix.min !== undefined) {\n newVal = Math.max(newVal, currentMinMix.min);\n }\n if (currentMinMix.max !== undefined) {\n newVal = Math.min(newVal, currentMinMix.max);\n }\n return newVal;\n },\n [currentMinMix.max, currentMinMix.min, props]\n );\n\n const onDragStart = useCallback(\n (data: CumulativeInfoType) => {\n setDragSizing({\n status: 'dragging',\n value: processNewVal(data, originalValObj.value),\n });\n },\n [originalValObj.value, processNewVal]\n );\n\n const onDragMoveChange = useCallback(\n (data: CumulativeInfoType) => {\n const nV = processNewVal(data, originalValObj.value);\n setDragSizing({\n status: 'dragging',\n value: nV,\n });\n },\n [originalValObj.value, processNewVal]\n );\n\n const onDragEnd = useCallback(\n (data: CumulativeInfoType) => {\n const newVal = processNewVal(data, originalValObj.value);\n if (dragSizing.status !== 'dragging') {\n return;\n }\n\n updateValue({\n value: newVal,\n unit: originalValObj.unit,\n });\n setDragSizing({\n status: '',\n value: 0,\n });\n },\n [dragSizing.status, originalValObj, processNewVal, updateValue]\n );\n const handleRef = useRef({\n onStart: onDragStart,\n onChange: onDragMoveChange,\n onEnd: onDragEnd,\n });\n handleRef.current = {\n onStart: onDragStart,\n onChange: onDragMoveChange,\n onEnd: onDragEnd,\n };\n\n const dragSizeHandle = useDragSize({\n onStart: (data) => handleRef.current.onStart(data),\n onChange: (data) => handleRef.current.onChange(data),\n onEnd: (data) => handleRef.current.onEnd(data),\n limitCumulative: {\n x: [-60, undefined],\n },\n });\n const unitSelect = (\n <span className={styles.unitSelect}>\n <Select\n size={props.size}\n defaultValue=\"\"\n value={valObj.unit}\n onChange={(val) => {\n updateValue({\n value: valObj.value,\n unit: val,\n });\n }}\n style={{\n width: '40px',\n }}\n popupMatchSelectWidth={false}\n options={currentUnitList}\n />\n </span>\n );\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 2,\n },\n }}\n >\n <div className={clsx([styles.cssSizeInput, props?.className])} {...dragSizeHandle} style={props.style}>\n <InputNumberPlus\n size={props.size}\n value={valObj.value}\n addonAfter={props.unit === false ? '' : unitSelect}\n min={currentMinMix.min}\n max={currentMinMix.max}\n onChange={(val) => {\n updateValue({\n value: val,\n unit: valObj.unit,\n });\n }}\n />\n </div>\n </ConfigProvider>\n );\n};\n","import { ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CSSSizeInput, CSSSizeInputProps } from '@/component/CSSSizeInput';\n\nexport const CSSSizeSetter: CSetter<CSSSizeInputProps> = ({\n onValueChange,\n setterContext,\n initialValue,\n ...props\n}: CSetterProps<CSSSizeInputProps & { initialValue?: string }>) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <CSSSizeInput\n min={0}\n {...props}\n value={props.value ?? initialValue}\n onValueChange={(newVal) => {\n onValueChange?.(newVal);\n }}\n />\n </ConfigProvider>\n );\n};\n\nCSSSizeSetter.setterName = 'CSS size 设置器';\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col, Radio, Button } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useState } from 'react';\nimport { InputCommonRef } from '../type';\nimport { pick } from 'lodash-es';\nimport {\n AlignHorizontalDistributeEnd,\n AlignHorizontalDistributeStart,\n AlignHorizontalSpaceAround,\n AlignHorizontalSpaceBetween,\n AlignVerticalJustifyEnd,\n AlignVerticalJustifyStart,\n AlignVerticalSpaceAround,\n AlignVerticalSpaceBetween,\n ArrowDownFromLine,\n ArrowLeftFromLine,\n ArrowRightFromLine,\n ArrowUpFromLine,\n MoveHorizontal,\n MoveVertical,\n SquareX,\n StretchHorizontal,\n StretchVertical,\n} from 'lucide-react';\nconst keyList = [\n 'width',\n 'height',\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height',\n 'flex',\n 'display',\n 'flex-direction',\n 'justify-content',\n 'align-items',\n 'flex-wrap',\n] as const;\n\ntype Value = Record<typeof keyList[number], string>;\n\nexport type DimensionInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nfunction getDefaultValue(list: string[]): any {\n return list.reduce((res, el) => {\n return {\n ...res,\n [el]: '',\n };\n }, {});\n}\n\nconst maxVal = {\n px: 2048,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nexport const DimensionInput = forwardRef<InputCommonRef, DimensionInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getDefaultValue(keyList as any));\n\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...pick(newVal, keyList),\n };\n\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) =>\n updateInnerVal(\n {\n ...getDefaultValue(keyList as any),\n ...newVal,\n },\n true\n ),\n setEmptyValue: () => {\n setInnerVal(getDefaultValue(keyList as any));\n },\n };\n },\n [updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n return props.value ?? innerVal;\n }, [props.value, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col span={24} className=\"flex\">\n <span className={styles.label}>layout:</span>\n <Radio.Group\n value={realValue.display}\n size=\"small\"\n buttonStyle=\"solid\"\n onChange={(e) => {\n updateInnerVal({\n display: e.target.value,\n });\n }}\n >\n <Radio.Button value=\"block\">Block</Radio.Button>\n <Radio.Button value=\"flex\">Flex</Radio.Button>\n <Radio.Button value=\"inline-block\">InlineB</Radio.Button>\n <Radio.Button value=\"inline\">Inline</Radio.Button>\n <Radio.Button value=\"none\">None</Radio.Button>\n </Radio.Group>\n </Col>\n </Row>\n {/* flex 布局属性 */}\n {realValue.display === 'flex' && (\n <>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>AxisD:</span>\n <div\n style={{\n width: '200px',\n marginLeft: '3px',\n }}\n >\n <Radio.Group\n size=\"small\"\n value={realValue['flex-direction']}\n buttonStyle={'outline'}\n options={[\n {\n label: <ArrowRightFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'row',\n },\n {\n label: <ArrowLeftFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'row-reverse',\n },\n {\n label: <ArrowDownFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'column',\n },\n {\n label: <ArrowUpFromLine size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'column-reverse',\n },\n {\n label: <SquareX size={14} style={{ top: '3px', position: 'relative' }} />,\n value: '',\n },\n ]}\n onChange={(e) => {\n updateInnerVal({\n 'flex-direction': e.target.value || '',\n });\n }}\n optionType=\"button\"\n />\n </div>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>MAxis:</span>\n <div\n style={{\n width: '200px',\n marginLeft: '3px',\n }}\n >\n <Radio.Group\n size=\"small\"\n value={realValue['justify-content']}\n buttonStyle={'outline'}\n options={[\n {\n label: <AlignHorizontalDistributeStart size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-start',\n },\n {\n label: <AlignHorizontalDistributeEnd size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-end',\n },\n {\n label: <StretchVertical size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'center',\n },\n {\n label: <AlignHorizontalSpaceBetween size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-between',\n },\n {\n label: <AlignHorizontalSpaceAround size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-around',\n },\n {\n label: <SquareX size={14} style={{ top: '3px', position: 'relative' }} />,\n value: '',\n },\n ]}\n onChange={(e) => {\n updateInnerVal({\n 'justify-content': e.target.value || '',\n });\n }}\n optionType=\"button\"\n />\n </div>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>CAxis:</span>\n <div\n style={{\n width: '200px',\n marginLeft: '3px',\n }}\n >\n <Radio.Group\n size=\"small\"\n value={realValue['align-items']}\n buttonStyle={'outline'}\n options={[\n {\n label: <AlignVerticalJustifyStart size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-start',\n },\n {\n label: <AlignVerticalJustifyEnd size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'flex-end',\n },\n {\n label: <StretchHorizontal size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'center',\n },\n {\n label: <AlignVerticalSpaceBetween size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-between',\n },\n {\n label: <AlignVerticalSpaceAround size={14} style={{ top: '3px', position: 'relative' }} />,\n value: 'space-around',\n },\n {\n label: <SquareX size={14} style={{ top: '3px', position: 'relative' }} />,\n value: '',\n },\n ]}\n onChange={(e) => {\n updateInnerVal({\n 'align-items': e.target.value || '',\n });\n }}\n optionType=\"button\"\n />\n </div>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col span={12} className=\"flex\">\n <span className={styles.label}>flex:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n unit={false}\n min={0}\n max={maxVal}\n value={realValue['flex']}\n onValueChange={(newVal) => {\n updateInnerVal({\n flex: newVal || '',\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </>\n )}\n {/* flex 布局属性 end */}\n\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>width:</span>\n <CSSSizeInput\n style={{\n width: '180px',\n }}\n min={0}\n max={maxVal}\n value={realValue.width}\n onValueChange={(val) => {\n updateInnerVal({\n width: val,\n });\n }}\n className={styles.inputWidth}\n size=\"small\"\n />\n <Button\n size=\"small\"\n style={{\n marginLeft: '10px',\n }}\n onClick={() => {\n updateInnerVal({\n width: '100%',\n });\n }}\n >\n <MoveHorizontal size={14} />\n </Button>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span className={styles.label}>height:</span>\n <CSSSizeInput\n min={0}\n style={{\n width: '180px',\n }}\n max={maxVal}\n value={realValue.height}\n onValueChange={(val) => {\n updateInnerVal({\n height: val,\n });\n }}\n className={styles.inputWidth}\n size=\"small\"\n />\n <Button\n size=\"small\"\n style={{\n marginLeft: '10px',\n }}\n onClick={() => {\n updateInnerVal({\n height: '100%',\n });\n }}\n >\n <MoveVertical size={14} />\n </Button>\n </Col>\n </Row>\n <div>\n <Row className={styles.row}>\n <Col span={12} className=\"flex\">\n <span className={styles.label}>minW:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n min={0}\n max={maxVal}\n value={realValue['min-width']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'min-width': newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n <Col span={12}>\n <span className={styles.label}>minH:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue['min-height']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'min-height': newVal,\n });\n }}\n className={styles.inputWidth}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col span={12} className=\"flex\">\n <span className={styles.label}>maxW:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n min={0}\n max={maxVal}\n value={realValue['max-width']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'max-width': newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n <Col span={12}>\n <span className={styles.label}>maxH:</span>\n <CSSSizeInput\n className={styles.inputWidth}\n min={0}\n max={maxVal}\n value={realValue['max-height']}\n onValueChange={(newVal) => {\n updateInnerVal({\n 'max-height': newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </div>\n </div>\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useState } from 'react';\nimport { InputCommonRef } from '../type';\nimport clsx from 'clsx';\nimport { pick } from 'lodash-es';\n\ntype Value = Record<string, string>;\n\nexport type MarginAndPaddingInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n prefix: 'margin' | 'padding';\n};\n\nconst maxVal = {\n px: 2048,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nconst inputW = '100px';\n\nconst getEmptyVal = () => ({\n left: '',\n right: '',\n top: '',\n bottom: '',\n});\n\nexport const MarginAndPaddingInput = forwardRef<InputCommonRef, MarginAndPaddingInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const keyList = useMemo(() => {\n return ['left', 'top', 'right', 'bottom'].map((el) => `${props.prefix}-${el}`);\n }, [props.prefix]);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<any>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n const outVal = Object.keys(finalVal).reduce((res, k) => {\n if (k === 'all') {\n res[`${props.prefix}`] = (finalVal as unknown as any)?.[k];\n } else {\n res[`${props.prefix}-${k}`] = (finalVal as unknown as any)?.[k];\n }\n return res;\n }, {} as any);\n if (noTrigger !== true) {\n props.onChange?.(pick(outVal, keyList));\n }\n return finalVal;\n });\n },\n [keyList, props]\n );\n\n const formatValue = useCallback(\n (obj: Record<string, any>, prefix: string) => {\n const targetKeyList = Object.keys(obj || {}).filter((k) => k.includes(prefix));\n const tempVal = targetKeyList.reduce((res, k) => {\n if (k.replace(`${props.prefix}`, '') === '') {\n res['all'] = (obj as unknown as any)?.[k];\n } else {\n res[k.replace(`${props.prefix}-`, '')] = (obj as unknown as any)?.[k];\n }\n return res;\n }, {} as any);\n return tempVal;\n },\n [props.prefix]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n ...formatValue(newVal, props.prefix),\n },\n true\n );\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n },\n true\n );\n },\n };\n },\n [formatValue, props.prefix, updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n const tempVal = formatValue(props.value || {}, props.prefix);\n if (props.value === undefined) {\n return innerVal;\n }\n return tempVal;\n }, [formatValue, props.value, props.prefix, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n span={12}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label, styles['m-p']])}>T:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue.top}\n onValueChange={(val) => {\n updateInnerVal({\n top: val,\n });\n }}\n style={{\n width: inputW,\n }}\n size=\"small\"\n />\n </Col>\n <Col span={12}>\n <span className={clsx([styles.label, styles['m-p']])}>L:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue.left}\n onValueChange={(val) => {\n updateInnerVal({\n left: val,\n });\n }}\n style={{\n width: inputW,\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <div>\n <Row className={styles.row}>\n <Col span={12}>\n <span className={clsx([styles.label, styles['m-p']])}>B:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue.bottom}\n onValueChange={(newVal) => {\n updateInnerVal({\n bottom: newVal,\n });\n }}\n style={{\n width: inputW,\n }}\n size=\"small\"\n />\n </Col>\n <Col\n span={12}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label, styles['m-p']])}>R:</span>\n <CSSSizeInput\n style={{\n width: inputW,\n }}\n min={0}\n max={maxVal}\n value={realValue.right}\n onValueChange={(newVal) => {\n updateInnerVal({\n right: newVal,\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </div>\n </div>\n );\n});\n","import { ColorPicker, ColorPickerProps, GetProp } from 'antd';\nimport { forwardRef, useImperativeHandle, useState } from 'react';\n\nexport type CustomColorPickerRef = {\n updateColor: (color: string) => void;\n};\n\ntype Color = GetProp<ColorPickerProps, 'value'>;\n\ntype CustomColorPickerProps = Omit<ColorPickerProps, 'onChange'> & {\n onChange: (color: string) => void;\n};\n\nexport const CustomColorPicker = forwardRef<CustomColorPickerRef, CustomColorPickerProps>(function CustomColorPicker(\n props,\n ref\n) {\n const [color, setColor] = useState<Color>();\n\n useImperativeHandle(ref, () => {\n return {\n updateColor: (color: string) => {\n setColor(color);\n },\n };\n });\n\n return (\n <ColorPicker\n {...props}\n value={color}\n onChange={(val) => {\n setColor(val);\n }}\n onChangeComplete={(val) => {\n props.onChange?.(val.toRgbString());\n }}\n />\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col, Radio } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { InputCommonRef } from '../type';\nimport { pick } from 'lodash-es';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\nconst FONT_CSS_KEY_LIST = ['font-size', 'color', 'text-align', 'font-weight'] as const;\ntype FontKeyType = typeof FONT_CSS_KEY_LIST[number];\ntype Value = Record<FontKeyType, string>;\n\nexport type FontInputProps = {\n initialValue?: Value;\n value?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nconst maxVal = {\n px: 100,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nconst alignOptions = [\n { label: <span className={styles.fontOption}>Left</span>, value: 'left' },\n { label: <span className={styles.fontOption}>Center</span>, value: 'center' },\n { label: <span className={styles.fontOption}>Right</span>, value: 'Right' },\n];\n\nconst fontWeightOptions = [\n { label: <span className={styles.fontOption}>Regular</span>, value: '400' },\n { label: <span className={styles.fontOption}>Medium</span>, value: '500' },\n { label: <span className={styles.fontOption}>Bold</span>, value: '700' },\n];\n\nconst getEmptyVal = () => ({\n 'font-size': '',\n color: '',\n 'text-align': '',\n 'font-weight': '',\n});\n\nexport const FontInput = forwardRef<InputCommonRef, FontInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n colorRef.current?.updateColor(newVal?.color || '');\n updateInnerVal(\n {\n ...getEmptyVal(),\n ...pick(newVal, FONT_CSS_KEY_LIST),\n },\n true\n );\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n },\n true\n );\n },\n };\n },\n [updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n return props.value ?? innerVal;\n }, [props.value, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n onChange={(color) => {\n updateInnerVal({\n color: color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Size:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={realValue['font-size']}\n onValueChange={(val) => {\n updateInnerVal({\n 'font-size': val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <span className={clsx([styles.label])}>Align:</span>\n <Radio.Group\n options={alignOptions}\n onChange={({ target: { value: newVal } }) => {\n updateInnerVal({\n 'text-align': newVal,\n });\n }}\n value={realValue['text-align']}\n />\n </Row>\n <Row className={styles.row}>\n <span className={clsx([styles.label])}>Weight:</span>\n <Radio.Group\n options={fontWeightOptions}\n onChange={({ target: { value: newVal } }) => {\n updateInnerVal({\n 'font-weight': newVal,\n });\n }}\n value={realValue['font-weight']}\n />\n </Row>\n </div>\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col, Radio } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { InputCommonRef } from '../type';\nimport { CloseCircleOutlined } from '@ant-design/icons';\nimport { pick } from 'lodash-es';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\nconst CSS_BORDER_KEY_LIST = ['border', 'border-radius'] as const;\n\ntype CSSBorderKeyType = typeof CSS_BORDER_KEY_LIST[number];\ntype Value = Record<CSSBorderKeyType, string>;\n\nconst maxVal = {\n px: 100,\n vw: 100,\n vh: 100,\n rem: 100,\n};\n\nconst getEmptyVal = () => ({\n border: '',\n 'border-radius': '',\n});\n\nexport type BorderInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nexport const BorderInput = forwardRef<InputCommonRef, BorderInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n const emptyVal = getEmptyVal();\n if (Object.keys(newVal).length) {\n updateInnerVal(\n {\n ...emptyVal,\n ...pick(newVal, CSS_BORDER_KEY_LIST),\n },\n true\n );\n } else {\n updateInnerVal(emptyVal, true);\n }\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n },\n true\n );\n },\n };\n },\n [updateInnerVal]\n );\n\n const currentEditVal = useMemo(() => {\n const tempVal = innerVal['border'] || '';\n const list = tempVal.split(' ');\n const tmpVal = {\n size: list[0] || '',\n type: list[1] || '',\n color: tempVal.replace(' ', '').replace(list[0], '').replace(list[1], ''),\n };\n colorRef.current?.updateColor(tmpVal.color);\n\n return tmpVal;\n }, [innerVal]);\n\n const updateSingleBorderVal = (newBorderVal: typeof currentEditVal) => {\n updateInnerVal({\n border: `${newBorderVal.size || '0px'} ${newBorderVal.type || 'none'} ${\n newBorderVal.color || 'transparent'\n }`.trim(),\n });\n };\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n style={{\n position: 'relative',\n }}\n span={24}\n >\n <CloseCircleOutlined\n style={{\n position: 'absolute',\n right: 0,\n top: '5px',\n color: '#4e4e4e',\n cursor: 'pointer',\n }}\n onClick={() => {\n updateInnerVal({\n border: undefined,\n });\n }}\n />\n <span className={styles.label}>Size:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={currentEditVal.size}\n style={{\n width: '100px',\n }}\n unitList={['px']}\n onValueChange={(val) => {\n updateSingleBorderVal({\n ...currentEditVal,\n size: val || '',\n });\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n value={currentEditVal.color || ''}\n onChange={(color) => {\n updateSingleBorderVal({\n ...currentEditVal,\n color: color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Type:</span>\n <Radio.Group\n value={currentEditVal.type}\n size=\"small\"\n onChange={(e) => {\n updateSingleBorderVal({\n ...currentEditVal,\n type: e.target.value || '',\n });\n }}\n >\n <Radio.Button value=\"solid\">Solid</Radio.Button>\n <Radio.Button value=\"dashed\">Dashed</Radio.Button>\n <Radio.Button value=\"dotted\">Dotted</Radio.Button>\n <Radio.Button value=\"none\">None</Radio.Button>\n </Radio.Group>\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Radius:</span>\n <CSSSizeInput\n min={0}\n max={maxVal}\n value={innerVal['border-radius']}\n onValueChange={(val) => {\n updateInnerVal({\n 'border-radius': val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n </div>\n );\n});\n","import { Row, Col, Radio, Input } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { InputCommonRef } from '../type';\nimport { pick } from 'lodash-es';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\nconst CSS_BACKGROUND_KEY_LIST = [\n 'background-color',\n 'background-image',\n 'background-repeat',\n 'background-size',\n] as const;\n\ntype CSSBackgroundKeyType = typeof CSS_BACKGROUND_KEY_LIST[number];\n\ntype Value = Record<CSSBackgroundKeyType, string>;\n\nexport type BackgroundInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nconst getEmptyVal = () => {\n return {\n 'background-color': '',\n 'background-image': '',\n 'background-size': '',\n 'background-repeat': '',\n };\n};\n\nexport const BackgroundInput = forwardRef<InputCommonRef, BackgroundInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<Value>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n const finalVal = {\n ...oldVal,\n ...newVal,\n };\n colorRef.current?.updateColor(finalVal['background-color']);\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n const emptyVal = getEmptyVal();\n if (Object.keys(newVal).length) {\n updateInnerVal(\n {\n ...emptyVal,\n ...pick(newVal, CSS_BACKGROUND_KEY_LIST),\n },\n true\n );\n } else {\n updateInnerVal(emptyVal, true);\n }\n },\n setEmptyValue: () => {\n const emptyVal = getEmptyVal();\n updateInnerVal(emptyVal, true);\n },\n };\n },\n [updateInnerVal]\n );\n\n const realValue = useMemo(() => {\n return props.value ?? innerVal;\n }, [props.value, innerVal]);\n\n return (\n <div>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n value={realValue['background-color'] || ''}\n onChange={(color) => {\n updateInnerVal({\n 'background-color': color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n }}\n >\n <span className={styles.label}>Image:</span>\n <Input\n style={{ flex: 1 }}\n size=\"small\"\n value={/url\\(['|\"|*]?(.+?)['|\"|*]?\\)/.exec(realValue['background-image'])?.[1] || ''}\n onChange={(e) => {\n console.log(`url(\"${e.target.value}\")`);\n updateInnerVal({\n 'background-image': `url(\"${e.target.value}\")`,\n });\n }}\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <span className={styles.label}>Size:</span>\n <Radio.Group\n size=\"small\"\n defaultValue=\"a\"\n buttonStyle=\"solid\"\n value={realValue['background-size']}\n onChange={(e) => {\n updateInnerVal({ 'background-size': e.target.value });\n }}\n >\n <Radio.Button value=\"contain\">Contain</Radio.Button>\n <Radio.Button value=\"cover\">Cover</Radio.Button>\n <Radio.Button value=\"auto\">Auto</Radio.Button>\n </Radio.Group>\n </Row>\n <Row className={styles.row}>\n <span className={styles.label}>Repeat:</span>\n <Radio.Group\n size=\"small\"\n buttonStyle=\"solid\"\n value={realValue['background-repeat']}\n onChange={(e) => {\n updateInnerVal({ 'background-repeat': e.target.value });\n }}\n >\n <Radio.Button value=\"repeat\">Repeat</Radio.Button>\n <Radio.Button value=\"no-repeat\">NoRepeat</Radio.Button>\n </Radio.Group>\n </Row>\n </div>\n );\n});\n","import { CSSSizeInput } from '@/component/CSSSizeInput';\nimport { Row, Col } from 'antd';\nimport styles from '../style.module.scss';\nimport { forwardRef, useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PRESET_COLORS } from '@/config/colorPickerColorList';\nimport clsx from 'clsx';\nimport { BoxShadowObjType, parseBoxShadowString } from '@/utils';\nimport { InputCommonRef } from '../type';\nimport { CustomColorPicker, CustomColorPickerRef } from '@/component/CustomColorPicker';\n\ntype Value = Record<'box-shadow', string>;\n\nconst getEmptyVal = () => ({\n 'box-shadow': '',\n});\n\nexport type ShadowInputProps = {\n value?: Value;\n initialValue?: Value;\n onChange?: (newVal: Value) => void;\n};\n\nexport const ShadowInput = forwardRef<InputCommonRef, ShadowInputProps>((props, ref) => {\n const [innerVal, setInnerVal] = useState<Value>(props.initialValue ?? getEmptyVal());\n const colorRef = useRef<CustomColorPickerRef>(null);\n\n const realValue = useMemo(() => {\n const tempVal = props.value?.['box-shadow'] ?? innerVal['box-shadow'];\n const obj = parseBoxShadowString(tempVal || '')[0] || {};\n colorRef.current?.updateColor(obj.color || '');\n return obj;\n }, [props.value, innerVal]);\n\n const updateInnerVal = useCallback(\n (newVal: Partial<BoxShadowObjType>, noTrigger?: boolean) => {\n setInnerVal((oldVal) => {\n console.log('set val', oldVal, newVal);\n const tempVal = props.value?.['box-shadow'];\n const obj = parseBoxShadowString(tempVal || '')[0] || {};\n const newUpdateVal = {\n ...obj,\n ...newVal,\n };\n const boxShadowStr = `${newUpdateVal.offsetX || '0'} ${newUpdateVal.offsetY || '0'} ${\n newUpdateVal.blur || '0'\n } ${newUpdateVal.spread || '0'} ${newUpdateVal.color || 'transparent'}`;\n const finalVal: Value = {\n ...oldVal,\n 'box-shadow': boxShadowStr,\n };\n if (noTrigger !== true) {\n props.onChange?.(finalVal);\n }\n return finalVal;\n });\n },\n [props]\n );\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (newVal) => {\n updateInnerVal(\n {\n ...getEmptyVal(),\n ...parseBoxShadowString(newVal['box-shadow'] || '')[0],\n },\n true\n );\n },\n setEmptyValue: () => {\n updateInnerVal(\n {\n ...(getEmptyVal() as any),\n },\n true\n );\n },\n };\n },\n [updateInnerVal]\n );\n\n return (\n <div>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>OffsetX:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['offsetX']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n offsetX: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>OffsetY:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['offsetY']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n\n offsetY: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Blur:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['blur']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n\n blur: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col>\n <span className={styles.label}>Spread:</span>\n <CSSSizeInput\n min={-40}\n max={40}\n unitList={['px']}\n value={realValue['spread']}\n onValueChange={(val) => {\n updateInnerVal({\n ...realValue,\n\n spread: val,\n });\n }}\n style={{\n width: '158px',\n }}\n size=\"small\"\n />\n </Col>\n </Row>\n <Row className={styles.row}>\n <Col\n span={24}\n style={{\n display: 'flex',\n }}\n >\n <span className={clsx([styles.label])}>Color:</span>\n <CustomColorPicker\n ref={colorRef}\n showText={true}\n size=\"small\"\n onChange={(color) => {\n updateInnerVal({\n ...realValue,\n\n color: color,\n });\n }}\n presets={DEFAULT_PRESET_COLORS}\n />\n </Col>\n </Row>\n </div>\n );\n});\n","import * as csstree from 'css-tree';\n\nexport function parseCssToObject(css: string): Record<string, Record<string, string>> {\n const result: Record<string, Record<string, string>> = {};\n\n const ast = csstree.parse(css, {\n context: 'stylesheet',\n });\n\n csstree.walk(ast, {\n visit: 'Rule',\n enter(node) {\n if (node.type === 'Rule' && node.prelude.type === 'SelectorList') {\n const selector = csstree.generate(node.prelude);\n\n const declarations: Record<string, string> = {};\n if (node.block.type === 'Block') {\n for (const declaration of node.block.children.toArray()) {\n if (declaration.type === 'Declaration') {\n const prop = declaration.property;\n const value = csstree.generate(declaration.value);\n declarations[prop] = value;\n }\n }\n }\n\n result[selector] = declarations;\n }\n },\n });\n\n return result;\n}\n","import { forwardRef, useImperativeHandle, useRef } from 'react';\nimport { MonacoEditor, MonacoEditorInstance } from '../MonacoEditor';\nimport styles from './style.module.scss';\nimport { parseCssToObject } from './helper';\nimport { InputCommonRef } from '../StylePanel/type';\nimport { isEqual } from 'lodash-es';\n\nconst getCssCodeFromStyleObj = (styleObj: Record<any, any> = {}) => {\n let res = `.node {\\n`;\n Object.keys(styleObj).forEach((key) => {\n res += ` ${key}: ${styleObj[key]};\\n`;\n });\n res += '}';\n\n return res;\n};\n\ntype CSSCodeEditorProps = {\n onValueChange?: (newVal: Record<any, any>) => void;\n};\n\nexport type CSSCodeEditorRef = InputCommonRef;\n\nexport const CSSCodeEditor = forwardRef<CSSCodeEditorRef, CSSCodeEditorProps>((props, ref) => {\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n const valueRef = useRef({});\n useImperativeHandle(\n ref,\n () => {\n return {\n setEmptyValue: () => {\n valueRef.current = {};\n editorRef.current?.setValue(getCssCodeFromStyleObj({}));\n },\n setValue: (val) => {\n if (isEqual(val, valueRef.current)) {\n return;\n }\n valueRef.current = val;\n editorRef.current?.setValue(getCssCodeFromStyleObj(val));\n },\n };\n },\n []\n );\n\n return (\n <div\n className={styles.cssCodeEditor}\n style={{\n paddingTop: '10px',\n width: '100%',\n height: '150px',\n border: '1px solid rgba(0,0,0,0.2)',\n position: 'relative',\n borderRadius: '4px',\n }}\n >\n <MonacoEditor\n language=\"css\"\n onDidMount={(editor) => {\n editorRef.current = editor;\n editorRef.current?.setValue(getCssCodeFromStyleObj(valueRef.current || {}));\n }}\n onChange={(newVal) => {\n const styleObj = parseCssToObject(newVal || '');\n const newValObj = styleObj['.node'] || {};\n valueRef.current = newValObj;\n props.onValueChange?.(newValObj);\n }}\n options={{\n tabSize: 2,\n minimap: { enabled: false },\n folding: false,\n lineNumbers: 'off',\n hover: {\n // enabled: false, // ✅ 禁用 hoverWidget\n },\n }}\n />\n </div>\n );\n});\n","import { Button, Card, Collapse, CollapseProps, ConfigProvider } from 'antd';\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport styles from './style.module.scss';\nimport { DimensionInput } from './DimensionInput';\nimport { MarginAndPaddingInput } from './MarginAndPaddingInput';\nimport { FontInput } from './FontInput';\nimport { BorderInput } from './BorderInput';\nimport { BackgroundInput } from './BackgroundInput';\nimport { ShadowInput } from './ShadowInput';\nimport { InputCommonRef } from './type';\nimport { waitReactUpdate } from '@/utils';\nimport { isNil, omitBy } from 'lodash-es';\nimport { CSSCodeEditor, CSSCodeEditorRef } from '../CSSCodeEditor';\nimport { Component, SquareCode } from 'lucide-react';\n\nexport type StyleUIPanelProps = {\n initialVal?: Record<string, string>;\n value?: Record<string, string>;\n onValueChange?: (newVal: Record<string, string>) => void;\n noCard?: boolean;\n};\n\nexport type StyleUIPanelRef = InputCommonRef;\n\nexport const StyleUIPanel = forwardRef<StyleUIPanelRef, StyleUIPanelProps>(\n ({ value, initialVal, onValueChange, noCard }, ref) => {\n const [mode, setMode] = useState<'VISUAL' | 'CODE'>(\n (localStorage.getItem('CHAMN_STYLE_EDITOR_MODE') as any) || 'VISUAL'\n );\n const dimensionRef = useRef<InputCommonRef>(null);\n const marinRef = useRef<InputCommonRef>(null);\n const paddingRef = useRef<InputCommonRef>(null);\n const borderRef = useRef<InputCommonRef>(null);\n const backgroundRef = useRef<InputCommonRef>(null);\n const shadowRef = useRef<InputCommonRef>(null);\n const fontRef = useRef<InputCommonRef>(null);\n const cssCodeEditorRef = useRef<CSSCodeEditorRef>(null);\n\n useEffect(() => {\n localStorage.setItem('CHAMN_STYLE_EDITOR_MODE', mode);\n }, [mode]);\n\n const inputRefs = useMemo(() => {\n return [dimensionRef, marinRef, paddingRef, borderRef, backgroundRef, shadowRef, fontRef];\n }, [dimensionRef, marinRef, paddingRef, borderRef, backgroundRef, shadowRef, fontRef]);\n\n const tempValueRef = useRef<any>(null);\n\n const updateInnerVal = useCallback(\n (newVal: any) => {\n if (!newVal) {\n return;\n }\n // 外部赋值\n tempValueRef.current = newVal;\n if (mode === 'CODE') {\n cssCodeEditorRef.current?.setValue(newVal);\n return;\n }\n\n inputRefs.forEach((ref) => {\n setTimeout(() => {\n ref.current?.setValue(newVal);\n });\n });\n },\n [inputRefs, mode]\n );\n\n const onStyleItemChange = useCallback(\n (val: any) => {\n const newVal = {\n ...(tempValueRef.current || {}),\n ...val,\n };\n tempValueRef.current = newVal;\n\n const finalValue = omitBy(newVal, (value) => isNil(value) || value === '');\n onValueChange?.(finalValue);\n },\n [onValueChange]\n );\n\n useEffect(() => {\n updateInnerVal(tempValueRef.current);\n }, [mode, updateInnerVal]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: updateInnerVal,\n setEmptyValue: () => updateInnerVal({}),\n };\n },\n [updateInnerVal]\n );\n\n const items: CollapseProps['items'] = useMemo(() => {\n return [\n {\n key: 'dimension',\n label: 'Dimension',\n children: (\n <DimensionInput\n ref={dimensionRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'margin',\n label: 'Margin',\n children: (\n <MarginAndPaddingInput\n prefix=\"margin\"\n ref={marinRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'padding',\n label: 'Padding',\n children: (\n <MarginAndPaddingInput\n ref={paddingRef}\n initialValue={initialVal as any}\n prefix=\"padding\"\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n\n {\n key: 'background',\n label: 'Background',\n children: (\n <BackgroundInput\n ref={backgroundRef}\n value={value as any}\n initialValue={initialVal as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'font',\n label: 'Font',\n children: (\n <FontInput\n ref={fontRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n {\n key: 'border',\n label: 'Border',\n children: <BorderInput ref={borderRef} initialValue={initialVal as any} onChange={onStyleItemChange} />,\n },\n {\n key: 'shadow',\n label: 'Shadow',\n children: (\n <ShadowInput\n ref={shadowRef}\n initialValue={initialVal as any}\n value={value as any}\n onChange={onStyleItemChange}\n />\n ),\n },\n ];\n }, [initialVal, onStyleItemChange, value]);\n\n const coreEditView = (\n <>\n {mode === 'CODE' && (\n <CSSCodeEditor\n onValueChange={(newVal) => {\n tempValueRef.current = newVal;\n onValueChange?.(newVal);\n }}\n ref={cssCodeEditorRef}\n />\n )}\n\n {mode !== 'CODE' && (\n <Collapse\n className={styles.styleUIPanel}\n items={items}\n bordered={false}\n defaultActiveKey={['dimension', 'background', 'padding', 'margin']}\n onChange={async () => {\n await waitReactUpdate();\n // 每次展开需要重新同步值\n updateInnerVal(tempValueRef.current);\n }}\n />\n )}\n </>\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 2,\n },\n }}\n >\n {noCard && coreEditView}\n {!noCard && (\n <Card\n size=\"small\"\n type=\"inner\"\n title={<span style={{ fontSize: '12px' }}>Style</span>}\n extra={\n <Button\n type=\"text\"\n size=\"small\"\n onClick={() => {\n setMode((oldVal) => {\n if (oldVal === 'CODE') {\n return 'VISUAL';\n } else {\n return 'CODE';\n }\n });\n }}\n >\n {mode === 'VISUAL' && <SquareCode size={16} />}\n {mode !== 'VISUAL' && <Component size={16} />}\n </Button>\n }\n style={{\n marginBottom: '10px',\n borderRadius: '8px',\n }}\n >\n {coreEditView}\n </Card>\n )}\n </ConfigProvider>\n );\n }\n);\n","import { CSSSizeInputProps } from '@/component/CSSSizeInput';\nimport { CSetter, CSetterProps } from '../type';\nimport { StyleUIPanel, StyleUIPanelRef } from '@/component/StylePanel';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { formatStyleProperty, styleArr2Obj, styleObjToArr } from '@/utils';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { isEqual } from 'lodash-es';\n\nexport const FastLayoutSetter: CSetter<CSSSizeInputProps> = ({\n value,\n setterContext,\n initialValue,\n ...resetProps\n}: CSetterProps<CSSSizeInputProps & { initialValue?: string }>) => {\n const cssUIRef = useRef<StyleUIPanelRef>(null);\n const node = setterContext.nodeModel;\n const lastNode = useRef<CNode | CRootNode>();\n\n const initialValueInner = useMemo(() => {\n const newStyle = node.value.style || [];\n const { normalProperty } = formatStyleProperty(newStyle);\n return styleArr2Obj(normalProperty);\n }, [node.value.style]);\n\n const updatePanelValue = useCallback(() => {\n lastNode.current = node;\n const newStyle = node.value.style || [];\n const { normalProperty } = formatStyleProperty(newStyle);\n cssUIRef.current?.setValue(styleArr2Obj(normalProperty) || {});\n }, [node]);\n\n useEffect(() => {\n updatePanelValue();\n node.emitter.on('onNodeChange', updatePanelValue);\n node.emitter.on('onReloadPage', updatePanelValue);\n return () => {\n node.emitter.off('onNodeChange', updatePanelValue);\n node.emitter.off('onReloadPage', updatePanelValue);\n };\n }, [node.emitter, node.id, updatePanelValue]);\n\n return (\n <StyleUIPanel\n {...resetProps}\n initialVal={initialValueInner}\n ref={cssUIRef}\n onValueChange={(newNormaCss) => {\n const newStyle = styleObjToArr(newNormaCss);\n const { expressionProperty } = formatStyleProperty(node.value.style || []);\n const newStyleList = [...newStyle, ...expressionProperty];\n if (isEqual(node.value.style, newStyleList)) {\n return;\n }\n node.value.style = newStyleList;\n node.updateValue();\n }}\n />\n );\n};\n","import { ConfigProvider, Radio } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CheckboxGroupProps } from 'antd/es/checkbox';\nimport { useEffect, useMemo } from 'react';\n\nconst emptyValMap = {\n _null_: null,\n _undefined_: undefined,\n};\n\nexport const EmptyValueSetter: CSetter<{ emptyValue?: any }> = ({\n onValueChange,\n setterContext,\n initialValue,\n emptyValue,\n hiddenDefaultOption,\n ...props\n}: CSetterProps<{ emptyValue?: string; hiddenDefaultOption?: boolean }>) => {\n const options = useMemo<CheckboxGroupProps<string>['options']>(() => {\n const tempValue = [\n { label: 'Undefined', value: '_undefined_' },\n { label: 'Null', value: '_null_' },\n ];\n if (emptyValue) {\n if (hiddenDefaultOption) {\n return [{ label: emptyValue, value: emptyValue }];\n } else {\n tempValue.push({ label: emptyValue, value: emptyValue });\n }\n }\n\n return tempValue;\n }, [emptyValue, hiddenDefaultOption]);\n\n const innerValue = useMemo(() => {\n const tempValue = initialValue || props.value;\n if (tempValue === undefined) {\n return '_undefined_';\n }\n\n if (tempValue === null) {\n return '_null_';\n }\n\n return tempValue || '_undefined_';\n }, [initialValue, props.value]);\n\n // 切换初始化时,直接强制重置为 undefined\n useEffect(() => {\n onValueChange?.(emptyValue ?? undefined);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 6,\n },\n }}\n >\n <Radio.Group\n block\n options={options}\n defaultValue={initialValue}\n optionType=\"button\"\n size=\"small\"\n {...props}\n value={innerValue}\n onChange={(e) => {\n let newVal = e.target.value;\n if (['_null_', '_undefined_'].includes(newVal)) {\n newVal = emptyValMap[newVal as keyof typeof emptyValMap];\n }\n onValueChange?.(newVal);\n }}\n />\n </ConfigProvider>\n );\n};\n\nEmptyValueSetter.setterName = '空值设置器';\n","import { CSetter } from './type';\nimport { StringSetter } from './StringSetter';\nimport { NumberSetter } from './NumberSetter';\nimport { ArraySetter } from './ArraySetter';\nimport { ShapeSetter } from './ShapeSetter';\nimport { ExpressionSetter } from './ExpressionSetter';\nimport { BooleanSetter } from './BooleanSetter';\nimport { SelectSetter } from './SelectSetter';\nimport { JSONSetter } from './JSONSetter';\nimport { FunctionSetter } from './FunctionSetter';\nimport { TextAreaSetter } from './TextAreaSetter';\nimport { CSSValueSetter } from './CSSValueSetter';\nimport { ColorSetter } from './ColorSetter';\nimport { AntDColorSetter } from './AntDColorSetter';\nimport { SliderSetter } from './SliderSetter';\nimport { RadioGroupSetter } from './RadioGroupSetter';\nimport { CSSSizeSetter } from './CSSSizeSetter';\nimport { FastLayoutSetter } from './FastLayoutSetter';\nimport { EmptyValueSetter } from './EmptyValueSetter';\n\nexport const BUILD_IN_SETTER_MAP = {\n FastLayoutSetter,\n StringSetter,\n ArraySetter,\n ShapeSetter,\n NumberSetter,\n ExpressionSetter,\n BooleanSetter,\n SelectSetter,\n JSONSetter,\n FunctionSetter,\n TextAreaSetter,\n CSSValueSetter,\n ColorSetter,\n SliderSetter,\n AntDColorSetter,\n RadioGroupSetter,\n CSSSizeSetter,\n EmptyValueSetter,\n} as Record<string, CSetter>;\n\nexport default BUILD_IN_SETTER_MAP;\n\nexport * from './type';\n","import React, { isValidElement, ReactNode, useEffect, useState } from 'react';\nimport styles from './style.module.scss';\nimport { Alert, Popover, Tooltip } from 'antd';\nimport { CFormContext } from '../context';\nimport clsx from 'clsx';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\n\nexport type CFiledChildProps = {\n onValueChange?: (val: any) => void;\n initialValue?: any;\n value?: any;\n};\n\nexport type CFieldProps = {\n children: React.ReactNode;\n label?: string;\n labelWidth?: string;\n labelAlign?: 'start' | 'center' | 'end';\n tips?: ReactNode | (() => ReactNode);\n name: string;\n condition?: (formState: Record<string, any>) => boolean;\n onConditionValueChange?: (val: boolean) => void;\n /** 不做任何包裹, 不会渲染 switchSetter */\n noStyle?: boolean;\n /** 隐藏 label, 会渲染 switchSetter */\n hiddenLabel?: boolean;\n valueChangeEventName?: string;\n formatEventValue?: (val: any) => any;\n rules?: { validator?: (value: any) => Promise<boolean | undefined>; required?: boolean; msg?: string }[];\n};\n\nexport const CField = (props: CFieldProps) => {\n const { children, label, tips, name, hiddenLabel } = props;\n const [errorInfo, setErrorInfo] = useState({\n isPass: true,\n errorMsg: '',\n });\n let labelView: ReactNode = label;\n const { formState, updateContext, updateConditionConfig } = React.useContext(CFormContext);\n useEffect(() => {\n if (props.condition) {\n updateConditionConfig(name, props.condition);\n }\n }, [name, props.condition, updateConditionConfig]);\n\n useEffect(() => {\n const condition = props.condition ?? (() => true);\n const canRender = condition(formState);\n props.onConditionValueChange?.(canRender);\n }, [formState, props]);\n\n if (tips) {\n let newTip: any = tips;\n if (typeof tips === 'function') {\n newTip = tips();\n }\n labelView = (\n <Tooltip\n title={<span style={{ color: 'rgba(255,255,255,0.9', fontSize: '12px' }}>{newTip}</span>}\n color=\"rgba(50,50,50,0.8)\"\n >\n <span className={styles.tipsLabel}>{label}</span>\n </Tooltip>\n );\n }\n let newChildren = children;\n\n if (isValidElement(children)) {\n const eventName = props.valueChangeEventName ?? 'onValueChange';\n const extraProps: any = {\n [eventName]: async (val: any) => {\n let tempVal = val;\n if (props.formatEventValue) {\n tempVal = props.formatEventValue(val);\n }\n\n // 先检查数据是否合法\n const rules = props.rules || [];\n const checkResult = await checkValue(props.name, tempVal, rules);\n if (!checkResult.isPass) {\n setErrorInfo(checkResult);\n } else {\n setErrorInfo({\n isPass: true,\n errorMsg: '',\n });\n }\n updateContext(\n {\n ...formState,\n [name]: tempVal,\n },\n [name]\n );\n },\n };\n\n extraProps.value = (formState as any)[name];\n newChildren = React.cloneElement(children, extraProps);\n }\n const condition = props.condition ?? (() => true);\n const canRender = condition(formState);\n if (!canRender) {\n return null;\n }\n if (props.noStyle) {\n return <>{newChildren}</>;\n }\n\n return (\n <div\n className={clsx([styles.fieldBox, !errorInfo.isPass && styles.error])}\n style={{\n alignItems: props.labelAlign ?? 'center',\n }}\n >\n {hiddenLabel !== true && (\n <div\n className={styles.label}\n style={{\n width: props.labelWidth ?? '60px',\n }}\n >\n {labelView}\n </div>\n )}\n <div className={styles.content}>{newChildren}</div>\n {!errorInfo.isPass && (\n <Popover content={<Alert message={errorInfo.errorMsg} type=\"error\" />}>\n <QuestionCircleOutlined className={styles.errorTipIcon} />\n </Popover>\n )}\n </div>\n );\n};\n\nconst checkValue = async (key: string, value: any, rules: CFieldProps['rules'] = []) => {\n let pass = true;\n let errorMsg = '';\n\n for (let i = 0; i < rules.length; i++) {\n if (rules[i].required && !value) {\n pass = false;\n errorMsg = `${key} is required.`;\n break;\n }\n if (rules[i].validator) {\n try {\n const isPass = await rules[i].validator?.(value);\n if (!isPass) {\n pass = false;\n errorMsg = rules[i]?.msg || `${key} is illegal `;\n break;\n }\n } catch (e) {\n pass = false;\n errorMsg = `${String(e)}`;\n break;\n }\n }\n }\n\n return {\n isPass: pass,\n errorMsg,\n };\n};\n","import React, { Ref } from 'react';\nimport { CustomSchemaFormInstance } from './index';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CForm } from './components/Form';\nimport { CFormContextData } from './components/Form/context';\n\nexport type ContextState = Record<string, any>;\n\nexport type CCustomSchemaFormContextData = {\n onSetterChange: (keyPaths: string[], setterName: string) => void;\n /** 存储 field 默认的 setter 类型*/\n defaultSetterConfig: Record<string, { name: string; setter: string }>;\n /** schema 中的全局 setter map 配置*/\n customSetterMap: CFormContextData['customSetterMap'];\n formRef?: Ref<CustomSchemaFormInstance | CForm>;\n pluginCtx?: CPluginCtx;\n /** 当前编辑节点的 id */\n nodeId?: string;\n};\n\nexport const CCustomSchemaFormContext = React.createContext<CCustomSchemaFormContextData>({\n defaultSetterConfig: {},\n onSetterChange: () => {},\n customSetterMap: {},\n});\n","import React, { useContext, useEffect } from 'react';\nimport { SetterObjType } from '@chamn/model';\nimport InnerSetters from '../Setters/index';\nimport { CFieldProps } from '../Form/Field';\nimport { CCustomSchemaFormContext } from '../../context';\nimport { CFormContext } from '../Form/context';\nimport { CSetter, CSetterProps } from '../Setters/type';\nimport { getDefaultSetterByValue } from '../../utils';\n\nexport type SetterSwitcherProps = {\n // 支持的 setter 列表\n setters: SetterObjType[];\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap?: Record<string, CSetter>;\n keyPaths: string[];\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n style?: React.CSSProperties;\n /** 是否实用 CFile 包裹 */\n useField?: boolean;\n} & Omit<CFieldProps, 'children'>;\n\n/** 用于渲染切换设置器 */\nexport const SetterSwitcherCore = ({\n setters,\n keyPaths,\n currentSetter,\n setCurrentSetter,\n customSetterMap: customSetterMapProp,\n ...props\n}: Pick<SetterSwitcherProps, 'setters' | 'keyPaths'> & {\n value?: any;\n setterContext?: Partial<CSetterProps['setterContext']>;\n currentSetter: SetterObjType;\n customSetterMap?: any;\n setCurrentSetter: (setter: SetterObjType) => void;\n}) => {\n const { customSetterMap } = useContext(CFormContext);\n const { defaultSetterConfig } = useContext(CCustomSchemaFormContext);\n const allSetterMap = {\n ...InnerSetters,\n ...(customSetterMapProp || {}),\n ...customSetterMap,\n };\n\n useEffect(() => {\n const currentSetterName = defaultSetterConfig[keyPaths.join('.')]?.setter || '';\n const devConfigSetter = setters.find((el) => el.componentName === currentSetterName);\n const st = devConfigSetter || getDefaultSetterByValue(props.value, setters) || setters[0];\n setCurrentSetter(st);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let CurrentSetterComp = null;\n if (currentSetter?.componentName) {\n CurrentSetterComp = allSetterMap[currentSetter?.componentName] || currentSetter.component;\n }\n if (!CurrentSetterComp) {\n CurrentSetterComp = function EmptySetter() {\n return (\n <div\n style={{\n backgroundColor: 'whitesmoke',\n margin: '5px 0',\n padding: '5px',\n borderRadius: '2px',\n color: 'gray',\n }}\n >{`${currentSetter?.componentName} is not found.`}</div>\n );\n };\n }\n\n return <CurrentSetterComp {...props} />;\n};\n","import React, { useContext, useMemo, useState } from 'react';\nimport { SetterObjType, SetterTypeEnum } from '@chamn/model';\nimport InnerSetters from '../Setters/index';\nimport { CField, CFieldProps } from '../Form/Field';\nimport { Collapse, Dropdown, MenuProps } from 'antd';\nimport { SwapOutlined } from '@ant-design/icons';\nimport styles from './style.module.scss';\nimport { CCustomSchemaFormContext } from '../../context';\nimport { CFormContext } from '../Form/context';\nimport { CSetter } from '../Setters/type';\nimport { SetterSwitcherCore } from './core';\n\nexport type SetterSwitcherProps = {\n // 支持的 setter 列表\n setters: SetterObjType[];\n // 自定义 setter 的具体实现,可以覆盖默认 setter\n customSetterMap?: Record<string, CSetter>;\n keyPaths: string[];\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n style?: React.CSSProperties;\n /** 是否实用 CFile 包裹 */\n useField?: boolean;\n} & Omit<CFieldProps, 'children'>;\n\nexport const SetterSwitcher = ({\n setters: outerSetter,\n keyPaths,\n condition,\n useField = true,\n ...props\n}: SetterSwitcherProps) => {\n const [visible, setVisible] = useState(true);\n const { customSetterMap } = useContext(CFormContext);\n const { onSetterChange, defaultSetterConfig, formRef, pluginCtx, nodeId } = useContext(CCustomSchemaFormContext);\n const allSetterMap = {\n ...InnerSetters,\n ...customSetterMap,\n };\n // 统一添加一些内置的 setter\n const setters = useMemo(() => {\n return [\n ...outerSetter,\n {\n componentName: SetterTypeEnum.EMPTY_VALUE_SETTER,\n },\n ];\n }, [outerSetter]);\n const [currentSetter, setCurrentSetter] = useState<SetterObjType>(() => {\n const currentSetterName = defaultSetterConfig[keyPaths.join('.')]?.setter || '';\n const devConfigSetter = setters.find((el) => el.componentName === currentSetterName);\n return devConfigSetter || setters[0];\n });\n\n const menuItems = setters.map((setter) => {\n const setterName = setter?.componentName || '';\n const setterRuntime = allSetterMap[setterName];\n return {\n key: setter.componentName,\n label: setterRuntime?.setterName || setter.componentName,\n };\n });\n\n const switcher = useMemo(() => {\n const onChooseSetter: MenuProps['onClick'] = ({ key }) => {\n const targetSetter = setters.find((setter) => setter.componentName === key);\n if (targetSetter) {\n setCurrentSetter(targetSetter);\n onSetterChange?.(keyPaths, targetSetter.componentName);\n }\n };\n if (menuItems.length === 1) {\n return null;\n }\n\n return (\n <div\n className={styles.switchBtn}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Dropdown\n trigger={['click']}\n menu={{\n selectable: true,\n items: menuItems,\n onClick: onChooseSetter,\n defaultSelectedKeys: [currentSetter?.componentName || ''],\n }}\n >\n <SwapOutlined />\n </Dropdown>\n </div>\n );\n }, [menuItems, currentSetter?.componentName, setters, onSetterChange, keyPaths]);\n\n const setterProps = useMemo(() => {\n let newProps = {\n ...(currentSetter?.props || {}),\n initialValue: currentSetter?.initialValue,\n };\n const target = setters.find((el) => el.componentName === currentSetter?.componentName);\n if (target) {\n newProps = {\n ...newProps,\n ...target.props,\n };\n }\n return newProps;\n }, [setters, currentSetter]);\n\n const [collapseHeaderExt, setCollapseHeaderExt] = useState<any>([]);\n\n let bodyView: any = null;\n const hiddenLabel = currentSetter?.hiddenLabel === true;\n\n const labelWidth = currentSetter?.labelWidth;\n const labelAlign = currentSetter?.labelAlign || 'center';\n const collapse = (currentSetter?.props as any)?.collapse;\n const specialSetter = ['ArraySetter', 'ShapeSetter'].includes(currentSetter?.componentName);\n const setterContext = useMemo(\n () => ({\n formRef,\n pluginCtx,\n keyPaths: [...keyPaths],\n label: props.label,\n setCollapseHeaderExt: specialSetter ? setCollapseHeaderExt : undefined,\n nodeModel: pluginCtx?.pageModel.getNode(nodeId) as any,\n }),\n [formRef, keyPaths, nodeId, pluginCtx, props.label, specialSetter]\n );\n const filedView = useMemo(() => {\n const customSetterMap = {\n ...(props.customSetterMap || {}),\n };\n\n const cFiledProps = {\n labelWidth,\n labelAlign,\n hiddenLabel,\n condition,\n noStyle: specialSetter ? true : false,\n onConditionValueChange: (val: boolean) => {\n setVisible(val);\n },\n };\n\n if (useField === false) {\n return (\n <SetterSwitcherCore\n setters={setters}\n keyPaths={keyPaths}\n currentSetter={currentSetter}\n setCurrentSetter={setCurrentSetter}\n {...props}\n {...setterProps}\n customSetterMap={customSetterMap}\n setterContext={setterContext}\n />\n );\n }\n return (\n <CField {...cFiledProps} {...props}>\n <SetterSwitcherCore\n setters={setters}\n keyPaths={keyPaths}\n currentSetter={currentSetter}\n setCurrentSetter={setCurrentSetter}\n {...setterProps}\n customSetterMap={customSetterMap}\n setterContext={setterContext}\n />\n </CField>\n );\n }, [\n condition,\n currentSetter,\n hiddenLabel,\n keyPaths,\n labelAlign,\n labelWidth,\n props,\n setterContext,\n setterProps,\n setters,\n specialSetter,\n useField,\n ]);\n\n const renderCollapse = useMemo(\n function renderCollapse() {\n const collapseObj = typeof collapse === 'object' ? collapse : {};\n\n const CollapseComponent = (extraHeaderContent?: React.ReactNode) => (\n <Collapse\n bordered={false}\n {...collapseObj}\n style={{\n marginBottom: '10px',\n flex: 1,\n }}\n defaultActiveKey={[collapseObj.open ? props.name : '']}\n items={[\n {\n key: props.name,\n label: (\n <div className={styles.collapseHeader}>\n <span style={{ flex: 1 }}>{props.label}</span>\n {extraHeaderContent}\n {switcher}\n </div>\n ),\n children: filedView,\n },\n ]}\n />\n );\n\n return CollapseComponent;\n },\n [collapse, props.name, props.label, switcher, filedView]\n );\n\n if (['ArraySetter'].includes(currentSetter?.componentName || '')) {\n bodyView = renderCollapse(collapseHeaderExt);\n } else if (['ShapeSetter'].includes(currentSetter?.componentName || '')) {\n bodyView = (\n <div className={styles.shapeFieldBox}>\n {props.prefix ?? null}\n {(currentSetter?.props as any)?.collapse === false && <div style={{ width: '100%' }}>{filedView}</div>}\n {collapse !== false && renderCollapse()}\n {props.suffix ?? null}\n </div>\n );\n } else {\n bodyView = (\n <div style={{ display: 'flex', alignItems: labelAlign, paddingBottom: '8px' }}>\n {props.prefix ?? null}\n {filedView}\n {switcher}\n {props.suffix ?? null}\n </div>\n );\n }\n\n return <div style={{ display: visible ? 'block' : 'none' }}>{bodyView}</div>;\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport React, { Ref } from 'react';\nimport { CMaterialPropsType, getMTitleTip, getMTitle, isSpecialMaterialPropType } from '@chamn/model';\nimport { CForm } from './components/Form';\nimport { SetterSwitcher } from './components/SetterSwitcher';\nimport { getSetterList } from './utils';\nimport styles from './style.module.scss';\nimport { ConfigProvider } from 'antd';\nimport { CCustomSchemaFormContext } from './context';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CFormContextData } from './components/Form/context';\n\nexport type CustomSchemaFormInstance = CForm;\n\nexport type CustomSchemaFormProps = {\n nodeId?: string;\n pluginCtx?: CPluginCtx;\n initialValue: Record<string, any>;\n properties: CMaterialPropsType<any>;\n onValueChange?: (val: any) => void;\n onSetterChange: (keyPaths: string[], setterName: string) => void;\n /** 存储每个字段上次使用的 setter */\n defaultSetterConfig: Record<string, { name: string; setter: string }>;\n customSetterMap?: CFormContextData['customSetterMap'];\n};\n\nconst CustomSchemaFormCore = (props: CustomSchemaFormProps, ref: Ref<CustomSchemaFormInstance | CForm>) => {\n const {\n properties: originProperties,\n initialValue,\n onValueChange,\n onSetterChange,\n defaultSetterConfig,\n pluginCtx,\n customSetterMap,\n } = props;\n const properties: CMaterialPropsType = originProperties;\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig,\n // 设置全局 setter map\n customSetterMap,\n onSetterChange,\n formRef: ref,\n pluginCtx: pluginCtx,\n nodeId: props.nodeId,\n }}\n >\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div className={styles.CFromRenderBox}>\n <CForm\n ref={ref as any}\n name=\"root-form\"\n initialValue={initialValue}\n customSetterMap={customSetterMap}\n onValueChange={(val) => {\n onValueChange?.(val);\n }}\n >\n {properties.map((property) => {\n if (isSpecialMaterialPropType(property)) {\n console.log('Current not Support type config for props, wait future....');\n } else {\n const title = getMTitle(property.title);\n const tip = getMTitleTip(property.title) || property?.description;\n const setterList = getSetterList(property.setters);\n const keyPaths = [property.name];\n return (\n <SetterSwitcher\n key={property.name}\n condition={property.condition}\n keyPaths={keyPaths}\n setters={setterList}\n label={title}\n name={property.name || ''}\n tips={tip}\n />\n );\n }\n })}\n </CForm>\n </div>\n </ConfigProvider>\n </CCustomSchemaFormContext.Provider>\n );\n};\n\nexport const CustomSchemaForm = React.forwardRef(CustomSchemaFormCore);\n\nexport * from './components/SetterSwitcher';\nexport * from './components/Setters';\n","import { TreeDataNode } from 'antd';\n\nexport const getParentKey = (key: React.Key, tree: TreeDataNode[]): React.Key => {\n let parentKey: React.Key;\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (node.children) {\n if (node.children.some((item) => item.key === key)) {\n parentKey = node.key;\n } else if (getParentKey(key, node.children)) {\n parentKey = getParentKey(key, node.children);\n }\n }\n }\n return parentKey!;\n};\n\nexport const getNodeInfo = (key: string, tree: TreeDataNode[]): TreeDataNode | null => {\n const traverse = (nodes: TreeDataNode[]): TreeDataNode | null => {\n for (const node of nodes) {\n if (node.key === key) {\n return node;\n }\n if (node.children?.length) {\n const result = traverse(node.children);\n if (result) {\n return result;\n }\n }\n }\n return null;\n };\n\n return traverse(tree);\n};\n","import { Modal, TreeSelect } from 'antd';\nimport { CPage } from '@chamn/model';\nimport { useRef, useMemo } from 'react';\nimport { transformPageSchemaToTreeData, traverseTree } from '@/plugins/OutlineTree/util';\nimport { getNodeInfo } from '../SelectNodeByTree/util';\n\ninterface SelectNodeModalProps {\n open: boolean;\n onCancel: () => void;\n onOk: (data: { nodeId: string; title: string }) => void;\n pageModel: CPage;\n value?: string;\n}\n\nexport const SelectNodeModal = (props: SelectNodeModalProps) => {\n const { open, onCancel, onOk, pageModel, value } = props;\n const boxDomRef = useRef<HTMLDivElement>(null);\n\n const treeData = useMemo(() => {\n if (!pageModel) return;\n const treeData = transformPageSchemaToTreeData(pageModel?.export(), pageModel);\n traverseTree(treeData, (el: any) => {\n el.sourceData = {\n title: el.title,\n value: el.value,\n };\n el.value = el.key;\n el.title = <div style={{ flexWrap: 'nowrap', display: 'flex', width: '150px' }}>{el.title}</div>;\n\n return false;\n });\n return treeData;\n }, [pageModel]);\n\n return (\n <Modal open={open} onCancel={onCancel} title=\"选择节点\" onOk={() => onOk({ nodeId: value || '', title: '' })}>\n <div ref={boxDomRef} style={{ width: '100%' }}>\n <TreeSelect\n virtual={false}\n showSearch\n style={{ width: '100%' }}\n value={value}\n allowClear\n onClear={() => {\n onOk({\n nodeId: '',\n title: '',\n });\n }}\n filterTreeNode={(inputValue, treeNode: any) => {\n return treeNode.sourceData?.title.toLowerCase().indexOf(inputValue.toLowerCase()) > -1;\n }}\n getPopupContainer={() => boxDomRef.current!}\n treeDefaultExpandAll\n onChange={(newVal) => {\n const nodeInfo = getNodeInfo(newVal, (treeData as any) ?? []);\n onOk({\n nodeId: newVal,\n title: (nodeInfo as any)?.sourceData?.title,\n });\n }}\n treeData={treeData}\n />\n </div>\n </Modal>\n );\n};\n","import { Button } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { CPage } from '@chamn/model';\nimport { SelectNodeModal } from './modal';\n\nexport const SelectNodeByTree = (props: {\n pageModel: CPage;\n onChange?: (data: { nodeId: string; title: string }) => void;\n value?: any;\n}) => {\n const [modalOpen, setModalOpen] = useState(false);\n const [innerValue, setInnerValue] = useState<{ nodeId: string; title: string }>(props.value);\n\n const nodeTitle = useMemo(() => {\n const nodeInfo = props.pageModel.getNode(innerValue?.nodeId || props.value);\n\n if (nodeInfo) {\n return nodeInfo.value.title || nodeInfo.material?.value.title || innerValue?.title || '';\n }\n return '';\n }, [props.pageModel, props?.value, innerValue?.nodeId, innerValue?.title]);\n\n return (\n <>\n <Button\n style={{\n width: '200px',\n }}\n onClick={() => setModalOpen(true)}\n >\n {nodeTitle ?? '选择节点'}\n </Button>\n <SelectNodeModal\n open={modalOpen}\n onCancel={() => setModalOpen(false)}\n onOk={(data) => {\n props.onChange?.(data);\n setInnerValue(data);\n setModalOpen(false);\n }}\n pageModel={props.pageModel}\n value={innerValue?.nodeId || props.value}\n />\n </>\n );\n};\n","import { CPage } from '@chamn/model';\nimport { SelectNodeByTree } from '../SelectNodeByTree';\nimport { Input, Space } from 'antd';\n\nexport const SelectNodeState = (props: {\n value?: {\n nodeId: string;\n keyPath: string;\n };\n pageModel: CPage;\n onChange?: (data: { nodeId: string; keyPath: string }) => void;\n}) => {\n return (\n <div>\n <Space>\n <SelectNodeByTree\n pageModel={props.pageModel}\n value={props.value}\n onChange={(data) => {\n props.onChange?.({\n nodeId: data.nodeId,\n keyPath: props.value?.keyPath || '',\n });\n }}\n />\n <Input\n style={{\n width: 250,\n }}\n value={props.value?.keyPath}\n onChange={(e) => {\n const { value: inputValue } = e.target;\n props.onChange?.({\n nodeId: props.value?.nodeId || '',\n keyPath: String(inputValue),\n });\n }}\n placeholder=\"variable name. support '.'\"\n />\n </Space>\n </div>\n );\n};\n","export function isValidJSVariableName(name: string) {\n // 1. 使用正则表达式验证变量名规则\n const identifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n if (!identifierRegex.test(name)) {\n return false;\n }\n\n // 2. 检测是否为保留关键字\n try {\n new Function(`let ${name};`);\n return true;\n } catch {\n return false;\n }\n}\n","import {\n AssignValueType,\n getRandomStr,\n LogicType,\n TLogicAssignValueItem,\n TLogicCallNodeMethodItem,\n TLogicJumpLinkItem,\n TLogicRequestAPIItem,\n TLogicRunCodeItem,\n} from '@chamn/model';\n\nexport const DEFAULT_NODE_LIST = [\n {\n key: LogicType.ASSIGN_VALUE,\n name: '赋值/创建变量',\n getInitData: () => {\n const id = getRandomStr();\n const assignValueItem: TLogicAssignValueItem = {\n id: id,\n type: LogicType.ASSIGN_VALUE,\n valueType: AssignValueType.STATE,\n currentValue: '',\n targetValueName: '',\n };\n\n return assignValueItem;\n },\n },\n {\n key: LogicType.JUMP_LINK,\n name: '页面跳转',\n getInitData: () => {\n const id = getRandomStr();\n const assignValueItem: TLogicJumpLinkItem = {\n id: id,\n type: LogicType.JUMP_LINK,\n link: '',\n };\n\n return assignValueItem;\n },\n },\n {\n key: LogicType.REQUEST_API,\n name: '请求数据',\n getInitData: () => {\n const id = getRandomStr();\n const requestAPIItem: TLogicRequestAPIItem = {\n id: id,\n type: LogicType.REQUEST_API,\n apiPath: '',\n method: 'GET',\n header: {},\n query: {},\n responseVarName: `responseData_${id}`,\n afterSuccessResponse: [],\n afterFailedResponse: [\n {\n id: getRandomStr(),\n type: LogicType.RUN_CODE,\n value: 'console.error(\"API request failed:\", $$response)',\n },\n ],\n };\n\n return requestAPIItem;\n },\n },\n {\n key: LogicType.CALL_NODE_METHOD,\n name: '调用组件方法',\n getInitData: () => {\n const id = getRandomStr();\n\n const callNodeMethodItem: TLogicCallNodeMethodItem = {\n id: id,\n type: LogicType.CALL_NODE_METHOD,\n nodeId: '',\n methodName: '',\n args: [],\n returnVarName: '',\n };\n\n return callNodeMethodItem;\n },\n },\n {\n key: LogicType.RUN_CODE,\n name: '运行代码',\n getInitData: () => {\n const id = getRandomStr();\n\n const runCodeItem: TLogicRunCodeItem = {\n id: id,\n type: LogicType.RUN_CODE,\n name: `run_code_${id}`,\n value: `console.log('hello world');`,\n };\n\n return runCodeItem;\n },\n },\n];\n","import { Popover } from 'antd';\nimport { useState } from 'react';\nimport { DEFAULT_NODE_LIST } from './initData';\nimport { TLogicItemHandlerFlow } from '@chamn/model';\n\nexport const CreateNewNodePopup = (props: {\n title?: string;\n children: React.ReactNode;\n disabled?: boolean;\n style?: React.CSSProperties;\n onNewNodeAdd: (data: TLogicItemHandlerFlow[number]) => void;\n}) => {\n const { title = 'Next Step' } = props;\n\n const [open, setOpen] = useState(false);\n\n const handleOpenChange = (newOpen: boolean) => {\n setOpen(newOpen);\n };\n\n const nodeList = DEFAULT_NODE_LIST.map((el) => {\n return (\n <div\n onClick={() => {\n setOpen(false);\n props.onNewNodeAdd?.(el.getInitData());\n }}\n key={el.key}\n style={{\n padding: '10px 20px',\n border: '1px solid #c3c3c3b8',\n borderRadius: '4px',\n textAlign: 'center',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {el.name}\n </div>\n );\n });\n\n // 禁用弹窗\n if (props.disabled) {\n return props.children;\n }\n\n return (\n <Popover\n onOpenChange={handleOpenChange}\n open={open}\n trigger={'hover'}\n content={\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n width: '300px',\n gap: '8px',\n justifyContent: 'space-between',\n }}\n >\n {nodeList.map((el) => (\n <div\n key={el.key}\n style={{\n flex: '0 0 calc(50% - 4px)',\n }}\n >\n {el}\n </div>\n ))}\n </div>\n }\n title={title}\n >\n {props.children}\n </Popover>\n );\n};\n","import { Handle, HandleProps, Position } from '@xyflow/react';\nimport { INPUT_HANDLE_ID } from '../../config';\n\nexport const InputHandle = (props: Partial<HandleProps>) => {\n return <Handle type=\"target\" id={INPUT_HANDLE_ID} position={Position.Top} {...props} />;\n};\n","import { Handle, HandleProps, Position } from '@xyflow/react';\nimport { OUTPUT_HANDLE_ID } from '../../config';\n\nexport const OutputHandle = (props: Partial<HandleProps>) => {\n return <Handle type=\"source\" position={Position.Bottom} id={OUTPUT_HANDLE_ID} {...props} />;\n};\n","import { Card, CardProps } from 'antd';\nimport { OUTPUT_HANDLE_ID, REACT_FLOW_DRAG_CLASS_NAME } from '../../config';\nimport { HolderOutlined } from '@ant-design/icons';\nimport styles from './style.module.scss';\nimport { CreateNewNodePopup } from '../CreateNewNodePopup';\nimport { InputHandle } from '../InputHandle';\nimport { OutputHandle } from '../OutputHandle';\nimport { NodeProps, useReactFlow } from '@xyflow/react';\nimport { getNewNodePosInfo, UseNodeHasConnected } from '../../util';\nimport clsx from 'clsx';\n\nexport const NodeCard = ({\n nodeProps,\n customHandle,\n handleNewNodeAdd: outHandleNewNodeAdd,\n useCardStyle,\n outputHandle,\n inputHandle,\n ...props\n}: CardProps & {\n inputHandle?: boolean;\n outputHandle?: boolean;\n useCardStyle?: boolean;\n nodeProps: NodeProps;\n customHandle?: React.ReactNode;\n handleNewNodeAdd?: (newNodeData: any) => void;\n}) => {\n const { data, isConnectable, selected } = nodeProps;\n const reactFlowInstance = useReactFlow();\n const outputNodeHasConnected = UseNodeHasConnected(data, OUTPUT_HANDLE_ID);\n\n const handleNewNodeAdd = (newNodeData: any) => {\n const currentNode = reactFlowInstance.getNode(String(data.id));\n if (!currentNode) {\n console.error(`Not found node by id ${data.id}`);\n return;\n }\n const { newEdge, newNode } = getNewNodePosInfo(currentNode, newNodeData);\n // 更新流程图\n reactFlowInstance.addNodes(newNode);\n reactFlowInstance.addEdges(newEdge);\n };\n\n let customHandleView: any = (\n <>\n {inputHandle !== false && <InputHandle isConnectable={isConnectable} />}\n {outputHandle !== false && (\n <CreateNewNodePopup\n style={{\n position: 'absolute',\n left: '50%',\n bottom: '0',\n }}\n onNewNodeAdd={(data) => {\n /** 外部有自定义 handle 时,取消事件触发 */\n if (customHandle) {\n return;\n }\n if (outHandleNewNodeAdd) {\n outHandleNewNodeAdd(data);\n } else {\n handleNewNodeAdd(data);\n }\n }}\n disabled={outputNodeHasConnected}\n >\n <OutputHandle\n isConnectable={isConnectable}\n style={{\n width: '10px',\n height: '10px',\n }}\n />\n </CreateNewNodePopup>\n )}\n </>\n );\n\n if (customHandle) {\n customHandleView = customHandle;\n }\n\n if (useCardStyle === false) {\n return (\n <div className={clsx([selected ? styles.selectStatus : ''])}>\n <div className={REACT_FLOW_DRAG_CLASS_NAME}>{props.children}</div>\n {customHandleView}\n </div>\n );\n }\n\n return (\n <Card\n {...props}\n classNames={{\n header: REACT_FLOW_DRAG_CLASS_NAME,\n }}\n className={clsx([selected ? styles.selectStatus : ''])}\n styles={{\n body: {\n cursor: 'default',\n },\n }}\n extra={\n <div\n style={{\n display: 'flex',\n }}\n >\n {props.extra}\n <div className={styles.dragBox}>\n <HolderOutlined />\n </div>\n </div>\n }\n >\n {props.children}\n <div className={clsx([REACT_FLOW_DRAG_CLASS_NAME, styles.l])}></div>\n <div className={clsx([REACT_FLOW_DRAG_CLASS_NAME, styles.r])}></div>\n <div className={clsx([REACT_FLOW_DRAG_CLASS_NAME, styles.b])}></div>\n {customHandleView}\n </Card>\n );\n};\n","import { createContext, useContext } from 'react';\nimport { CNode, CPage } from '@chamn/model';\nimport { CPluginCtx } from '@/core/pluginManager';\n\ninterface ActionFlowContextType {\n pluginCtx: CPluginCtx;\n pageModel: CPage;\n /** 数据有改变时,包含节点内部的数据 */\n onDataChange: () => void;\n /** 当前节点 */\n nodeModel: CNode | null;\n}\n\nexport const ActionFlowContext = createContext<ActionFlowContextType>({\n pluginCtx: null as any,\n pageModel: null as any,\n onDataChange: () => {},\n nodeModel: null,\n});\n\nexport const useActionFlow = () => {\n const context = useContext(ActionFlowContext);\n if (!context) {\n throw new Error('useActionFlow must be used within ActionFlowProvider');\n }\n return context;\n};\n","import { useContext, useMemo, useState } from 'react';\nimport { SetterObjType, SetterType } from '@chamn/model';\nimport { Dropdown, MenuProps } from 'antd';\nimport { SwapOutlined } from '@ant-design/icons';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { getSetterList } from '@/component/CustomSchemaForm/utils';\nimport styles from './style.module.scss';\nimport { CField, CFieldProps } from '../Form/Field';\nimport { SetterSwitcherCore } from '../SetterSwitcher/core';\n\nexport const CFiledWithSwitchSetter = (\n props: Omit<CFieldProps, 'children'> & {\n setterList: SetterType[];\n onSetterChange?: (setterName: string) => void;\n defaultSetterName?: string;\n }\n) => {\n const { setterList: setters, defaultSetterName, ...restProps } = props;\n\n const setterList = useMemo(() => {\n return getSetterList(setters);\n }, [setters]);\n\n const { onSetterChange, defaultSetterConfig, pluginCtx, nodeId, customSetterMap } =\n useContext(CCustomSchemaFormContext);\n const keyPaths = [props.name];\n\n const [currentSetter, setCurrentSetter] = useState<SetterObjType>(() => {\n const currentSetterName = defaultSetterConfig[keyPaths.join('.')]?.setter || defaultSetterName || '';\n return [...setterList].find((el) => el.componentName === currentSetterName) || setterList[0];\n });\n\n const menuItems = setterList.map((setter) => {\n const setterName = setter?.componentName || '';\n const setterRuntime = ({} as any)[setterName];\n return {\n key: setter.componentName,\n label: setterRuntime?.setterName || setter.componentName,\n };\n });\n\n const onChooseSetter: MenuProps['onClick'] = ({ key }) => {\n const targetSetter = setterList.find((setter) => setter.componentName === key);\n if (targetSetter) {\n setCurrentSetter(targetSetter);\n onSetterChange?.(keyPaths, targetSetter.componentName);\n props.onSetterChange?.(targetSetter.componentName);\n }\n };\n\n let switcher: any = (\n <div\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n className={styles.switchBtn}\n >\n <Dropdown\n trigger={['click']}\n menu={{\n selectable: true,\n items: menuItems,\n onClick: onChooseSetter,\n defaultSelectedKeys: [currentSetter?.componentName || ''],\n }}\n >\n <SwapOutlined />\n </Dropdown>\n </div>\n );\n\n if (menuItems.length === 1) {\n switcher = null;\n }\n\n const setterProps = useMemo(() => {\n let newProps = {\n ...(currentSetter?.props || {}),\n initialValue: currentSetter?.initialValue,\n };\n const target = setterList.find((el) => el.componentName === currentSetter?.componentName);\n if (target) {\n newProps = {\n ...newProps,\n ...target.props,\n };\n }\n return newProps;\n }, [setterList, currentSetter]);\n\n return (\n <div\n className={styles.fieldBox}\n style={{\n alignItems: props.labelAlign ?? 'center',\n }}\n >\n <CField {...restProps}>\n <SetterSwitcherCore\n {...setterProps}\n setters={setterList}\n keyPaths={keyPaths}\n currentSetter={currentSetter}\n customSetterMap={customSetterMap}\n setCurrentSetter={setCurrentSetter}\n setterContext={{\n pluginCtx,\n keyPaths: [props.name],\n label: props.label,\n nodeModel: pluginCtx?.pageModel.getNode(nodeId) as any,\n }}\n />\n </CField>\n {switcher}\n </div>\n );\n};\n","import { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { AssignValueType, DEV_CONFIG_KEY, TLogicAssignValueItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\nimport { Radio } from 'antd';\nimport { useEffect, useRef, useState } from 'react';\nimport { CForm } from '../../../../Form';\nimport { CField } from '../../../../Form/Field';\nimport { SelectNodeState } from '../../component/SelectNodeState/index';\nimport styles from './style.module.scss';\nimport { TTextAreaSetterProps } from '../../../TextAreaSetter';\nimport { isValidJSVariableName } from './util';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { ensureKeyExist } from '@/utils';\nimport { NodeCard } from '../../component/NodeCard';\nimport { CommonDynamicValueSetter } from '../../util';\nimport { useActionFlow } from '../../context';\nimport { CFiledWithSwitchSetter } from '@/component/CustomSchemaForm/components/CFiledWithSwitchSetter';\n\nexport type TAssignValueNode = Node<TLogicAssignValueItem, 'AssignValueNode'>;\n\nexport const AssignValueNode = (props: NodeProps<TAssignValueNode>) => {\n const { data } = props;\n const { onDataChange, pageModel, pluginCtx, nodeModel } = useActionFlow();\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n const devConfigObj = data[DEV_CONFIG_KEY]!;\n const [isReady, setIsReady] = useState(false);\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [formValue, setFormValue] = useState<TLogicAssignValueItem>();\n useEffect(() => {\n const newVal = {\n id: data.id,\n type: data.type,\n valueType: data.valueType,\n currentValue: data.currentValue,\n targetValueName: data.targetValueName || '',\n };\n formRef.current?.setFields(newVal);\n setFormValue(newVal);\n setIsReady(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig: devConfigObj.defaultSetterMap || {},\n formRef: formRef,\n onSetterChange: (keyPaths, setterName) => {\n if (!devConfigObj.defaultSetterMap) {\n devConfigObj.defaultSetterMap = {};\n }\n devConfigObj.defaultSetterMap[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n },\n pluginCtx: pluginCtx,\n nodeId: nodeModel?.id,\n customSetterMap: {},\n }}\n >\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Assign Value\" nodeProps={props}>\n <CForm\n ref={formRef}\n name=\"jump Link\"\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newVal) => {\n Object.assign(data, newVal);\n setFormValue(newVal as any);\n onDataChange();\n }}\n >\n {isReady && (\n <>\n <div className={styles.line}>\n <CField\n name={'valueType'}\n label=\"Var Type\"\n valueChangeEventName=\"onChange\"\n formatEventValue={({ target: { value } }: any) => {\n return value;\n }}\n >\n <Radio.Group\n optionType=\"button\"\n buttonStyle=\"solid\"\n options={[\n { label: 'Memory', value: AssignValueType.MEMORY },\n { label: 'Node', value: AssignValueType.STATE },\n ]}\n />\n </CField>\n </div>\n <div className={styles.line}>\n {formValue?.valueType === 'STATE' && (\n <CField name={'targetValueName'} label=\"Var Name\" valueChangeEventName=\"onChange\">\n <SelectNodeState pageModel={pageModel} />\n </CField>\n )}\n\n {formValue?.valueType === 'MEMORY' && (\n <CFiledWithSwitchSetter\n name={'targetValueName'}\n label=\"Var Name\"\n labelWidth=\"auto\"\n labelAlign={'start'}\n tips={\n '变量名必须以字母(a-z、A-Z)、下划线(_)或美元符号($)开头。后续字符可以是字母、数字(0-9)、下划线或美元符号。变量名不能是保留关键字(例如 if、while 等)'\n }\n setterList={[\n {\n componentName: 'TextAreaSetter',\n props: {\n valueValidator: isValidJSVariableName,\n } as TTextAreaSetterProps,\n },\n ]}\n ></CFiledWithSwitchSetter>\n )}\n </div>\n <div\n className={styles.line}\n style={{\n minWidth: '450px',\n }}\n >\n <CFiledWithSwitchSetter\n name={'currentValue'}\n label=\"Value\"\n labelWidth=\"60px\"\n labelAlign={'start'}\n setterList={CommonDynamicValueSetter}\n ></CFiledWithSwitchSetter>\n </div>\n </>\n )}\n </CForm>\n </NodeCard>\n </div>\n </CCustomSchemaFormContext.Provider>\n );\n};\n","import { NodeProps, Node } from '@xyflow/react';\nimport { NodeCard } from '../component/NodeCard';\n\nexport type CounterNode = Node<any, 'StartNode'>;\n\nexport const StartNode = (props: NodeProps<CounterNode>) => {\n return (\n <NodeCard nodeProps={props} useCardStyle={false} inputHandle={false}>\n <div\n style={{\n minWidth: '100px',\n padding: '10px 20px',\n border: '1px solid #1a192b',\n borderRadius: '4px',\n textAlign: 'center',\n }}\n >\n Start\n </div>\n </NodeCard>\n );\n};\n","import { CMaterialPropsType, CPageNode, isNodeModel } from '@chamn/model';\nimport { CommonDynamicValueSetter } from '../../util';\n\nexport function isValidJSVariableName(name: string) {\n // 1. 使用正则表达式验证变量名规则\n const identifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n if (!identifierRegex.test(name)) {\n return false;\n }\n\n // 2. 检测是否为保留关键字\n try {\n new Function(`let ${name};`);\n return true;\n } catch {\n return false;\n }\n}\n\nconst ARGS_PREFIX = 'args.';\n/**\n *\n * @param node 结合 method 描述,合并为一个 FormSchema, 加 key 前缀是为了避免 key 冲突\n * @param args\n * @returns\n */\nexport const getArgsObjFormSchema = (node: CPageNode, methodName: string) => {\n if (isNodeModel(node)) {\n const methodList = node?.material?.value.methods || [];\n\n const formSchema = methodList\n .find((el) => el.name === methodName)\n ?.params?.map((el, index) => {\n return {\n name: `${ARGS_PREFIX}${index}`,\n title: {\n label: el.name || `arg[${index}]`,\n tip: el.description,\n },\n valueType: 'string',\n setters: CommonDynamicValueSetter,\n } as CMaterialPropsType[number];\n });\n\n return formSchema || [];\n }\n return [];\n};\n\nexport const formatArgsObjToArray = (val: Record<string, any>) => {\n const res = Object.keys(val)\n .map((key) => parseInt(key.replace(ARGS_PREFIX, '')))\n .sort()\n .map((index) => val[`${ARGS_PREFIX}${index}`]);\n return res;\n};\n\nexport const formatArgsToObject = (valArr: any[]) => {\n const res: any = {};\n valArr.forEach((item, index) => {\n res[`${ARGS_PREFIX}${index}`] = item;\n });\n return res;\n};\n","import { BUILD_IN_SETTER_MAP, CustomSchemaForm, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { DEV_CONFIG_KEY, TLogicCallNodeMethodItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\nimport { Input, Select } from 'antd';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { CForm } from '../../../../Form';\nimport styles from './style.module.scss';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { SelectNodeByTree } from '../../component/SelectNodeByTree';\nimport { CField } from '@/component/CustomSchemaForm/components/Form/Field';\nimport { formatArgsObjToArray, formatArgsToObject, getArgsObjFormSchema, isValidJSVariableName } from './util';\nimport { ensureKeyExist } from '@/utils';\nimport { NodeCard } from '../../component/NodeCard';\nimport { useActionFlow } from '../../context';\n\nexport type TCallNodeMethodNode = Node<TLogicCallNodeMethodItem, 'CallNodeMethodNode'>;\n\nexport const CallNodeMethodNode = (props: NodeProps<TCallNodeMethodNode>) => {\n const { data } = props;\n const { pageModel, onDataChange, pluginCtx, nodeModel } = useActionFlow();\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n const devConfigObj = data[DEV_CONFIG_KEY]!;\n\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [formValue, setFormValue] = useState<TLogicCallNodeMethodItem>();\n useEffect(() => {\n const newVal = {\n id: data.id || '',\n type: data.type,\n nodeId: data.nodeId,\n methodName: data.methodName,\n args: data.args,\n returnVarName: data.returnVarName,\n };\n formRef.current?.setFields(newVal);\n\n setFormValue(newVal);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const methodList = useMemo(() => {\n const targetNode = pageModel.getNode(data.nodeId);\n const list = targetNode?.material?.value.methods || [];\n return list;\n }, [data.nodeId, pageModel]);\n\n const methodListOptions = useMemo(() => {\n return methodList?.map((el) => {\n return {\n value: el.name,\n label: el.title,\n };\n });\n }, [methodList]);\n\n const argsFormSchema = useMemo(() => {\n return getArgsObjFormSchema(pageModel.getNode(formValue?.nodeId)!, formValue?.methodName || '');\n }, [pageModel, formValue?.nodeId, formValue?.methodName]);\n\n const updateKeySetterConfig = (keyPaths: string[], setterName: string) => {\n if (!devConfigObj.defaultSetterMap) {\n devConfigObj.defaultSetterMap = {};\n }\n devConfigObj.defaultSetterMap[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig: devConfigObj.defaultSetterMap || {},\n formRef: formRef,\n onSetterChange: updateKeySetterConfig,\n customSetterMap: { ...BUILD_IN_SETTER_MAP },\n }}\n >\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Call Node Method\" nodeProps={props}>\n <CForm\n ref={formRef}\n name=\"Call Node Method\"\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newVal, changeKeys) => {\n if (changeKeys?.includes('nodeId')) {\n newVal = {\n ...newVal,\n methodName: '',\n args: [],\n };\n setTimeout(() => {\n formRef.current?.setFields({\n ...formValue,\n ...newVal,\n });\n });\n }\n Object.assign(data, newVal);\n setFormValue(newVal as any);\n onDataChange();\n }}\n >\n <div className={styles.line}>\n <CField\n label={'组件'}\n name=\"nodeId\"\n valueChangeEventName=\"onChange\"\n formatEventValue={(el) => {\n return el.nodeId;\n }}\n >\n <SelectNodeByTree pageModel={pageModel} />\n </CField>\n </div>\n\n <div className={styles.line}>\n <CField name=\"methodName\" label=\"方法\" valueChangeEventName=\"onChange\">\n <Select style={{ width: 250 }} allowClear options={methodListOptions}></Select>\n </CField>\n </div>\n <div className={styles.line}>\n <CField\n name={'args'}\n label=\"参数\"\n labelWidth=\"60px\"\n labelAlign={'start'}\n condition={() => Boolean(argsFormSchema.length)}\n noStyle\n formatEventValue={(val) => {\n const newVal = formatArgsObjToArray(val);\n return newVal;\n }}\n >\n <CustomSchemaForm\n initialValue={formatArgsToObject(data.args || [])}\n pluginCtx={pluginCtx}\n nodeId={nodeModel?.id}\n properties={argsFormSchema}\n onSetterChange={updateKeySetterConfig}\n defaultSetterConfig={devConfigObj.defaultSetterMap || {}}\n ></CustomSchemaForm>\n </CField>\n </div>\n\n <div className={styles.line}>\n <CField\n name={'returnVarName'}\n label=\"返回值变量名\"\n labelWidth=\"80px\"\n tips={\n '变量名必须以字母(a-z、A-Z)、下划线(_)或美元符号($)开头。后续字符可以是字母、数字(0-9)、下划线或美元符号。变量名不能是保留关键字(例如 if、while 等)'\n }\n rules={[\n {\n validator: async (val) => {\n if (val === '') {\n return true;\n }\n return isValidJSVariableName(val);\n },\n },\n ]}\n valueChangeEventName=\"onChange\"\n formatEventValue={(e) => e.target.value}\n >\n <Input allowClear />\n </CField>\n </div>\n </CForm>\n </NodeCard>\n </div>\n </CCustomSchemaFormContext.Provider>\n );\n};\n","import { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { isExpression, isFunction, TLogicJumpLinkItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { CForm } from '../../../Form';\nimport { NodeCard } from '../component/NodeCard';\nimport { CommonDynamicValueSetter } from '../util';\nimport { useActionFlow } from '../context';\nimport { CFiledWithSwitchSetter } from '../../../CFiledWithSwitchSetter';\n\nexport type TJumpLinkNode = Node<TLogicJumpLinkItem, 'JumpLinkNode'>;\n\nexport const JumpLinkNode = (props: NodeProps<TJumpLinkNode>) => {\n const { data } = props;\n const { onDataChange } = useActionFlow();\n\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n formRef.current?.setFields({\n link: data.link,\n });\n setIsReady(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const defaultLinkSetter = useMemo(() => {\n if (isFunction(data.link)) {\n return 'FunctionSetter';\n } else if (isExpression(data.link)) {\n return 'ExpressionSetter';\n } else {\n return 'TextAreaSetter';\n }\n }, [data.link]);\n\n return (\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Jump Link\" nodeProps={props}>\n <CForm\n ref={formRef}\n name=\"jump Link\"\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newVal) => {\n Object.assign(data, newVal);\n onDataChange();\n }}\n >\n {isReady && (\n <>\n <CFiledWithSwitchSetter\n name={'link'}\n label=\"link\"\n labelWidth=\"auto\"\n labelAlign={'start'}\n defaultSetterName={defaultLinkSetter}\n setterList={CommonDynamicValueSetter}\n ></CFiledWithSwitchSetter>\n </>\n )}\n </CForm>\n </NodeCard>\n </div>\n );\n};\n","import { SetterType } from '@chamn/model';\n\nexport const requestParamsSchemaSetterList: SetterType[] = [\n {\n componentName: 'JSONSetter',\n labelAlign: 'start',\n props: {\n mode: 'inline',\n lineNumbers: 'off',\n editorOptions: {\n lineNumbers: 'off',\n lineDecorationsWidth: 0,\n lineNumbersMinChars: 0,\n glyphMargin: false,\n },\n },\n },\n {\n componentName: 'FunctionSetter',\n labelAlign: 'start',\n props: {\n mode: 'inline',\n minimap: false,\n containerStyle: {\n paddingTop: '10px',\n width: '470px',\n height: '150px',\n },\n lineNumber: false,\n },\n },\n];\n\nexport const methodOptions = [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'PUT', label: 'PUT' },\n { value: 'PATCH', label: 'PATCH' },\n { value: 'DELETE', label: 'DELETE' },\n];\n","import { DEV_CONFIG_KEY, TLogicRequestAPIItem } from '@chamn/model';\nimport { useReactFlow, NodeProps, Node } from '@xyflow/react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Input, Select, Tabs, TabsProps } from 'antd';\nimport { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\n\nimport { ensureKeyExist } from '@/utils';\nimport { NodeCard } from '../../component/NodeCard';\nimport { CForm } from '@/component/CustomSchemaForm/components/Form';\nimport { CCustomSchemaFormContext } from '@/component/CustomSchemaForm/context';\nimport { CField } from '@/component/CustomSchemaForm/components/Form/Field';\nimport { methodOptions, requestParamsSchemaSetterList } from './helper';\nimport { CreateNewNodePopup } from '../../component/CreateNewNodePopup';\nimport { InputHandle } from '../../component/InputHandle';\nimport { OutputHandle } from '../../component/OutputHandle';\nimport {\n INPUT_HANDLE_ID,\n OUTPUT_HANDLE_ID,\n REACT_FLOW_DRAG_CLASS_NAME,\n REQUEST_API_FAILED_HANDLE_ID,\n} from '../../config';\nimport styles from './style.module.scss';\nimport { useActionFlow } from '../../context';\nimport { CFiledWithSwitchSetter } from '@/component/CustomSchemaForm/components/CFiledWithSwitchSetter';\nimport { RightPanelConfig } from '@/plugins/RightPanel/type';\n\nexport type TRequestAPINode = Node<TLogicRequestAPIItem, 'RequestAPINode'>;\n\nexport const RequestAPINode = (props: NodeProps<TRequestAPINode>) => {\n const { data, isConnectable } = props;\n const { onDataChange, pluginCtx } = useActionFlow();\n const pluginConfig: RightPanelConfig = pluginCtx.config || {};\n\n const CustomAPISelectInput: any = useMemo(() => {\n if (pluginConfig.requestAPINode?.customAPIInput) {\n return pluginConfig.requestAPINode?.customAPIInput;\n }\n return Input;\n }, [pluginConfig.requestAPINode?.customAPIInput]);\n\n const reactFlowInstance = useReactFlow();\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n const devConfigObj = data[DEV_CONFIG_KEY]!;\n const formRef = useRef<CustomSchemaFormInstance>(null);\n const [formValue, setFormValue] = useState<TLogicRequestAPIItem>();\n const checkHandleConnection = (handleId: string) => {\n const edges = reactFlowInstance.getEdges();\n return edges.some(\n (edge) => edge.source === String(data.id) && (edge.sourceHandle || OUTPUT_HANDLE_ID) === handleId\n );\n };\n\n const isOutputHandleConnected = checkHandleConnection(OUTPUT_HANDLE_ID);\n\n const isAfterFailedResponseHandleConnected = checkHandleConnection(REQUEST_API_FAILED_HANDLE_ID);\n\n useEffect(() => {\n const newVal = {\n id: data.id,\n type: data.type,\n apiPath: data.apiPath,\n body: data.body,\n query: data.query,\n header: data.header,\n method: data.method || 'GET',\n responseVarName: data.responseVarName || '',\n afterSuccessResponse: data.afterSuccessResponse || [],\n afterFailedResponse: data.afterFailedResponse || [],\n } as TLogicRequestAPIItem;\n formRef.current?.setFields(newVal);\n setFormValue(newVal);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const formHandler = useMemo(() => {\n return {\n updateFields: (newValue: any) => {\n const newValueObj = {\n ...formValue,\n ...newValue,\n };\n formRef.current?.setFields({\n ...newValueObj,\n });\n setFormValue(newValueObj);\n },\n getFields: () => {\n return formRef.current?.getFieldsValue();\n },\n };\n }, [formValue]);\n\n const updateKeySetterConfig = (keyPaths: string[], setterName: string) => {\n if (!devConfigObj.defaultSetterMap) {\n devConfigObj.defaultSetterMap = {};\n }\n devConfigObj.defaultSetterMap[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n const tabItems = useMemo(() => {\n const tabTagList = [\n { key: 'header', label: 'Header' },\n { key: 'query', label: 'Query' },\n { key: 'body', label: 'Body' },\n ];\n const items: TabsProps['items'] = tabTagList.map((el) => {\n return {\n ...el,\n disabled: el.key === 'body' && formValue?.method === 'GET',\n children: (\n <div className={styles.line}>\n <CFiledWithSwitchSetter\n name={el.key}\n hiddenLabel={true}\n labelAlign={'start'}\n setterList={requestParamsSchemaSetterList}\n ></CFiledWithSwitchSetter>\n </div>\n ),\n };\n });\n\n return items;\n }, [formValue]);\n\n const handleNewNodeAdd = (newNodeData: any, handleType: string) => {\n const currentNode = reactFlowInstance.getNode(String(data.id));\n if (!currentNode) return;\n\n let offsetX = 0;\n if (handleType !== OUTPUT_HANDLE_ID) {\n offsetX = (currentNode.measured?.width ?? 0) + 150;\n }\n // 计算新节点位置\n const newNodePosition = {\n x: currentNode.position.x + offsetX,\n y: currentNode.position.y + (currentNode.measured?.height ?? 0) + 150,\n };\n\n // 创建新节点\n const newNode = {\n id: newNodeData.id,\n type: newNodeData.type,\n position: newNodePosition,\n /** 必须 */\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n data: {\n ...newNodeData,\n },\n };\n\n // 创建连线\n const newEdge = {\n id: `${data.id}_${newNode.id}`,\n source: String(data.id),\n sourceHandle: handleType,\n target: newNode.id,\n targetHandle: INPUT_HANDLE_ID,\n };\n\n // 更新流程图\n reactFlowInstance.addNodes(newNode);\n reactFlowInstance.addEdges(newEdge);\n if (handleType === OUTPUT_HANDLE_ID) {\n // 更新当前节点的 afterSuccessResponse\n if (!data.afterSuccessResponse) {\n data.afterSuccessResponse = [];\n }\n data.afterSuccessResponse.push(newNodeData);\n } else {\n // 更新当前节点的 afterFailedResponse\n if (!data.afterFailedResponse) {\n data.afterFailedResponse = [];\n }\n data.afterFailedResponse.push(newNodeData);\n }\n };\n\n return (\n <CCustomSchemaFormContext.Provider\n value={{\n defaultSetterConfig: devConfigObj.defaultSetterMap || {},\n formRef: formRef,\n onSetterChange: updateKeySetterConfig,\n customSetterMap: { ...BUILD_IN_SETTER_MAP },\n }}\n >\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard\n title=\"Request Data\"\n customHandle={\n <>\n <InputHandle type=\"target\" isConnectable={isConnectable} />\n <CreateNewNodePopup\n style={{\n position: 'absolute',\n left: '50%',\n bottom: '0',\n }}\n title=\"请求成功时\"\n onNewNodeAdd={(data) => handleNewNodeAdd(data, OUTPUT_HANDLE_ID)}\n disabled={isOutputHandleConnected}\n >\n <OutputHandle\n isConnectable={isConnectable}\n style={{\n width: '10px',\n height: '10px',\n background: '#8BC34A',\n }}\n />\n </CreateNewNodePopup>\n <CreateNewNodePopup\n title=\"请求异常时\"\n onNewNodeAdd={(data) => handleNewNodeAdd(data, REQUEST_API_FAILED_HANDLE_ID)}\n disabled={isAfterFailedResponseHandleConnected}\n >\n <OutputHandle\n style={{\n left: '75%',\n bottom: '0',\n width: '10px',\n height: '10px',\n background: '#ff4d4f',\n }}\n id={REQUEST_API_FAILED_HANDLE_ID}\n isConnectable={isConnectable}\n />\n </CreateNewNodePopup>\n </>\n }\n nodeProps={props}\n handleNewNodeAdd={() => {}}\n >\n <div\n style={{\n width: '500px',\n }}\n >\n <CForm\n name={'requestAPI'}\n ref={formRef}\n customSetterMap={BUILD_IN_SETTER_MAP}\n onValueChange={(newFormData) => {\n setFormValue(newFormData as any);\n Object.assign(data, newFormData);\n onDataChange();\n }}\n >\n <div className={styles.line}>\n <CField\n label={'API'}\n name=\"apiPath\"\n valueChangeEventName=\"onChange\"\n formatEventValue={(el) => el.target.value}\n >\n <CustomAPISelectInput form={formHandler} />\n </CField>\n </div>\n <div className={styles.line}>\n <CField label={'请求方法'} name=\"method\" valueChangeEventName=\"onChange\">\n <Select defaultValue=\"GET\" style={{ width: 230 }} options={methodOptions} />\n </CField>\n </div>\n <div className={styles.line}>\n <CField\n label={'返回值变量'}\n name=\"responseVarName\"\n tips={\n '变量名必须以字母(a-z、A-Z)、下划线(_)或美元符号($)开头。后续字符可以是字母、数字(0-9)、下划线或美元符号。变量名不能是保留关键字(例如 if、while 等)'\n }\n valueChangeEventName=\"onChange\"\n formatEventValue={(el) => el.target.value}\n >\n <Input />\n </CField>\n </div>\n <Tabs defaultActiveKey={formValue?.method === 'POST' ? 'body' : 'query'} items={tabItems} />\n </CForm>\n </div>\n </NodeCard>\n </div>\n </CCustomSchemaFormContext.Provider>\n );\n};\n","import { DEV_CONFIG_KEY, TLogicRunCodeItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\n\nimport { ensureKeyExist } from '@/utils';\nimport { FunctionSetter } from '../../../FunctionSetter';\nimport { NodeCard } from '../../component/NodeCard';\nimport { useActionFlow } from '../../context';\n\nexport type TRunCodeNode = Node<TLogicRunCodeItem, 'RunCodeNode'>;\n\nexport const RunCodeNode = (props: NodeProps<TRunCodeNode>) => {\n const { data } = props;\n ensureKeyExist(data, DEV_CONFIG_KEY, {});\n\n const { onDataChange, pluginCtx, nodeModel } = useActionFlow();\n\n return (\n <div\n style={{\n minHeight: '80px',\n minWidth: '100px',\n }}\n >\n <NodeCard title=\"Run Code\" nodeProps={props}>\n <FunctionSetter\n mode=\"inline\"\n initialValue={data.value}\n containerStyle={{\n paddingTop: '10px',\n width: '600px',\n height: '300px',\n }}\n onValueChange={(newVal: any) => {\n data.value = newVal.value;\n onDataChange();\n }}\n setterContext={{\n pluginCtx: pluginCtx,\n setCollapseHeaderExt: undefined,\n onSetterChange: function () {},\n keyPaths: [],\n label: '',\n nodeModel: nodeModel as any,\n }}\n />\n </NodeCard>\n </div>\n );\n};\n","import { LogicType } from '@chamn/model';\nimport { AssignValueNode } from './AssignValueNode';\nimport { StartNode } from './StartNode';\nimport { CallNodeMethodNode } from './CallNodeMethodNode';\nimport { JumpLinkNode } from './JumpLinkNode';\nimport { RequestAPINode } from './RequestAPINode';\nimport { RunCodeNode } from './RunCodeNode';\n\nexport enum NODE_TYPE {\n START_NODE = 'START_NODE',\n JUMP_LINK = LogicType.JUMP_LINK,\n ASSIGN_VALUE = LogicType.ASSIGN_VALUE,\n CALL_NODE_METHOD = LogicType.CALL_NODE_METHOD,\n RUN_CODE = LogicType.RUN_CODE,\n REQUEST_API = LogicType.REQUEST_API,\n}\n\nexport const NODE_MAP = {\n [NODE_TYPE.START_NODE]: StartNode,\n [NODE_TYPE.JUMP_LINK]: JumpLinkNode,\n [NODE_TYPE.ASSIGN_VALUE]: AssignValueNode,\n [NODE_TYPE.CALL_NODE_METHOD]: CallNodeMethodNode,\n [NODE_TYPE.RUN_CODE]: RunCodeNode,\n [NODE_TYPE.REQUEST_API]: RequestAPINode,\n};\n","import { Edge, Node, useReactFlow } from '@xyflow/react';\nimport Dagre from '@dagrejs/dagre';\nimport { getRandomStr, SetterType, TActionLogicItem, TLogicItemHandlerFlow } from '@chamn/model';\nimport { INPUT_HANDLE_ID, OUTPUT_HANDLE_ID, REACT_FLOW_DRAG_CLASS_NAME, REQUEST_API_FAILED_HANDLE_ID } from './config';\nimport { NODE_TYPE } from './node';\nimport { message } from 'antd';\n\n/** 自动布局 flow node */\nexport const calculateElementLayout = (\n nodes: Node[],\n edges: Edge[],\n options: {\n direction: 'TB' | 'LR';\n }\n): { nodes: Node[]; edges: Edge[] } => {\n const g = new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({}));\n g.setGraph({ rankdir: options.direction });\n\n edges.forEach((edge) => g.setEdge(edge.source, edge.target));\n nodes.forEach((node) =>\n g.setNode(node.id, {\n ...node,\n width: node.measured?.width ?? 0,\n height: node.measured?.height ?? 0,\n })\n );\n\n Dagre.layout(g);\n\n return {\n nodes: nodes.map((node) => {\n const position = g.node(node.id);\n // We are shifting the dagre node position (anchor=center center) to the top left\n // so it matches the React Flow node anchor point (top left).\n const x = position.x - (node.measured?.width ?? 0) / 2;\n const y = position.y - (node.measured?.height ?? 0) / 2;\n\n return { ...node, position: { x, y } };\n }),\n edges,\n };\n};\n\nconst createFlowNode = (nodeData: Partial<Node>): Node => {\n const nodeId = nodeData.id || getRandomStr();\n return {\n id: nodeId,\n type: nodeData.type,\n position: { x: 0, y: 0 },\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n selectable: nodeData.type === NODE_TYPE.START_NODE ? false : true,\n data: {\n ...nodeData,\n id: nodeId,\n },\n };\n};\n\n/** 创建边 */\nconst createFlowEdge = (source: string, target: string, sourceHandle = OUTPUT_HANDLE_ID) => {\n return {\n id: `${source}_${target}`,\n source,\n sourceHandle,\n target,\n targetHandle: INPUT_HANDLE_ID,\n };\n};\n\n/** 将 json schema 转换为 react-flow 节点和边信息 */\nexport const parseActionLogicToNodeList = (value: TActionLogicItem) => {\n const nodes: Node[] = [\n createFlowNode({\n id: NODE_TYPE.START_NODE,\n type: NODE_TYPE.START_NODE,\n }),\n ];\n const edges: Edge[] = [];\n\n if (!value?.handler?.length) {\n return { nodes: nodes, edges: edges };\n }\n\n const processNodes = (\n items: TLogicItemHandlerFlow,\n options?: {\n /**\n * 用于标记是从那种类型的 output flag id 导出的 flow\n */\n sourceHandler: string;\n }\n ) => {\n items.forEach((item) => {\n const currentNode = createFlowNode(item);\n nodes.push(currentNode);\n if (item.next) {\n edges.push(createFlowEdge(item.id, String(item.next), options?.sourceHandler));\n }\n\n if (item.type === 'REQUEST_API') {\n // 处理成功分支节点\n if (item.afterSuccessResponse?.length) {\n edges.push(createFlowEdge(item.id, String(item.afterSuccessResponse[0].id)));\n processNodes(item.afterSuccessResponse);\n }\n\n // 处理失败分支节点\n if (item.afterFailedResponse?.length) {\n edges.push(createFlowEdge(item.id, String(item.afterFailedResponse[0].id), REQUEST_API_FAILED_HANDLE_ID));\n\n processNodes(item.afterFailedResponse, {\n sourceHandler: REQUEST_API_FAILED_HANDLE_ID,\n });\n }\n }\n });\n };\n\n const nextItem = value.handler[0];\n edges.push(createFlowEdge(NODE_TYPE.START_NODE, nextItem.id));\n\n processNodes(value.handler);\n return { nodes, edges };\n};\n\n/** 将节点格式化json schema */\nexport const revertNodeToActionLogic = (params: { nodes: Node[]; edges: Edge[] }): TActionLogicItem => {\n const { nodes, edges } = params;\n const result: TActionLogicItem = {\n type: 'ACTION',\n handler: [],\n };\n\n // 找到起始节点\n const startNode = nodes.find((node) => node.type === NODE_TYPE.START_NODE);\n if (!startNode) return result;\n const nodeMap = new Map(nodes.map((node) => [node.id, node]));\n const visited = new Set<string>();\n\n const traverseNodes = (currentNodeId: string) => {\n if (visited.has(currentNodeId)) return [];\n visited.add(currentNodeId);\n\n const currentNode = nodeMap.get(currentNodeId);\n if (!currentNode) return [];\n\n const handlers = [];\n const nodeData: any = { ...currentNode.data, id: currentNodeId };\n\n if (currentNode.type === 'REQUEST_API') {\n // 获取成功分支节点\n const successTargets = edges\n .filter((e) => e.source === currentNodeId && e.sourceHandle === OUTPUT_HANDLE_ID)\n .map((e) => traverseNodes(e.target))\n .flat();\n\n // 获取失败分支节点\n const failedTargets = edges\n .filter((e) => e.source === currentNodeId && e.sourceHandle === REQUEST_API_FAILED_HANDLE_ID)\n .map((e) => traverseNodes(e.target))\n .flat();\n\n nodeData.afterSuccessResponse = successTargets;\n nodeData.afterFailedResponse = failedTargets;\n handlers.push(nodeData);\n\n return handlers;\n }\n\n handlers.push(nodeData);\n\n // 获取下一个主流程节点, 理论上只有能一个, 分叉逻辑需要使用特殊节点处理\n const nextEdges = edges.filter((e) => e.source === currentNodeId && e.sourceHandle === OUTPUT_HANDLE_ID);\n if (nextEdges.length > 1) {\n message.error('不允许存在一个节点连接多个节点');\n throw new Error('不允许存在一个节点连接多个节点');\n }\n if (nextEdges.length !== 0) {\n /** 理论上只会有一个元素 */\n nextEdges.forEach((edge) => {\n const nextHandlers = traverseNodes(edge.target);\n handlers.push(...nextHandlers);\n nodeData.next = nextHandlers[0]?.id ?? null;\n });\n }\n\n return handlers;\n };\n const handler = traverseNodes(startNode.id);\n // 移除 start node\n handler.shift();\n result.handler = handler;\n return result;\n};\n\n/** 通用的 flow action 画布中的 setter 配置 */\nexport const CommonDynamicValueSetter: SetterType[] = [\n 'StringSetter',\n 'NumberSetter',\n 'ExpressionSetter',\n 'JSONSetter',\n {\n componentName: 'FunctionSetter',\n props: {\n mode: 'inline',\n minimap: false,\n lineNumber: false,\n containerStyle: {\n width: '500px',\n height: '250px',\n },\n },\n },\n];\n\nexport const UseNodeHasConnected = function (data: any, handleId: string) {\n const reactFlowInstance = useReactFlow();\n const edges = reactFlowInstance.getEdges();\n return edges.some((edge) => edge.source === String(data.id) && (edge.sourceHandle || OUTPUT_HANDLE_ID) === handleId);\n};\n\nexport const getNewNodePosInfo = function (currentNode: Node, newNodeData: any, sourceHandle?: string) {\n // 计算新节点位置\n const newNodePosition = {\n x: currentNode.position.x,\n y: currentNode.position.y + (currentNode.measured?.height ?? 0) + 150,\n };\n\n // 创建新节点\n const newNode = {\n id: newNodeData.id,\n type: newNodeData.type,\n position: newNodePosition,\n /** 必须 */\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n data: {\n ...newNodeData,\n },\n };\n\n // 创建连线\n const newEdge = {\n id: `${currentNode.data.id}_${newNode.id}`,\n source: String(currentNode.data.id),\n sourceHandle: sourceHandle ?? OUTPUT_HANDLE_ID,\n target: newNode.id,\n targetHandle: INPUT_HANDLE_ID,\n };\n\n return {\n newEdge,\n newNode,\n };\n};\n","import {\n addEdge,\n Background,\n Controls,\n MiniMap,\n OnConnect,\n ReactFlow,\n ReactFlowProvider,\n useEdgesState,\n useNodesState,\n useReactFlow,\n Node,\n} from '@xyflow/react';\nimport '@xyflow/react/dist/style.css';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { TActionLogicItem } from '@chamn/model';\nimport { calculateElementLayout, parseActionLogicToNodeList, revertNodeToActionLogic } from './util';\nimport { NODE_MAP, NODE_TYPE } from './node';\nimport { CSetterProps } from '../type';\nimport { REACT_FLOW_DRAG_CLASS_NAME } from './config';\nimport { ActionFlowContext } from './context';\nimport { Button } from 'antd';\nimport { MoveableModal } from '@/component/MoveableModal';\nimport { HotKeysPluginInstance } from '@/plugins/Hotkeys/type';\n\nexport type TActionFlowSetterCore = CSetterProps<{\n value?: TActionLogicItem;\n children?: React.ReactNode;\n}>;\n\nexport const ActionFlowSetterCore = (props: TActionFlowSetterCore) => {\n const { fitView } = useReactFlow();\n const [flowMount, setFlowMount] = useState(false);\n const [nodes, setNodes, onNodesChange] = useNodesState<any>([\n {\n id: NODE_TYPE.START_NODE,\n data: { id: NODE_TYPE.START_NODE },\n position: { x: 0, y: 0 },\n type: NODE_TYPE.START_NODE,\n dragHandle: `.${REACT_FLOW_DRAG_CLASS_NAME}`,\n selectable: false,\n },\n ]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<any>([]);\n\n const latesEdgesRef = useRef<any[]>([]);\n latesEdgesRef.current = edges;\n\n const onConnect = useCallback<OnConnect>((params) => setEdges((eds) => addEdge({ ...params }, eds)), [setEdges]);\n\n const latestNodeRef = useRef<Node[]>([]);\n latestNodeRef.current = nodes;\n\n const [dataReady, setDataReady] = useState(false);\n\n /** 重新布局 */\n const layoutGraph = useCallback(\n (options?: { fitView: boolean }) => {\n const layoutInfo = calculateElementLayout(latestNodeRef.current, edges, { direction: 'TB' });\n setNodes([...layoutInfo.nodes]);\n setEdges([...layoutInfo.edges]);\n setTimeout(() => {\n setFlowMount(true);\n if (options?.fitView !== false) {\n fitView({});\n }\n });\n },\n [edges, fitView, setEdges, setNodes]\n );\n\n useEffect(() => {\n // 将 value 转换为 nodes 以及 edges\n const { nodes, edges } = parseActionLogicToNodeList(props.value);\n setNodes(nodes);\n setEdges(edges);\n setTimeout(() => {\n setDataReady(true);\n }, 300);\n }, [props.value, setEdges, setNodes]);\n\n const saveData = useCallback(() => {\n setTimeout(() => {\n const newSchemaValue = revertNodeToActionLogic({ nodes: latestNodeRef.current, edges: latesEdgesRef.current });\n props.onValueChange?.(newSchemaValue);\n });\n }, [props]);\n\n return (\n <ActionFlowContext.Provider\n value={{\n pluginCtx: props.setterContext?.pluginCtx,\n pageModel: props.setterContext?.pluginCtx?.pageModel,\n onDataChange: saveData,\n nodeModel: props.setterContext.nodeModel,\n }}\n >\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n position: 'relative',\n }}\n >\n <div\n style={{\n flex: 1,\n position: 'relative',\n }}\n >\n <Button\n style={{\n position: 'absolute',\n top: '10px',\n right: '20px',\n zIndex: 99,\n }}\n onClick={() => layoutGraph({ fitView: false })}\n >\n Reset Layout\n </Button>\n\n {!flowMount && (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'white',\n zIndex: 999,\n }}\n ></div>\n )}\n {dataReady && (\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={(changes) => {\n onNodesChange(changes);\n saveData();\n }}\n onEdgesChange={(changes) => {\n onEdgesChange(changes);\n saveData();\n }}\n onConnect={(connection) => {\n onConnect(connection);\n saveData();\n }}\n defaultEdgeOptions={{\n type: 'smoothstep',\n }}\n minZoom={0.2}\n maxZoom={1}\n onInit={() => {\n layoutGraph();\n }}\n fitView\n nodeTypes={NODE_MAP}\n >\n <Background />\n <Controls />\n <MiniMap />\n </ReactFlow>\n )}\n </div>\n </div>\n </ActionFlowContext.Provider>\n );\n};\n\nexport const ActionFlowSetter = (props: TActionFlowSetterCore) => {\n const [open, setOpen] = useState(false);\n\n const newValueRef = useRef(props.value);\n\n const disableLowcodeHotKey = async (status: boolean) => {\n // 启用 lowcode 编辑器热键\n const hotkey = await props.setterContext?.pluginCtx?.pluginManager?.get<HotKeysPluginInstance>('Hotkeys');\n hotkey?.export.disable(status);\n };\n\n const triggerView = props.children || (\n <Button\n size=\"small\"\n style={{\n marginTop: '5px',\n width: '100%',\n color: '#676767',\n fontSize: '12px',\n }}\n >\n Edit Flow\n </Button>\n );\n\n return (\n <>\n <div\n onClick={async () => {\n // 禁用 lowcode 编辑器热键\n await disableLowcodeHotKey(true);\n setOpen(true);\n }}\n >\n {triggerView}\n </div>\n\n <MoveableModal\n destroyOnClose\n open={open}\n centered\n title=\"Edit Flow\"\n width=\"calc(100vw - 200px)\"\n onCancel={() => {\n setOpen(false);\n disableLowcodeHotKey(false);\n }}\n onOk={async () => {\n props.onValueChange?.(newValueRef.current);\n await disableLowcodeHotKey(false);\n setOpen(false);\n }}\n >\n <div\n style={{\n width: '100%',\n height: 'calc(100vh - 200px)',\n }}\n >\n <ReactFlowProvider>\n <ActionFlowSetterCore\n {...props}\n onValueChange={(newVal) => {\n newValueRef.current = newVal;\n }}\n ></ActionFlowSetterCore>\n </ReactFlowProvider>\n </div>\n </MoveableModal>\n </>\n );\n};\n\nActionFlowSetter.setterName = '逻辑流设置器';\n","import { ActionFlowSetter } from './ActionFlowSetter';\nimport { CSetter } from './type';\n\n/** 需要单独导出避免循环以来,因为 ActionFlowSetter 使用了大量内置 setter */\nexport const BUILD_IN_ADVANCE_SETTER_MAP = {\n ActionFlowSetter,\n} as Record<string, CSetter>;\n","import { useEffect, useRef } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { BUILD_IN_ADVANCE_SETTER_MAP } from '@/component/CustomSchemaForm/components/Setters/AdvanceSetterList';\n\nimport styles from './style.module.scss';\nimport { CustomSchemaForm, CustomSchemaFormInstance, CustomSchemaFormProps } from '../../component/CustomSchemaForm';\n\nexport const PropertyPanel = (props: { node: CNode | CRootNode | null; pluginCtx: CPluginCtx }) => {\n const { node } = props;\n const properties = node?.material?.value.props || [];\n const formRef = useRef<CustomSchemaFormInstance>(null);\n\n useEffect(() => {\n const handel = () => {\n const newVal = node?.getPlainProps?.() || {};\n formRef.current?.setFields(newVal);\n };\n handel();\n node?.emitter.on('onNodeChange', handel);\n return () => {\n node?.emitter.off('onNodeChange', handel);\n };\n }, [node]);\n\n const value = node?.getPlainProps?.() || {};\n\n const onValueChange: CustomSchemaFormProps['onValueChange'] = (val) => {\n node?.updateValue({\n props: val,\n });\n };\n\n const onSetterChange: CustomSchemaFormProps['onSetterChange'] = (keyPaths, setterName) => {\n if (!node) {\n return;\n }\n node.value.configure = node.value.configure || {};\n node.value.configure.propsSetter = node.value.configure.propsSetter || {};\n node.value.configure.propsSetter[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n const customSetterMap = props.pluginCtx.config?.customPropertySetterMap;\n\n return (\n <div className={styles.CFromRenderBox}>\n <CustomSchemaForm\n pluginCtx={props.pluginCtx}\n key={node?.id}\n nodeId={node?.id}\n defaultSetterConfig={node?.value.configure.propsSetter || {}}\n onSetterChange={onSetterChange}\n properties={properties}\n initialValue={value}\n ref={formRef}\n customSetterMap={{\n ...BUILD_IN_ADVANCE_SETTER_MAP,\n ...customSetterMap,\n }}\n onValueChange={onValueChange}\n />\n </div>\n );\n};\n","import { CRightPanelItem } from '../RightPanel/view';\nimport { PropertyPanel } from './view';\n\nexport const PropertyPanelConfig: CRightPanelItem = {\n key: 'Property',\n name: 'Property',\n view: ({ node, pluginCtx }) => <PropertyPanel node={node} pluginCtx={pluginCtx} />,\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.property !== false;\n },\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { useEffect, useRef } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CRightPanelItem } from '../RightPanel/view';\nimport { MonacoEditor, MonacoEditorInstance } from '../../component/MonacoEditor';\n\nexport type ComponentStatePanelProps = {\n node: CNode | CRootNode | null;\n pluginCtx: CPluginCtx;\n};\n\nexport const ComponentStatePanel = (props: ComponentStatePanelProps) => {\n const node = props.node!;\n\n const nodeState = node.value.state || {};\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n useEffect(() => {\n const currentState = node.value.state || {};\n editorRef?.current?.setValue(JSON.stringify(currentState, null, 2));\n }, [node]);\n\n const onValueChange = (newValStr?: string) => {\n try {\n const newVal = JSON.parse(newValStr || '{}');\n node.value.state = newVal;\n node.updateValue();\n } catch (e) {\n console.warn(e);\n }\n };\n\n return (\n <>\n <MonacoEditor\n initialValue={JSON.stringify(nodeState, null, 2)}\n language={'json'}\n options={{\n automaticLayout: true,\n // lineDecorationsWidth: 0,\n tabSize: 2,\n minimap: { enabled: false },\n quickSuggestions: false,\n // lineNumbers: 'off',\n suggestOnTriggerCharacters: false,\n folding: false,\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n onChange={onValueChange}\n />\n </>\n );\n};\n\nexport const ComponentStatePanelConfig: CRightPanelItem = {\n key: 'State',\n name: 'State',\n view: ({ node, pluginCtx }) => {\n if (!node) {\n return <></>;\n }\n return <ComponentStatePanel node={node} pluginCtx={pluginCtx} />;\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.state !== false;\n },\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { useEffect, useMemo, useRef } from 'react';\nimport { CMaterialPropsType, CNode, CRootNode } from '@chamn/model';\nimport { CustomSchemaForm, CustomSchemaFormInstance, CustomSchemaFormProps } from '../../component/CustomSchemaForm';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CRightPanelItem } from '../RightPanel/view';\nimport styles from './style.module.scss';\n\nexport type AdvancePanelProps = {\n node: CNode | CRootNode | null;\n pluginCtx: CPluginCtx;\n};\n\nconst properties: CMaterialPropsType = [\n {\n name: 'id',\n title: {\n label: 'id',\n tip: 'node unique id',\n },\n valueType: 'string',\n setters: [\n {\n componentName: 'StringSetter',\n props: {\n disabled: true,\n variant: 'borderless',\n },\n },\n ],\n },\n {\n name: 'condition',\n title: {\n label: 'Render',\n tip: 'controller component render',\n },\n valueType: 'boolean',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'loop',\n title: 'loop render',\n valueType: 'object',\n setters: [\n {\n componentName: 'ShapeSetter',\n props: {\n collapse: {\n open: true,\n },\n elements: [\n {\n name: 'open',\n title: 'open',\n valueType: 'boolean',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'data',\n title: 'data',\n valueType: 'array',\n setters: [\n {\n componentName: 'ArraySetter',\n initialValue: [],\n props: {\n item: {\n setters: ['JSONSetter', 'ExpressionSetter'],\n initialValue: {},\n },\n },\n },\n 'JSONSetter',\n 'ExpressionSetter',\n ],\n },\n {\n name: 'forName',\n title: {\n label: 'name',\n tip: 'loop element name',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'forIndex',\n title: {\n label: 'index',\n tip: 'loop element index',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'key',\n title: {\n label: 'key',\n tip: 'loop element key',\n },\n valueType: 'expression',\n setters: ['ExpressionSetter'],\n },\n {\n name: 'name',\n title: {\n label: 'variable \\n name',\n tip: 'loop variable name',\n },\n valueType: 'string',\n setters: [\n {\n componentName: 'StringSetter',\n props: {\n prefix: 'loopData',\n },\n },\n ],\n },\n ],\n },\n initialValue: {\n open: false,\n data: [],\n },\n },\n ],\n },\n {\n name: 'refId',\n title: {\n label: 'refId',\n tip: 'unique node flag',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'nodeName',\n title: {\n label: (\n <>\n node <br></br> name\n </>\n ) as any,\n tip: 'alias for node',\n },\n valueType: 'string',\n setters: ['StringSetter'],\n },\n];\n\nexport const AdvancePanel = (props: AdvancePanelProps) => {\n const { node } = props;\n\n const innerProperties = useMemo(() => {\n let newList = properties;\n\n // 如果元素是容器不允许 loop, 或者主动指定不然 loop\n const canLoop =\n !node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.loop === false ||\n !node?.material?.value.isContainer;\n if (!canLoop) {\n newList = newList.filter((el) => (el as any)?.name !== 'loop');\n }\n\n // 如果元素是容器不允许 canRender, 或者主动指定不然 canRender\n const canRender = !node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.render === false;\n\n if (!canRender) {\n newList = newList.filter((el) => (el as any)?.name !== 'condition');\n }\n\n return newList;\n }, [\n node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.loop,\n node?.material?.value.advanceCustom?.rightPanel?.advanceOptions?.render,\n node?.material?.value.isContainer,\n ]);\n\n const onSetterChange: CustomSchemaFormProps['onSetterChange'] = (keyPaths, setterName) => {\n if (!node) {\n return;\n }\n node.value.configure = node.value.configure || {};\n node.value.configure.advanceSetter = node.value.configure.advanceSetter || {};\n node.value.configure.advanceSetter[keyPaths.join('.')] = {\n name: keyPaths.join('.'),\n setter: setterName,\n };\n };\n\n const formRef = useRef<CustomSchemaFormInstance>(null);\n\n useEffect(() => {\n const loopObj = node?.value.loop;\n const newValue = {\n id: node?.id,\n condition: node?.value.condition ?? true,\n loop: {\n open: loopObj?.open || false,\n data: loopObj?.data || [],\n forName: loopObj?.forName || 'item',\n forIndex: loopObj?.forIndex || 'index',\n key: loopObj?.key || '',\n name: loopObj?.name || '',\n },\n refId: node?.value.refId,\n nodeName: node?.value.nodeName,\n };\n formRef.current?.setFields(newValue);\n }, [node]);\n\n const onValueChange = (newVal: { refId: string; loop: any; condition: any; nodeName: any }) => {\n if (!node) {\n return;\n }\n node.value.loop = newVal.loop;\n node.value.condition = newVal.condition;\n node.value.refId = newVal.refId;\n node.value.nodeName = newVal.nodeName;\n node.updateValue();\n };\n if (!node) {\n return <></>;\n }\n\n return (\n <div className={styles.advanceBox}>\n <CustomSchemaForm\n nodeId={props.node?.id}\n key={node.id}\n pluginCtx={props.pluginCtx}\n defaultSetterConfig={node.value.configure?.advanceSetter || {}}\n onSetterChange={onSetterChange}\n properties={innerProperties}\n initialValue={{}}\n ref={formRef}\n onValueChange={onValueChange}\n />\n </div>\n );\n};\n\nexport const AdvancePanelConfig: CRightPanelItem = {\n key: 'Advance',\n name: 'Advance',\n view: ({ node, pluginCtx }) => {\n if (!node) {\n return <></>;\n }\n return <AdvancePanel node={node} pluginCtx={pluginCtx} />;\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.advance !== false;\n },\n};\n","const CSSSourceInfo = {\n cssColors: {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n },\n cssKeyValue: {\n 'align-content': {\n values: ['center', 'flex-end', 'flex-start', 'space-around', 'space-between', 'stretch'],\n },\n 'align-items': {\n values: ['baseline', 'center', 'flex-end', 'flex-start', 'stretch'],\n },\n 'align-self': {\n values: [\n 'auto',\n 'normal',\n 'self-start',\n 'self-end',\n 'baseline',\n 'center',\n 'start',\n 'end',\n 'flex-end',\n 'flex-start',\n 'safe',\n 'stretch',\n 'unsafe',\n ],\n },\n all: { values: [] },\n animation: { values: [] },\n 'animation-delay': { values: [] },\n 'animation-direction': {\n values: ['alternate', 'alternate-reverse', 'normal', 'reverse'],\n },\n 'animation-duration': { values: [] },\n 'animation-fill-mode': {\n values: ['backwards', 'both', 'forwards', 'none'],\n },\n 'animation-iteration-count': { values: ['infinite'] },\n 'animation-name': { values: ['none'] },\n 'animation-play-state': { values: ['paused', 'running'] },\n 'animation-timing-function': {\n values: ['cubic-bezier()', 'ease', 'ease-in', 'ease-in-out', 'ease-out', 'linear', 'step-end', 'step-start', 'steps()'],\n },\n 'backface-visibility': { values: ['hidden', 'visible'] },\n background: { values: [], type: 'color' },\n 'background-attachment': { values: ['fixed', 'local', 'scroll'] },\n 'background-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'background-clip': { values: ['border-box', 'content-box', 'padding-box'] },\n 'background-color': { values: [], type: 'color' },\n 'background-image': {\n values: ['image()', 'linear-gradient()', 'radial-gradient()', 'repeating-linear-gradient()', 'repeating-radial-gradient()', 'url()'],\n },\n 'background-origin': {\n values: ['border-box', 'content-box', 'padding-box'],\n },\n 'background-position': {\n values: ['left', 'center', 'right', 'bottom', 'top'],\n },\n 'background-repeat': {\n values: ['no-repeat', 'repeat', 'repeat-x', 'repeat-y', 'round', 'space'],\n },\n 'background-size': { values: ['auto', 'contain', 'cover'] },\n border: { values: [] },\n 'border-collapse': { values: ['collapse', 'separate'] },\n 'border-color': { values: [], type: 'color' },\n 'border-spacing': { values: [] },\n 'border-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-bottom': { values: [] },\n 'border-bottom-color': { values: [], type: 'color' },\n 'border-bottom-left-radius': { values: [] },\n 'border-bottom-right-radius': { values: [] },\n 'border-bottom-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-bottom-width': { values: ['medium', 'thin', 'thick'] },\n 'border-image': { values: ['url()'] },\n 'border-image-outset': { values: [] },\n 'border-image-slice': { values: [] },\n 'border-image-source': { values: [] },\n 'border-image-repeat': { values: ['repeat', 'round', 'space', 'stretch'] },\n 'border-image-width': { values: ['auto'] },\n 'border-left': { values: [] },\n 'border-left-color': { values: [], type: 'color' },\n 'border-left-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-left-width': { values: ['medium', 'thin', 'thick'] },\n 'border-radius': { values: [] },\n 'border-right': { values: [] },\n 'border-right-color': { values: [], type: 'color' },\n 'border-right-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-right-width': { values: ['medium', 'thin', 'thick'] },\n 'border-top': { values: [] },\n 'border-top-color': { values: [], type: 'color' },\n 'border-top-left-radius': { values: [] },\n 'border-top-right-radius': { values: [] },\n 'border-top-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'border-top-width': { values: ['medium', 'thin', 'thick'] },\n 'border-width': { values: ['medium', 'thin', 'thick'] },\n 'box-decoration-break': { values: ['clone', 'slice'] },\n 'box-shadow': { values: ['none'] },\n 'box-sizing': { values: ['border-box', 'content-box'] },\n bottom: { values: ['auto'] },\n 'break-after': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'break-before': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'caption-side': { values: ['bottom', 'top'] },\n 'caret-color': { values: ['auto'], type: 'color' },\n clear: { values: ['both', 'left', 'none', 'right'] },\n clip: { values: ['auto'] },\n color: { values: [], type: 'color' },\n columns: { values: [] },\n 'column-count': { values: [] },\n 'column-fill': { values: ['auto', 'balance'] },\n 'column-gap': { values: ['normal'] },\n 'column-rule': { values: [] },\n 'column-rule-color': { values: [], type: 'color' },\n 'column-rule-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'column-rule-width': { values: ['medium', 'thin', 'thick'] },\n 'column-span': { values: ['all', 'none'] },\n 'column-width': { values: ['auto'] },\n content: {\n values: ['attr()', 'close-quote', 'no-close-quote', 'no-open-quote', 'normal', 'none', 'open-quote'],\n },\n 'counter-increment': { values: ['none'] },\n 'counter-reset': { values: ['none'] },\n cursor: {\n values: [\n 'alias',\n 'all-scroll',\n 'auto',\n 'cell',\n 'col-resize',\n 'context-menu',\n 'copy',\n 'crosshair',\n 'default',\n 'e-resize',\n 'ew-resize',\n 'grab',\n 'grabbing',\n 'help',\n 'move',\n 'n-resize',\n 'ne-resize',\n 'nesw-resize',\n 'no-drop',\n 'none',\n 'not-allowed',\n 'ns-resize',\n 'nw-resize',\n 'nwse-resize',\n 'pointer',\n 'progress',\n 'row-resize',\n 's-resize',\n 'se-resize',\n 'sw-resize',\n 'text',\n 'vertical-text',\n 'w-resize',\n 'wait',\n 'zoom-in',\n 'zoom-out',\n ],\n },\n direction: { values: ['ltr', 'rtl'] },\n display: {\n values: [\n 'block',\n 'contents',\n 'flex',\n 'flow-root',\n 'grid',\n 'inline',\n 'inline-block',\n 'inline-flex',\n 'inline-grid',\n 'inline-table',\n 'list-item',\n 'none',\n 'run-in',\n 'subgrid',\n 'table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row',\n 'table-row-group',\n ],\n },\n 'empty-cells': { values: ['hide', 'show'] },\n fill: { values: [] },\n filter: {\n values: [\n 'blur()',\n 'brightness()',\n 'contrast()',\n 'custom()',\n 'drop-shadow()',\n 'grayscale()',\n 'hue-rotate()',\n 'invert()',\n 'none',\n 'opacity()',\n 'sepia()',\n 'saturate()',\n 'url()',\n ],\n },\n flex: { values: ['auto', 'none'] },\n 'flex-basis': { values: ['auto'] },\n 'flex-direction': {\n values: ['column', 'column-reverse', 'row', 'row-reverse'],\n },\n 'flex-flow': {\n values: ['column', 'column-reverse', 'nowrap', 'row', 'row-reverse', 'wrap', 'wrap-reverse'],\n },\n 'flex-grow': { values: [] },\n 'flex-shrink': { values: [] },\n 'flex-wrap': { values: ['nowrap', 'wrap', 'wrap-reverse'] },\n float: { values: ['left', 'right', 'none', 'inline-start', 'inline-end'] },\n 'flow-into': { values: ['none'], type: 'named-flow' },\n 'flow-from': { values: ['none'], type: 'named-flow' },\n font: { values: [] },\n 'font-display': {\n values: ['auto', 'block', 'swap', 'fallback', 'optional'],\n },\n 'font-family': {\n values: ['auto', 'cursive', 'fantasy', 'monospace', 'sans-serif', 'serif'],\n },\n 'font-feature-settings': { values: ['normal'] },\n 'font-kerning': { values: ['auto', 'none', 'normal'] },\n 'font-language-override': { values: ['normal'] },\n 'font-size': {\n values: ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large', 'larger', 'smaller'],\n },\n 'font-size-adjust': { values: ['auto', 'none'] },\n 'font-stretch': {\n values: [\n 'condensed',\n 'expanded',\n 'extra-condensed',\n 'extra-expanded',\n 'normal',\n 'semi-condensed',\n 'semi-expanded',\n 'ultra-condensed',\n 'ultra-expanded',\n ],\n },\n 'font-style': { values: ['italic', 'normal', 'oblique'] },\n 'font-synthesis': { values: ['none', 'style', 'weight'] },\n 'font-variant': { values: ['normal', 'small-caps'] },\n 'font-variant-alternates': { values: ['normal'] },\n 'font-variant-caps': {\n values: ['normal', 'small-caps', 'all-small-caps', 'petite-caps', 'all-petite-caps', 'unicase', 'titling-caps'],\n },\n 'font-variant-east-asian': { values: ['normal'] },\n 'font-variant-ligatures': { values: ['normal', 'none'] },\n 'font-variant-numeric': { values: ['normal'] },\n 'font-variant-position': { values: ['normal', 'sub', 'super'] },\n 'font-weight': {\n values: ['bold', 'bolder', 'lighter', 'normal', '100', '200', '300', '400', '500', '600', '700', '800', '900'],\n },\n gap: { values: ['revert-layer'] },\n grid: { values: [] },\n 'grid-area': { values: [] },\n 'grid-auto-columns': { values: [] },\n 'grid-auto-flow': { values: ['row', 'column', 'dense'] },\n 'grid-auto-rows': { values: [] },\n 'grid-column': { values: ['auto'] },\n 'grid-column-end': { values: [] },\n 'grid-column-gap': { values: [] },\n 'grid-column-start': { values: [] },\n 'grid-gap': { values: [] },\n 'grid-row': { values: ['auto'] },\n 'grid-row-end': { values: [] },\n 'grid-row-start': { values: [] },\n 'grid-row-gap': { values: [] },\n 'grid-template': { values: ['none'] },\n 'grid-template-areas': { values: [] },\n 'grid-template-columns': { values: ['auto'] },\n 'grid-template-rows': { values: ['auto'] },\n 'hanging-punctuation': {\n values: ['allow-end', 'first', 'force-end', 'last', 'none'],\n },\n height: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n hyphens: { values: ['auto', 'manual', 'none'] },\n 'image-orientation': { values: [] },\n 'image-resolution': { values: ['from-image', 'snap'] },\n isolation: { values: ['auto', 'isolate'] },\n 'justify-content': {\n values: ['center', 'flex-end', 'flex-start', 'space-around', 'space-between'],\n },\n 'justify-items': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n 'legacy',\n ],\n },\n 'justify-self': {\n values: [\n 'auto',\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first',\n 'last',\n 'safe',\n 'unsafe',\n ],\n },\n left: { values: ['auto'] },\n 'letter-spacing': { values: ['normal'] },\n 'line-height': { values: ['normal'] },\n 'list-style': {\n values: [\n 'none',\n 'url()',\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'inside',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'outside',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n 'list-style-image': { values: ['none', 'url()'] },\n 'list-style-position': { values: ['inside', 'outside'] },\n 'list-style-type': {\n values: [\n 'armenian',\n 'circle',\n 'decimal',\n 'decimal-leading-zero',\n 'disc',\n 'georgian',\n 'lower-alpha',\n 'lower-greek',\n 'lower-latin',\n 'lower-roman',\n 'none',\n 'square',\n 'upper-alpha',\n 'upper-latin',\n 'upper-roman',\n ],\n },\n margin: { values: ['auto'] },\n 'margin-bottom': { values: ['auto'] },\n 'margin-left': { values: ['auto'] },\n 'margin-right': { values: ['auto'] },\n 'margin-top': { values: ['auto'] },\n 'max-height': { values: ['none'] },\n 'max-width': { values: ['none'] },\n 'min-height': { values: [] },\n 'min-width': { values: [] },\n 'mix-blend-mode': {\n values: [\n 'color',\n 'color-burn',\n 'color-dodge',\n 'darken',\n 'difference',\n 'exclusion',\n 'hard-light',\n 'hue',\n 'lighten',\n 'luminosity',\n 'multiply',\n 'normal',\n 'overlay',\n 'saturation',\n 'screen',\n 'soft-light',\n ],\n },\n 'object-fit': {\n values: ['contain', 'cover', 'fill', 'none', 'scale-down'],\n },\n 'object-position': { values: ['left', 'center', 'right', 'bottom', 'top'] },\n opacity: { values: [] },\n order: { values: [] },\n orphans: { values: [] },\n outline: { values: [] },\n 'outline-color': { values: ['invert'], type: 'color' },\n 'outline-offset': { values: [] },\n 'outline-style': {\n values: ['dashed', 'dotted', 'double', 'groove', 'hidden', 'inset', 'none', 'outset', 'ridge', 'solid'],\n },\n 'outline-width': { values: ['medium', 'thin', 'thick'] },\n overflow: { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-x': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-y': { values: ['auto', 'hidden', 'scroll', 'visible'] },\n 'overflow-wrap': { values: ['normal', 'anywhere', 'break-word'] },\n padding: { values: [] },\n 'padding-bottom': { values: [] },\n 'padding-left': { values: [] },\n 'padding-right': { values: [] },\n 'padding-top': { values: [] },\n 'page-break-after': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-before': {\n values: ['always', 'auto', 'avoid', 'left', 'right'],\n },\n 'page-break-inside': { values: ['auto', 'avoid'] },\n perspective: { values: ['none'] },\n 'perspective-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'pointer-events': {\n values: ['all', 'auto', 'fill', 'none', 'painted', 'stroke', 'visible', 'visibleFill', 'visiblePainted', 'visibleStroke'],\n },\n position: { values: ['absolute', 'fixed', 'relative', 'static', 'sticky'] },\n quotes: { values: ['none'] },\n 'region-break-after': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'region-break-before': {\n values: ['always', 'auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region', 'column', 'left', 'page', 'region', 'right'],\n },\n 'region-break-inside': {\n values: ['auto', 'avoid', 'avoid-column', 'avoid-page', 'avoid-region'],\n },\n 'region-fragment': { values: ['auto', 'break'] },\n resize: { values: ['both', 'horizontal', 'none', 'vertical'] },\n right: { values: ['auto'] },\n 'scroll-behavior': { values: ['auto', 'smooth'] },\n 'scroll-snap-type': {\n values: ['none', 'x', 'y', 'block', 'inline', 'both', 'mandatory', 'proximity'],\n },\n src: { values: ['url()'] },\n 'shape-image-threshold': { values: [] },\n 'shape-inside': {\n values: ['auto', 'circle()', 'ellipse()', 'outside-shape', 'polygon()', 'rectangle()'],\n },\n 'shape-margin': { values: [] },\n 'shape-outside': {\n values: [\n 'none',\n 'circle()',\n 'ellipse()',\n 'polygon()',\n 'inset()',\n 'margin-box',\n 'border-box',\n 'padding-box',\n 'content-box',\n 'url()',\n 'image()',\n 'linear-gradient()',\n 'radial-gradient()',\n 'repeating-linear-gradient()',\n 'repeating-radial-gradient()',\n ],\n },\n 'tab-size': { values: [] },\n 'table-layout': { values: ['auto', 'fixed'] },\n 'text-align': {\n values: ['start', 'end', 'center', 'left', 'justify', 'right', 'match-parent', 'justify-all'],\n },\n 'text-align-last': { values: ['center', 'left', 'justify', 'right'] },\n 'text-decoration': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-color': { values: [], type: 'color' },\n 'text-decoration-line': {\n values: ['line-through', 'none', 'overline', 'underline'],\n },\n 'text-decoration-skip': {\n values: ['edges', 'ink', 'none', 'objects', 'spaces'],\n },\n 'text-decoration-style': {\n values: ['dashed', 'dotted', 'double', 'solid', 'wavy'],\n },\n 'text-emphasis': { values: [] },\n 'text-emphasis-color': { values: [], type: 'color' },\n 'text-emphasis-position': { values: ['above', 'below', 'left', 'right'] },\n 'text-emphasis-style': {\n values: ['circle', 'dot', 'double-circle', 'filled', 'none', 'open', 'sesame', 'triangle'],\n },\n 'text-indent': { values: [] },\n 'text-justify': {\n values: ['auto', 'none', 'inter-word', 'inter-character'],\n },\n 'text-overflow': { values: ['clip', 'ellipsis'] },\n 'text-shadow': { values: [] },\n 'text-rendering': {\n values: ['auto', 'geometricPrecision', 'optimizeLegibility', 'optimizeSpeed'],\n },\n 'text-transform': {\n values: ['capitalize', 'full-width', 'lowercase', 'none', 'uppercase'],\n },\n 'text-underline-position': {\n values: ['alphabetic', 'auto', 'below', 'left', 'right'],\n },\n top: { values: ['auto'] },\n transform: {\n values: [\n 'matrix()',\n 'matrix3d()',\n 'none',\n 'perspective()',\n 'rotate()',\n 'rotate3d()',\n 'rotateX()',\n 'rotateY()',\n 'rotateZ()',\n 'scale()',\n 'scale3d()',\n 'scaleX()',\n 'scaleY()',\n 'scaleZ()',\n 'skewX()',\n 'skewY()',\n 'translate()',\n 'translate3d()',\n 'translateX()',\n 'translateY()',\n 'translateZ()',\n ],\n },\n 'transform-origin': {\n values: ['bottom', 'center', 'left', 'right', 'top'],\n },\n 'transform-style': { values: ['flat', 'preserve-3d'] },\n transition: { values: [] },\n 'transition-delay': { values: [] },\n 'transition-duration': { values: [] },\n 'transition-property': { values: ['all', 'none'] },\n 'transition-timing-function': {\n values: ['cubic-bezier()', 'ease', 'ease-in', 'ease-in-out', 'ease-out', 'linear', 'step-end', 'step-start', 'steps()'],\n },\n 'unicode-bidi': { values: ['bidi-override', 'embed', 'normal'] },\n 'unicode-range': { values: [] },\n 'user-select': { values: ['all', 'auto', 'contain', 'none', 'text'] },\n 'vertical-align': {\n values: ['baseline', 'bottom', 'middle', 'sub', 'super', 'text-bottom', 'text-top', 'top'],\n },\n visibility: { values: ['collapse', 'hidden', 'visible'] },\n 'white-space': {\n values: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap'],\n },\n widows: { values: [] },\n width: { values: ['auto', 'max-content', 'min-content', 'fit-content'] },\n 'will-change': {\n values: ['auto', 'contents', 'opacity', 'scroll-position'],\n },\n 'word-break': { values: ['normal', 'break-all', 'keep-all'] },\n 'word-spacing': { values: ['normal'] },\n 'z-index': { values: ['auto'] },\n },\n};\n\nexport const CSSProperties = CSSSourceInfo.cssKeyValue;\n\nexport const CSSColors = CSSSourceInfo.cssColors;\n\nexport type CSSPropertiesKey = keyof typeof CSSProperties;\n\nexport const CSSPropertyList = Object.keys(CSSSourceInfo.cssKeyValue);\n","import React, { useContext } from 'react';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { CSetter } from '@/component';\nimport { CNode, CRootNode } from '@chamn/model';\n\nexport type ContextState = Record<string, any>;\n\nexport type CRightPanelData = {\n /** 存储 field 默认的 setter 类型*/\n defaultSetterConfig: Record<string, { name: string; setter: string }>;\n /** schema 中的全局 setter map 配置*/\n customSetterMap: Record<string, CSetter>;\n pluginCtx?: CPluginCtx;\n /** 当前编辑节点的 id */\n nodeId?: string;\n nodeModel?: CNode | CRootNode;\n};\n\nexport const CRightPanelContext = React.createContext<CRightPanelData>({\n defaultSetterConfig: {},\n customSetterMap: {},\n});\n\nexport const UseCRightPanelContext = () => {\n return useContext(CRightPanelContext);\n};\n","import { AutoComplete, Button, ConfigProvider } from 'antd';\nimport { MinusOutlined, PlusOutlined } from '@ant-design/icons';\nimport { BaseSelectRef } from 'rc-select';\nimport clsx from 'clsx';\nimport { CNodePropsTypeEnum, JSExpressionPropType } from '@chamn/model';\nimport { InputStatus } from 'antd/es/_util/statusUtils';\nimport { CSSPropertyList } from './cssProperties';\nimport { forwardRef, useState, useEffect, useRef, useImperativeHandle } from 'react';\nimport { ExpressionSetter } from '../CustomSchemaForm/components/Setters/ExpressionSetter';\nimport { UseCRightPanelContext } from '@/plugins/RightPanel/context';\nimport styles from './style.module.scss';\n\nconst defaultPropertyOptions = CSSPropertyList.map((el) => {\n return {\n value: el,\n };\n});\n\nexport type InnerSinglePropertyEditorProps = {\n value?: {\n property: string;\n value: JSExpressionPropType | string;\n };\n onValueChange: (value: { property: string; value: JSExpressionPropType | string }) => void;\n onDelete?: () => void;\n onCreate?: (value: { property: string; value: JSExpressionPropType | string }) => {\n errorKey?: string[];\n } | void;\n mod?: 'create' | 'edit';\n};\n\nexport type InnerSinglePropertyEditorRef = {\n reset: () => void;\n};\n\nexport const SinglePropertyEditor = forwardRef<InnerSinglePropertyEditorRef, InnerSinglePropertyEditorProps>(\n function SinglePropertyEditorCore(props, ref) {\n const [keyFormatStatus, setKeyFormatStatus] = useState<InputStatus>('');\n const rightPanelContext = UseCRightPanelContext();\n const { mod = 'create' } = props;\n\n const [innerValue, setInnerVal] = useState<{\n property: string;\n value: JSExpressionPropType | string;\n }>({\n property: props.value?.property || '',\n value: props.value?.value || '',\n });\n\n useEffect(() => {\n if (props.value) {\n setInnerVal(props.value);\n }\n }, [props.value]);\n\n const [propertyOptions, setPropertyOptions] = useState(defaultPropertyOptions);\n\n const onSearch = (searchText: string) => {\n const newOptions = defaultPropertyOptions.filter((el) => el.value.includes(searchText));\n if (!searchText) {\n setPropertyOptions(defaultPropertyOptions);\n } else {\n setPropertyOptions(newOptions);\n }\n };\n\n const updateOuterValue = (newValue: typeof innerValue) => {\n props.onValueChange({\n ...newValue,\n });\n };\n\n const propertyKeyRef = useRef<BaseSelectRef | null>(null);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n reset: () => {\n setInnerVal({\n property: '',\n value: {\n type: CNodePropsTypeEnum.EXPRESSION,\n value: '',\n },\n });\n propertyKeyRef.current?.focus();\n },\n };\n },\n []\n );\n\n /// 创建时\n const innerOnCreate = () => {\n if (innerValue.property === '') {\n setKeyFormatStatus('error');\n return;\n }\n\n setKeyFormatStatus('');\n const res = props.onCreate?.(innerValue);\n if (res?.errorKey?.includes('key')) {\n setKeyFormatStatus('error');\n }\n };\n\n return (\n <>\n <div className={styles.cssFieldBox}>\n <div className={styles.leftBox}>\n <div className={styles.row}>\n <span className={styles.fieldLabel}>Name</span>\n <AutoComplete\n status={keyFormatStatus}\n disabled={mod === 'edit'}\n ref={propertyKeyRef}\n onSearch={onSearch}\n popupMatchSelectWidth={200}\n value={innerValue.property}\n onChange={(val) => {\n setKeyFormatStatus('');\n const newVal = {\n ...innerValue,\n property: val,\n };\n setInnerVal(newVal);\n updateOuterValue(newVal);\n }}\n className={clsx([styles.inputBox])}\n onBlur={() => {\n updateOuterValue(innerValue);\n }}\n placeholder=\"property\"\n options={propertyOptions}\n />\n </div>\n {mod === 'create' && (\n <div>\n <Button\n size=\"small\"\n block\n icon={\n <PlusOutlined\n style={{\n fontSize: '12px',\n display: 'inline-flex',\n }}\n />\n }\n onClick={innerOnCreate}\n ></Button>\n </div>\n )}\n {mod !== 'create' && (\n <div className={styles.row}>\n <span className={styles.fieldLabel}>Value</span>\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div\n style={{\n width: '100%',\n }}\n >\n <ExpressionSetter\n value={innerValue.value as any}\n setterContext={{\n pluginCtx: rightPanelContext.pluginCtx!,\n setCollapseHeaderExt: undefined,\n onSetterChange: function () {},\n keyPaths: [],\n label: '',\n nodeModel: rightPanelContext.nodeModel as any,\n }}\n onValueChange={function (val) {\n const newVal = {\n ...innerValue,\n value: val,\n };\n console.log('newVal', newVal);\n setInnerVal(newVal);\n updateOuterValue(newVal);\n }}\n mode={'modal'}\n />\n </div>\n </ConfigProvider>\n </div>\n )}\n </div>\n <div className={styles.rightBox}>\n <div\n style={{\n height: '30px',\n }}\n >\n {props.onDelete && mod === 'edit' && (\n <Button\n size=\"small\"\n type=\"text\"\n onClick={() => {\n props.onDelete?.();\n }}\n >\n <MinusOutlined\n style={{\n display: 'inline-flex',\n fontSize: '12px',\n }}\n />\n </Button>\n )}\n </div>\n </div>\n </div>\n </>\n );\n }\n);\n","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { ConfigProvider, message } from 'antd';\nimport { JSExpressionPropType } from '@chamn/model';\n\nimport styles from './style.module.scss';\nimport { InnerSinglePropertyEditorRef, SinglePropertyEditor } from './SingleProperty';\n\nexport type CSSPropertiesVariableBindEditorProps = {\n initialValue?: { property: string; value: string | JSExpressionPropType }[];\n onValueChange?: (val: { property: string; value: string }[]) => void;\n};\nexport type CSSPropertiesVariableBindEditorRef = {\n setValue: (val: { property: string; value: string | JSExpressionPropType }[]) => void;\n};\n\nexport const CSSPropertiesVariableBindEditor = forwardRef<\n CSSPropertiesVariableBindEditorRef,\n CSSPropertiesVariableBindEditorProps\n>(function CSSPropertiesVariableBindEditorCore(props, ref) {\n const [propertyList, setPropertyList] = useState<{ property: string; value: any }[]>([]);\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (val) => {\n setPropertyList(val);\n },\n };\n },\n []\n );\n\n useEffect(() => {\n if (props.initialValue) {\n setPropertyList(props.initialValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [newProperty, setNewProperty] = useState<{\n property: string;\n value: JSExpressionPropType | string;\n }>({\n property: '',\n value: {\n type: 'EXPRESSION',\n value: '',\n },\n });\n\n const innerOnValueChange = (val: typeof propertyList) => {\n props.onValueChange?.(val);\n };\n\n const createPropertyRef = useRef<InnerSinglePropertyEditorRef>(null);\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div className={styles.cssBox}>\n {propertyList.map((el, index) => {\n return (\n <div key={index}>\n <SinglePropertyEditor\n value={el}\n mod={'edit'}\n onValueChange={(newVal) => {\n if (newVal.property === '') {\n propertyList.splice(index, 1);\n setPropertyList([...propertyList]);\n return;\n }\n propertyList[index] = newVal;\n setPropertyList([...propertyList]);\n innerOnValueChange(propertyList);\n }}\n onDelete={() => {\n propertyList.splice(index, 1);\n setPropertyList([...propertyList]);\n innerOnValueChange(propertyList);\n }}\n />\n </div>\n );\n })}\n\n <SinglePropertyEditor\n value={newProperty}\n ref={createPropertyRef}\n mod=\"create\"\n onValueChange={(newVal) => {\n setNewProperty(newVal);\n }}\n onCreate={(val) => {\n const hasExits = propertyList.find((el) => el.property === val.property);\n if (hasExits) {\n message.error('The attribute name already exists, please replace');\n return {\n errorKey: [val.property],\n };\n }\n propertyList.push(val);\n setPropertyList([...propertyList]);\n innerOnValueChange(propertyList);\n setNewProperty({\n property: '',\n value: {\n type: 'EXPRESSION',\n value: '',\n },\n });\n }}\n />\n </div>\n </ConfigProvider>\n );\n});\n","import { forwardRef, useImperativeHandle, useRef } from 'react';\nimport { ConfigProvider } from 'antd';\nimport { CustomSchemaForm, CustomSchemaFormInstance } from '../CustomSchemaForm';\nimport { ClassNameType, CMaterialPropsType, CNode } from '@chamn/model';\nimport { CPluginCtx } from '@/core/pluginManager';\n\nexport type ClassNameEditorProps = {\n initialValue?: ClassNameType[];\n onValueChange?: (val: ClassNameType[]) => void;\n pluginContext: CPluginCtx;\n nodeModel: CNode;\n};\nexport type ClassNameEditorRef = {\n setValue: (val: ClassNameType[]) => void;\n};\n\nconst properties: CMaterialPropsType = [\n {\n title: 'Class Names',\n name: 'className',\n valueType: 'array',\n\n setters: [\n {\n componentName: 'ArraySetter',\n props: {\n sortLabelKey: 'name',\n collapse: {\n open: true,\n },\n item: {\n setters: [\n {\n componentName: 'ShapeSetter',\n props: {\n elements: [\n {\n name: 'name',\n title: '类名',\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'status',\n title: '启用',\n valueType: 'boolean',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n ],\n },\n initialValue: {},\n },\n ],\n initialValue: {\n name: '',\n status: true,\n },\n },\n },\n initialValue: [],\n },\n ],\n },\n];\n\nexport const ClassNameEditor = forwardRef<ClassNameEditorRef, ClassNameEditorProps>(function CSSPropertiesEditorCore(\n props,\n ref\n) {\n const formRef = useRef<CustomSchemaFormInstance>(null);\n useImperativeHandle(ref, () => {\n return {\n setValue(newValue) {\n formRef?.current?.setFields({\n className: newValue || [],\n });\n },\n };\n });\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div>\n <CustomSchemaForm\n ref={formRef}\n initialValue={[]}\n nodeId={props.nodeModel.id}\n pluginCtx={props.pluginContext}\n properties={properties}\n onSetterChange={function () {}}\n onValueChange={(newVal) => {\n props.onValueChange?.(newVal.className || []);\n }}\n defaultSetterConfig={{}}\n ></CustomSchemaForm>\n </div>\n </ConfigProvider>\n );\n});\n","import { MinusOutlined, PlusOutlined } from '@ant-design/icons';\nimport { AutoComplete, Button } from 'antd';\nimport { InputStatus } from 'antd/es/_util/statusUtils';\nimport clsx from 'clsx';\nimport { BaseSelectRef } from 'rc-select';\nimport { forwardRef, useState, useMemo, useRef, useImperativeHandle } from 'react';\nimport { defaultPropertyOptions } from '.';\nimport { CSSProperties, CSSPropertiesKey } from './cssProperties';\nimport styles from './style.module.scss';\n\nexport type SinglePropertyEditorProps = {\n mode: 'create' | 'edit';\n value?: {\n property: string;\n value: string;\n };\n allValues: {\n property: string;\n value: string;\n }[];\n onValueChange?: (value: { property: string; value: string }) => void;\n onCreate?: (value: { property: string; value: string }) => void;\n onDelete?: () => void;\n};\n\nexport type SinglePropertyEditorRef = {\n reset: () => void;\n};\n\nexport const SinglePropertyEditor = forwardRef<SinglePropertyEditorRef, SinglePropertyEditorProps>(\n function SinglePropertyEditorCore(props, ref) {\n const [keyFormatStatus] = useState<InputStatus>('');\n const [valueFormatStatus] = useState<InputStatus>('');\n const { mode = 'edit' } = props;\n const isCreate = useMemo(() => {\n return mode === 'create';\n }, [mode]);\n const innerValue = props.value;\n const [propertyOptions, setPropertyOptions] = useState(defaultPropertyOptions);\n\n const [valueOptions, setValueOptions] = useState<{ value: string }[]>([]);\n const [allValueOptions, setAllValueOptions] = useState<{ value: string }[]>([]);\n\n const onSearch = (searchText: string) => {\n const newOptions = defaultPropertyOptions.filter((el) => el.value.includes(searchText));\n if (!searchText) {\n setPropertyOptions(defaultPropertyOptions);\n } else {\n setPropertyOptions(newOptions);\n }\n };\n\n const updateValueOptions = () => {\n let res: any[] = [];\n const tempProperty = CSSProperties[innerValue?.property as unknown as CSSPropertiesKey];\n\n if (tempProperty) {\n res =\n tempProperty.values?.map((val) => {\n return {\n value: val,\n };\n }) || [];\n }\n\n setValueOptions(res);\n setAllValueOptions(res);\n };\n\n const onValueSearch = (searchText: string) => {\n const newOptions = allValueOptions.filter((el) => el.value.includes(searchText));\n if (!searchText) {\n setValueOptions(allValueOptions);\n } else {\n setValueOptions(newOptions);\n }\n };\n\n const updateKeyValue = (keyVal: string) => {\n props.onValueChange?.({\n property: keyVal,\n value: innerValue?.value || '',\n });\n return true;\n };\n\n const propertyValueRef = useRef<BaseSelectRef | null>(null);\n const propertyKeyRef = useRef<BaseSelectRef | null>(null);\n const [focusState, setFocusState] = useState({\n key: false,\n value: false,\n });\n useImperativeHandle(\n ref,\n () => {\n return {\n reset: () => {\n propertyKeyRef.current?.focus();\n },\n };\n },\n []\n );\n\n return (\n <div className={styles.cssFieldBox}>\n <div\n className={clsx([\n styles.keyField,\n isCreate && styles.inputAuto,\n isCreate && focusState.key && styles.active,\n keyFormatStatus === 'error' && styles.error,\n !isCreate && styles.notEdit,\n ])}\n >\n <AutoComplete\n ref={propertyKeyRef}\n variant={'borderless'}\n disabled={!isCreate}\n onSearch={onSearch}\n status={keyFormatStatus}\n popupMatchSelectWidth={200}\n value={innerValue?.property}\n onChange={(val) => {\n updateKeyValue(val);\n }}\n style={{\n width: '100%',\n position: 'absolute',\n left: 0,\n top: 0,\n }}\n onFocus={() => {\n setFocusState({\n key: true,\n value: false,\n });\n }}\n onBlur={() => {\n setFocusState({\n key: false,\n value: false,\n });\n }}\n onKeyDown={(e) => {\n if (e.code === 'Enter') {\n if (!keyFormatStatus) {\n propertyValueRef.current?.focus();\n }\n }\n }}\n placeholder=\"property\"\n options={propertyOptions}\n />\n <span\n style={{\n display: 'inline-block',\n visibility: 'hidden',\n minWidth: '60px',\n padding: '0 2px',\n }}\n >\n {innerValue?.property}\n </span>\n </div>\n <span\n style={{\n padding: '0 2px',\n }}\n >\n :\n </span>\n <AutoComplete\n variant={'borderless'}\n ref={propertyValueRef}\n status={valueFormatStatus}\n popupMatchSelectWidth={200}\n value={innerValue?.value}\n onChange={(val) => {\n updateValueOptions();\n props.onValueChange?.({\n property: innerValue?.property || '',\n value: val || '',\n });\n }}\n style={{\n flex: 1,\n }}\n onFocus={() => {\n setFocusState({\n key: false,\n value: true,\n });\n }}\n onBlur={() => {\n setFocusState({\n key: false,\n value: false,\n });\n }}\n className={clsx([styles.inputAuto, focusState.value && styles.active])}\n placeholder=\"value\"\n onSearch={onValueSearch}\n options={valueOptions}\n onKeyDown={(e) => {\n if (e.code === 'Enter') {\n if (isCreate) {\n props.onCreate?.({\n property: innerValue?.property || '',\n value: innerValue?.value || '',\n });\n }\n }\n }}\n ></AutoComplete>\n\n {props.onDelete && mode === 'edit' && (\n <Button\n size=\"small\"\n type=\"text\"\n onClick={() => {\n props.onDelete?.();\n }}\n >\n <MinusOutlined\n style={{\n display: 'inline-flex',\n fontSize: '12px',\n }}\n />\n </Button>\n )}\n {props.onCreate && mode === 'create' && (\n <div>\n <Button\n size=\"small\"\n type=\"text\"\n icon={\n <PlusOutlined\n style={{\n fontSize: '12px',\n display: 'inline-flex',\n }}\n />\n }\n onClick={() => {\n props.onCreate?.({\n property: innerValue?.property || '',\n value: innerValue?.value || '',\n });\n }}\n ></Button>\n </div>\n )}\n </div>\n );\n }\n);\n","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { CSSPropertyList } from './cssProperties';\nimport styles from './style.module.scss';\n\nimport { ConfigProvider } from 'antd';\nimport { SinglePropertyEditorRef, SinglePropertyEditor } from './signleProperty';\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const defaultPropertyOptions = CSSPropertyList.map((el) => {\n return {\n value: el,\n };\n});\n\nexport type CSSPropertiesEditorProps = {\n initialValue?: { property: string; value: string }[];\n onValueChange?: (val: { property: string; value: string }[]) => void;\n};\n\nexport type CSSPropertiesEditorRef = {\n setValue: (val: { property: string; value: string }[]) => void;\n};\n\nexport const CSSPropertiesEditor = forwardRef<CSSPropertiesEditorRef, CSSPropertiesEditorProps>(\n function CSSPropertiesEditorCore(props, ref) {\n const [propertyList, setPropertyList] = useState<{ id?: string; property: string; value: any }[]>([]);\n const [newAddVal, setNewAddVal] = useState({\n property: '',\n value: '',\n });\n useImperativeHandle(\n ref,\n () => {\n return {\n setValue: (val) => {\n setPropertyList(val);\n },\n };\n },\n []\n );\n\n useEffect(() => {\n if (props.initialValue) {\n setPropertyList([...props.initialValue]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const innerOnValueChange = (val: typeof propertyList) => {\n props.onValueChange?.(val);\n };\n\n const createPropertyRef = useRef<SinglePropertyEditorRef>(null);\n return (\n <ConfigProvider\n theme={{\n token: {\n borderRadius: 4,\n },\n }}\n >\n <div className={styles.cssBox}>\n {propertyList.map((el, index) => {\n return (\n <div key={index}>\n <SinglePropertyEditor\n mode=\"edit\"\n allValues={propertyList}\n value={el}\n onValueChange={(newVal) => {\n propertyList[index] = newVal;\n const newList = JSON.parse(JSON.stringify(propertyList));\n setPropertyList(newList);\n innerOnValueChange(newList);\n }}\n onDelete={() => {\n propertyList.splice(index, 1);\n const newList = JSON.parse(JSON.stringify(propertyList));\n setPropertyList(newList);\n innerOnValueChange(newList);\n }}\n />\n </div>\n );\n })}\n <SinglePropertyEditor\n key=\"newInput\"\n allValues={propertyList}\n mode=\"create\"\n value={newAddVal}\n ref={createPropertyRef}\n onValueChange={(newCssVal) => {\n setNewAddVal({\n ...newCssVal,\n });\n }}\n onCreate={(newVal) => {\n if (newVal.property && newVal.value) {\n const newList = [...propertyList];\n newList.push(newVal);\n setPropertyList(newList);\n setNewAddVal({\n property: '',\n value: '',\n });\n innerOnValueChange(newList);\n createPropertyRef.current?.reset();\n }\n }}\n />\n </div>\n </ConfigProvider>\n );\n }\n);\n","import { waitReactUpdate } from '@/utils';\nimport { formatCSSTextProperty, StyleArr, styleList2Text } from '@/utils/css';\nimport { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';\nimport { Card, Collapse, Dropdown, Space } from 'antd';\nimport CheckableTag from 'antd/es/tag/CheckableTag';\nimport { MutableRefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { CSSPropertiesEditor, CSSPropertiesEditorRef } from '../CSSPropertiesEditor';\nimport styles from './style.module.scss';\nimport { isEmpty } from 'lodash-es';\n// state: 'normal' | 'hover' | 'active' | 'focus' | 'first' | 'last' | 'even' | 'odd';\n\nconst DOM_CSS_STATUS = [\n 'normal' as const,\n 'hover' as const,\n 'focus' as const,\n 'focus-within' as const,\n 'focus-visible' as const,\n 'checked' as const,\n 'disable' as const,\n 'active' as const,\n];\n\ntype DomCSSStatusType = typeof DOM_CSS_STATUS[number];\n\nconst DOM_CSS_STATUS_LIST = DOM_CSS_STATUS.map((el) => {\n return {\n key: el,\n label: el,\n };\n});\n\ntype MediaQueryItem = {\n key: string;\n maxWidth: string;\n label: string;\n};\n\nexport type CSSVal = Partial<\n Record<\n DomCSSStatusType,\n Record<\n /** media query key */\n string,\n string\n >\n >\n>;\n\nexport type CSSEditorRef = {\n setValue: (val: CSSVal) => void;\n};\n\nexport type CSSEditorProps = {\n onValueChange?: (val: CSSVal) => void;\n initialValue?: CSSVal;\n handler?: MutableRefObject<CSSEditorRef | null>;\n};\n\nexport const CSSEditor = (props: CSSEditorProps) => {\n const [selectedStateTag, setSelectedStateTag] = useState<DomCSSStatusType>('normal');\n const [mediaQueryList] = useState<MediaQueryItem[]>([\n {\n key: '991',\n maxWidth: '991',\n label: 'Medial Query ( <= 991 px )',\n },\n {\n key: '767',\n maxWidth: '767',\n label: 'Medial Query ( <= 767 px )',\n },\n {\n key: '479',\n maxWidth: '479',\n label: 'Medial Query ( <= 479 px )',\n },\n ]);\n const cssPropertyRefMap = useRef<Record<string, CSSPropertiesEditorRef | null>>({});\n const handleChange = (tag: DomCSSStatusType) => {\n setSelectedStateTag(tag);\n };\n const [domStatusList, setDomStatusList] = useState<string[]>([]);\n const cssStatusList = useMemo(() => {\n return DOM_CSS_STATUS_LIST.filter((el) => {\n return !domStatusList.includes(el.key);\n });\n }, [domStatusList]);\n\n const selectCssStatusList = useMemo(() => {\n return DOM_CSS_STATUS_LIST.filter((el) => {\n return domStatusList.includes(el.key);\n });\n }, [domStatusList]);\n\n const [cssVal, setCssVal] = useState<CSSVal>(props.initialValue ?? {});\n\n useEffect(() => {\n const list = Object.keys(cssVal);\n setDomStatusList(list);\n }, [cssVal]);\n\n const currentCssStateVal = useMemo(() => {\n const res = cssVal?.[selectedStateTag];\n if (!res) {\n return {};\n }\n const newVal: Record<string, ReturnType<typeof formatCSSTextProperty>> = {};\n Object.keys(res).forEach((key) => {\n newVal[key] = formatCSSTextProperty(res[key] || '');\n });\n\n return newVal;\n }, [selectedStateTag, cssVal]);\n\n const initVal = useCallback(() => {\n Object.keys(cssPropertyRefMap.current).forEach((key) => {\n const ref = cssPropertyRefMap.current?.[key];\n const cssVal = currentCssStateVal[key] || [];\n if (ref) {\n ref.setValue(cssVal);\n }\n });\n }, [currentCssStateVal]);\n const initRef = useRef<() => void>();\n initRef.current = initVal;\n\n if (props.handler) {\n props.handler.current = {\n setValue: async (newVal) => {\n if (isEmpty(newVal)) {\n setCssVal({\n normal: {\n normal: '',\n },\n });\n } else {\n setCssVal(newVal);\n }\n await waitReactUpdate();\n initRef.current?.();\n },\n };\n }\n\n // 初始化赋值\n useEffect(() => {\n initRef.current?.();\n }, [selectedStateTag]);\n\n const updateCss = useCallback(\n (mediaKey: string, val: StyleArr) => {\n const newVal = {\n ...cssVal,\n [selectedStateTag]: {\n ...(cssVal[selectedStateTag] || {}),\n [mediaKey]: styleList2Text(val),\n },\n };\n props.onValueChange?.(newVal);\n },\n [cssVal, props, selectedStateTag]\n );\n\n return (\n <>\n <Card\n size=\"small\"\n type=\"inner\"\n title={<span style={{ fontSize: '12px' }}>CSS</span>}\n extra={\n <Dropdown\n menu={{\n items: cssStatusList,\n onClick: (el) => {\n setDomStatusList((oldVal) => {\n return [...oldVal, el.key];\n });\n },\n }}\n >\n <PlusOutlined />\n </Dropdown>\n }\n >\n <Space\n size={[0, 8]}\n wrap\n style={{\n paddingBottom: '10px',\n }}\n >\n {selectCssStatusList.map((tag) => {\n const checked = selectedStateTag.includes(tag.key);\n return (\n <CheckableTag\n key={tag.key}\n style={{\n border: !checked ? '1px solid rgb(216 216 216 / 82%)' : '1px solid rgba(0,0,0,0))',\n }}\n checked={checked}\n onChange={() => handleChange(tag.key)}\n className={styles.stateTag}\n >\n {tag.label}\n {tag.key !== 'normal' && (\n <MinusCircleOutlined\n className={styles.stateTagClose}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setDomStatusList((oldVal) => {\n return oldVal.filter((el) => {\n return el !== tag.key;\n });\n });\n setSelectedStateTag('normal');\n }}\n />\n )}\n </CheckableTag>\n );\n })}\n </Space>\n\n <Collapse\n defaultActiveKey={['normal']}\n bordered={false}\n style={{\n marginBottom: '10px',\n }}\n onChange={async () => {\n await waitReactUpdate();\n initRef.current?.();\n }}\n items={[\n {\n key: 'normal',\n label: <span>Default</span>,\n children: (\n <CSSPropertiesEditor\n ref={(ref) => {\n cssPropertyRefMap.current['normal'] = ref;\n }}\n onValueChange={(val) => updateCss('normal', val)}\n initialValue={currentCssStateVal['normal']}\n />\n ),\n },\n ...mediaQueryList.map((el) => {\n return {\n key: el.key,\n label: <span>{el.label}</span>,\n children: (\n <CSSPropertiesEditor\n ref={(ref) => {\n cssPropertyRefMap.current[el.key] = ref;\n }}\n onValueChange={(val) => updateCss(el.key, val)}\n />\n ),\n };\n }),\n ]}\n ></Collapse>\n </Card>\n </>\n );\n};\n","/* eslint-disable react-refresh/only-export-components */\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CRightPanelItem, RightPanelOptions } from '../RightPanel/view';\n\nimport styles from './style.module.scss';\nimport {\n CSSPropertiesVariableBindEditor,\n CSSPropertiesVariableBindEditorRef,\n} from '../../component/CSSPropertiesVariableBindEditor';\nimport { Collapse } from 'antd';\nimport { ClassNameEditor, ClassNameEditorRef } from '@/component/ClassNameEditor';\nimport { CSSEditor, CSSEditorRef, CSSVal } from '@/component/CSSEditor';\nimport {\n formatStyleProperty,\n formatCssToNodeVal,\n formatNodeValToEditor,\n StyleArr,\n styleArr2Obj,\n styleObjToArr,\n} from '@/utils/css';\nimport { StyleUIPanel, StyleUIPanelRef } from '@/component/StylePanel';\n\nexport const VisualPanelPlus = (props: RightPanelOptions) => {\n const styleVariableRef = useRef<CSSPropertiesVariableBindEditorRef>(null);\n\n const node = props.node!;\n const classNameList = useMemo(() => {\n const tempList = node.value.classNames || [];\n return tempList;\n }, [node]);\n const cssEditorRef = useRef<CSSEditorRef>(null);\n const cssUIRef = useRef<StyleUIPanelRef>(null);\n const classNameEditorRef = useRef<ClassNameEditorRef>(null);\n const formatStyle = useMemo(() => {\n return formatStyleProperty(node.value.style || []);\n }, [node.value.style]);\n\n const lastNode = useRef<CNode | CRootNode>();\n\n const updatePanelValue = useCallback(() => {\n lastNode.current = node;\n const newStyle = node.value.style || [];\n const { expressionProperty, normalProperty } = formatStyleProperty(newStyle);\n const fCss = formatNodeValToEditor(node.value.css);\n styleVariableRef.current?.setValue([...expressionProperty]);\n cssEditorRef.current?.setValue(fCss);\n classNameEditorRef.current?.setValue(node.value.classNames || []);\n cssUIRef.current?.setValue(styleArr2Obj(normalProperty) || {});\n }, [node]);\n\n useEffect(() => {\n updatePanelValue();\n node.emitter.on('onNodeChange', updatePanelValue);\n node.emitter.on('onReloadPage', updatePanelValue);\n return () => {\n node.emitter.off('onNodeChange', updatePanelValue);\n node.emitter.off('onReloadPage', updatePanelValue);\n };\n }, [node.emitter, node.id, props.activeTab, updatePanelValue]);\n\n const onUpdateStyleVariable = (styleArr: StyleArr) => {\n // merge style\n const newStyleList = [...formatStyle.normalProperty, ...styleArr];\n node.value.style = newStyleList;\n node.updateValue();\n };\n\n const onUpdateStyle = (styleArr: StyleArr) => {\n // merge style\n const newStyleList = [...styleArr, ...formatStyle.expressionProperty];\n node.value.style = newStyleList;\n node.updateValue();\n };\n\n const onUpdateCss = (val: CSSVal) => {\n // class name 不能以数字开头,这里使用c_前缀\n node.value.css = formatCssToNodeVal(`c_${node.id}`, val);\n node.updateValue();\n };\n\n return (\n <div className={styles.visualPanelBox}>\n <div\n style={{\n marginBottom: '10px',\n }}\n >\n <StyleUIPanel\n ref={cssUIRef}\n onValueChange={(newNormaCss) => {\n onUpdateStyle(styleObjToArr(newNormaCss));\n }}\n />\n <Collapse\n bordered={false}\n style={{\n marginBottom: '10px',\n }}\n defaultActiveKey={['origin-css-edit']}\n onChange={(val) => {\n if (val.length) {\n updatePanelValue();\n }\n }}\n items={[\n {\n key: 'origin-css-edit',\n label: <span className={styles.header}>Style Variable</span>,\n children: (\n <CSSPropertiesVariableBindEditor\n ref={styleVariableRef}\n initialValue={formatStyle.expressionProperty}\n onValueChange={(val) => {\n onUpdateStyleVariable(val);\n }}\n />\n ),\n },\n ]}\n ></Collapse>\n <div\n style={{\n paddingTop: '10px',\n }}\n >\n <ClassNameEditor\n nodeModel={props.node as any}\n initialValue={classNameList}\n ref={classNameEditorRef}\n pluginContext={props.pluginCtx}\n onValueChange={(newVal) => {\n node.value.classNames = newVal;\n node.updateValue();\n }}\n />\n </div>\n <CSSEditor handler={cssEditorRef} onValueChange={onUpdateCss} />\n </div>\n </div>\n );\n};\n\nexport const VisualPanelPlusConfig: CRightPanelItem = {\n key: 'VisualPanelPlus',\n name: 'Visual',\n view: ({ node, pluginCtx, activeTab }) => {\n if (node) {\n return <VisualPanelPlus node={node} pluginCtx={pluginCtx} activeTab={activeTab} />;\n } else {\n return <></>;\n }\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.visual !== false;\n },\n};\n","import { useEffect, useState } from 'react';\nimport { CNode, CRootNode } from '@chamn/model';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport styles from './style.module.scss';\nimport { Button, Select } from 'antd';\nimport { ActionFlowSetter } from '@/component/CustomSchemaForm/components/Setters/ActionFlowSetter';\nimport { DeleteOutlined } from '@ant-design/icons';\nimport { ON_DID_RENDER, ON_WILL_DESTROY } from '@chamn/render';\n\nexport type EventPanelProps = {\n node: CNode | CRootNode | null;\n pluginCtx: CPluginCtx;\n};\n\nconst INNER_EVENT_LIST_MAP = [\n {\n label: '初始化完成后',\n value: ON_DID_RENDER,\n },\n {\n label: '组件销毁之前',\n value: ON_WILL_DESTROY,\n },\n];\n\nexport const EventPanel = (props: EventPanelProps) => {\n const { node } = props;\n const [eventList, updateEventList] = useState<\n {\n label: string;\n value: string;\n }[]\n >([]);\n\n const nodeEventList = node?.value.eventListener;\n\n useEffect(() => {\n const list =\n node?.material?.value.events?.map((evt) => {\n if (typeof evt === 'string') {\n return {\n label: evt,\n value: evt,\n };\n }\n return {\n label: evt.name || evt.event,\n value: evt.event,\n };\n }) || [];\n updateEventList([...INNER_EVENT_LIST_MAP, ...list]);\n }, [node?.id, node?.material?.value.events]);\n const [currentEvent, updateCurrentEvent] = useState<string>();\n\n const onChange = (value: string) => {\n updateCurrentEvent(value);\n };\n\n if (!node) {\n return <></>;\n }\n\n return (\n <div className={styles.eventBox}>\n <div style={{ display: 'flex' }}>\n <Select\n value={currentEvent}\n showSearch\n placeholder=\"Select a person\"\n optionFilterProp=\"label\"\n onChange={onChange}\n allowClear\n style={{ width: '100%' }}\n options={eventList}\n />\n <Button\n type=\"primary\"\n style={{ marginLeft: '10px' }}\n onClick={() => {\n const newEvent = currentEvent;\n if (!newEvent) {\n return;\n }\n node.value.eventListener = [\n ...(node.value.eventListener || []),\n {\n name: newEvent,\n func: {\n type: 'ACTION',\n handler: [],\n // TODO: 待实现\n params: [],\n },\n },\n ];\n node.updateValue();\n updateCurrentEvent(undefined);\n }}\n >\n Add\n </Button>\n </div>\n <div style={{ marginTop: '16px' }}>\n {nodeEventList?.map((event: any, index: number) => {\n const eventLabel = eventList.find((el) => el.value === event.name);\n return (\n <div\n key={index}\n style={{\n padding: '8px 12px',\n borderRadius: '4px',\n backgroundColor: '#f5f5f5',\n marginBottom: '8px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n width: '100%',\n }}\n >\n <ActionFlowSetter\n value={event.func}\n onValueChange={(val: { handler: any }) => {\n event.func.handler = val.handler;\n node?.updateValue();\n }}\n setterContext={{\n pluginCtx: props.pluginCtx,\n onSetterChange: () => {},\n keyPaths: [''],\n label: '',\n nodeModel: node as any,\n }}\n >\n <span>{eventLabel?.label || event.name}</span>\n </ActionFlowSetter>\n </div>\n <Button\n type=\"text\"\n size=\"small\"\n danger\n icon={<DeleteOutlined />}\n onClick={(e) => {\n e.stopPropagation();\n const newEventList = [...(node?.value.eventListener || [])];\n newEventList.splice(index, 1);\n node!.value.eventListener = newEventList;\n node?.updateValue();\n }}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n","import { CRightPanelItem } from '../RightPanel/view';\nimport { EventPanel } from './panel';\n\nexport const EventPanelConfig: CRightPanelItem = {\n key: 'Event',\n name: 'Event',\n view: ({ node, pluginCtx }) => {\n if (!node) {\n return <></>;\n }\n return <EventPanel node={node} pluginCtx={pluginCtx} />;\n },\n show: (props) => {\n return props.node?.material?.value.advanceCustom?.rightPanel?.advance !== false;\n },\n};\n","import { CNode, CRootNode } from '@chamn/model';\nimport { Empty, Tabs } from 'antd';\nimport React from 'react';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { PropertyPanelConfig } from '../PropertyPanel';\nimport { ComponentStatePanelConfig } from '../ComponentStatePanel';\nimport { AdvancePanelConfig } from '../AdvancePanel';\nimport styles from './style.module.scss';\nimport { VisualPanelPlusConfig } from '../VisualPanelPlus';\nimport { EventPanelConfig } from '../EventPanel';\nimport { CRightPanelContext } from './context';\n\nexport type RightPanelOptions = { node: CNode | CRootNode | null; pluginCtx: CPluginCtx; activeTab: string };\n\nexport type CRightPanelItem = {\n key: string;\n name: string | ((props: RightPanelOptions) => React.ReactNode);\n view: (props: RightPanelOptions) => React.ReactNode;\n show?: (options: RightPanelOptions) => boolean;\n};\n\ninterface RightPanelProps {\n pluginCtx: CPluginCtx;\n}\n\ninterface RightPanelState {\n node: CNode | CRootNode | null;\n activeKey: string;\n panels: CRightPanelItem[];\n displayPanels: CRightPanelItem[];\n}\n\nexport class RightPanel extends React.Component<RightPanelProps, RightPanelState> {\n constructor(props: RightPanelProps) {\n super(props);\n this.state = {\n node: props.pluginCtx.engine.getActiveNode(),\n activeKey: 'Visual',\n panels: [\n // AdvancePanelConfig,\n PropertyPanelConfig,\n VisualPanelPlusConfig,\n EventPanelConfig,\n ComponentStatePanelConfig,\n AdvancePanelConfig,\n ],\n displayPanels: [],\n };\n }\n\n addPanel = (panel: CRightPanelItem) => {\n const newPanels = [...this.state.panels, panel];\n this.setState({\n panels: newPanels,\n });\n this.updatePanels();\n };\n\n removePanel = (panelName: string) => {\n const newPanels = this.state.panels.filter((el) => el.name !== panelName);\n this.setState({\n panels: newPanels,\n });\n this.updatePanels();\n };\n\n replacePanel = (panelName: string, newPanel: CRightPanelItem) => {\n const targetIndex = this.state.panels.findIndex((el) => el.name === panelName);\n const newPanels = [...this.state.panels];\n if (targetIndex > -1) {\n newPanels[targetIndex] = newPanel;\n }\n this.setState({\n panels: newPanels,\n });\n this.updatePanels();\n };\n\n choosePanel = (panelName: string) => {\n this.setState({\n activeKey: panelName,\n });\n this.updatePanels();\n };\n\n /** 更新被展示的 panel, 根据 panel 的 show 方法 */\n updatePanels = () => {\n const { pluginCtx } = this.props;\n const { node, panels } = this.state;\n const newPanels = panels;\n let val: {\n panels: CRightPanelItem[];\n displayPanels: CRightPanelItem[];\n } = { panels: [], displayPanels: [] };\n if (node) {\n const panelParams: RightPanelOptions = { node: node, pluginCtx, activeTab: this.state.activeKey };\n const displayPanels = newPanels.filter((panel) => {\n if (panel.show === undefined) {\n return true;\n } else {\n return panel.show(panelParams);\n }\n });\n // 获取物料中的自定义 panel\n const customTabs = node.material?.value.advanceCustom?.rightPanel?.customTabs || [];\n displayPanels.concat(customTabs);\n val = {\n panels: newPanels,\n displayPanels,\n };\n } else {\n val = {\n panels: newPanels,\n displayPanels: [],\n };\n }\n this.setState(val);\n return val;\n };\n\n onNodeChange = ({ node }: any) => {\n const { pluginCtx } = this.props;\n const { panels, activeKey } = this.state;\n const panelParams: RightPanelOptions = { node: node, pluginCtx, activeTab: this.state.activeKey };\n const displayPanels = panels.filter((panel) => {\n if (panel.show === undefined) {\n return true;\n } else {\n return panel.show(panelParams);\n }\n });\n const firstPanelKey = displayPanels.find((_, index) => index === 0)?.key || '';\n const isExitsCurrent = displayPanels.find((el) => el.key === activeKey);\n if (!isExitsCurrent) {\n this.setState({\n activeKey: firstPanelKey,\n node,\n displayPanels,\n });\n } else {\n this.setState({\n node,\n displayPanels,\n });\n }\n };\n\n componentDidMount(): void {\n const { pluginCtx } = this.props;\n pluginCtx.globalEmitter.on('onSelectNodeChange', (args) => {\n setTimeout(() => {\n this.onNodeChange(args);\n }, 10);\n });\n pluginCtx.pageModel.emitter.on('*', () => {\n const currentSelectNode = pluginCtx.engine.getActiveNode();\n this.onNodeChange({ node: currentSelectNode });\n });\n const { displayPanels } = this.updatePanels();\n const firstPanelKey = displayPanels.find((_, index) => index === 0)?.key || '';\n const isExitsCurrent = displayPanels.find((el) => el.key === this.state.activeKey);\n\n if (!isExitsCurrent) {\n this.setState({\n activeKey: firstPanelKey,\n });\n }\n\n pluginCtx.pluginReadyOk();\n }\n\n render() {\n const { displayPanels, node, activeKey } = this.state;\n const { pluginCtx } = this.props;\n if (!node) {\n return (\n <div style={{ overflow: 'hidden' }}>\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={'Please select a node from left view'} />\n </div>\n );\n }\n const panelParams = { node: node, pluginCtx, activeTab: this.state.activeKey };\n const customSetterMap = pluginCtx.config?.customPropertySetterMap;\n\n return (\n <CRightPanelContext.Provider\n value={{\n customSetterMap: { ...customSetterMap },\n defaultSetterConfig: {},\n nodeId: this.state.node?.id,\n nodeModel: this.state.node as any,\n pluginCtx: this.props.pluginCtx,\n }}\n >\n <div className={styles.rightPanelContainer}>\n <Tabs\n activeKey={activeKey}\n tabPosition=\"top\"\n style={{\n flex: 1,\n height: '100%',\n }}\n onChange={(activeKey) => {\n this.setState({\n activeKey,\n });\n }}\n items={displayPanels.map((p) => {\n return {\n label: (\n <div style={{ padding: '0 10px' }}>{typeof p.name === 'string' ? p.name : p.name?.(panelParams)}</div>\n ),\n key: p.key,\n children: p.view(panelParams),\n };\n })}\n />\n </div>\n </CRightPanelContext.Provider>\n );\n }\n}\n","import React from 'react';\nimport { CPlugin } from '../../core/pluginManager';\nimport { RightPanel } from './view';\nimport { RightPanelConfig } from './type';\n\nconst PLUGIN_NAME = 'RightPanel';\nexport const RightPanelPlugin: CPlugin<RightPanelConfig> = () => {\n const uiHandle = React.createRef<RightPanel>();\n return {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const workbench = ctx.getWorkbench();\n workbench.replaceRightView(<RightPanel ref={uiHandle} pluginCtx={ctx} />);\n },\n async destroy() {},\n export: () => {\n return uiHandle?.current;\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n };\n};\n\nRightPanelPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const zh_CN: Record<string, any> = {\n pluginName: '全局状态',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Global State',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","/* eslint-disable react-refresh/only-export-components */\nimport { useEffect, useRef } from 'react';\nimport { DatabaseOutlined } from '@ant-design/icons';\nimport { CPlugin, CPluginCtx } from '../../core/pluginManager';\nimport { withTranslation } from 'react-i18next';\nimport localize from './localize';\nimport { MonacoEditor, MonacoEditorInstance } from '../../component/MonacoEditor';\nimport styles from './style.module.scss';\n\nconst PLUGIN_NAME = 'GlobalState';\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\ntype GlobalStatePanelProps = {\n pluginCtx: CPluginCtx;\n};\n\nlet triggerChangeBySelf = false;\n\nconst GlobalStatePanel = (props: GlobalStatePanelProps) => {\n const { pluginCtx } = props;\n const rootState = pluginCtx.pageModel.value.componentsTree.value.state || {};\n // 表示是不是自己触发的值更新\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n useEffect(() => {\n editorRef?.current?.setValue(JSON.stringify(rootState, null, 2));\n // 正常情况下, 只有 reloadPage 才需要同步数据\n pluginCtx.pageModel.emitter.on('onReloadPage', () => {\n if (triggerChangeBySelf) {\n triggerChangeBySelf = false;\n return;\n }\n editorRef.current?.setValue(JSON.stringify(pluginCtx.pageModel.value.componentsTree.value.state, null, 2));\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onValueChange = (newValStr?: string) => {\n try {\n const newVal = JSON.parse(newValStr || '{}');\n pluginCtx.pageModel.value.componentsTree.value.state = newVal;\n triggerChangeBySelf = true;\n pluginCtx.pageModel.value.componentsTree.updateValue();\n } catch (e) {\n console.warn(e);\n }\n };\n\n return (\n <div className={styles.box}>\n <MonacoEditor\n initialValue={JSON.stringify(pluginCtx.pageModel.value.componentsTree.value.state, null, 2)}\n language={'json'}\n options={{\n automaticLayout: true,\n tabSize: 2,\n minimap: { enabled: false },\n quickSuggestions: false,\n suggestOnTriggerCharacters: false,\n folding: false,\n comments: {},\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n beforeMount={() => {\n // monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n // validate: true,\n // allowComments: true, // 启用注释\n // });\n }}\n onChange={onValueChange}\n />\n </div>\n );\n};\n\nexport const GlobalStatePanelPlugin: CPlugin = {\n name: PLUGIN_NAME,\n async init(ctx) {\n const { i18n } = ctx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n const GlobalStatePanelWithLocalize = withTranslation(i18nNamespace)(GlobalStatePanel);\n const Title = withTranslation(i18nNamespace)(({ t }) => <>{t('pluginName')}</>);\n const workbench = ctx.getWorkbench();\n workbench.addLeftPanel({\n title: <Title />,\n name: PLUGIN_NAME,\n icon: <DatabaseOutlined />,\n render: <GlobalStatePanelWithLocalize pluginCtx={ctx} />,\n });\n },\n async destroy() {},\n export: () => {\n return {};\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\nGlobalStatePanelPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","import React, { useRef, useState } from 'react';\nimport { Modal } from 'antd';\nimport { MonacoEditor, MonacoEditorInstance } from '../../component/MonacoEditor';\nimport { CPage } from '@chamn/model';\nimport { waitReactUpdate } from '../../utils';\nimport { DesignerPluginInstance } from '../Designer/type';\nimport { EnginContext } from '@/type';\n\nexport type DisplaySourceSchemaProps = {\n pageModel: CPage;\n engineCtx: EnginContext;\n children: React.ReactNode;\n};\n\nexport const DisplaySourceSchema = (props: DisplaySourceSchemaProps) => {\n const initialValue = props.pageModel.export();\n const { engineCtx } = props;\n const [open, setOpen] = useState(false);\n const editorRef = useRef<MonacoEditorInstance | null>(null);\n return (\n <>\n <div\n onClick={() => {\n setOpen(true);\n }}\n >\n {props.children}\n </div>\n <Modal\n open={open}\n title=\"Source Schema\"\n width={'100%'}\n onCancel={() => setOpen(false)}\n onOk={async () => {\n setOpen(false);\n const newPage = editorRef.current?.getValue();\n if (!newPage) {\n return;\n }\n const newPageJSON = JSON.parse(newPage);\n props.pageModel.updatePage(newPageJSON);\n await waitReactUpdate();\n const currentSelectNode = engineCtx.engine.getActiveNode();\n const designerPluginInstance = await engineCtx.pluginManager.get<DesignerPluginInstance>('Designer');\n const nodeId = currentSelectNode?.id || '';\n designerPluginInstance?.ctx.emitter.on('ready', () => {\n const designerExport = designerPluginInstance.export;\n designerExport.selectNode(nodeId);\n });\n if (designerPluginInstance) {\n const designerExport = designerPluginInstance.export;\n designerExport.selectNode(nodeId);\n }\n }}\n style={{\n height: 'calc(100vh - 50px)',\n top: '25px',\n }}\n destroyOnClose\n >\n <div style={{ width: '100%', height: 'calc(100vh - 200px)' }}>\n <MonacoEditor\n initialValue={JSON.stringify(initialValue, null, 2)}\n language={'json'}\n options={{\n automaticLayout: true,\n }}\n onDidMount={(editor) => {\n editorRef.current = editor;\n }}\n />\n </div>\n </Modal>\n </>\n );\n};\n","import { waitReactUpdate } from '@/utils';\nimport { CPageDataType } from '@chamn/model';\nimport { cloneDeep, debounce } from 'lodash-es';\nimport { CPluginCtx } from '../../core/pluginManager';\nimport { HistoryPluginType } from './type';\n\nconst PLUGIN_NAME = 'History' as const;\n\nexport const HistoryPlugin: HistoryPluginType = (ctx) => {\n const CTX: CPluginCtx | null = ctx;\n const dataStore = {\n historyRecords: [] as CPageDataType[],\n currentStepIndex: 0,\n };\n\n let originalPageRecord: CPageDataType | null = null;\n const pageSchema = ctx.pageModel.export();\n originalPageRecord = pageSchema;\n dataStore.historyRecords.push(pageSchema);\n\n const loadPage = async (page: CPageDataType) => {\n if (!CTX) {\n return;\n }\n CTX.pageModel.reloadPage(page);\n await waitReactUpdate();\n };\n\n const resObj = {\n addStep: () => {\n const { currentStepIndex, historyRecords } = dataStore;\n const newPage = ctx.pageModel.export();\n if (currentStepIndex !== historyRecords.length - 1) {\n dataStore.historyRecords = historyRecords.slice(0, currentStepIndex + 1);\n }\n dataStore.historyRecords.push(newPage);\n dataStore.currentStepIndex = historyRecords.length - 1;\n },\n reset: async () => {\n const ctx = CTX;\n if (!ctx) {\n console.warn('plugin ctx is null, pls check it');\n return;\n }\n if (!originalPageRecord) {\n return;\n }\n dataStore.historyRecords = [];\n loadPage(originalPageRecord);\n },\n preStep: () => {\n const { currentStepIndex, historyRecords } = dataStore;\n if (!resObj.canGoPreStep()) {\n return;\n }\n const newIndex = currentStepIndex - 1;\n dataStore.currentStepIndex = newIndex;\n const page = cloneDeep(historyRecords[newIndex]);\n loadPage(page);\n },\n nextStep: () => {\n if (!resObj.canGoNextStep()) {\n return;\n }\n const { currentStepIndex, historyRecords } = dataStore;\n const newIndex = currentStepIndex + 1;\n dataStore.currentStepIndex = newIndex;\n const page = cloneDeep(historyRecords[newIndex]);\n return loadPage(page);\n },\n canGoPreStep: () => {\n const { currentStepIndex } = dataStore;\n if (currentStepIndex <= 0) {\n return false;\n }\n return true;\n },\n canGoNextStep: () => {\n const { currentStepIndex, historyRecords } = dataStore;\n if (currentStepIndex >= historyRecords.length - 1) {\n return false;\n }\n return true;\n },\n };\n\n const debounceAddStep = debounce(() => {\n resObj.addStep();\n }, 500);\n\n return {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n ctx.pageModel.emitter.on('onNodeChange', () => {\n debounceAddStep();\n });\n ctx.pageModel.emitter.on('onPageChange', () => {\n resObj.addStep();\n });\n ctx.pluginReadyOk();\n },\n async destroy(ctx) {\n console.log('destroy', ctx);\n },\n export: () => {\n return resObj;\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n };\n};\n\nHistoryPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","export const isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false;\n\n// Special Keys\nexport const _keyMap: Record<string, number> = {\n backspace: 8,\n '⌫': 8,\n tab: 9,\n clear: 12,\n enter: 13,\n '↩': 13,\n return: 13,\n esc: 27,\n escape: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n del: 46,\n delete: 46,\n ins: 45,\n insert: 45,\n home: 36,\n end: 35,\n pageup: 33,\n pagedown: 34,\n capslock: 20,\n num_0: 96,\n num_1: 97,\n num_2: 98,\n num_3: 99,\n num_4: 100,\n num_5: 101,\n num_6: 102,\n num_7: 103,\n num_8: 104,\n num_9: 105,\n num_multiply: 106,\n num_add: 107,\n num_enter: 108,\n num_subtract: 109,\n num_decimal: 110,\n num_divide: 111,\n '⇪': 20,\n ',': 188,\n '.': 190,\n '/': 191,\n '`': 192,\n '-': isff ? 173 : 189,\n '=': isff ? 61 : 187,\n ';': isff ? 59 : 186,\n \"'\": 222,\n '[': 219,\n ']': 221,\n '\\\\': 220,\n};\n\n// Modifier Keys\nexport const _modifier: any = {\n // shiftKey\n '⇧': 16,\n shift: 16,\n // altKey\n '⌥': 18,\n alt: 18,\n option: 18,\n // ctrlKey\n '⌃': 17,\n ctrl: 17,\n control: 17,\n // metaKey\n '⌘': 91,\n cmd: 91,\n command: 91,\n};\n\nexport const modifierMap = {\n 16: 'shiftKey',\n 18: 'altKey',\n 17: 'ctrlKey',\n 91: 'metaKey',\n\n shiftKey: 16,\n ctrlKey: 17,\n altKey: 18,\n metaKey: 91,\n};\n\nexport const _mods = {\n 16: false,\n 18: false,\n 17: false,\n 91: false,\n};\n\n// F1~F12 special key\nfor (let k = 1; k < 20; k++) {\n _keyMap[`f${k}`] = 111 + k;\n}\n\n// 返回键码\nexport const defaultGetCode = (x: string) =>\n _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\n\nconst getKey = (x: number) => Object.keys(_keyMap).find((k) => _keyMap[k] === x);\nconst getModifier = (x: number) => Object.keys(_modifier).find((k) => _modifier[k] === x);\n\nexport const getKeyString = (c: number) => {\n return getKey(c) || getModifier(c) || String.fromCharCode(c);\n};\n","import { defaultGetCode, getKeyString } from './keymap';\n\nexport class HotKeysManager {\n private splitStr = '_';\n // 按下的键盘按键列表\n private downKeyCodeList: number[] = [];\n private elements: HTMLElement[];\n private disposeEventCbList: (() => void)[] = [];\n\n /** 是否禁用热键 */\n private disable: boolean = false;\n\n /** 快捷操作按键记录 */\n private hotActionMap: Record<string, () => void> = {};\n\n constructor(options: { elements: HTMLElement[]; customGetKeyCodeByEvent?: (event: KeyboardEvent) => number }) {\n this.elements = options.elements;\n this.init();\n }\n\n setDisable(status: boolean) {\n this.disable = status;\n }\n\n init() {\n // 处理 keyup , 移除按键记录\n const disposeListCb = this.elements.map((el) => this.registerKeyEvent(el));\n this.disposeEventCbList = [...disposeListCb];\n }\n\n addElement(el: HTMLElement) {\n const disposeCb = this.registerKeyEvent(el);\n this.disposeEventCbList.push(disposeCb);\n }\n\n registerKeyEvent(el: HTMLElement) {\n const triggerAction = this.getTriggerHotkeyDebounce();\n // 收集所有的 keys\n const keydownCb = (event: KeyboardEvent) => {\n // 表单控件过滤 默认表单控件不触发快捷键\n if (this.filterInputElement(event)) return;\n\n const key = event.keyCode || event.which || event.charCode;\n if (!this.downKeyCodeList.includes(key)) {\n this.downKeyCodeList.push(key);\n }\n triggerAction();\n };\n el?.addEventListener('keydown', keydownCb);\n\n const keyupCb = (event: KeyboardEvent) => {\n setTimeout(() => {\n // 表单控件过滤 默认表单控件不触发快捷键\n if (this.filterInputElement(event)) return;\n\n const key = event.keyCode || event.which || event.charCode;\n\n const findKeyIndex = this.downKeyCodeList.findIndex((el) => el === key);\n if (findKeyIndex >= 0) {\n this.downKeyCodeList.splice(findKeyIndex, 1);\n }\n\n // 用户释放了所有的按键\n }, 0);\n };\n el?.addEventListener('keyup', keyupCb);\n\n const clearKeyDownList = () => {\n this.downKeyCodeList = [];\n };\n // 修正某些意外情况下,文档失焦,导致快捷键失效等情况\n window?.addEventListener('blur', clearKeyDownList);\n\n return () => {\n el.removeEventListener('keydown', keydownCb);\n el.removeEventListener('keyup', keyupCb);\n window?.removeEventListener('blur', clearKeyDownList);\n };\n }\n\n /** 添加快捷操作 */\n addHotAction(keys: (number | string)[], cb: () => void) {\n const newKeysCode = keys.map((el) => {\n if (typeof el !== 'number') {\n return this.getKeyCodeByLabel(el);\n } else {\n return el;\n }\n });\n this.hotActionMap[newKeysCode.join(this.splitStr)] = () => {\n // 可以自做一些拦截操作\n if (this.disable) {\n return;\n }\n cb();\n };\n }\n\n triggerHotKey() {\n const hotActionId = this.downKeyCodeList.join(this.splitStr);\n // 本次快捷操作回合已经触发过,跳过触发\n const cb = this.hotActionMap[hotActionId];\n\n cb?.();\n }\n\n /**\n * @param time ms\n * @returns\n */\n getTriggerHotkeyDebounce() {\n return this.triggerHotKey.bind(this);\n }\n\n /** 根据可识别的字符串获取对应的键码 */\n getKeyCodeByLabel(label: string) {\n return defaultGetCode(label);\n }\n\n getKeyString(code: number) {\n return getKeyString(code);\n }\n\n /**\n * 表单控件控件判断\n * 如果是编辑控件返回 true\n * hotkey is effective only when filter return true\n * @param event\n * @returns\n */\n filterInputElement(event: KeyboardEvent) {\n const target: any = event.target || event.srcElement;\n if (!target) {\n return false;\n }\n const { tagName } = target as HTMLInputElement;\n let flag = false;\n const isInput =\n tagName === 'INPUT' &&\n !['checkbox', 'radio', 'range', 'button', 'file', 'reset', 'submit', 'color'].includes(target.type);\n // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n if (\n (target as HTMLDivElement).isContentEditable ||\n ((isInput || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly)\n ) {\n flag = true;\n }\n return flag;\n }\n\n destroy() {\n this.disposeEventCbList.forEach((el) => el());\n }\n}\n","export const zh_CN: Record<string, any> = {\n pluginName: '快捷键',\n};\n","export const en_US: Record<string, any> = {\n pluginName: 'Hot Keys',\n};\n","import { zh_CN } from './zh_CN';\nimport { en_US } from './en_US';\nexport default { zh_CN, en_US } as Record<string, any>;\n","import { CPluginCtx } from '@/core/pluginManager';\nimport { DesignerPluginInstance } from '../Designer/type';\nimport { CNode } from '@chamn/model';\nimport { HistoryPluginInstance } from '../History/type';\nimport { message } from 'antd';\n\nexport const actionMap = {\n deleteNode: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n if (activeNode) {\n const flag = await designer?.export?.deleteNode(activeNode.id);\n if (!flag) {\n message.error('该节点不能删除');\n }\n return flag;\n }\n },\n copyNode: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n if (activeNode) {\n const flag = await designer?.export?.copyNode(activeNode.id);\n return flag;\n }\n },\n moveToUp: async (ctx: CPluginCtx) => {\n const res = await actionMap.moveToSiblingUp(ctx);\n if (res) {\n return;\n }\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n const parentNode = activeNode?.parent;\n if (parentNode && parentNode.nodeType !== 'PAGE') {\n const flag = await designer?.export?.selectNode(parentNode.id);\n return flag;\n }\n },\n moveToSiblingUp: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n const parentNode = activeNode?.parent;\n if (parentNode?.nodeType === 'PAGE' || !activeNode) {\n return;\n }\n const parentNodeValue = parentNode?.value as any;\n const children: CNode[] = parentNodeValue.children || parentNodeValue.value;\n const targetIndex = children.findIndex((el) => el.id === activeNode.id);\n const nextIndex = targetIndex - 1;\n if (nextIndex < 0) {\n return;\n }\n const child = children?.[nextIndex] as CNode;\n if (child && (child as any).id) {\n return await designer?.export?.selectNode(child.id);\n }\n },\n moveToDown: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n const activeNode = ctx.engine.getActiveNode();\n const children = activeNode?.value.children;\n const child = children?.[0] as CNode;\n if (child && (child as any).id) {\n return await designer?.export?.selectNode(child.id);\n }\n\n return await actionMap.moveToSiblingDown(ctx);\n },\n moveToSiblingDown: async (ctx: CPluginCtx) => {\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n\n const activeNode = ctx.engine.getActiveNode();\n const parentNode = activeNode?.parent;\n if (parentNode?.nodeType === 'PAGE' || !activeNode) {\n return;\n }\n const parentNodeValue = parentNode?.value as any;\n const children: CNode[] = parentNodeValue.children || parentNodeValue.value;\n const targetIndex = children.findIndex((el) => el.id === activeNode.id);\n const nextIndex = targetIndex + 1;\n if (nextIndex >= children.length) {\n return;\n }\n const child = children?.[nextIndex] as CNode;\n if (child && (child as any).id) {\n return await designer?.export?.selectNode(child.id);\n }\n },\n redo: async (ctx: CPluginCtx) => {\n const historyStack = await ctx.pluginManager.get<HistoryPluginInstance>('History');\n if (historyStack?.export.canGoNextStep()) {\n historyStack?.export.nextStep();\n return true;\n }\n },\n undo: async (ctx: CPluginCtx) => {\n const historyStack = await ctx.pluginManager.get<HistoryPluginInstance>('History');\n if (historyStack?.export.canGoPreStep()) {\n historyStack?.export.preStep();\n return true;\n }\n },\n};\n","import { DesignerPluginInstance } from '../Designer/type';\nimport { HotKeysManager } from './hotKeyManager';\nimport localize from './localize';\nimport { actionMap } from './action';\nimport { HotKeysPluginType } from './type';\n\nconst PLUGIN_NAME = 'Hotkeys' as const;\nconst i18nNamespace = `plugin:${PLUGIN_NAME}`;\n\nexport const HotkeysPlugin: HotKeysPluginType = {\n name: PLUGIN_NAME,\n PLUGIN_NAME,\n async init(ctx) {\n const { i18n } = ctx;\n Object.keys(localize).forEach((lng) => {\n i18n.addResourceBundle(lng, i18nNamespace, localize[lng], true, true);\n });\n\n const designer = await ctx.pluginManager.get<DesignerPluginInstance>('Designer');\n\n const subWin = designer?.export.getDesignerWindow();\n\n const hotkeyManager = new HotKeysManager({\n elements: [window.document.body, subWin!.document.body],\n });\n\n ctx.engine.pageModel.emitter.on('onReloadPage', () => {\n const subWin = designer?.export.getDesignerWindow();\n setTimeout(() => {\n hotkeyManager.addElement(subWin!.document.body);\n }, 1000);\n });\n\n hotkeyManager.addHotAction(['ctrl', 'c'], () => {\n actionMap.copyNode(ctx);\n });\n\n hotkeyManager.addHotAction(['ctrl', 'z'], () => {\n actionMap.undo(ctx);\n });\n\n hotkeyManager.addHotAction(['ctrl', 'shift', 'z'], () => {\n actionMap.redo(ctx);\n });\n\n hotkeyManager.addHotAction(['up'], () => {\n actionMap.moveToUp(ctx);\n });\n\n hotkeyManager.addHotAction(['w'], () => {\n actionMap.moveToUp(ctx);\n });\n\n hotkeyManager.addHotAction(['shift', 'w'], () => {\n actionMap.moveToSiblingUp(ctx);\n });\n\n hotkeyManager.addHotAction(['down'], () => {\n actionMap.moveToDown(ctx);\n });\n\n hotkeyManager.addHotAction(['s'], () => {\n actionMap.moveToDown(ctx);\n });\n\n hotkeyManager.addHotAction(['shift', 's'], () => {\n actionMap.moveToSiblingDown(ctx);\n });\n\n hotkeyManager.addHotAction(['backspace'], () => {\n actionMap.deleteNode(ctx);\n });\n (ctx as any).hotkeyManager = hotkeyManager;\n ctx.pluginReadyOk();\n },\n async destroy(ctx) {\n const hotkeyManager: HotKeysManager = (ctx as any).hotkeyManager;\n hotkeyManager?.destroy();\n },\n export: (ctx) => {\n return {\n /** 注册快捷操作 */\n addHotAction: (actionKey: (string | number)[], cb: () => void) => {\n const hotkeyManager: HotKeysManager = (ctx as any).hotkeyManager;\n hotkeyManager.addHotAction(actionKey, cb);\n },\n disable: (status: boolean) => {\n const hotkeyManager: HotKeysManager = (ctx as any).hotkeyManager;\n hotkeyManager.setDisable(status);\n },\n };\n },\n meta: {\n engine: {\n version: '1.0.0',\n },\n },\n};\n\n/** 必须 */\nHotkeysPlugin.PLUGIN_NAME = PLUGIN_NAME;\n","/* eslint-disable react-refresh/only-export-components */\nimport { CPlugin } from '../core/pluginManager';\nimport { ComponentLibPlugin } from './ComponentLibrary';\nimport { DesignerPlugin } from './Designer';\nimport { OutlineTreePlugin } from './OutlineTree';\nimport { RightPanelPlugin } from './RightPanel';\nimport { GlobalStatePanelPlugin } from './GlobalStatePanel';\nimport { DisplaySourceSchema } from './DisplaySourceSchema';\nimport { HistoryPlugin } from './History';\nimport { HotkeysPlugin } from './Hotkeys';\n\nexport const DEFAULT_PLUGIN_LIST: CPlugin[] = [\n DesignerPlugin,\n OutlineTreePlugin,\n ComponentLibPlugin,\n GlobalStatePanelPlugin,\n RightPanelPlugin,\n HistoryPlugin,\n HotkeysPlugin,\n];\n\nexport {\n DesignerPlugin,\n ComponentLibPlugin,\n RightPanelPlugin,\n OutlineTreePlugin,\n GlobalStatePanelPlugin,\n HistoryPlugin,\n DisplaySourceSchema,\n HotkeysPlugin,\n};\n\n/** 组件唯一名 */\nexport const DEFAULT_PLUGIN_NAME_MAP = {\n HotkeysPlugin: HotkeysPlugin['PLUGIN_NAME']!,\n ComponentLibPlugin: ComponentLibPlugin['PLUGIN_NAME']!,\n RightPanelPlugin: RightPanelPlugin['PLUGIN_NAME']!,\n GlobalStatePanelPlugin: GlobalStatePanelPlugin['PLUGIN_NAME']!,\n HistoryPlugin: HistoryPlugin['PLUGIN_NAME']!,\n DesignerPlugin: DesignerPlugin['PLUGIN_NAME']!,\n OutlineTreePlugin: OutlineTreePlugin['PLUGIN_NAME']!,\n};\n\nexport * from './AdvancePanel/index';\nexport * from './ComponentLibrary/index';\nexport * from './ComponentStatePanel/index';\nexport * from './Designer/index';\nexport * from './DisplaySourceSchema/index';\nexport * from './GlobalStatePanel/index';\nexport * from './History';\nexport * from './OutlineTree';\nexport * from './PropertyPanel';\nexport * from './RightPanel';\nexport * from './RightPanel/type';\nexport * from './VisualPanelPlus';\nexport * from './Hotkeys';\n","import { DesignerPluginInstance } from '@/plugins/Designer/type';\nimport { EnginContext } from '@/type';\nimport { BorderOutlined, MobileOutlined } from '@ant-design/icons';\nimport { InputNumber, Segmented, Space } from 'antd';\nimport { debounce } from 'lodash-es';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nexport const DesignerSizer = (props: { ctx: EnginContext }) => {\n const designerRef = useRef<DesignerPluginInstance>();\n\n const [currentSize, setCurrentSize] = useState('AUTO');\n const [width, setWith] = useState(1200);\n const getSubWindowWidth = useCallback(() => {\n const designer = designerRef.current;\n const subWin = designer?.export.getDesignerWindow();\n const w = subWin?.innerWidth;\n setWith(Number(w));\n }, []);\n\n useEffect(() => {\n let resizeHandler: any;\n let subWin: Window | null;\n props.ctx.pluginManager.onPluginReadyOk('Designer').then((designer: DesignerPluginInstance) => {\n designerRef.current = designer;\n subWin = designer?.export.getDesignerWindow();\n resizeHandler = () => {\n setWith(Number(subWin?.innerWidth));\n };\n subWin?.addEventListener('resize', resizeHandler);\n getSubWindowWidth();\n });\n\n return () => {\n subWin?.removeEventListener('resize', resizeHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const setCanvasWidth = useCallback(\n debounce((w: number) => {\n const designer = designerRef.current;\n designer?.export.setCanvasWidth(w);\n }, 100),\n []\n );\n return (\n <Space>\n <Segmented\n defaultValue={currentSize}\n onChange={(value) => {\n const designer = designerRef.current;\n if (!designer) {\n return;\n }\n if (value === 'AUTO') {\n designer.export.setCanvasWidth('100%');\n getSubWindowWidth();\n } else if (value === 'IPAD') {\n designer.export.setCanvasWidth(768);\n } else {\n designer.export.setCanvasWidth(350);\n }\n setCurrentSize(value);\n }}\n options={[\n {\n label: (\n <span>\n <span\n onClick={() => {\n const designer = designerRef.current;\n designer?.export.setCanvasWidth('100%');\n getSubWindowWidth();\n }}\n >\n Auto\n </span>\n {currentSize === 'AUTO' && (\n <InputNumber\n size=\"small\"\n style={{\n marginLeft: '10px',\n }}\n controls={false}\n changeOnWheel\n suffix=\"px\"\n value={width}\n min={350}\n max={1920}\n onChange={(val) => {\n setWith(Number(val));\n setCanvasWidth(Number(val));\n }}\n ></InputNumber>\n )}\n </span>\n ),\n value: 'AUTO',\n },\n {\n label: <BorderOutlined />,\n value: 'IPAD',\n },\n {\n label: <MobileOutlined />,\n value: 'MOBILE',\n },\n ]}\n />\n </Space>\n );\n};\n","import { CMaterialPropsType } from '@chamn/model';\n\nexport const containerProps: CMaterialPropsType<'FastLayoutSetter'> = [\n {\n name: 'style',\n title: '布局',\n valueType: 'string',\n setters: [\n {\n componentName: 'FastLayoutSetter',\n initialValue: {},\n hiddenLabel: true,\n props: {},\n },\n ],\n },\n];\n","import { CMaterialPropsType, CMaterialType, DEFAULT_EVENT_LIST, HTMl_TAGS } from '@chamn/model';\nimport { capitalize } from 'lodash-es';\nimport { containerProps } from './container.meta';\n\nconst customAttributesMeta: CMaterialPropsType[number] = {\n name: '$$attributes',\n title: '属性',\n valueType: 'object',\n setters: [\n {\n componentName: 'ArraySetter',\n props: {\n collapse: {\n open: true,\n },\n sortLabelKey: 'key',\n item: {\n setters: [\n {\n componentName: 'ShapeSetter',\n props: {\n elements: [\n {\n name: 'key',\n title: '属性名',\n valueType: 'string',\n setters: ['StringSetter'],\n },\n {\n name: 'value',\n title: '值',\n valueType: 'string',\n setters: ['StringSetter', 'NumberSetter', 'JSONSetter', 'FunctionSetter', 'ExpressionSetter'],\n },\n ],\n },\n initialValue: {},\n },\n ],\n initialValue: {},\n },\n },\n initialValue: [],\n },\n ],\n};\n\nconst groupName = '内置组件';\nconst categoryName = '原子组件';\n\nconst INNER_META_VERSION = '1.0.0';\nconst PKG_NAME = 'CHAMELEON_INNER_PKG';\n\nconst htmlNativeComponentMeta = HTMl_TAGS.map((tag) => {\n const DivMeta: CMaterialType = {\n title: capitalize(tag),\n componentName: tag,\n props: [customAttributesMeta],\n snippets: [],\n npm: {\n name: tag,\n package: PKG_NAME,\n version: INNER_META_VERSION,\n },\n };\n\n return DivMeta;\n});\n\nconst BaseComponentMeta: CMaterialType[] = [\n {\n title: '块',\n componentName: 'CBlock',\n props: [\n {\n name: 'children',\n title: '文本',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n groupName: groupName,\n snippets: [\n {\n title: '块',\n snapshotText: 'Block',\n category: categoryName,\n schema: {\n props: {},\n css: {\n value: [\n {\n state: 'normal',\n media: [],\n text: 'background: white ; width: 100%; height: 100px',\n },\n ],\n },\n },\n },\n ],\n },\n {\n title: '容器',\n componentName: 'CContainer',\n isContainer: true,\n props: [...(containerProps as any), customAttributesMeta],\n groupName: groupName,\n snippets: [\n {\n title: '容器',\n snapshotText: 'Con',\n category: categoryName,\n schema: {\n css: {\n value: [\n {\n state: 'normal',\n media: [],\n text: 'background: white;width: 100%;',\n },\n ],\n },\n },\n },\n ],\n },\n {\n title: '图片',\n componentName: 'CImage',\n props: [\n {\n name: 'src',\n title: '地址',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n advanceCustom: {\n wrapComponent: (comp) => {\n return (props: any) => {\n const Comp = comp;\n return <Comp {...props} style={{ ...(props.style || {}), userSelect: 'none', WebkitUserDrag: 'none' }} />;\n };\n },\n },\n\n groupName: groupName,\n snippets: [\n {\n title: '图片',\n snapshotText: 'Img',\n category: categoryName,\n schema: {\n css: {\n value: [\n {\n text: 'background:white;width:500px;height:300px;overflow:auto;',\n media: [],\n state: 'normal',\n },\n ],\n },\n props: {\n src: 'https://images.unsplash.com/photo-1584080277544-2db5b2c2d9dd?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1470&q=80',\n },\n },\n },\n ],\n },\n {\n title: '视频',\n componentName: 'CVideo',\n props: [\n {\n name: 'src',\n title: '地址',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n {\n name: 'autoPlay',\n title: '自动播放',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'controls',\n title: '控制面板',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n fixedProps: {\n autoPlay: false,\n },\n advanceCustom: {\n wrapComponent: (Comp) => {\n return (props) => {\n // 原生的控制面板会阻断页面级别的事件监听,导致拖拽失效,这里在编辑态禁用 video 的控制面板相关事件触发\n return (\n <div\n style={{\n ...props.style,\n display: 'inline-flex',\n }}\n >\n <Comp\n {...props}\n style={{\n ...props.style,\n pointerEvents: 'none',\n }}\n ></Comp>\n </div>\n );\n };\n },\n },\n groupName: groupName,\n snippets: [\n {\n title: '视频',\n snapshotText: 'Video',\n category: categoryName,\n schema: {\n props: {\n src: 'https://vjs.zencdn.net/v/oceans.mp4',\n },\n css: {\n value: [\n {\n state: 'normal',\n media: [],\n text: 'background:white;width:300px;height:150px;',\n },\n ],\n },\n },\n },\n ],\n },\n {\n title: '音频',\n groupName: groupName,\n componentName: 'CAudio',\n props: [\n {\n name: 'src',\n title: '地址',\n valueType: 'string',\n setters: ['StringSetter', 'ExpressionSetter'],\n },\n {\n name: 'autoPlay',\n title: '自动播放',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n {\n name: 'controls',\n title: '控制面板',\n valueType: 'string',\n setters: ['BooleanSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n advanceCustom: {\n wrapComponent: () => {\n return (props) => {\n return (\n <div\n style={{\n display: 'inline-block',\n fontSize: 0,\n }}\n >\n <audio\n {...props}\n style={{\n pointerEvents: 'none',\n ...props.style,\n }}\n ></audio>\n </div>\n );\n };\n },\n },\n snippets: [\n {\n title: '音频',\n snapshotText: 'Audio',\n category: categoryName,\n schema: {\n props: {\n src: 'https://vjs.zencdn.net/v/oceans.mp4',\n controls: true,\n },\n },\n },\n ],\n },\n {\n title: '文本',\n componentName: 'CText',\n groupName: groupName,\n props: [\n {\n name: 'content',\n title: '内容',\n valueType: 'string',\n setters: ['TextAreaSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n snippets: [\n {\n title: '文本',\n snapshotText: 'Text',\n category: categoryName,\n schema: {\n props: {\n content: 'text',\n },\n },\n },\n ],\n },\n {\n title: 'Canvas',\n componentName: 'CCanvas',\n props: [\n {\n name: 'afterMount',\n title: '渲染之后',\n valueType: 'function',\n setters: ['FunctionSetter', 'ExpressionSetter', 'ActionFlowSetter' as any],\n },\n {\n name: 'beforeDestroy',\n title: '销毁之前',\n valueType: 'function',\n setters: ['FunctionSetter', 'ExpressionSetter'],\n },\n customAttributesMeta,\n ],\n groupName: groupName,\n advanceCustom: {\n onNewAdd: async (node) => {\n const props = node.getPlainProps();\n const id = Math.random().toString(32).slice(3, 9);\n props.$$attributes = [\n {\n key: 'id',\n value: id,\n },\n {\n key: 'style',\n value: {\n display: 'block',\n margin: '0 auto',\n },\n },\n ];\n props.afterMount.value = props.afterMount.value.replace('$[id]', id);\n node.updateWithPlainObj({\n props,\n });\n return {\n addNode: node,\n };\n },\n },\n snippets: [\n {\n title: '画布',\n snapshotText: 'Cavs',\n category: categoryName,\n schema: {\n props: {\n width: '600px',\n height: '150px',\n style: {\n margin: '0 auto',\n },\n afterMount: {\n type: 'FUNCTION',\n value: `\n function run () {\n var ctx = document.getElementById(\"$[id]\").getContext(\"2d\");\n ctx.font = \"48px serif\";\n ctx.fillText(\"Hello Canvas\", 10, 50);\n }\n `,\n },\n },\n },\n },\n ],\n },\n {\n title: 'HTML 标签',\n componentName: 'CNativeTag',\n props: [\n {\n name: 'htmlTag',\n title: '标签名',\n valueType: 'string',\n setters: [\n {\n componentName: 'SelectSetter',\n props: {\n options: HTMl_TAGS.map((tag) => {\n return {\n name: tag,\n value: tag,\n };\n }),\n },\n },\n ],\n },\n customAttributesMeta,\n ],\n isContainer: true,\n groupName: groupName,\n snippets: [\n {\n title: 'HTML',\n snapshotText: 'HTML',\n category: categoryName,\n schema: {\n props: {\n htmlTag: 'div',\n },\n },\n },\n ],\n },\n];\nBaseComponentMeta.forEach((el) => {\n el.events = DEFAULT_EVENT_LIST;\n});\n\nconst BaseComponentMetaWithVersion = BaseComponentMeta.map((el) => {\n return {\n ...el,\n npm: {\n name: el.componentName,\n package: PKG_NAME,\n version: INNER_META_VERSION,\n },\n };\n});\n\nexport const InnerComponentMeta = [...BaseComponentMetaWithVersion, ...htmlNativeComponentMeta];\n","/* eslint-disable react-refresh/only-export-components */\nimport React from 'react';\nimport { TWidgetVisible, Workbench } from './component/Workbench';\nimport { loader } from '@monaco-editor/react';\n\nimport styles from './Engine.module.scss';\nimport i18n from './i18n/index';\nimport { PluginManager } from './core/pluginManager';\nimport mitt, { Emitter } from 'mitt';\nimport { AssetPackage, CMaterialType, CNode, CPage, CPageDataType, CRootNode, EmptyPage } from '@chamn/model';\nimport { getDefaultRender, beforeInitRender } from './utils/defaultEngineConfig';\nimport { DesignerPluginInstance } from './plugins/Designer/type';\nimport clsx from 'clsx';\nimport { AssetLoader, ComponentsType, collectVariable } from '@chamn/render';\nimport { AssetsPackageListManager } from './core/assetPackagesListManage';\nimport { flatObject } from '@chamn/render';\nimport customI18n from './i18n/index';\nimport { EngineProps } from './type';\n\nexport class Engine extends React.Component<EngineProps> {\n static version = __PACKAGE_VERSION__;\n currentSelectNode: CNode | CRootNode | null;\n\n pluginManager!: PluginManager;\n workbenchRef = React.createRef<Workbench>();\n pageSchema: CPageDataType | undefined;\n pageModel: CPage;\n material: CMaterialType[] | undefined;\n emitter: Emitter<any>;\n assetsPackageListManager: AssetsPackageListManager;\n\n workbenchConfig?: EngineProps['workbenchConfig'] = {};\n _oldHiddenWidgetConfig:\n | { hiddenTopBar: boolean | undefined; hiddenLeftPanel: boolean | undefined; hiddenRightPanel: boolean | undefined }\n | undefined;\n\n constructor(props: EngineProps) {\n super(props);\n this.pageSchema = props.schema;\n this.material = props.material;\n this.currentSelectNode = null;\n (window as any).__CHAMELEON_ENG__ = this;\n this.assetsPackageListManager = new AssetsPackageListManager(props.assetPackagesList || []);\n this.workbenchConfig = props.workbenchConfig || {};\n\n if (props.monacoEditor?.cndUrl) {\n loader.config({\n paths: {\n vs: props.monacoEditor?.cndUrl,\n },\n });\n }\n\n try {\n this.pageModel = new CPage(this.pageSchema, {\n materials: this.material || [],\n assetPackagesList: props.assetPackagesList || [],\n });\n } catch (e) {\n console.error(e);\n this.pageModel = new CPage(EmptyPage);\n }\n this.emitter = mitt();\n }\n\n updateCurrentSelectNode(node: CNode | CRootNode | null) {\n this.currentSelectNode = node;\n this.emitter.emit('onSelectNodeChange', {\n node,\n });\n }\n\n async componentDidMount() {\n (window as any).__C_ENGINE__ = this;\n const plugins = this.props.plugins;\n const pluginManager = new PluginManager({\n engine: this,\n getWorkbench: () => this.workbenchRef.current!,\n emitter: this.emitter,\n pageModel: this.pageModel,\n i18n,\n assetsPackageListManager: this.assetsPackageListManager,\n });\n this.pluginManager = pluginManager;\n // 使用默认的渲染策略\n pluginManager.customPlugin<DesignerPluginInstance>('Designer', (pluginInstance) => {\n pluginInstance.ctx.config.beforeInitRender = beforeInitRender;\n pluginInstance.ctx.config.customRender = getDefaultRender({\n components: this.props.components || {},\n renderProps: this.props.renderProps || {},\n });\n pluginInstance.ctx.config.components = this.props.components;\n return pluginInstance;\n });\n this.props.beforePluginRun?.({\n pluginManager: this.pluginManager,\n });\n\n const pList = plugins.map((p) => {\n return this.pluginManager.add(p);\n });\n\n this.props.onMount?.({\n pluginManager: this.pluginManager,\n engine: this,\n });\n\n await Promise.all(pList);\n\n this.pageModel.emitter.on('onReloadPage', () => {\n if (!this.currentSelectNode) {\n return;\n }\n const newSelectNode = this.pageModel.getNode(this.currentSelectNode?.id);\n if (newSelectNode) {\n this.updateCurrentSelectNode(newSelectNode);\n }\n });\n\n this.props.onReady?.({\n pluginManager: this.pluginManager,\n engine: this,\n });\n }\n\n getActiveNode() {\n if (!this.currentSelectNode?.id) {\n return null;\n }\n const node = this.pageModel.getNode(this.currentSelectNode.id) ?? null;\n this.currentSelectNode = node;\n return node;\n }\n\n updatePage = (page: CPageDataType) => {\n this.pageModel.updatePage(page);\n };\n\n updateMaterials = async (\n materials: CMaterialType[],\n assetPackagesList: AssetPackage[],\n options?: {\n formatComponents?: (componentMap: ComponentsType) => ComponentsType;\n }\n ) => {\n const designerPlugin = await this.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerPluginExport = designerPlugin?.export;\n\n this.pluginManager.assetsPackageListManager.setList(assetPackagesList);\n this.pageModel.assetPackagesList = this.pluginManager.assetsPackageListManager.getList();\n\n const subWin = designerPluginExport?.getDesignerWindow();\n\n if (!subWin) {\n console.warn('subWin not exits');\n return;\n }\n\n // 从子窗口获取物料对象\n const assetLoader = new AssetLoader(assetPackagesList, subWin);\n await assetLoader.load();\n const componentCollection = collectVariable(assetPackagesList, subWin);\n // 排平\n let newComponents = flatObject(componentCollection);\n if (options?.formatComponents) {\n newComponents = options.formatComponents(newComponents);\n }\n // 更新 render 中的组件库\n designerPluginExport?.updateRenderComponents(newComponents);\n this.pageModel.materialsModel.addMaterials(materials);\n this.emitter.emit('updateMaterials');\n };\n\n refresh = async () => {\n this.pageModel.reloadPage(this.pageModel.export('design'));\n };\n\n getWorkbench = () => {\n return this.workbenchRef.current;\n };\n\n /** return i18n object */\n getI18n() {\n return customI18n;\n }\n\n /** 进入预览模式 */\n async preview() {\n const oldHiddenWidgetConfig = this.workbenchRef.current?.getHiddenWidgetConfig();\n this._oldHiddenWidgetConfig = oldHiddenWidgetConfig;\n this.workbenchRef.current?.hiddenWidget({\n hiddenLeftPanel: true,\n hiddenRightPanel: true,\n hiddenTopBar: true,\n canvasFull: true,\n });\n\n const designerPlugin = await this.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerPluginExport = designerPlugin?.export;\n designerPluginExport?.setPreviewMode();\n }\n\n async existPreview() {\n this.workbenchRef.current?.hiddenWidget({\n ...(this._oldHiddenWidgetConfig || {}),\n canvasFull: false,\n });\n const designerPlugin = await this.pluginManager.get<DesignerPluginInstance>('Designer');\n const designerPluginExport = designerPlugin?.export;\n designerPluginExport?.setEditMode();\n }\n\n hiddenWidget(config: Partial<TWidgetVisible>) {\n this.workbenchRef.current?.hiddenWidget(config || {});\n }\n\n render() {\n return (\n <div className={clsx([styles.engineContainer, this.props.className])} style={this.props.style}>\n <Workbench ref={this.workbenchRef} emitter={this.emitter} {...this.workbenchConfig} />\n </div>\n );\n }\n}\n\nexport * as plugins from './plugins';\nexport * from './plugins';\nexport * from './component';\nexport * from '@chamn/layout';\n\nexport * from './material/innerMaterial';\nexport * from './component/CustomSchemaForm/components/Setters/type';\nexport * from './utils/index';\n\n/** 注册自定义 setter */\nexport { registerCustomSetter } from './component/CustomSchemaForm/components/Form';\n\nexport * from './type';\nexport * from './core/pluginManager';\nexport * from './core/assetPackagesListManage';\n"],"names":["styleArr2Obj","val","res","item","styleObjToArr","obj","tempRes","key","styleList2Text","formatStyleProperty","styleList","isPlainObject","normalProperty","expressionProperty","allProperty","it","isExpression","formatCSSTextProperty","cssText","ast","csstree","cssList","node","getRandomStr","formatCssToNodeVal","className","state","currentStateCss","tempVal","mediaKey","formatNodeValToEditor","list","el","tempStyle","_a","getColorFromStr","str","hexColorPattern","rgbaColorPattern","rgbColorPattern","hsbColorPattern","hexColors","rgbaColors","rgbColors","hsbColors","parseBoxShadowString","colorsList","color16Map","c","Color","tempStr","shadowItem","newStr","color","newStrArr","sizeArr","i","AssetsPackageListManager","assets","__publicField","newAssets","tempList","newList","getUniqueAssetsList","idMap","beforeInitRender","iframe","subWin","getDefaultRender","options","iframeContainer","page","pageModel","ready","renderJSUrl","iframeWindow","iframeDoc","IframeReact","IframeReactDOM","CRender","pageInfo","allAssets","allLibs","collectVariable","componentsLibs","flatObject","thirdLibs","getThirdLibs","App","designRenderInstance","LOGGER","consola","waitReactUpdate","time","cb","resolve","ensureKeyExist","defaultValue","sageJSONParse","jsonStr","errorValue","Workbench","React","props","panel","panelName","newPanel","targetIndex","newPanels","currentActiveLeftPanel","newActive","leftBoxVisible","rightBoxSize","newView","rightBoxVisible","newVisible","_e","_direction","_ref","d","newW","mitt","config","view","newViewList","leftBoxSize","leftBoxFixed","leftPanels","bodyView","rightView","topToolBarView","subTopToolBarView","customViewList","hiddenTopBar","hiddenLeftPanel","hiddenRightPanel","leftBoContentStyle","currentActivePluginObj","CurrentPluginRenderView","onPluginIconClick","toggleRightPanel","toggleLeftPanel","onLeftBoxResizeStop","jsxs","styles","jsx","clsx","pl","Resizable","Button","PushpinOutlined","CloseOutlined","DoubleRightOutlined","createPortal","zh_CN","en_US","resources","i18n","initReactI18next","customI18n","PluginManager","getWorkbench","emitter","assetsPackageListManager","engine","pluginName","customPluginHook","customPluginHooks","hookList","plugin","ctx","innerPlugin","pluginCtx","pluginInstance","name","p","pluginObj","newPluginObj","localize$4","DragComponentItem","dragInfo","DRAG_ITEM_KEY","icon","useMemo","contentView","Popover","ListView","dataSource","defaultActiveKey","items","category","Collapse","getTargetMNodeKeyVal","dom","searchComponentSnippets","componentList","searchKeyWords","newResList","searchString","snippets","hit","_b","_c","_d","PLUGIN_NAME","i18nNamespace","TabTitle","children","ComponentLibView","visible","targetDom","targetNodeId","meta","containerRef","designerHandle","dnd","boxSensor","Sensor","eventObj","newNode","designerExport","dragStart","workbench","event","selectedNodeId","selectedNode","containerNode","findContainerNode","pos","dropNode","isPageModel","rootNode","designerInstance","addFlag","addNodeInfo","materialsModel","allSnippets","df","localize","lng","componentsList","searchResultList","searchMode","toAddNewNode","CustomSearchBar","capitalize","defaultSearchValue","Input","SearchOutlined","e","Tabs","ComponentLibPlugin","ComponentLibViewWithLocalize","withTranslation","Title","t","Fragment","AppstoreAddOutlined","localize$3","LayoutSelect","onSelect","hover","setHover","useState","getDefaultToolbarItem","nodeList","toSelectNode","toDelete","toCopy","toHidden","currentNode","parentNodeItems","nodeMeta","label","copyItem","CopyOutlined","deleteItem","DeleteOutlined","visibleItem","EyeInvisibleOutlined","nodeLayout","DefaultSelectToolBar","getClosestNodeList","level","count","isNodeModel","GhostView","AdvanceCustomHook","dragNode","nodeAdvanceCustom","dropNodeAdvanceCustom","commonParams","canAcceptFlag","material","resNode","onCopy","newRes","onDelete","Designer","extraData","layoutRef","dropPosInfo","posFlag","_f","_g","_h","_i","_j","_k","flag","toolbarView","commonParam","canDragFlag","dragFlag","ghostView","CustomGhostView","nodeId","id","cpNode","targetNodeModel","devState","toolbarProps","defaultToolbarItem","ToolbarView","newState","selectViewProps","selectRectViewRender","Comp","selectNode","hoverViewProps","hoverRectViewRender","dropViewProps","dropViewRender","newComponentMap","newComponents","layoutInstance","onSelectNode","onDragStart","onHoverNode","onNodeDrop","onNodeDragging","onNodeDragEnd","hoverToolbarView","selectToolbarView","portalView","advanceCustomProps","Layout","DesignerPlugin","designerRef","newMode","LayoutMode","width","map","transformNodeSchemaToTreeData","nodeSchema","parent","tb","nodeChild","newCurrentNode","propsNodeList","slotNode","treeNodeView","processProps","keys","isJSSlotPropNode","pageModeNode","propsTitle","tempTitle","getPropsLabel","getMTitle","plainTitle","tempNode","propValue","newKey","index","nodeModel","keyPath","propsLabelMap","getNodePropsLabelMap","newKeyPath","childNodeList","transformPageSchemaToTreeData","pageSchema","tree","child","traverseTree","handler","tempTree","stop","traverseCb","conditionCb","calculateDropPosInfo","params","point","mousePos","targetRect","targetDomH","xCenter","yCenter","resMap","singleProcessUnit","paths","newPaths","objSetter","componentName","arrItemSetter","parentTitle","currentTitle","newObjPaths","it2","targetItem","isSpecialMaterialPropType","itemArr","DragState","CTreeContext","TreeNode","allStateRef","useRef","nodeVisible","setNodeVisible","ctxState","updateState","onDeleteNode","getDesignerHandler","onCopyNode","useContext","titleEditable","setTitleEditable","editInputValue","setEditInputValue","expanded","toggleExpandNode","open","newExpandKeys","selected","titleEditInputRef","toggleSelectNode","newKeys","singPadding","indent","canBeSelected","dragKeyProps","updateExpandKeyRef","ctxStateRef","oldExpandKeys","domRef","useEffect","timerHandler","clickHandle","sunWin","designerPluginInstance","designerHandler","win","toggleNodeVisible","titleView","compInstances","RightOutlined","inputValue","EyeOutlined","TreeView","plainTreeData","tempTreeData","targetKey","treeData","target","parentPaths","parentNode","targetNode","sensor","targetTreeNode","nodeCanDragRes","canDragResInfo","startNode","dropInfo","nodeCanDropRes","dropDom","rect","newDropInfo","currentSelectNode","dragState","sk","designer","newVal","message","localize$2","OutlineTreePlugin","TreeViewWithLocalize","ApartmentOutlined","REACT_FLOW_DRAG_CLASS_NAME","INPUT_HANDLE_ID","OUTPUT_HANDLE_ID","REQUEST_API_FAILED_HANDLE_ID","CFormContext","CUSTOM_SETTER_MAP","registerCustomSetter","customSetterMap","CForm","data","conditionConfig","changeKeys","StringSetter","onValueChange","setterContext","initialValue","internalValue","setInternalValue","lastExternalValueRef","externalValue","ConfigProvider","newValue","finalValue","NumberSetter","InputNumber","value","getSetterList","setters","setter","setterTypeMap","getValueType","getDefaultSetterByValue","setterList","valueType","setterName","ArrayItem","keyPaths","style","objectValue","formRef","SetterSwitcher","SortItemOrderModal","sortLabelKey","modalProps","listValue","setListValue","innerList","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","active","over","oldIndex","newIndex","newInnerListVal","arrayMove","modalTransform","setModalTransform","Modal","modal","DndContext","delta","ModalDragView","restrictToVerticalAxis","SortableContext","SortableItem","transform","setNodeRef","attributes","listeners","tempTransform","useDraggable","finalTransform","CSS","transition","useSortable","labelText","formatValue","ArraySetter","itemInitialValue","itemLabelPrefix","itemLabelPrefixKey","sortVisible","setSortVisible","innerSetters","ShapeSetter","elements","title","tip","getMTitleTip","MonacoEditor","handleEditorBeforeMount","monaco","handleEditorDidMount","editor","Editor","DefaultTslibSource","quicktypeJSON","typeName","jsonString","jsonInput","jsonInputForTargetLanguage","inputData","InputData","quicktype","getPageTypeDefined","stateTypeMap","pList","traversePageNode","InnerComponentNameEnum","globalStateDts","pageStateDts","nodeIdList","k","body","getBodyDefined","dtsContent","currentNodeDtsText","dtsStr","ExpressionSetter","editorOptions","mode","editorRef","setOpen","onInnerValueChange","newValStr","CNodePropsTypeEnum","lineNumberOptions","editorView","realtimeDts","libUri","BooleanSetter","Switch","SelectSetter","Select","option","MoveableModal","oldValue","EditorConfig","JsonEditor","onChange","height","oldValueRef","oldVal","editorInstance","JSONSetter","FunctionSetter","TextAreaSetter","valueValidator","checkValueStatus","setCheckValueStatus","validateValue","CSSSourceInfo","CSSProperties","CSSPropertyList","CSSValueSetter","propertyKey","propertyValueRef","innerValue","setInnerVal","focusState","setFocusState","updateOuterValue","optionsValue","AutoComplete","ColorSetter","SketchPicker","newColor","newColorStr","DEFAULT_PRESET_COLORS","AntDColorSetter","restProps","ColorPicker","SliderSetter","Slider","RadioGroupSetter","Radio","InputNumberPlus","min","max","addonAfter","updateInnerVal","processUpdateVal","num","resVal","isLegal","newNum","UNIT_LIST","useDragSize","cumulativeInfo","processEnd","useCallback","processing","onMouseDown","processMove","start","tempCumulativeX","tempCumulativeY","shakeDIstance","startInfo","minX","maxX","globalMoveDispose","addEventListenerReturnCancel","globalUpDispose","globalLeaveDispose","CSSSizeInput","outValue","dragSizing","setDragSizing","originalValObj","unit","currentUnitList","currentMinMix","valObj","updateValue","valStr","processNewVal","cumulativeData","onDragMoveChange","nV","onDragEnd","handleRef","dragSizeHandle","unitSelect","CSSSizeSetter","keyList","getDefaultValue","maxVal","DimensionInput","forwardRef","ref","innerVal","noTrigger","finalVal","pick","useImperativeHandle","realValue","Row","Col","ArrowRightFromLine","ArrowLeftFromLine","ArrowDownFromLine","ArrowUpFromLine","SquareX","AlignHorizontalDistributeStart","AlignHorizontalDistributeEnd","StretchVertical","AlignHorizontalSpaceBetween","AlignHorizontalSpaceAround","AlignVerticalJustifyStart","AlignVerticalJustifyEnd","StretchHorizontal","AlignVerticalSpaceBetween","AlignVerticalSpaceAround","MoveHorizontal","MoveVertical","inputW","getEmptyVal","MarginAndPaddingInput","outVal","prefix","CustomColorPicker","setColor","FONT_CSS_KEY_LIST","alignOptions","fontWeightOptions","FontInput","colorRef","CSS_BORDER_KEY_LIST","BorderInput","emptyVal","currentEditVal","tmpVal","updateSingleBorderVal","newBorderVal","CloseCircleOutlined","CSS_BACKGROUND_KEY_LIST","BackgroundInput","ShadowInput","newUpdateVal","boxShadowStr","parseCssToObject","css","result","selector","declarations","declaration","prop","getCssCodeFromStyleObj","styleObj","CSSCodeEditor","valueRef","isEqual","newValObj","StyleUIPanel","initialVal","noCard","setMode","dimensionRef","marinRef","paddingRef","borderRef","backgroundRef","shadowRef","fontRef","cssCodeEditorRef","inputRefs","tempValueRef","onStyleItemChange","omitBy","isNil","coreEditView","Card","SquareCode","Component","FastLayoutSetter","resetProps","cssUIRef","lastNode","initialValueInner","newStyle","updatePanelValue","newNormaCss","newStyleList","emptyValMap","EmptyValueSetter","emptyValue","hiddenDefaultOption","tempValue","BUILD_IN_SETTER_MAP","CField","tips","hiddenLabel","errorInfo","setErrorInfo","labelView","formState","updateContext","updateConditionConfig","canRender","newTip","Tooltip","newChildren","isValidElement","extraProps","rules","checkResult","checkValue","Alert","QuestionCircleOutlined","pass","errorMsg","CCustomSchemaFormContext","SetterSwitcherCore","currentSetter","setCurrentSetter","customSetterMapProp","defaultSetterConfig","allSetterMap","InnerSetters","currentSetterName","st","CurrentSetterComp","outerSetter","condition","useField","setVisible","onSetterChange","SetterTypeEnum","menuItems","setterRuntime","switcher","onChooseSetter","targetSetter","Dropdown","SwapOutlined","setterProps","newProps","collapseHeaderExt","setCollapseHeaderExt","labelWidth","labelAlign","collapse","specialSetter","filedView","cFiledProps","renderCollapse","collapseObj","extraHeaderContent","CustomSchemaFormCore","originProperties","properties","property","CustomSchemaForm","getNodeInfo","traverse","nodes","SelectNodeModal","onCancel","onOk","boxDomRef","TreeSelect","treeNode","nodeInfo","SelectNodeByTree","modalOpen","setModalOpen","setInnerValue","nodeTitle","SelectNodeState","Space","isValidJSVariableName","DEFAULT_NODE_LIST","LogicType","AssignValueType","CreateNewNodePopup","handleOpenChange","newOpen","InputHandle","Handle","Position","OutputHandle","NodeCard","nodeProps","customHandle","outHandleNewNodeAdd","useCardStyle","outputHandle","inputHandle","isConnectable","reactFlowInstance","useReactFlow","outputNodeHasConnected","UseNodeHasConnected","handleNewNodeAdd","newNodeData","newEdge","getNewNodePosInfo","customHandleView","HolderOutlined","ActionFlowContext","createContext","useActionFlow","context","CFiledWithSwitchSetter","defaultSetterName","AssignValueNode","onDataChange","DEV_CONFIG_KEY","devConfigObj","isReady","setIsReady","formValue","setFormValue","CommonDynamicValueSetter","StartNode","ARGS_PREFIX","getArgsObjFormSchema","methodName","formatArgsObjToArray","formatArgsToObject","valArr","CallNodeMethodNode","methodList","methodListOptions","argsFormSchema","updateKeySetterConfig","JumpLinkNode","defaultLinkSetter","isFunction","requestParamsSchemaSetterList","methodOptions","RequestAPINode","pluginConfig","CustomAPISelectInput","checkHandleConnection","handleId","edge","isOutputHandleConnected","isAfterFailedResponseHandleConnected","formHandler","newValueObj","tabItems","handleType","offsetX","newNodePosition","newFormData","RunCodeNode","NODE_TYPE","NODE_MAP","calculateElementLayout","edges","g","Dagre","position","x","y","createFlowNode","nodeData","createFlowEdge","source","sourceHandle","parseActionLogicToNodeList","processNodes","nextItem","revertNodeToActionLogic","nodeMap","visited","traverseNodes","currentNodeId","handlers","successTargets","failedTargets","nextEdges","nextHandlers","ActionFlowSetterCore","fitView","flowMount","setFlowMount","setNodes","onNodesChange","useNodesState","setEdges","onEdgesChange","useEdgesState","latesEdgesRef","onConnect","eds","addEdge","latestNodeRef","dataReady","setDataReady","layoutGraph","layoutInfo","saveData","newSchemaValue","ReactFlow","changes","connection","Background","Controls","MiniMap","ActionFlowSetter","newValueRef","disableLowcodeHotKey","status","hotkey","triggerView","ReactFlowProvider","BUILD_IN_ADVANCE_SETTER_MAP","PropertyPanel","handel","PropertyPanelConfig","ComponentStatePanel","nodeState","currentState","ComponentStatePanelConfig","AdvancePanel","innerProperties","loopObj","AdvancePanelConfig","CRightPanelContext","UseCRightPanelContext","defaultPropertyOptions","SinglePropertyEditor","keyFormatStatus","setKeyFormatStatus","rightPanelContext","mod","propertyOptions","setPropertyOptions","onSearch","searchText","newOptions","propertyKeyRef","innerOnCreate","PlusOutlined","MinusOutlined","CSSPropertiesVariableBindEditor","propertyList","setPropertyList","newProperty","setNewProperty","innerOnValueChange","createPropertyRef","ClassNameEditor","valueFormatStatus","isCreate","valueOptions","setValueOptions","allValueOptions","setAllValueOptions","updateValueOptions","tempProperty","onValueSearch","updateKeyValue","keyVal","CSSPropertiesEditor","newAddVal","setNewAddVal","newCssVal","DOM_CSS_STATUS","DOM_CSS_STATUS_LIST","CSSEditor","selectedStateTag","setSelectedStateTag","mediaQueryList","cssPropertyRefMap","handleChange","tag","domStatusList","setDomStatusList","cssStatusList","selectCssStatusList","cssVal","setCssVal","currentCssStateVal","initVal","initRef","isEmpty","updateCss","checked","CheckableTag","MinusCircleOutlined","VisualPanelPlus","styleVariableRef","classNameList","cssEditorRef","classNameEditorRef","formatStyle","fCss","onUpdateStyleVariable","styleArr","onUpdateStyle","onUpdateCss","VisualPanelPlusConfig","activeTab","INNER_EVENT_LIST_MAP","ON_DID_RENDER","ON_WILL_DESTROY","EventPanel","eventList","updateEventList","nodeEventList","evt","currentEvent","updateCurrentEvent","newEvent","eventLabel","newEventList","EventPanelConfig","RightPanel","panels","panelParams","displayPanels","customTabs","activeKey","firstPanelKey","_","args","Empty","RightPanelPlugin","uiHandle","localize$1","triggerChangeBySelf","GlobalStatePanel","rootState","GlobalStatePanelPlugin","GlobalStatePanelWithLocalize","DatabaseOutlined","DisplaySourceSchema","engineCtx","newPage","newPageJSON","HistoryPlugin","CTX","dataStore","originalPageRecord","loadPage","resObj","currentStepIndex","historyRecords","cloneDeep","debounceAddStep","debounce","isff","_keyMap","_modifier","defaultGetCode","getKey","getModifier","getKeyString","HotKeysManager","disposeListCb","disposeCb","triggerAction","keydownCb","keyupCb","findKeyIndex","clearKeyDownList","newKeysCode","hotActionId","code","tagName","isInput","actionMap","activeNode","parentNodeValue","nextIndex","historyStack","HotkeysPlugin","hotkeyManager","actionKey","DEFAULT_PLUGIN_LIST","DEFAULT_PLUGIN_NAME_MAP","DesignerSizer","currentSize","setCurrentSize","setWith","getSubWindowWidth","w","resizeHandler","setCanvasWidth","Segmented","BorderOutlined","MobileOutlined","containerProps","customAttributesMeta","groupName","categoryName","INNER_META_VERSION","PKG_NAME","htmlNativeComponentMeta","HTMl_TAGS","BaseComponentMeta","comp","DEFAULT_EVENT_LIST","BaseComponentMetaWithVersion","InnerComponentMeta","Engine","materials","assetPackagesList","designerPlugin","designerPluginExport","AssetLoader","componentCollection","loader","CPage","EmptyPage","plugins","pluginManager","newSelectNode","oldHiddenWidgetConfig"],"mappings":"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"}