Full Code of hlerenow/chameleon for AI

master d31a9474e3a1 cached
502 files
1.7 MB
544.6k tokens
1146 symbols
1 requests
Download .txt
Showing preview only (1,999K chars total). Download the full file or copy to clipboard to get everything.
Repository: hlerenow/chameleon
Branch: master
Commit: d31a9474e3a1
Files: 502
Total size: 1.7 MB

Directory structure:
gitextract_um330eu0/

├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── static.yml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .npmrc
├── .prettierignore
├── .prettierrc.json
├── .vscode/
│   └── settings.json
├── BUILD_FIX_SUMMARY.md
├── CHANGELOG.md
├── DEV_README.md
├── LICENSE
├── README.md
├── changelog.config.cjs
├── design/
│   └── chameleon.drawio
├── eslint.config.js
├── lerna.json
├── package.json
├── packages/
│   ├── build-script/
│   │   ├── .eslintignore
│   │   ├── CHANGELOG.md
│   │   ├── README.md
│   │   ├── bin/
│   │   │   └── run.js
│   │   ├── client.d.ts
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── build.cjs
│   │   ├── src/
│   │   │   ├── config/
│   │   │   │   ├── base.ts
│   │   │   │   ├── vite.build.ts
│   │   │   │   ├── vite.common.ts
│   │   │   │   └── vite.dev.ts
│   │   │   ├── core/
│   │   │   │   ├── devServer.ts
│   │   │   │   └── doBuild.ts
│   │   │   └── index.ts
│   │   ├── test/
│   │   │   └── demo.test.ts
│   │   └── tsconfig.json
│   ├── demo-page/
│   │   ├── .gitignore
│   │   ├── .prettierrc.json
│   │   ├── CHANGELOG.md
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   ├── material/
│   │   │   │   ├── advanceCustomButton.ts
│   │   │   │   ├── button.tsx
│   │   │   │   ├── col.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── input.ts
│   │   │   │   ├── layout/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── modal.ts
│   │   │   │   ├── native.ts
│   │   │   │   ├── row.ts
│   │   │   │   └── table.ts
│   │   │   ├── pages/
│   │   │   │   ├── basePage-b-client.ts
│   │   │   │   ├── basePage.ts
│   │   │   │   ├── emptyPage.ts
│   │   │   │   ├── layout.ts
│   │   │   │   └── simplePage.ts
│   │   │   └── vite-env.d.ts
│   │   └── tsconfig.json
│   ├── docs-app/
│   │   ├── .gitignore
│   │   ├── .vscode/
│   │   │   ├── extensions.json
│   │   │   └── launch.json
│   │   ├── CHANGELOG.md
│   │   ├── README.md
│   │   ├── astro.config.mjs
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── codeSnippets/
│   │   │   │   ├── ButtonMeta.tsx
│   │   │   │   ├── Editor.tsx
│   │   │   │   ├── GridItemMeta.tsx
│   │   │   │   ├── GridLayoutComponent.tsx
│   │   │   │   ├── GridLayoutMeta.tsx
│   │   │   │   ├── GridLayoutWrap.tsx
│   │   │   │   ├── index.css
│   │   │   │   └── render.tsx
│   │   │   ├── components/
│   │   │   │   └── Link.tsx
│   │   │   ├── content/
│   │   │   │   ├── config.ts
│   │   │   │   └── docs/
│   │   │   │       ├── guides/
│   │   │   │       │   ├── addCustomComponent.mdx
│   │   │   │       │   ├── index.mdx
│   │   │   │       │   └── useRender.mdx
│   │   │   │       ├── index.mdx
│   │   │   │       └── reference/
│   │   │   │           ├── Engine/
│   │   │   │           │   ├── _category_.json
│   │   │   │           │   ├── api.mdx
│   │   │   │           │   ├── introduction.mdx
│   │   │   │           │   └── usage.mdx
│   │   │   │           ├── Material/
│   │   │   │           │   ├── _category_.json
│   │   │   │           │   ├── advanceDevelopMaterial.mdx
│   │   │   │           │   ├── developMaterial.mdx
│   │   │   │           │   └── introduction.mdx
│   │   │   │           ├── PageSchema/
│   │   │   │           │   ├── built-in-setter.mdx
│   │   │   │           │   ├── material.mdx
│   │   │   │           │   └── page.mdx
│   │   │   │           └── Plugin/
│   │   │   │               ├── built-in-plugins-usage.mdx
│   │   │   │               ├── custom-plugin-guide.mdx
│   │   │   │               ├── custom-setter.mdx
│   │   │   │               ├── innder-plugin-list.mdx
│   │   │   │               └── plugin-develop.mdx
│   │   │   └── env.d.ts
│   │   └── tsconfig.json
│   ├── engine/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── .storybook/
│   │   │   ├── main.js
│   │   │   └── preview.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.common.config.ts
│   │   ├── build.config.ts
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Engine.module.scss
│   │   │   ├── _dev_/
│   │   │   │   ├── index.css
│   │   │   │   ├── index.tsx
│   │   │   │   ├── lib/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── page/
│   │   │   │   │   ├── Editor/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── Preview/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   └── componentEditor/
│   │   │   │   │       └── index.tsx
│   │   │   │   ├── render.html
│   │   │   │   ├── render.tsx
│   │   │   │   └── router.tsx
│   │   │   ├── assets/
│   │   │   │   └── styles/
│   │   │   │       └── mixin.scss
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── component/
│   │   │   │   ├── CSSCodeEditor/
│   │   │   │   │   ├── helper.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── CSSEditor/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── CSSPropertiesEditor/
│   │   │   │   │   ├── cssProperties.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── signleProperty.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   ├── CSSPropertiesVariableBindEditor/
│   │   │   │   │   ├── SingleProperty.tsx
│   │   │   │   │   ├── cssProperties.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   ├── CSSSizeInput/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── ClassNameEditor/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── CustomColorPicker/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── CustomSchemaForm/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   ├── CFiledWithSwitchSetter/
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   ├── Form/
│   │   │   │   │   │   │   ├── Field/
│   │   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   │   ├── context.ts
│   │   │   │   │   │   │   └── index.tsx
│   │   │   │   │   │   ├── SetterSwitcher/
│   │   │   │   │   │   │   ├── core.tsx
│   │   │   │   │   │   │   ├── helper.tsx
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   └── Setters/
│   │   │   │   │   │       ├── ActionFlowSetter/
│   │   │   │   │   │       │   ├── component/
│   │   │   │   │   │       │   │   ├── CreateNewNodePopup/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   └── initData.ts
│   │   │   │   │   │       │   │   ├── InputHandle/
│   │   │   │   │   │       │   │   │   └── index.tsx
│   │   │   │   │   │       │   │   ├── NodeCard/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   └── style.module.scss
│   │   │   │   │   │       │   │   ├── OutputHandle/
│   │   │   │   │   │       │   │   │   └── index.tsx
│   │   │   │   │   │       │   │   ├── SelectNodeByTree/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── modal.tsx
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   └── SelectNodeState/
│   │   │   │   │   │       │   │       ├── index.tsx
│   │   │   │   │   │       │   │       └── util.ts
│   │   │   │   │   │       │   ├── config.ts
│   │   │   │   │   │       │   ├── context.ts
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   ├── node/
│   │   │   │   │   │       │   │   ├── AssignValueNode/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── CallNodeMethodNode/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── JumpLinkNode.tsx
│   │   │   │   │   │       │   │   ├── RequestAPINode/
│   │   │   │   │   │       │   │   │   ├── helper.ts
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── RunCodeNode/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── StartNode.tsx
│   │   │   │   │   │       │   │   └── index.ts
│   │   │   │   │   │       │   └── util.ts
│   │   │   │   │   │       ├── AdvanceSetterList.ts
│   │   │   │   │   │       ├── AntDColorSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── ArraySetter/
│   │   │   │   │   │       │   ├── ArrayItem.tsx
│   │   │   │   │   │       │   ├── SortItemOrderModal.tsx
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   └── style.module.scss
│   │   │   │   │   │       ├── BooleanSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── CSSSizeSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── CSSValueSetter/
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   └── style.module.scss
│   │   │   │   │   │       ├── ColorSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── EmptyValueSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── ExpressionSetter/
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   └── style.module.scss
│   │   │   │   │   │       ├── FastLayoutSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── FunctionSetter/
│   │   │   │   │   │       │   ├── defaultDts.ts
│   │   │   │   │   │       │   ├── helper.ts
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── JSONSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── NumberSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── RadioGroupSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── SelectSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── ShapeSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── SliderSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── StringSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── TextAreaSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── index.ts
│   │   │   │   │   │       └── type.ts
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── utils.ts
│   │   │   │   ├── DesignerSizer/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── InputNumberPlus/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── MonacoEditor/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── MoveableModal/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── StylePanel/
│   │   │   │   │   ├── BackgroundInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── BorderInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── DimensionInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── FontInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── MarginAndPaddingInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── ShadowInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── type.ts
│   │   │   │   ├── Workbench/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   └── index.tsx
│   │   │   ├── config/
│   │   │   │   └── colorPickerColorList.ts
│   │   │   ├── core/
│   │   │   │   ├── assetPackagesListManage.ts
│   │   │   │   └── pluginManager.ts
│   │   │   ├── i18n/
│   │   │   │   ├── en_US/
│   │   │   │   │   └── index.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── zh_CN/
│   │   │   │       └── index.ts
│   │   │   ├── index.tsx
│   │   │   ├── material/
│   │   │   │   ├── container.meta.ts
│   │   │   │   └── innerMaterial.tsx
│   │   │   ├── plugins/
│   │   │   │   ├── AdvancePanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── ComponentLibrary/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   ├── DragItem/
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   └── ListView/
│   │   │   │   │   │       ├── index.tsx
│   │   │   │   │   │       └── style.module.scss
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   ├── ComponentStatePanel/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── Designer/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   ├── Canvas/
│   │   │   │   │   │   │   ├── advanceCustomHook.ts
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   ├── DefaultSelectToolBar/
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   └── GhostView/
│   │   │   │   │   │       └── index.tsx
│   │   │   │   │   ├── config.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   ├── type.ts
│   │   │   │   │   └── util.ts
│   │   │   │   ├── DisplaySourceSchema/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── EventPanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── panel.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── GlobalStatePanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── History/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── type.ts
│   │   │   │   ├── Hotkeys/
│   │   │   │   │   ├── action.ts
│   │   │   │   │   ├── hotKeyManager.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── keymap.ts
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   ├── type.ts
│   │   │   │   │   └── utils.ts
│   │   │   │   ├── OutlineTree/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   └── TreeView/
│   │   │   │   │   │       ├── context.ts
│   │   │   │   │   │       ├── dataStruct.ts
│   │   │   │   │   │       ├── index.tsx
│   │   │   │   │   │       ├── style.module.scss
│   │   │   │   │   │       └── treeNode.tsx
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   └── util.tsx
│   │   │   │   ├── PropertyPanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   ├── utils.ts
│   │   │   │   │   └── view.tsx
│   │   │   │   ├── RightPanel/
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   ├── type.ts
│   │   │   │   │   └── view.tsx
│   │   │   │   ├── VisualPanelPlus/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   └── index.tsx
│   │   │   ├── stories/
│   │   │   │   ├── Button.jsx
│   │   │   │   ├── Button.stories.js
│   │   │   │   ├── Configure.mdx
│   │   │   │   ├── Header.jsx
│   │   │   │   ├── Header.stories.js
│   │   │   │   ├── Page.jsx
│   │   │   │   ├── Page.stories.js
│   │   │   │   ├── assets/
│   │   │   │   │   └── avif-test-image.avif
│   │   │   │   ├── button.css
│   │   │   │   ├── components/
│   │   │   │   │   ├── CustomSchemaForm/
│   │   │   │   │   │   └── components/
│   │   │   │   │   │       └── Setters/
│   │   │   │   │   │           ├── actionFlow.stories.tsx
│   │   │   │   │   │           └── mock.ts
│   │   │   │   │   └── inputPlus.stories.tsx
│   │   │   │   ├── header.css
│   │   │   │   ├── page.css
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── CSSEditor.stories.tsx
│   │   │   │   │   └── VisualPanelPlus.stories.tsx
│   │   │   │   └── setters/
│   │   │   │       └── colorSetter.stories.tsx
│   │   │   ├── style.d.ts
│   │   │   ├── type.ts
│   │   │   ├── typing.d.ts
│   │   │   └── utils/
│   │   │       ├── css.ts
│   │   │       ├── defaultEngineConfig.tsx
│   │   │       ├── index.ts
│   │   │       └── logger.ts
│   │   └── tsconfig.json
│   ├── engine-website-app/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── build.common.config.js
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── index.css
│   │   │   ├── index.tsx
│   │   │   ├── lib/
│   │   │   │   └── index.tsx
│   │   │   ├── page/
│   │   │   │   ├── Editor/
│   │   │   │   │   └── index.tsx
│   │   │   │   └── Preview/
│   │   │   │       └── index.tsx
│   │   │   ├── render.html
│   │   │   ├── render.tsx
│   │   │   ├── router.tsx
│   │   │   └── typing.d.ts
│   │   └── tsconfig.json
│   ├── layout/
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── render.umd.js
│   │   ├── src/
│   │   │   ├── _dev_/
│   │   │   │   ├── dev.css
│   │   │   │   ├── dev.tsx
│   │   │   │   ├── render.html
│   │   │   │   └── render.tsx
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── components/
│   │   │   │   ├── DefaultDropPlaceholder/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── DropAnchor/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   └── HighlightBox/
│   │   │   │       ├── index.tsx
│   │   │   │       └── style.module.scss
│   │   │   ├── core/
│   │   │   │   ├── dragAndDrop/
│   │   │   │   │   ├── common.ts
│   │   │   │   │   ├── emitter.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── sensor.ts
│   │   │   │   └── iframeContainer/
│   │   │   │       └── index.tsx
│   │   │   ├── index.module.scss
│   │   │   ├── index.tsx
│   │   │   ├── render.ts
│   │   │   ├── types/
│   │   │   │   ├── dragAndDrop.ts
│   │   │   │   └── index.ts
│   │   │   ├── typing.d.ts
│   │   │   └── utils/
│   │   │       └── index.ts
│   │   └── tsconfig.json
│   ├── material/
│   │   ├── .gitignore
│   │   ├── .prettierrc.json
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.config.ts
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── _dev_/
│   │   │   │   ├── editor.tsx
│   │   │   │   ├── index.scss
│   │   │   │   ├── index.tsx
│   │   │   │   ├── preview.tsx
│   │   │   │   ├── react.ts
│   │   │   │   ├── render.html
│   │   │   │   ├── render.tsx
│   │   │   │   └── router.tsx
│   │   │   ├── components/
│   │   │   │   ├── ReactGridLayout/
│   │   │   │   │   ├── GridItem.tsx
│   │   │   │   │   ├── config.ts
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── edit/
│   │   │   │   │   │   └── layoutWrap.tsx
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── item.meta.tsx
│   │   │   │   │   ├── layout.scss
│   │   │   │   │   ├── meta.tsx
│   │   │   │   │   ├── snippets.ts
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── type.ts
│   │   │   │   └── index.ts
│   │   │   ├── index.tsx
│   │   │   ├── meta.tsx
│   │   │   └── vite-env.d.ts
│   │   └── tsconfig.json
│   ├── model/
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── __tests__/
│   │   │   ├── Material/
│   │   │   │   └── index.test.ts
│   │   │   ├── Page/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── index.test.ts.snap
│   │   │   │   ├── editMethods.test.ts
│   │   │   │   └── index.test.ts
│   │   │   ├── Schema/
│   │   │   │   └── Node.test.ts
│   │   │   └── demo.test.ts
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── jest.setup.js
│   │   ├── mockPage/
│   │   │   ├── basePage.ts
│   │   │   ├── material.ts
│   │   │   └── simplePage.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Material/
│   │   │   │   ├── index.test.ts
│   │   │   │   └── index.ts
│   │   │   ├── Page/
│   │   │   │   ├── RootNode/
│   │   │   │   │   ├── Node/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── prop.ts
│   │   │   │   │   │   └── slot.ts
│   │   │   │   │   └── index.ts
│   │   │   │   └── index.ts
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── const/
│   │   │   │   ├── eventList.ts
│   │   │   │   └── schema.ts
│   │   │   ├── index.ts
│   │   │   ├── types/
│   │   │   │   ├── base.ts
│   │   │   │   ├── material.ts
│   │   │   │   ├── node.ts
│   │   │   │   ├── page.ts
│   │   │   │   └── rootNode.ts
│   │   │   └── util/
│   │   │       ├── dataCheck.ts
│   │   │       ├── index.ts
│   │   │       ├── lodash.ts
│   │   │       └── modelEmitter.ts
│   │   └── tsconfig.json
│   └── render/
│       ├── .gitignore
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── __tests__/
│       │   └── demo.test.ts
│       ├── build.config.ts
│       ├── index.html
│       ├── jest.config.js
│       ├── package.json
│       ├── src/
│       │   ├── _dev_/
│       │   │   ├── components.tsx
│       │   │   ├── dev.tsx
│       │   │   ├── index.css
│       │   │   ├── page/
│       │   │   │   ├── DesignerRenderDemo.tsx
│       │   │   │   └── RenderDemo.tsx
│       │   │   ├── router.tsx
│       │   │   └── testPageData.ts
│       │   ├── build-script-env.d.ts
│       │   ├── commonComponent/
│       │   │   └── index.tsx
│       │   ├── const/
│       │   │   └── index.ts
│       │   ├── core/
│       │   │   ├── ReactAdapter/
│       │   │   │   ├── buildComponent.ts
│       │   │   │   ├── convertModelToComponent.ts
│       │   │   │   ├── help.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── transformProps/
│       │   │   │   │   ├── actionNode.ts
│       │   │   │   │   └── index.ts
│       │   │   │   └── type.ts
│       │   │   ├── ReactErrorBoundary.ts
│       │   │   ├── adapter.ts
│       │   │   ├── designReactRender.ts
│       │   │   ├── refManager.ts
│       │   │   ├── render.ts
│       │   │   ├── storeManager.ts
│       │   │   ├── type.ts
│       │   │   └── variableManager.ts
│       │   ├── index.ts
│       │   └── util/
│       │       ├── assetsLoader.ts
│       │       ├── codeRuntimeHelper.ts
│       │       ├── index.ts
│       │       └── reactHelp.ts
│       └── tsconfig.json
└── pnpm-workspace.yaml

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [hlerenow]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # ['https://github.com/sponsors/hlerenow?frequency=one-time&sponsor=hlerenow']


================================================
FILE: .github/workflows/static.yml
================================================
name: Deploy static content to Pages

on:
  push:
    branches: [master]
  workflow_dispatch:

concurrency:
  group: 'pages'
  cancel-in-progress: true

jobs:
  build:
    permissions: write-all
    runs-on: ubuntu-latest

    steps:
      - name: Use Node.js 18.x
        uses: actions/setup-node@v3
        with:
          node-version: 18.20.8

      - name: Checkout code
        uses: actions/checkout@v3

      - uses: pnpm/action-setup@v2
        with:
          version: 8

      - run: |
          pnpm -v
          node -v
          npm -v
          pnpm install --no-frozen-lockfile
          pnpm run build
          cd packages/engine-website-app/dist
          mkdir documents
          cp -r ../../docs-app/dist/* ./documents

      - name: Upload build artifacts
        uses: actions/upload-pages-artifact@v3
        with:
          name: github-pages
          path: 'packages/engine-website-app/dist'

  deploy:
    runs-on: ubuntu-latest
    needs: build # Ensure deployment happens after build
    permissions: write-all
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}

    steps:
      - name: Download build artifact
        uses: actions/download-artifact@v4
        with:
          name: github-pages

      - name: Setup Pages
        uses: actions/configure-pages@v2

      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4


================================================
FILE: .gitignore
================================================
# See http://help.github.com/ignore-files/ for more about ignoring files.

# compiled output
dist
tmp
/out-tsc

# dependencies
node_modules

# JetBrains IDEs
.idea
*.iml
*.iws


# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings

# System Files
.DS_Store
Thumbs.db

# Generated Docusaurus files
.docusaurus/
.cache-loader/

*.js.map
*error.log

packages/build-script/lib/*
stats.html
example


# drawio
*.bkp
*.dtmp

*.eslintcache

================================================
FILE: .husky/pre-commit
================================================
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx lint-staged


================================================
FILE: .npmrc
================================================
registry=https://registry.npmjs.org/

================================================
FILE: .prettierignore
================================================
# Ignore artifacts:
build
coverage

# Ignore all HTML files:
*.html

**/.git
**/.svn
**/.hg
**/node_modules

================================================
FILE: .prettierrc.json
================================================
{
  "trailingComma": "es5",
  "tabWidth": 2,
  "semi": true,
  "singleQuote": true,
  "printWidth": 120
}

================================================
FILE: .vscode/settings.json
================================================
{
  "cSpell.words": [
    "chamn",
    "crossorigin",
    "CSSUI",
    "JSEXPRESSION",
    "lowcode",
    "monac",
    "PNPM",
    "superstruct"
  ]
}

================================================
FILE: BUILD_FIX_SUMMARY.md
================================================
# 构建配置修复总结

## 问题描述

1. **CommonJS 引入问题**:错误提示 `Missing "./src/types/material" specifier in "@chamn/model" package`
2. **ES 模块不纯净**:构建出的 ES 模块将 React 及其运行时打包进去,而不是作为外部依赖

## 根本原因

### 1. 源码路径导入
代码中使用了 `@chamn/model/src/types/material` 这样的源码路径,但 package.json 的 `exports` 字段未定义该路径。

### 2. External 配置不完整
- `external: ['react', 'react-dom']` 只能匹配精确的模块名
- 无法匹配 `react/jsx-runtime`、`react-dom/client` 等子路径
- 导致 React JSX 运行时被打包进最终产物

### 3. 构建配置覆盖问题
`vite.build.rollupOptions` 会覆盖而非合并基础配置中的 `external`。

## 修复方案

### 1. 修复源码导入路径

**修改文件:**
- `packages/engine/src/component/CustomSchemaForm/index.tsx`
- `packages/engine/src/plugins/OutlineTree/util.tsx`

**修改前:**
```typescript
import { getMTitle } from '@chamn/model/src/types/material';
import { ShapeSetterObjType } from '@chamn/model/src/types/material';
```

**修改后:**
```typescript
import { getMTitle, ShapeSetterObjType } from '@chamn/model';
```

### 2. 更新 Package.json 导出配置

**修改文件:**
- `packages/engine/package.json`
- `packages/layout/package.json`

**修改内容:**
```json
{
  "main": "dist/index.cjs.js",
  "module": "dist/index.es.js",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "module-sync": "./dist/index.es.js",
      "import": "./dist/index.es.js",
      "require": "./dist/index.cjs.js"
    }
  }
}
```

### 3. 使用函数形式自动外部化所有 node_modules(最佳实践)

**修改文件:**
- `packages/build-script/src/config/base.ts`
- `packages/engine/build.config.ts`
- `packages/model/build.config.js`
- `packages/layout/build.config.js`
- `packages/render/build.config.ts`

**关键修改:**

```typescript
// build-script/src/config/base.ts
export type BuildScriptConfig = {
  external?: (string | RegExp)[] | ((id: string, importer?: string, isResolved?: boolean) => boolean);
  // ... 其他配置
};
```

```typescript
// engine/build.config.ts
external: (id) => {
  // 排除相对路径、绝对路径和别名路径(项目内部文件)
  if (id.startsWith('.') || id.startsWith('/') || id.startsWith('@/')) {
    return false;
  }
  // 外部化所有 node_modules 中的包
  return true;
},
```

**优势:**
- ✅ 自动外部化所有 node_modules 依赖,无需手动维护列表
- ✅ 支持子路径(如 `react/jsx-runtime`、`antd/es/tag/CheckableTag`)
- ✅ 避免遗漏新增的依赖包

### 4. 简化构建配置

**修改前(engine/build.config.ts):**
```typescript
vite: {
  build: {
    rollupOptions: {
      external: [...], // 这会覆盖基础配置
    }
  }
}
```

**修改后:**
```typescript
// 顶层配置 external,由 vite.common.ts 自动转换
external: [/^react($|\/)/, ...],
vite: {
  // 不再重复配置 build.rollupOptions
  define: { ... }
}
```

## 验证结果

### 构建输出对比

**修复前:**
- `index.es.js`: 100,520 行
- 包含内联的 react-jsx-runtime 代码
- 文件大小:~3.5MB

**第一次修复后(使用正则表达式):**
- `index.es.js`: 94,484 行(减少 6,036 行)
- 正确使用 `import { jsx, jsxs } from "react/jsx-runtime"`
- 文件大小:~3.49MB(减少约 10KB)

**最终修复后(自动外部化所有 node_modules):**
- `index.es.js`: 11,551 行(减少 88,969 行,88.5% 体积减少!)
- 所有依赖都被正确外部化
- 文件大小:327KB(减少 3.17MB,90.7% 体积减少!)

### 构建日志

```
No name was provided for external module "react/jsx-runtime" in "output.globals" – guessing "jsxRuntime".
```

这条警告证明 `react/jsx-runtime` 被正确识别为外部依赖。

### 代码检查

```javascript
// 修复后的 dist/index.es.js 开头
import { jsx as W, jsxs as He, Fragment as Ht } from "react/jsx-runtime";
import * as We from "react";
import he, { memo, useCallback, ... } from "react";
import BR, { flushSync, createPortal, ... } from "react-dom";
```

## 最佳实践

1. **External 配置(推荐)**:使用函数形式自动外部化所有 node_modules
   ```typescript
   external: (id) => {
     if (id.startsWith('.') || id.startsWith('/') || id.startsWith('@/')) {
       return false;
     }
     return true;
   }
   ```

2. **导入路径**:始终从包的主入口导入,避免使用源码路径

3. **Package.json**:确保 `main`、`module`、`exports` 字段与实际构建输出一致

4. **构建配置**:在顶层配置 `external`,避免在 `vite.build.rollupOptions` 中重复配置

5. **别名路径**:确保项目内部的别名路径(如 `@/`)不被外部化

## 相关文件清单

### 修改的文件
- `packages/build-script/src/config/base.ts`
- `packages/build-script/src/config/vite.build.ts`
- `packages/engine/build.config.ts`
- `packages/engine/package.json`
- `packages/engine/src/component/CustomSchemaForm/index.tsx`
- `packages/engine/src/plugins/OutlineTree/util.tsx`
- `packages/model/build.config.js`
- `packages/layout/build.config.js`
- `packages/layout/package.json`
- `packages/render/build.config.ts`

### 构建命令
```bash
# 重新构建所有包
npm run build

# 或单独构建
cd packages/engine && npm run build
cd packages/model && npm run build
cd packages/layout && npm run build
cd packages/render && npm run build
```

## 注意事项

1. 所有依赖包都需要重新构建
2. 确保 peerDependencies 中的 react 版本与项目一致
3. UMD 格式需要在 `global` 配置中为外部依赖提供全局变量名



================================================
FILE: CHANGELOG.md
================================================
# Change Log

All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [0.10.4](https://github.com/ByteCrazy/chameleon/compare/v0.10.3...v0.10.4) (2026-01-17)

### 🐛 Bug Fixes | Bug 修复

* **engine, engine-website-app:** 🐛 fixed pkg deps ([22b0000](https://github.com/ByteCrazy/chameleon/commit/22b0000a921ed3bd63cdf3366687184d51ee9dc5))

## [0.10.3](https://github.com/ByteCrazy/chameleon/compare/v0.10.2...v0.10.3) (2026-01-17)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed  engine deps ([c1addf4](https://github.com/ByteCrazy/chameleon/commit/c1addf43214d016e466019a5aabb8960881b6418))

## [0.10.2](https://github.com/ByteCrazy/chameleon/compare/v0.10.1...v0.10.2) (2026-01-17)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed string and text can not input chinese text ([3821d00](https://github.com/ByteCrazy/chameleon/commit/3821d00d5dffd7d70e995690df5358f5a596ae93))

## [0.10.1](https://github.com/ByteCrazy/chameleon/compare/v0.10.0...v0.10.1) (2026-01-11)

### ✨ Features | 新功能

* **build-script, demo-page, engine, render:** 🎸 update build script dts & optimize modal root selector ([024d5ab](https://github.com/ByteCrazy/chameleon/commit/024d5ab26d19fc5f50172c328638a551fb99c129))
* **docs-app, render:** 🎸 adapte ssr render ([7f19d8f](https://github.com/ByteCrazy/chameleon/commit/7f19d8f9084e16de27460bc1e5dea28eba31d6dd))

## [0.10.0](https://github.com/hlerenow/chameleon/compare/v0.9.3...v0.10.0) (2025-12-25)

### ✨ Features | 新功能

* **engine:** 🎸 optimize emptyValueSetter auto trigger value update ([a2b0409](https://github.com/hlerenow/chameleon/commit/a2b04094035d421638d4657d31fd2b417906e9c6))

### 🐛 Bug Fixes | Bug 修复

* 优化构建配置,修复 ES 模块外部化问题 ([866f0ae](https://github.com/hlerenow/chameleon/commit/866f0ae39472625137d73d143625d88d873f6c00))

### 📝 Documentation | 文档

* 添加 GridLayout 代码示例和插件开发文档 ([cade905](https://github.com/hlerenow/chameleon/commit/cade90591efff604a8ab3395c905c4f713ba2b93))
* **build-script:** 添加完整的 README 使用文档 ([fcd6172](https://github.com/hlerenow/chameleon/commit/fcd6172e381364f010986864593264b160380342))

## [0.9.3](https://github.com/ByteCrazy/chameleon/compare/v0.9.2...v0.9.3) (2025-07-20)

### ✨ Features | 新功能

* **engine, render:** 🎸 add $EVENT_PARAMS and remove $Event $PARAMS_RUNTIME ([b8e58c1](https://github.com/ByteCrazy/chameleon/commit/b8e58c1e5e98d2e4b3d31e2ba52a26fda256eb47))

### 🐛 Bug Fixes | Bug 修复

* **render:** 🐛 fixed style props not apply to dom  from props ([2e0c80a](https://github.com/ByteCrazy/chameleon/commit/2e0c80ad02881319089b1b08225c325e37a41c6c))

## [0.9.2](https://github.com/ByteCrazy/chameleon/compare/v0.9.1...v0.9.2) (2025-07-13)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed call node method setting ([27ea497](https://github.com/ByteCrazy/chameleon/commit/27ea49747ca8dd24f862304ec552e805c9057e62))
* **render:** 🐛 fixed ref get not correct on designer mode ([14544f4](https://github.com/ByteCrazy/chameleon/commit/14544f45a5dadeacfab5a711504b9a736ee7835e))

## [0.9.1](https://github.com/ByteCrazy/chameleon/compare/v0.9.0...v0.9.1) (2025-07-13)

### 🐛 Bug Fixes | Bug 修复

* **engine, render:** 🐛 fixed CustomSchemaForm title ([178cddd](https://github.com/ByteCrazy/chameleon/commit/178cddd3e8d9147822e91fcd1ce7d8e08c70d924))

## [0.9.0](https://github.com/ByteCrazy/chameleon/compare/v0.8.6...v0.9.0) (2025-07-13)

### 👷 Continuous Integration | CI 配置

* 🎡 upgrade node version to 18.20.8 ([0a68c22](https://github.com/ByteCrazy/chameleon/commit/0a68c22dc7d320c3139687c956c126816b453fb4))

### ✨ Features | 新功能

* **engine, model:** 🎸 support EmptyValueSetter ([da1e36f](https://github.com/ByteCrazy/chameleon/commit/da1e36f9915282b3f7cb40672cf2a000bd4162e5))

## [0.8.6](https://github.com/ByteCrazy/chameleon/compare/v0.8.5...v0.8.6) (2025-06-21)

### 🐛 Bug Fixes | Bug 修复

* **demo-page, engine, render:** 🐛 fixed action flow failed node not connect correct ([e235a2b](https://github.com/ByteCrazy/chameleon/commit/e235a2be2d1e1935dfc40b56936de763efc4fb67))
* **render:** 🐛 fixed $RESPONSE value is error ([dee9906](https://github.com/ByteCrazy/chameleon/commit/dee9906c967eb079d5a7e53431dc9d29458195c8))

## [0.8.5](https://github.com/ByteCrazy/chameleon/compare/v0.8.4...v0.8.5) (2025-04-13)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed custom seeter not register success ([19d739a](https://github.com/ByteCrazy/chameleon/commit/19d739a97000641846c02ec19555926fe88ce3b4))

## [0.8.4](https://github.com/ByteCrazy/chameleon/compare/v0.8.3...v0.8.4) (2025-04-13)

### ✨ Features | 新功能

* **engine:** 🎸 optimize action flow layout ([9c970c9](https://github.com/ByteCrazy/chameleon/commit/9c970c9482274d4d5cf6beb76912a10784e62c79))

### 🐛 Bug Fixes | Bug 修复

* **engine, render:** 🐛 CSS editor value update error ([209106a](https://github.com/ByteCrazy/chameleon/commit/209106a6a71819862626ee39c887d1835a8b5611))
* **engine, render:** 🐛 fixed event not trigger when loop ([e3a10a8](https://github.com/ByteCrazy/chameleon/commit/e3a10a8ab77a3c5321f47440c7bdc2ad52e82ee2))

## [0.8.3](https://github.com/ByteCrazy/chameleon/compare/v0.8.2...v0.8.3) (2025-04-12)

**Note:** Version bump only for package chameleon

## [0.8.2](https://github.com/ByteCrazy/chameleon/compare/v0.8.1...v0.8.2) (2025-04-11)

### 🐛 Bug Fixes | Bug 修复

* **engine, render:** 🐛 fixed functionSeter and expressionSetter dts ([1e326e2](https://github.com/ByteCrazy/chameleon/commit/1e326e288f8d072497c01c1ccb0c06bed0521949))

## [0.8.1](https://github.com/ByteCrazy/chameleon/compare/v0.8.0...v0.8.1) (2025-04-10)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed globalStateDts ([03c0b71](https://github.com/ByteCrazy/chameleon/commit/03c0b714343a7cf76710b164a43008af430b1d7c))

## [0.8.0](https://github.com/ByteCrazy/chameleon/compare/v0.7.0...v0.8.0) (2025-04-10)

### ✨ Features | 新功能

* **demo-page, engine, render:** 🎸 update run time var for function ([d8fb90a](https://github.com/ByteCrazy/chameleon/commit/d8fb90ac72a233d7fdb5fcb36e0b7963f83c5acf))
* **engine, model, render:** 🎸 fixed cycle update when update value in mount ([9b30922](https://github.com/ByteCrazy/chameleon/commit/9b30922ffac4a5b4fb1fe123c4604cc0fff63911))
* **engine, render:** 🎸 optimize expression setter ([07c11e9](https://github.com/ByteCrazy/chameleon/commit/07c11e9bdf011f70763623d6a2f185a3c3830e5e))
* **engine, render:** 🎸 optimize globalState update ([4e7bb6a](https://github.com/ByteCrazy/chameleon/commit/4e7bb6ab68cd69fe6d429abe417587c3ac26eb18))
* **engine:** 🎸 dynamic generate page dts ([2dc1a0b](https://github.com/ByteCrazy/chameleon/commit/2dc1a0bca0a53223b61b8c4ce216b26a70887c96))
* **engine:** 🎸 optimize express setter ([37141f9](https://github.com/ByteCrazy/chameleon/commit/37141f97a98e53e0050e328c2de03341984b3ad5))

## [0.7.0](https://github.com/ByteCrazy/chameleon/compare/v0.6.0...v0.7.0) (2025-04-06)

### ✨ Features | 新功能

* **engine, layout:** 🎸 optimize select node interactive time ([41d105c](https://github.com/ByteCrazy/chameleon/commit/41d105c2408458b38cda0c9fac601dd89fd744aa))
* **engine:** 🎸 add css code editor ([7715f29](https://github.com/ByteCrazy/chameleon/commit/7715f29cd49d530e54941c85659ca3c671be91e3))
* **engine:** 🎸 optimize style UI panel ([0d6f239](https://github.com/ByteCrazy/chameleon/commit/0d6f2394281bf4add5437b0c6e4c681f5d64d6e3))

### 🐛 Bug Fixes | Bug 修复

* **engine, layout:** 🐛 optimize select active box ([b1a6041](https://github.com/ByteCrazy/chameleon/commit/b1a604140652f1c0871a463bc32020c39a07846c))

## [0.6.0](https://github.com/ByteCrazy/chameleon/compare/v0.5.2...v0.6.0) (2025-03-30)

### ✨ Features | 新功能

* **engine:** 🎸 support config monacoEdito cdn url ([32d08bc](https://github.com/ByteCrazy/chameleon/commit/32d08bcaec7ebe8a187d0b2eae8bd5e4b64b3dc9))

## [0.5.2](https://github.com/ByteCrazy/chameleon/compare/v0.5.1...v0.5.2) (2025-03-30)

### ✨ Features | 新功能

* **model:** 🎸 support export sxtra ([272de8d](https://github.com/ByteCrazy/chameleon/commit/272de8d989c3085830bf37469885c7a92abaf0da))

## [0.5.1](https://github.com/ByteCrazy/chameleon/compare/v0.5.0...v0.5.1) (2025-03-30)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed search status reset ([994b36c](https://github.com/ByteCrazy/chameleon/commit/994b36ce744fd10002cf2996ae26702a959ef5b4))

## [0.5.0](https://github.com/ByteCrazy/chameleon/compare/v0.4.0...v0.5.0) (2025-03-30)

### ✨ Features | 新功能

* **engine:** 🎸 componentLib add search and customSearchBar ([4801f40](https://github.com/ByteCrazy/chameleon/commit/4801f403da1af705d5dc5eef579e7dba6560b08f))

## [0.4.0](https://github.com/ByteCrazy/chameleon/compare/v0.3.21...v0.4.0) (2025-03-29)

### ✨ Features | 新功能

* **model:** 🎸 update model define, add extra T ([f098ad2](https://github.com/ByteCrazy/chameleon/commit/f098ad26dc7525749d280445202971ede12490f4))

## [0.3.21](https://github.com/ByteCrazy/chameleon/compare/v0.3.20...v0.3.21) (2025-03-26)

### 🐛 Bug Fixes | Bug 修复

* **engine, material:** 🐛 fixed RGLEL cycle update item ([f045818](https://github.com/ByteCrazy/chameleon/commit/f045818d6d1e1b4dbcf107d727976f6d92600b94))

## [0.3.20](https://github.com/ByteCrazy/chameleon/compare/v0.3.19...v0.3.20) (2025-03-26)

### 🐛 Bug Fixes | Bug 修复

* **material:** 🐛 fixed meterial meta not export ([aaea9bd](https://github.com/ByteCrazy/chameleon/commit/aaea9bd8fb95aa007b3b6ccd06e4b3171af35926))

## [0.3.19](https://github.com/ByteCrazy/chameleon/compare/v0.3.18...v0.3.19) (2025-03-26)

**Note:** Version bump only for package chameleon

## [0.3.18](https://github.com/ByteCrazy/chameleon/compare/v0.3.17...v0.3.18) (2025-03-26)

**Note:** Version bump only for package chameleon

## [0.3.17](https://github.com/ByteCrazy/chameleon/compare/v0.3.16...v0.3.17) (2025-03-25)

### 🐛 Bug Fixes | Bug 修复

* **engine, material, model, render:** 🐛 fixed node update value material is undefined ([969174d](https://github.com/ByteCrazy/chameleon/commit/969174da968aec4a1ee1fec7ca44a5e459be56bc))

## [0.3.16](https://github.com/ByteCrazy/chameleon/compare/v0.3.15...v0.3.16) (2025-03-24)

### ✨ Features | 新功能

* **engine:** 🎸 setter supprot get current nodemodel ([f59a136](https://github.com/ByteCrazy/chameleon/commit/f59a136cc134388c382827d731f683e9d9a298e5))

## [0.3.15](https://github.com/ByteCrazy/chameleon/compare/v0.3.14...v0.3.15) (2025-03-23)

### 🐛 Bug Fixes | Bug 修复

* **layout:** 🐛 fixed canvas default css ([41d0ebd](https://github.com/ByteCrazy/chameleon/commit/41d0ebd91b0d9a9fa2d1b7892ec1ec82ecd44a33))

## [0.3.14](https://github.com/ByteCrazy/chameleon/compare/v0.3.13...v0.3.14) (2025-03-23)

### ✨ Features | 新功能

* **layout:** 🎸 ban drag img audio viewo el at editor canvas ([0f2624b](https://github.com/ByteCrazy/chameleon/commit/0f2624bd45eada0290610f7bb52e1683c0c84189))

## [0.3.13](https://github.com/ByteCrazy/chameleon/compare/v0.3.12...v0.3.13) (2025-03-23)

### ✨ Features | 新功能

* **render:** 🎸 redner support config document context ([8d3c041](https://github.com/ByteCrazy/chameleon/commit/8d3c041263ed567a1e91087abcde382519876b2e))

## [0.3.12](https://github.com/ByteCrazy/chameleon/compare/v0.3.11...v0.3.12) (2025-03-23)

### 🐛 Bug Fixes | Bug 修复

* **engine, layout:** 🐛 fixed drag interactive and fixed accetpNode action ([c15d03c](https://github.com/ByteCrazy/chameleon/commit/c15d03cc0406533e5eab55e27ce5eb1223d91c72))

## [0.3.11](https://github.com/ByteCrazy/chameleon/compare/v0.3.10...v0.3.11) (2025-03-22)

### 🐛 Bug Fixes | Bug 修复

* **render:** 🐛 fixed PlaceHoder UI ([349a951](https://github.com/ByteCrazy/chameleon/commit/349a951ac9e2351acb0c556bc0ecb4295367e94e))

## [0.3.10](https://github.com/ByteCrazy/chameleon/compare/v0.3.9...v0.3.10) (2025-03-22)

### 🐛 Bug Fixes | Bug 修复

* **layout:** 🐛 fixed placeholder UI ([7134583](https://github.com/ByteCrazy/chameleon/commit/71345836c5575399f2fadcd4be5773c593efb95f))

## [0.3.9](https://github.com/ByteCrazy/chameleon/compare/v0.3.8...v0.3.9) (2025-03-22)

### ✨ Features | 新功能

* **engine, layout:** 🎸 optimize drag interactive ([f512f14](https://github.com/ByteCrazy/chameleon/commit/f512f14ecf3caaa148279543999a74d35ae44701))

## [0.3.8](https://github.com/ByteCrazy/chameleon/compare/v0.3.7...v0.3.8) (2025-03-16)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed customAdvanceHook not rect on outline and hotkey ([c21bdb0](https://github.com/ByteCrazy/chameleon/commit/c21bdb0e275ebe4ae096d18b90bd406874c9de79))

## [0.3.7](https://github.com/ByteCrazy/chameleon/compare/v0.3.6...v0.3.7) (2025-03-16)

### ✨ Features | 新功能

* **demo-page, engine, model, render:** 🎸 support inject eng inner env to runtime ([baa5c11](https://github.com/ByteCrazy/chameleon/commit/baa5c11d389019a7e4e4b8e000433a99038b4ae3))

## [0.3.6](https://github.com/ByteCrazy/chameleon/compare/v0.3.5...v0.3.6) (2025-03-09)

### ✨ Features | 新功能

* **engine:** 🎸 add hiddenWidget for eng and optimize setter ([42b9846](https://github.com/ByteCrazy/chameleon/commit/42b984681a9efc7cdee7dc4287cd994fd37c592c))

## [0.3.5](https://github.com/ByteCrazy/chameleon/compare/v0.3.4...v0.3.5) (2025-03-09)

### ✨ Features | 新功能

* **engine, layout:** 🎸 support controll preview mode ([97b83e5](https://github.com/ByteCrazy/chameleon/commit/97b83e58f0f22c76da51e5a3d22db2c82a2f70d2))
* **engine:** 🎸 add workbench widget control config ([0fcab5b](https://github.com/ByteCrazy/chameleon/commit/0fcab5b5ad715762327c26d3f7eae4680604644b))

### 🐛 Bug Fixes | Bug 修复

* **demo-page, engine, render:** 🐛 fixed action flow only run first node ([c4bdb85](https://github.com/ByteCrazy/chameleon/commit/c4bdb85d0ca6ed09c6c66d15847de5bd14da556e))
* **engine, model:** 🐛 update select setter name ([054fd48](https://github.com/ByteCrazy/chameleon/commit/054fd48f49ec1d1bdb79d7bac44acedb601d6fdf))
* **engine:** 🐛 fixed last connect line not save ([2bacb15](https://github.com/ByteCrazy/chameleon/commit/2bacb1541cbc753df15a0216df9d6d6aac86cb1d))

## [0.3.4](https://github.com/ByteCrazy/chameleon/compare/v0.3.3...v0.3.4) (2025-02-16)

### ✨ Features | 新功能

* **engine, layout, render:** 🎸 action node express support $response ([9bf1570](https://github.com/ByteCrazy/chameleon/commit/9bf1570c3b80404be78a5d3ca2c401464e7645d3))

## [0.3.3](https://github.com/ByteCrazy/chameleon/compare/v0.3.2...v0.3.3) (2025-02-16)

### ✨ Features | 新功能

* **engine:** 🎸 JSON setter support reactive value ([0262067](https://github.com/ByteCrazy/chameleon/commit/0262067fc641b8dd3c812cd3cf1f114df7e33f9c))

## [0.3.2](https://github.com/ByteCrazy/chameleon/compare/v0.3.1...v0.3.2) (2025-02-16)

### ✨ Features | 新功能

* **engine:** 🎸 optimize TCustomAPIInput type ([1b33f75](https://github.com/ByteCrazy/chameleon/commit/1b33f75a8b6e324b1f7695a62dfa1ae97d115cc7))

## [0.3.1](https://github.com/ByteCrazy/chameleon/compare/v0.3.0...v0.3.1) (2025-02-16)

### ✨ Features | 新功能

* **engine, render:** 🎸 optimize CustomAPISelectInput from and event list label ([8dbf5af](https://github.com/ByteCrazy/chameleon/commit/8dbf5af08e50c60c5ff7adc5c7e644c4ca1a9c08))

## [0.3.0](https://github.com/ByteCrazy/chameleon/compare/v0.2.4...v0.3.0) (2025-02-15)

### ♻️ Code Refactoring | 代码重构

* **render:** 💡 optimize convertModelToComponent code logic ([3334dd5](https://github.com/ByteCrazy/chameleon/commit/3334dd5f421b0d1b78ccde403c9673cadcea91da))

### 🐛 Bug Fixes | Bug 修复

* **engine, engine-website-app, material, model, render:** 🐛 fixed GRL hidden offsetY loop add size ([3df132b](https://github.com/ByteCrazy/chameleon/commit/3df132b6493026b42435d4868d77915b9f7316b2))
* **engine:** 🐛 fixed ActionFlowSetter cicle deps ([b9bd177](https://github.com/ByteCrazy/chameleon/commit/b9bd177e38be054a8860d19516651d9ab813e27b))
* **engine:** 🐛 fixed ActionFlowSetter cycle deps ([e69dfd7](https://github.com/ByteCrazy/chameleon/commit/e69dfd7df7129a88c54e238a05b96bb3270fbb2f))
* **engine:** 🐛 fixed ActionFlowSetter update problem ([0034848](https://github.com/ByteCrazy/chameleon/commit/0034848e31c3b30b6782723af10e7f8e0152390a))
* **engine:** 🐛 fixed outline drag excepetion after remove page ([82ff3fd](https://github.com/ByteCrazy/chameleon/commit/82ff3fd80ffce58b2b840ae219d29e61dd34a6e4))
* **engine:** 🐛 resolve hot key confict with action flow setter ([e91898c](https://github.com/ByteCrazy/chameleon/commit/e91898c8deae98805ea2df7a1e8f3bc382bd3873))

### ✨ Features | 新功能

* **demo-page, engine, model, render:** 🎸 action node use link struct ([599ece4](https://github.com/ByteCrazy/chameleon/commit/599ece4927523f7c0e330cac722c9c9e6976ea3c))
* **demo-page, engine, model, render:** 🎸 add event panel ([e8c5648](https://github.com/ByteCrazy/chameleon/commit/e8c5648017b40cbae42c576267d1e3b9d9660918))
* **demo-page, engine, model, render:** 🎸 support TActionLogicItem prop ([e1b9d1e](https://github.com/ByteCrazy/chameleon/commit/e1b9d1e150ae810750249322ddf906b62eee9969))
* **demo-page, model, render:** 🎸 optimize afterResponse ([b4060ba](https://github.com/ByteCrazy/chameleon/commit/b4060ba0a0a01960ae5f8dffea159e2d5ea680b6))
* **demo-page, model, render:** 🎸 support ASSIGN_VALUE node ([74c395b](https://github.com/ByteCrazy/chameleon/commit/74c395baec55911de734e47d4a270f9cf016ee21))
* **demo-page, model:** 🎸 define action and event type ([f7ca5d3](https://github.com/ByteCrazy/chameleon/commit/f7ca5d3b8ad7610f840845f555bfcdb2adddae0a))
* **demo-page, render:** 🎸 getMethods support get methods from ref ([0a26967](https://github.com/ByteCrazy/chameleon/commit/0a2696739eee29c3e30b805d537605a06496ebc5))
* **demo-page, render:** 🎸 support eventListener attr ([fa0977f](https://github.com/ByteCrazy/chameleon/commit/fa0977fab37b961d1b7a0b04c8e528e43ab9503f))
* **demo-page, render:** 🎸 support ON_DID_RENDER and ON_WILL_DESTROY inner event ([b4743e8](https://github.com/ByteCrazy/chameleon/commit/b4743e855766b69a8c5bc58ea3849694948bd501))
* **docs-app, engine, engine-website-app, layout, material, model, render:** 🎸 do ActionFlowSetter 50% ([6399466](https://github.com/ByteCrazy/chameleon/commit/6399466c7253436591e071df25828a357bb7089e))
* **engine, engine-website-app, render:** 🎸 RequestAPINode support custom select ([5b72385](https://github.com/ByteCrazy/chameleon/commit/5b72385673bb646aff3ad2c5a9d8fffa142733dd))
* **engine, model:** 🎸 add  call node method node ([1a5e79c](https://github.com/ByteCrazy/chameleon/commit/1a5e79c49964c589da167b64985327a3cbb03da8))
* **engine, model:** 🎸 add run code node ([7ac6182](https://github.com/ByteCrazy/chameleon/commit/7ac61829586a19d4fcdc1765fa878d6a16008858))
* **engine, model:** 🎸 request API 70% ([cee1228](https://github.com/ByteCrazy/chameleon/commit/cee1228c2a3265320cb32579f6f7b532b6962908))
* **engine:** 🎸 add react-flow ([fafaaf9](https://github.com/ByteCrazy/chameleon/commit/fafaaf95c589c0c99ce0953f285bf53a0e423e21))
* **engine:** 🎸 JumpLinkNode 100% ([ed0707e](https://github.com/ByteCrazy/chameleon/commit/ed0707e0232bf82bedc7b0db569c908d2001e6d7))
* **engine:** 🎸 optimize ActionFlowSetter ([fa9af2f](https://github.com/ByteCrazy/chameleon/commit/fa9af2fba32f921411ed05e8d7e68293de5dde88))
* **engine:** 🎸 optimize call node method node ([0b00029](https://github.com/ByteCrazy/chameleon/commit/0b00029627d6f90381b658ccc7f125e9b6116dcf))
* **engine:** 🎸 optimize MoveableModal interactive ([2eccb94](https://github.com/ByteCrazy/chameleon/commit/2eccb942b447fa4e54bcd6f9207a2ed053e06526))
* **engine:** 🎸 optimize RequestAPINode custom ([0440695](https://github.com/ByteCrazy/chameleon/commit/044069501608b1a8b62a08600c3c2d293e1ebe54))
* **engine:** 🎸 optimize selectNodeByTree ([b6959d9](https://github.com/ByteCrazy/chameleon/commit/b6959d98714a16669b3896b677ebb78aa080d8f3))
* **engine:** 🎸 optimize SetterSwitcher code struct ([d481fe6](https://github.com/ByteCrazy/chameleon/commit/d481fe68665f4fc7b1034e8b1ef9e2bfbe517012))
* **engine:** 🎸 parseActionLogicToNodeList 30% ([f120154](https://github.com/ByteCrazy/chameleon/commit/f1201549a5537f170dbdce7efca7c85ce3add2ad))
* **engine:** 🎸 support labelAlign config ([9590f86](https://github.com/ByteCrazy/chameleon/commit/9590f861fe8efebcd81ba38df3b159a528e066b6))
* **engine:** 🎸 support render flow by schema data ([e04e76d](https://github.com/ByteCrazy/chameleon/commit/e04e76d23115c64823dc6fbf5d460f589df98b3d))
* **model, render:** 🎸 add acion logic type defined ([a7c32a3](https://github.com/ByteCrazy/chameleon/commit/a7c32a33f80a00458fe16fbc4d0c34631c103b61))
* **model, render:** 🎸 optimize render react adapter code struct ([d9fa3d0](https://github.com/ByteCrazy/chameleon/commit/d9fa3d0a72e4d7e04e4e86e62d2a4f6f31bd808e))
* **render:** 🎸 add findDOMNode API ([2898452](https://github.com/ByteCrazy/chameleon/commit/2898452491554afddf36a795876182ff0d1bfc59))

## [0.2.4](https://github.com/ByteCrazy/chameleon/compare/v0.2.3...v0.2.4) (2024-12-08)

### 🐛 Bug Fixes | Bug 修复

* **engine, material:** 🐛 fixed RGL init layout not correcnt and upgrade gridstack ([6b66b47](https://github.com/ByteCrazy/chameleon/commit/6b66b47b37e1fcd96602132bb44373a01d5de946))

## [0.2.3](https://github.com/ByteCrazy/chameleon/compare/v0.2.2...v0.2.3) (2024-12-08)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed CVideo interactive ([4b1dabf](https://github.com/ByteCrazy/chameleon/commit/4b1dabfe89efbe2a3dfbb642e77ae10e74daaf0e))
* **engine:** 🐛 fixed hotkey not work sometimes ([d029841](https://github.com/ByteCrazy/chameleon/commit/d029841679183d5cffcbb991cf64cfcfea9de34e))

## [0.2.2](https://github.com/ByteCrazy/chameleon/compare/v0.2.1...v0.2.2) (2024-12-07)

### ✨ Features | 新功能

* **material:** 🎸 optimize RGL ([518402f](https://github.com/ByteCrazy/chameleon/commit/518402ff0d173e60fd31430222aea8e5856fa0da))

## [0.2.1](https://github.com/ByteCrazy/chameleon/compare/v0.2.0...v0.2.1) (2024-12-07)

### ✨ Features | 新功能

* **build-script, engine, engine-website-app, material, model, render:** 🎸 fixed RGL component and optimize project struct ([99f0679](https://github.com/ByteCrazy/chameleon/commit/99f0679d93a2fd696034ebed8f1abcd9d9e601d4))

## [0.2.0](https://github.com/ByteCrazy/chameleon/compare/v0.1.1...v0.2.0) (2024-12-07)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed inner meta image drag problem ([f752d9e](https://github.com/ByteCrazy/chameleon/commit/f752d9ecf611cfc3f55576d0758905c6ac322a4e))
* **layout:** 🐛 fixed canvas scroll ([9f4c5b9](https://github.com/ByteCrazy/chameleon/commit/9f4c5b9afaf5e3370a72256f2484b9390354f5a3))

### ✨ Features | 新功能

* **build-script, demo-page, engine, engine-website-app, layout, material, model, render:** 🎸 upgrade vite to 6.0 ([bcac2b1](https://github.com/ByteCrazy/chameleon/commit/bcac2b15b83b41a7042ca37368c1b45302ad81d5))
* **engine, layout, render:** 🎸 replace findDOMNode API ([af2531a](https://github.com/ByteCrazy/chameleon/commit/af2531a095124ac55d4f6dc6896d430f52f5da82))

## [0.1.1](https://github.com/ByteCrazy/chameleon/compare/v0.1.0...v0.1.1) (2024-11-11)

### ✨ Features | 新功能

* **material:** 🎸 optimize material gridItem UI ([34b8b8e](https://github.com/ByteCrazy/chameleon/commit/34b8b8e1b09aac22e538eff44488dc2021a5add6))

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed cycle dependencies ([cefa3f0](https://github.com/ByteCrazy/chameleon/commit/cefa3f0a4a9c72c81b5337bbdb6e0429ca247252))
* **render:** 🐛 fixeds useRender not memory ([d579bfa](https://github.com/ByteCrazy/chameleon/commit/d579bfa401c39810a5dadc55e3fa1f3a0f407322))

## [0.1.0](https://github.com/ByteCrazy/chameleon/compare/v0.0.46...v0.1.0) (2024-09-07)

### 👷 Continuous Integration | CI 配置

* 🎡 update ci ([7a1abc2](https://github.com/ByteCrazy/chameleon/commit/7a1abc21a7a9b80f53db1579ee928488ef678970))
* 🎡 update ci ([f21d4f9](https://github.com/ByteCrazy/chameleon/commit/f21d4f96266bb66adf02f961e2bee6aed59c7716))
* **build-script, docs-website, material, render:** 🎡 not build docs ([37aa10a](https://github.com/ByteCrazy/chameleon/commit/37aa10abf0324f3465a6921a9a014875e9500f8f))
* **engine, engine-website-app, layout, model:** 🎡 update github ci ([259e9db](https://github.com/ByteCrazy/chameleon/commit/259e9db229576cd09c5aae1f28a2c228927011c7))

### 🐛 Bug Fixes | Bug 修复

* **demo-page, docs-app, engine, engine-website-app, layout, material:** 🐛 fixed material meta not correct ([55b755c](https://github.com/ByteCrazy/chameleon/commit/55b755ce0c833e594b46447b2d6608cf56f7a593))
* **docs-website, engine, layout:** 🐛 fixed higligh toolbar pos ([0356109](https://github.com/ByteCrazy/chameleon/commit/0356109e8a11a5a85ab90d1610ef7ef8549db0a9))
* **engine-website-app:** 🐛 fixed demo-app assets path ([4cc071e](https://github.com/ByteCrazy/chameleon/commit/4cc071ecfe77e93b46645b5e4a7d806acf78d896))
* **engine, engine-website-app, material:** 🐛 fixed ReactGridLayout edit mode lable not correct ([9801839](https://github.com/ByteCrazy/chameleon/commit/9801839d9ff6a6548b0e23f1e31850cd56e7fff0))
* **engine, layout:** 🐛 fixed toolbox width not correct ([4dc159a](https://github.com/ByteCrazy/chameleon/commit/4dc159a1931a853ba4cdb664638f27ba71b1ecf2))
* **engine:** 🐛 fixed advanceCustom hook logic ([5fb2619](https://github.com/ByteCrazy/chameleon/commit/5fb261962af141affef0e8e2cf1f0b62d16b0d45))
* **engine:** 🐛 fixed BackgroundInput color input ([944517c](https://github.com/ByteCrazy/chameleon/commit/944517c9078b29c5076784a1df66752494125e9f))
* **engine:** 🐛 fixed CSSUIPanel value not corrent ([1a4dc64](https://github.com/ByteCrazy/chameleon/commit/1a4dc645171253b261a3d2c9ebd3cf27ec692d34))
* **engine:** 🐛 fixed github build ([a4ace81](https://github.com/ByteCrazy/chameleon/commit/a4ace818d20c657a255fd25d5771113e5191d55d))
* **engine:** 🐛 fixed render url ([27736de](https://github.com/ByteCrazy/chameleon/commit/27736de41f239b4911535097c7334b73eea35224))
* **engine:** 🐛 fixed shadow UI Input ([3fbb753](https://github.com/ByteCrazy/chameleon/commit/3fbb753bb26b03dd5a25bce0fc6621f2d8b778e1))
* **material:** 🐛 fixed GridItem copy ([70f9f68](https://github.com/ByteCrazy/chameleon/commit/70f9f6811da3dd46707e0a7304182b807eb745c9))
* **material:** 🐛 remove inner pkg version ([eefcf7e](https://github.com/ByteCrazy/chameleon/commit/eefcf7e11e8405e1d96fdf0c1abdd8959473db1c))
* **model:** 🐛 fixed export meta repeat ([614bedd](https://github.com/ByteCrazy/chameleon/commit/614beddb464f6e66d1d77bcccd1f9b996702c344))

### ✨ Features | 新功能

* **build-script, demo-page, engine, layout, render:** 🎸 add lang switch ([29da65e](https://github.com/ByteCrazy/chameleon/commit/29da65ee1aa09550d910ddfbbcb9d8b4db983373))
* **demo-page, engine, engine-website-app, layout, material, model:** 🎸 add hot action ([c7a405b](https://github.com/ByteCrazy/chameleon/commit/c7a405b35fedcbe47e163d32a8550bb82c9ae7d6))
* **demo-page, engine, engine-website-app, material:** 🎸 add designerSizer and fixed GridItem bug ([4665aed](https://github.com/ByteCrazy/chameleon/commit/4665aed300d54c77be4abcb9a8cc0f1710ac2145))
* **demo-page, engine, render:** 🎸 add getGlobalState and optimize node udpate ([4d3934f](https://github.com/ByteCrazy/chameleon/commit/4d3934fd8febe616a44e5d39da0e10964f3c800d))
* **docs-app, engine, layout, material, model, render:** 🎸 optimize GL layout ([02274b4](https://github.com/ByteCrazy/chameleon/commit/02274b432903dc247c5613873f14715dd806decd))
* **docs-app:** 🎸 use docs-app to do doc website ([2504946](https://github.com/ByteCrazy/chameleon/commit/25049463fdd2de507f19017be4e5269b7b5f7a2d))
* **engine-website-app, material:** 🎸 optimize RGL ([dd04999](https://github.com/ByteCrazy/chameleon/commit/dd04999a1509e29d6d738ea3a4250a146bfc295e))
* **engine, layout:** 🎸 add set canvas width method ([a18369f](https://github.com/ByteCrazy/chameleon/commit/a18369f0d4bbb4bcf04ce2695be313d767d4bbe5))
* **engine, material:** 🎸 add GRL meterial ([ae15c34](https://github.com/ByteCrazy/chameleon/commit/ae15c34a3f2736db61a933dc7d09166d9a619473))
* **engine, model:** 🎸 add advanceOptions property ([d75f178](https://github.com/ByteCrazy/chameleon/commit/d75f178fa70d4c49b451dff9dddfb30d4c061196))
* **engine, model:** 🎸 add hotKey plugin and fixed reloadPage event not trigge ([1cbf1e1](https://github.com/ByteCrazy/chameleon/commit/1cbf1e1a345d94c3b758b26cfbf1ecde69ce051c))
* **engine:** 🎸 add canvas size change button ([19ebdf8](https://github.com/ByteCrazy/chameleon/commit/19ebdf8d635b6b412979db81dc5d4f1b43d793a9))
* **engine:** 🎸 add hotAction ([c82bd21](https://github.com/ByteCrazy/chameleon/commit/c82bd21243aed9371a8576f572f600f1894f60bf))
* **engine:** 🎸 add width input ([c38422d](https://github.com/ByteCrazy/chameleon/commit/c38422d0848c4d60e8cb5b5b480671515c1d6101))
* **engine:** 🎸 optimize hotkeys methods ([bc83dba](https://github.com/ByteCrazy/chameleon/commit/bc83dba17fa4a23fa25548a284bbd69858bf15a0))

### 📝 Documentation | 文档

* **demo-page, engine-website-app:** ✏️ demo app add switch page ([c098997](https://github.com/ByteCrazy/chameleon/commit/c098997e2c53bbe135ce263fcd1912ddc53146fe))
* **docs-app, engine-website-app:** ✏️ fixed doc url path ([181aa3f](https://github.com/ByteCrazy/chameleon/commit/181aa3f0fe1f329d8c2e8bd83759781468edcf5d))
* **docs-app:** ✏️ update doc link ([dc5759d](https://github.com/ByteCrazy/chameleon/commit/dc5759dd962ac910df3f3a1650ec48f2d7ee92d8))
* **engine:** ✏️ add layout resource ([15f4325](https://github.com/ByteCrazy/chameleon/commit/15f4325e418d63bb3f046d58766e9bb1d2c96344))
* **engine:** ✏️ update md resource ([de95460](https://github.com/ByteCrazy/chameleon/commit/de954609bbc4dc24dbf704d809ffb1de9a9116b2))

## [0.0.46](https://github.com/ByteCrazy/chameleon/compare/v0.0.45...v0.0.46) (2024-06-30)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed registerCustomSetter method not valid ([9bdaa3b](https://github.com/ByteCrazy/chameleon/commit/9bdaa3b9feb1610a754b9aaa0925530f474dd3c3))

## [0.0.45](https://github.com/ByteCrazy/chameleon/compare/v0.0.44...v0.0.45) (2024-06-30)

### 🐛 Bug Fixes | Bug 修复

* **model:** 🐛 fixed addMaterials method logic ([b7b1d14](https://github.com/ByteCrazy/chameleon/commit/b7b1d14737b2b25362809fc15a7b9ae25cba18fc))

## [0.0.44](https://github.com/ByteCrazy/chameleon/compare/v0.0.43...v0.0.44) (2024-06-30)

### ✨ Features | 新功能

* **engine, model, render:** 🎸 optimize addMaterials and fixed inner mat schema ([aa77803](https://github.com/ByteCrazy/chameleon/commit/aa77803c75b203ee2a098fbee143f4a9581e15fa))

## [0.0.43](https://github.com/ByteCrazy/chameleon/compare/v0.0.42...v0.0.43) (2024-06-29)

### ✨ Features | 新功能

* **build-script, engine, layout:** 🎸 remove scss dts generate ([9ba7af3](https://github.com/ByteCrazy/chameleon/commit/9ba7af30601804f94e90a0408745fd48de38d8b5))

## [0.0.42](https://github.com/ByteCrazy/chameleon/compare/v0.0.41...v0.0.42) (2024-06-01)

### 🐛 Bug Fixes | Bug 修复

* **engine, layout:** 🐛 fixed drag and drop problem on chrome ([5c655c3](https://github.com/ByteCrazy/chameleon/commit/5c655c3a2f288bd90b70212f0f114adf3c23f8a1))

## [0.0.41](https://github.com/ByteCrazy/chameleon/compare/v0.0.40...v0.0.41) (2024-05-26)

### ✨ Features | 新功能

* **build-script, engine, layout, material, model, render:** 🎸 optimize build script ([0a60cc4](https://github.com/ByteCrazy/chameleon/commit/0a60cc4f5e5635d9e544b5141eaed5b8433901a5))

## [0.0.40](https://github.com/ByteCrazy/chameleon/compare/v0.0.39...v0.0.40) (2024-04-28)

### 🐛 Bug Fixes | Bug 修复

* fixed collectVariable logic ([e51bce9](https://github.com/ByteCrazy/chameleon/commit/e51bce9db030f8657575900406200972eee2e928))

## [0.0.39](https://github.com/ByteCrazy/chameleon/compare/v0.0.38...v0.0.39) (2024-04-27)

### 🐛 Bug Fixes | Bug 修复

* **build-script, demo-page, engine, layout, material, model, render:** 🐛 fix flatObject collectVariable refeer pos ([1c4163a](https://github.com/ByteCrazy/chameleon/commit/1c4163aeeb89176a1ff5b50f76930889df7751fe))

## [0.0.38](https://github.com/ByteCrazy/chameleon/compare/v0.0.37...v0.0.38) (2024-04-27)

### 🐛 Bug Fixes | Bug 修复

* **engine, layout:** 🐛 fixed assets load iuess when relaod ([3eccc60](https://github.com/ByteCrazy/chameleon/commit/3eccc60bb7be5a469704a9c4f769161e525481f4))

## [0.0.37](https://github.com/ByteCrazy/chameleon/compare/v0.0.36...v0.0.37) (2024-04-27)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed updateMaterials components map problem ([b868e88](https://github.com/ByteCrazy/chameleon/commit/b868e884a9b65021effdee8872a462fd8539c9c4))

## [0.0.36](https://github.com/ByteCrazy/chameleon/compare/v0.0.35...v0.0.36) (2024-04-27)

### 🐛 Bug Fixes | Bug 修复

* **render:** 🐛 fixed collectVariable method bug ([d5b7c5f](https://github.com/ByteCrazy/chameleon/commit/d5b7c5f274da52de09875cb9a9acf263ff051e59))

## [0.0.35](https://github.com/ByteCrazy/chameleon/compare/v0.0.34...v0.0.35) (2024-04-27)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed onPluginReadyOk return value ([8550591](https://github.com/ByteCrazy/chameleon/commit/85505913af29459882caef5b83d17c2a8aca45b3))

### ✨ Features | 新功能

* **render:** 🎸 support comp name  with '.' and adapte __esModule prop ([0020e9e](https://github.com/ByteCrazy/chameleon/commit/0020e9e0db01cc08895c042c54253d133676a672))

## [0.0.34](https://github.com/ByteCrazy/chameleon/compare/v0.0.33...v0.0.34) (2024-04-27)

### ✨ Features | 新功能

* **docs-website, engine, model:** 🎸 add update assetsPackageList logic ([2bce2f4](https://github.com/ByteCrazy/chameleon/commit/2bce2f4758b203695ec119d6e201e3186d7fab84))

## [0.0.33](https://github.com/ByteCrazy/chameleon/compare/v0.0.32...v0.0.33) (2024-04-27)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fix css editor initial value not correct problem ([96c3e58](https://github.com/ByteCrazy/chameleon/commit/96c3e58755ed4fdfa3e200f3049b5024cb9c6719))

### ✨ Features | 新功能

* **engine, layout, render:** 🎸 optimize history step save ([dca964a](https://github.com/ByteCrazy/chameleon/commit/dca964a990a3cc0c5fd853d853a55a4957999644))
* **engine, render:** 🎸 designer plugin add  updateComponent method ([f161177](https://github.com/ByteCrazy/chameleon/commit/f16117793402681a1eda8f8cba9c06e2ee5247ad))

## [0.0.32](https://github.com/ByteCrazy/chameleon/compare/v0.0.31...v0.0.32) (2024-01-30)

### ✨ Features | 新功能

* **docs-website, engine, model, render:** 🎸 add updateMaterials、updatePage methods ([39ed2b6](https://github.com/ByteCrazy/chameleon/commit/39ed2b692a8a7379a79b96cb3fd8cdb76a4f01f2))

## [0.0.31](https://github.com/ByteCrazy/chameleon/compare/v0.0.30...v0.0.31) (2023-10-17)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed arraySetter delete bug ([1b53538](https://github.com/ByteCrazy/chameleon/commit/1b53538a67ff35a6cfedffe661126f6912e78bbf))

## [0.0.30](https://github.com/ByteCrazy/chameleon/compare/v0.0.29...v0.0.30) (2023-10-17)

### 🐛 Bug Fixes | Bug 修复

* **render:** 🐛 remove child node cache ([0bca7b6](https://github.com/ByteCrazy/chameleon/commit/0bca7b6b1577c79e219f57ff9699b49000bb17ab))

## [0.0.29](https://github.com/ByteCrazy/chameleon/compare/v0.0.28...v0.0.29) (2023-10-17)

### ✨ Features | 新功能

* **build-script, engine:** 🎸 optimize css editor ([66c0541](https://github.com/ByteCrazy/chameleon/commit/66c0541eaee12b2eb0ceb4fb3a7748e1bf69768d))
* **demo-page, engine, model:** 🎸 add ant color setter ([830de46](https://github.com/ByteCrazy/chameleon/commit/830de46babdf40a740248c37d8e6dc2043db1434))
* **demo-page, engine, model:** 🎸 add ColorSetter ([e72b7f1](https://github.com/ByteCrazy/chameleon/commit/e72b7f15dd8bba498b776226d5debd07c8fd4234))
* **demo-page, engine, model:** 🎸 add radio setter ([e6f9b1d](https://github.com/ByteCrazy/chameleon/commit/e6f9b1d9dba7cd3a9a82116bf5a1068c06a5a1d6))
* **demo-page, engine:** 🎸 add cssSize setter ([74bf136](https://github.com/ByteCrazy/chameleon/commit/74bf136047000a67795e1360f2a923902366a513))
* **demo-page, engine:** 🎸 add slider setter ([0fe1d29](https://github.com/ByteCrazy/chameleon/commit/0fe1d29257f214e69ca9fed6e5e4c11ccccb56bb))
* **demo-page, render:** 🎸 compatible new style schema ([8165453](https://github.com/ByteCrazy/chameleon/commit/816545302e4d88a0976e8fdf3b17ed8a9a2978bd))
* **engine, model, render:** 🎸 cssEditor support cssText ([3dc74b4](https://github.com/ByteCrazy/chameleon/commit/3dc74b4895d414a718c00911a39d8491fafcfaee))
* **engine, model:** 🎸 optimize style editor ([9c660ce](https://github.com/ByteCrazy/chameleon/commit/9c660ce694a32059450f19c824bcde9889049db8))
* **engine, model:** 🎸 style varible、c s scss editor support styles text ([c988fcf](https://github.com/ByteCrazy/chameleon/commit/c988fcf17a2dbbc486e809a03c642726f02cf547))
* **engine:** 🎸 add border input ([ae7d3c3](https://github.com/ByteCrazy/chameleon/commit/ae7d3c3e1c07bf68cfa74ef15ab8f499c9b7afc3))
* **engine:** 🎸 add CSSSizeInput componrnt ([cd70933](https://github.com/ByteCrazy/chameleon/commit/cd70933fbb044058b65c402465a69139da4d8a4a))
* **engine:** 🎸 add DimensionInput、FontInput、MarginInput、PaddingInput ([08aa4e5](https://github.com/ByteCrazy/chameleon/commit/08aa4e5a959ace882312b77a15ab5c973d2015b8))
* **engine:** 🎸 CSSUI editor sync value ([549fa7e](https://github.com/ByteCrazy/chameleon/commit/549fa7ea676d9f31d10e3b78888ec2318df2cdc2))
* **engine:** 🎸 optimize style setter ([eba569c](https://github.com/ByteCrazy/chameleon/commit/eba569cb5871f6cf8cce459c69d3d3beb7e0459a))
* **engine:** 🎸 style UI finish ([a38fb84](https://github.com/ByteCrazy/chameleon/commit/a38fb846475631caa1a6253af7de11fd30027c48))

### 🐛 Bug Fixes | Bug 修复

* **build-script, engine:** 🐛 recocer build-script bin file ([5a2ca69](https://github.com/ByteCrazy/chameleon/commit/5a2ca69c4e5c48b3b0686478f6e5c40cd21c08ad))
* **engine, render:** 🐛 fixed build error and add child cache for render ([9026474](https://github.com/ByteCrazy/chameleon/commit/90264746fe99b8cdd4d055f2d778e67aae38af87))
* **engine:** 🐛 fixed MonacoEditor not trigger value change event ([0f6c3ee](https://github.com/ByteCrazy/chameleon/commit/0f6c3ee82a31b1a23388486f4cb12f9d7424ae66))
* **engine:** 🐛 fixed updatePanelValue not dispose problem ([b648986](https://github.com/ByteCrazy/chameleon/commit/b6489860398fe672de0e8009d91525dcc54909f2))

## [0.0.28](https://github.com/ByteCrazy/chameleon/compare/v0.0.27...v0.0.28) (2023-08-29)

### ✨ Features | 新功能

* **model, render:** 🎸 node support custom dropPlaceholder ([dabdbc0](https://github.com/ByteCrazy/chameleon/commit/dabdbc00b375d5b8491ff3498075caac45473a98))

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed click can't add component into canvas ([b8e8c2c](https://github.com/ByteCrazy/chameleon/commit/b8e8c2c703f20c2bc2836dc2e1f91b02b994e5ca))
* **layout:** 🐛 fixed not auto inert component when drag on a empty aera ([45d9ae3](https://github.com/ByteCrazy/chameleon/commit/45d9ae3b0b874a225e068f378f6be07584bb2f87))

## [0.0.27](https://github.com/ByteCrazy/chameleon/compare/v0.0.26...v0.0.27) (2023-08-28)

### ✨ Features | 新功能

* **engine:** 🎸 plugin system support add addCustomView method ([ce6db8f](https://github.com/ByteCrazy/chameleon/commit/ce6db8fcf1b87e6e3e14ed7464e7615c0ecc852b))

## [0.0.26](https://github.com/ByteCrazy/chameleon/compare/v0.0.25...v0.0.26) (2023-08-27)

### 🐛 Bug Fixes | Bug 修复

* **render:** 🐛 fixed process is not defined in render ([03e258f](https://github.com/ByteCrazy/chameleon/commit/03e258f5674bdb54da6dee8dd7a68c31f7432a69))

## [0.0.25](https://github.com/ByteCrazy/chameleon/compare/v0.0.24...v0.0.25) (2023-08-27)

**Note:** Version bump only for package chameleon

## [0.0.24](https://github.com/ByteCrazy/chameleon/compare/v0.0.23...v0.0.24) (2023-08-27)

### ✨ Features | 新功能

* **engine, model, render:** 🎸 fixed node maybe is null on rightPanel ([aee551e](https://github.com/ByteCrazy/chameleon/commit/aee551e77454f61900318003f9e3a3ffb1ef9427))

## [0.0.23](https://github.com/ByteCrazy/chameleon/compare/v0.0.22...v0.0.23) (2023-08-26)

### 🐛 Bug Fixes | Bug 修复

* **engine, render:** 🐛 fixed CSSPropertiesVariableBindEditor value not update ([9084c32](https://github.com/ByteCrazy/chameleon/commit/9084c32bb919c2e6191c29b871f9d1537d139050))

### ✨ Features | 新功能

* **engine, model:** 🎸 support custom rightPanel ([803d731](https://github.com/ByteCrazy/chameleon/commit/803d731819faa03430b2a17a154d3ff1e0daca28))
* **engine, model:** 🎸 support inject custom setter ([a49ec4a](https://github.com/ByteCrazy/chameleon/commit/a49ec4ae4a98b42cf1cfb768990b64c981539881))

## [0.0.22](https://github.com/ByteCrazy/chameleon/compare/v0.0.21...v0.0.22) (2023-08-24)

### ✨ Features | 新功能

* **demo-page, engine, layout, model:** 🎸 add disableEditorDragDom config ([1779f44](https://github.com/ByteCrazy/chameleon/commit/1779f44aff20370ea3336e72352032c6416f7dd3))

## [0.0.21](https://github.com/ByteCrazy/chameleon/compare/v0.0.20...v0.0.21) (2023-08-19)

### 🐛 Bug Fixes | Bug 修复

* **render:** 🐛 fixed assetsLoader resource is empty problem ([1e7ec0a](https://github.com/ByteCrazy/chameleon/commit/1e7ec0ab966c4b618638ac519401f4df5cfc8f82))

### ✨ Features | 新功能

* **engine, layout, model, render:** 🎸 optimize wrapComponent config ([d5916a7](https://github.com/ByteCrazy/chameleon/commit/d5916a7e6ee3cf79a32d4d23663b6873d86fe671))

## [0.0.20](https://github.com/ByteCrazy/chameleon/compare/v0.0.19...v0.0.20) (2023-08-19)

### ✨ Features | 新功能

* **model, render:** 🎸 support wrapComponent meterial config ([73fa19c](https://github.com/ByteCrazy/chameleon/commit/73fa19cd698bd61ef8079ae71dfd284600796ad2))

## [0.0.19](https://github.com/ByteCrazy/chameleon/compare/v0.0.18...v0.0.19) (2023-08-17)

### 🐛 Bug Fixes | Bug 修复

* **engine, render:** 🐛 fixed if assets is empty, loader will not success ([169d9ad](https://github.com/ByteCrazy/chameleon/commit/169d9ad9e5791353ad3a68dd0212c6ecfda64a29))

### ✨ Features | 新功能

* **engine:** 🎸 add HistoryPlugin type definition ([13a66fb](https://github.com/ByteCrazy/chameleon/commit/13a66fb5141b308af191394b6c377a0d387ea628))
* **engine:** 🎸 use @monaco-editor/react replace monaco-editor ([848ee87](https://github.com/ByteCrazy/chameleon/commit/848ee87dedbccc71d3a7366320ad03122ed15d38))

## [0.0.18](https://github.com/ByteCrazy/chameleon/compare/v0.0.17...v0.0.18) (2023-08-14)

### 🐛 Bug Fixes | Bug 修复

* **render:** 🐛 fixed page reload assets load failed ([b9eb815](https://github.com/ByteCrazy/chameleon/commit/b9eb815e75e1cd1738112ee18147f6faf0035155))

### ✨ Features | 新功能

* **engine:** 🎸 add className and style for engine ([c2b7ef3](https://github.com/ByteCrazy/chameleon/commit/c2b7ef3c1c68708963dece239528889701eb0fd7))
* **engine:** 🎸 add onMount for engine ([17c80ae](https://github.com/ByteCrazy/chameleon/commit/17c80aecc09f13da5f33d7a59b5849d73d99d12a))

## [0.0.17](https://github.com/ByteCrazy/chameleon/compare/v0.0.16...v0.0.17) (2023-08-06)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed types error ([1b68777](https://github.com/ByteCrazy/chameleon/commit/1b68777eb58225d750f40b16a7d263acb385477a))
* **layout:** 🐛 fixed Cannot read properties of undefined (reading 'id') ([008655c](https://github.com/ByteCrazy/chameleon/commit/008655c35bb73a93c48f35bbbd5eac0a515d7163))

## [0.0.16](https://github.com/ByteCrazy/chameleon/compare/v0.0.15...v0.0.16) (2023-08-06)

### 👷 Continuous Integration | CI 配置

* 🎡 update ci build ([081fbde](https://github.com/ByteCrazy/chameleon/commit/081fbde6bb840f3682e86ad7cbbcdc1e04e89c36))
* 🎡 update ci script ([099f032](https://github.com/ByteCrazy/chameleon/commit/099f03220711d0542081f462c517aae8ce4dea32))

### 🐛 Bug Fixes | Bug 修复

* **engine, layout:** 🐛 fixed some node not exits querySelector method ([2ddc186](https://github.com/ByteCrazy/chameleon/commit/2ddc1863e6eb207ae2e2b705a9fef4d23bece37c))

### ✨ Features | 新功能

* **build-script-example, demo-page, engine, layout, material, model, render:** 🎸 support direct import render from package on dev mode ([6bb38e2](https://github.com/ByteCrazy/chameleon/commit/6bb38e29678a8a4d08a7fcf9548fa548399259b0))
* **demo-page, engine, layout, model:** 🎸 support  advanceCustom drag and drop hooks ([fb21e15](https://github.com/ByteCrazy/chameleon/commit/fb21e1501f6829e4f13a35ea7be942ff72b0be91))
* **demo-page, engine, layout, model:** 🎸 support toolbarViewRender and ghostViewRedner ([43ced37](https://github.com/ByteCrazy/chameleon/commit/43ced371cfb7dbb58a96fc15e1bf635092307fa8))
* **demo-page, engine, layout:** 🎸 support DropViewRender ([1c025a6](https://github.com/ByteCrazy/chameleon/commit/1c025a6d1f57f450b2de262a787375f3f4891008))
* **demo-page, engine, model:** 🎸 support onDelete onCopy ([b6a76bb](https://github.com/ByteCrazy/chameleon/commit/b6a76bb244bbe2c050de17157bda97cb7ad21abc))
* **engine, layout, model:** 🎸 add customDropViewRender prop ([cea7f1e](https://github.com/ByteCrazy/chameleon/commit/cea7f1e3c2b0a8a13aef7cdcb0191593414615aa))
* **engine, layout, model:** 🎸 finish layout transform ([73ead35](https://github.com/ByteCrazy/chameleon/commit/73ead357b9aded2b5ee2b545da6f2b3677ce8393))
* **engine:** 🎸 optimze plugin type definition ([da9c107](https://github.com/ByteCrazy/chameleon/commit/da9c107b20646714834642ad09b2cbdfcb6eb7cd))
* **layout, model:** 🎸 optimize advanceCustom type definition ([0f529d1](https://github.com/ByteCrazy/chameleon/commit/0f529d1a8d8adbfd0970ba13a75a116a26e4d2f8))
* **layout, model:** 🎸 optimize advanceCustom type definition ([8cd11aa](https://github.com/ByteCrazy/chameleon/commit/8cd11aa9fb0dca0b605d9ed8504c2e827109dc8f))
* **layout, model:** 🎸 update meterial types definition ([fcf4e82](https://github.com/ByteCrazy/chameleon/commit/fcf4e827942afe4df8ad4210a0a3134138a5b10e))
* **layout:** 🎸 select hightlight use outline ([00654d0](https://github.com/ByteCrazy/chameleon/commit/00654d082c2823a6b01f109571f25a18bc51f5c5))
* **layout:** 🎸 setCanDrag add hook ([04ec3b6](https://github.com/ByteCrazy/chameleon/commit/04ec3b687310f689bbaaaa4a037b25d9ae5f8b9a))

## [0.0.15](https://github.com/ByteCrazy/chameleon/compare/v0.0.14...v0.0.15) (2023-07-01)

### 🐛 Bug Fixes | Bug 修复

* **engine, layout:** 🐛 fixed component will be add repeatedly after reload page ([1507549](https://github.com/ByteCrazy/chameleon/commit/1507549632c3c6e09d8555fd0286fcc72855c358))

### ✨ Features | 新功能

* auto detect toolbox dir ([#13](https://github.com/ByteCrazy/chameleon/issues/13)) ([4047408](https://github.com/ByteCrazy/chameleon/commit/404740870a658fa1740abe29ca50feac4a4028e4))
* **demo-page, docs-website, engine, model, render:** 🎸 optimize assets load ([3ee6d58](https://github.com/ByteCrazy/chameleon/commit/3ee6d58a88e5af3fc631723240783d5c97a273b0))
* **demo-page, engine:** 🎸 setter support initialValue ([794d807](https://github.com/ByteCrazy/chameleon/commit/794d8072518cb3b1a897b04a2e96f5ca53fdb365))
* **docs-website, engine, layout, material, render:** 🎸 support inject thridLib on $context ([ca2f074](https://github.com/ByteCrazy/chameleon/commit/ca2f07492b713c32e5a41d1f250f7888763cb665))
* **engine, render:** 🎸 change internal api ([0c0c7c3](https://github.com/ByteCrazy/chameleon/commit/0c0c7c3fa8f86c08ab0cefb0396107ed8c52dcd5))
* **render:** 🎸 render support store reactive ([61c7485](https://github.com/ByteCrazy/chameleon/commit/61c74857ba9541bb20d3722d351019c0ad97ac81))

## [0.0.14](https://github.com/ByteCrazy/chameleon/compare/v0.0.13...v0.0.14) (2023-05-10)

### ✨ Features | 新功能

* **engine:** 🎸 add node id in advance panel ([d457203](https://github.com/ByteCrazy/chameleon/commit/d45720316ab95f75f6f67a5dbf31bb0030ceb3f1))

### 🐛 Bug Fixes | Bug 修复

* **engine, layout:** 🐛 fixed new component can not be add into canvas ([4057fa9](https://github.com/ByteCrazy/chameleon/commit/4057fa925c18bf06325de04b270be5f6c23351c8))
* **engine, layout:** 🐛 fixed type problem ([751a392](https://github.com/ByteCrazy/chameleon/commit/751a39244228f74138acf7f567d23e888b8ff687))
* **engine, render:** 🐛 fixed removeMediaCSS method run failed ([9127ec3](https://github.com/ByteCrazy/chameleon/commit/9127ec3d13f43a1c8763b2350bc0224d683da85c))

## [0.0.13](https://github.com/ByteCrazy/chameleon/compare/v0.0.12...v0.0.13) (2023-05-03)

### ✨ Features | 新功能

* add-nearby-component ([85a301c](https://github.com/ByteCrazy/chameleon/commit/85a301c3d95e785c116ab38c0b3a452ceb33742f))
* **build-script, build-script-example, demo-page, engine, layout, material, model, render:** 🎸 config code style config ([2325504](https://github.com/ByteCrazy/chameleon/commit/23255048fa4a3d4fc8f5cfa1312db5abd6cac70d))
* **build-script, demo-page, engine, layout, model, render:** 🎸 update meterial schema ([14f4e5c](https://github.com/ByteCrazy/chameleon/commit/14f4e5caf0a4f6eca131e139d0c34ea21969dc0b))
* **demo-page, docs-website, engine, layout, model, render:** 🎸 node support methods config ([e080b20](https://github.com/ByteCrazy/chameleon/commit/e080b20cea3cea27b95def196e078c1c225d3a83))
* **demo-page, engine, layout, model:** 🎸 finish customEvent config ([84640e3](https://github.com/ByteCrazy/chameleon/commit/84640e3d06b79858590b9fe92ef4764fbe3f4f7b))
* **demo-page, engine, layout:** 🎸 outline support cancel drag by node material ([cd428d3](https://github.com/ByteCrazy/chameleon/commit/cd428d362a8bfe7d5b6e58ed2b6290e19c00672b))
* **demo-page, engine, layout:** 🎸 support cancel drag and custom node drag event ([825717e](https://github.com/ByteCrazy/chameleon/commit/825717e063846b72f95b0e41d8cba279ef5270c8))
* **demo-page, engine:** 🎸 complete advanceCustom material feature ([98cf273](https://github.com/ByteCrazy/chameleon/commit/98cf273543f2fd534c254990d61052534a6649da))
* **demo-page, engine:** 🎸 supprot onSelectNode ([f496a82](https://github.com/ByteCrazy/chameleon/commit/f496a82920cab7ae8704335b2ecd02a7887de3b2))
* **engine, layout, model:** 🎸 support supportDispatchNativeEvent field ([489fd05](https://github.com/ByteCrazy/chameleon/commit/489fd05b588e85ed4cea81cc33ab27739a1bac59))
* **engine, layout:** 🎸 optimize layout event system ([56f35ef](https://github.com/ByteCrazy/chameleon/commit/56f35ef83cc7e1658bfeba9081f997ff457cf09e))
* **engine, layout:** 🎸 support isSupportDispatchNativeEvent filed ([4f830b4](https://github.com/ByteCrazy/chameleon/commit/4f830b42b6e84d74e9d462c3b3e090de89686e18))
* **engine, render:** 🎸 html native tag component support container filed ([475fdbd](https://github.com/ByteCrazy/chameleon/commit/475fdbd5a34581ab7cafe67b5c9d3b94102b3a16))
* remove self-executing function ([e224524](https://github.com/ByteCrazy/chameleon/commit/e224524198aa3f1339afd3bc9f1bacb72bc4d20e))
* remove some useless code and fix some problems detected by eslint. ([a8e6ec2](https://github.com/ByteCrazy/chameleon/commit/a8e6ec2f107250facefc81cf87f694e40f3ed684))
* select element after in add node ([0c0d116](https://github.com/ByteCrazy/chameleon/commit/0c0d1164783420da306062292674fbccb0a8ffb0))
* update model code ([f74162a](https://github.com/ByteCrazy/chameleon/commit/f74162a32dda1fa4244705a0b63066d73a4d6537))

### 🐛 Bug Fixes | Bug 修复

* adjust find node logic ([5f9f073](https://github.com/ByteCrazy/chameleon/commit/5f9f07320888b3a83a4a24b04cfbd2e9e82aa4b1))
* **engine, layout, model:** 🐛 fixed type error ([d11e81f](https://github.com/ByteCrazy/chameleon/commit/d11e81f607ef6a41a2dfda0b4ac657a9a87e948c))
* **engine:** 🐛 fixed insert node logic ([7fd4866](https://github.com/ByteCrazy/chameleon/commit/7fd4866d7daaece1c8c3b2a846b55da27a1e0936))
* eslint warning ([403342f](https://github.com/ByteCrazy/chameleon/commit/403342f60420326a69e4b46a1560ba0f4845ed60))
* **model:** page thirdLibs forget process find return ([e1c5d2b](https://github.com/ByteCrazy/chameleon/commit/e1c5d2b3a7e365f892274c80402a72b7003151a8))

## [0.0.12](https://github.com/ByteCrazy/chameleon/compare/v0.0.11...v0.0.12) (2023-04-23)

### 👷 Continuous Integration | CI 配置

* 🎡 update publish script ([dab187a](https://github.com/ByteCrazy/chameleon/commit/dab187afcca315664284a4bc03d01a40a43e1cdf))

### 🐛 Bug Fixes | Bug 修复

* **build-script, build-script-example, engine, layout, material, model, render:** 🐛 fix can not find vite/client.d.ts problem ([8a53540](https://github.com/ByteCrazy/chameleon/commit/8a53540f75737707f69f93d2f701203dbf88084a))

### ✨ Features | 新功能

* **demo-page, docs-website, engine, model:** 🎸 update schema and change err to warn when schema check ([e753862](https://github.com/ByteCrazy/chameleon/commit/e7538626bad6681e4d488ac835fef61a603c0853))
* **demo-page, engine, layout, model, render:** 🎸 node support config self isContainer property ([d94f1f9](https://github.com/ByteCrazy/chameleon/commit/d94f1f9203f2c273856fd4aa489a1ed9cbb0f0ec))

## [0.0.11](https://github.com/ByteCrazy/chameleon/compare/v0.0.10...v0.0.11) (2023-04-21)

### ✨ Features | 新功能

*  add reload method of plugin ([3b2cb2a](https://github.com/ByteCrazy/chameleon/commit/3b2cb2aa3804e250ed8ce37027168282f63db879))
* add replaceSubTopBarView method ([da32d9c](https://github.com/ByteCrazy/chameleon/commit/da32d9c67a6fff1a562886c027c1604a54e19b7e))
* **build-script, build-script-example, demo-page, engine, layout, material, model, render:** 🎸 optimize build-script output file format ([eda44d2](https://github.com/ByteCrazy/chameleon/commit/eda44d255bd3c5af19013bdd61342e1f0817413a))
* **build-script, docs-website, engine:** 🎸 add material develop doc ([0aacca0](https://github.com/ByteCrazy/chameleon/commit/0aacca0f726bc13606b814f8890b4e8ff8982142))
* **engine, model:** 🎸 support custom setter ([5236c54](https://github.com/ByteCrazy/chameleon/commit/5236c543559aac517e833741ffa8046bc1c7f1a3))
* RightPanel add replacePanel、removePanel methods ([ee6c2e1](https://github.com/ByteCrazy/chameleon/commit/ee6c2e1b45bf93075342cee060fe3038ec7b8e53))

### 📝 Documentation | 文档

* **docs-website, engine:** ✏️ add plugin、setter develop doc ([288edc4](https://github.com/ByteCrazy/chameleon/commit/288edc4999f732ff2f27b1c6e50900b9b0094700))
* **docs-website, model:** ✏️ add material setter doc ([c7490fb](https://github.com/ByteCrazy/chameleon/commit/c7490fb9c9e9ef4cba9e33c5270a035592e3c46e))

## [0.0.10](https://github.com/ByteCrazy/chameleon/compare/v0.0.9...v0.0.10) (2023-04-17)

**Note:** Version bump only for package chameleon

## [0.0.9](https://github.com/ByteCrazy/chameleon/compare/v0.0.8...v0.0.9) (2023-04-17)

### ✨ Features | 新功能

* **build-script:** 🎸 build.config supprot es module ([275c97d](https://github.com/ByteCrazy/chameleon/commit/275c97d861b6394fbdd13b92fd1049c208f72b39))
* **docs-website, engine, render:** 🎸 render add collectVariable flatObject util method ([ae25160](https://github.com/ByteCrazy/chameleon/commit/ae25160b568c267041b3827e836c95f60ecaee59))

## [0.0.8](https://github.com/ByteCrazy/chameleon/compare/v0.0.7...v0.0.8) (2023-04-16)

### ✨ Features | 新功能

* **build-script, engine, layout, model, render:** 🎸 optimize pack package ([78d99c5](https://github.com/ByteCrazy/chameleon/commit/78d99c507ad65ca39101f0239467737d2b445c87))
* **docs-website, engine, layout:** 🎸 add defaultRender for engine, add some docs ([91f4257](https://github.com/ByteCrazy/chameleon/commit/91f4257e9f9b9391267e4b8d64e6ed811912381f))
* **docs-website, engine:** 🎸 add docs ([0e6f605](https://github.com/ByteCrazy/chameleon/commit/0e6f6053fa3cd5e13b6a7a8258c27518c30470c5))
* **docs:** 🎸 add doc home page ([29efec1](https://github.com/ByteCrazy/chameleon/commit/29efec168b71879ee58809d3be9e8f7084ca4d88))
* **docs:** 🎸 init docs project ([3331cec](https://github.com/ByteCrazy/chameleon/commit/3331cec7c7ed664e21270b7b98d7dc5f32574da9))

### 👷 Continuous Integration | CI 配置

* 🎡 modify ci flow ([ab9c47e](https://github.com/ByteCrazy/chameleon/commit/ab9c47e2f0492e8db1fdf8dcbddbec2a1801e1dd))
* 🎡 update ci ([085f0ba](https://github.com/ByteCrazy/chameleon/commit/085f0ba25586ba34cb3525edab488f30cd1ed790))
* 🎡 update ci ([32a5110](https://github.com/ByteCrazy/chameleon/commit/32a511054c733e277112d37f3e3f146bab41c3c2))

### 📝 Documentation | 文档

* **build-script, docs-website:** ✏️ change quickStart md ([f43945f](https://github.com/ByteCrazy/chameleon/commit/f43945fdd7eaf03b4ad3099980d7f3fb0a949b4c))
* **docs-website, engine:** ✏️ add doc ([2fb5cf5](https://github.com/ByteCrazy/chameleon/commit/2fb5cf5fd4dcb3859ecbdc8d42adf787d9e0255d))
* **docs-website:** ✏️ add doc project directory structure ([cc175e0](https://github.com/ByteCrazy/chameleon/commit/cc175e0bbce602ecc20433517e4bef9c8184f18f))

## [0.0.7](https://github.com/ByteCrazy/chameleon/compare/v0.0.6...v0.0.7) (2023-03-29)

### ✨ Features | 新功能

* **build-script, build-script-example, demo-page, engine, layout, material, model, render:** 🎸 external monaco eitor and remove style panel ([494d898](https://github.com/ByteCrazy/chameleon/commit/494d898fd75dabe84d867ff45e84ae63f9b59c5e))

## [0.0.6](https://github.com/ByteCrazy/chameleon/compare/v0.0.5...v0.0.6) (2023-03-28)

**Note:** Version bump only for package chameleon

## [0.0.5](https://github.com/ByteCrazy/chameleon/compare/v0.0.4...v0.0.5) (2023-03-28)

### ✨ Features | 新功能

* **build-script, engine, layout, material, model, render:** 🎸 complete package info ([86b095d](https://github.com/ByteCrazy/chameleon/commit/86b095da6c955946300591b1775f59c1a141c065))

## [0.0.4](https://github.com/ByteCrazy/chameleon/compare/v0.0.3...v0.0.4) (2023-03-27)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fixed engine d.ts path not correct problem ([fb20ca6](https://github.com/ByteCrazy/chameleon/commit/fb20ca604fff4e85b0264eff6383154ecfefd437))

## [0.0.2](https://github.com/ByteCrazy/chameleon/compare/v0.0.1...v0.0.2) (2023-03-27)

### 🐛 Bug Fixes | Bug 修复

* **engine:** 🐛 fix engine not incluce dist folder ([fc2c39e](https://github.com/ByteCrazy/chameleon/commit/fc2c39e88aa2eeb82ba5e3989e5bdf244d112dfb))


================================================
FILE: DEV_README.md
================================================
# chameleon

## Dev steps

```shell
cd ./
pnpm i
pnpm run build
cd package/engine
pnpm run start
```


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
# Chameleon

> Chameleon is ever-changing

A web visual programming engine, help to build a web page with 5 minutes. every people can use it easy.

[Docs](https://hlerenow.github.io/chameleon/documents/) | [Demo](https://hlerenow.github.io/chameleon/)

[Online(Beta) Service](https://cb.hai-fe.com)

## Install

```shell
npm i @chamn/engine @chamn/model @chamn/render
```

## Usage

[Example Project](https://github.com/ByteCrazy/chameleon-demo)

### ScreenSnapshot

<img width="1776" alt="image" src="https://github.com/user-attachments/assets/7b06dc4c-80a3-455d-bc91-14a1cf1fb331">


![image](https://github.com/hlerenow/chameleon/blob/master/packages/engine/md-images/layout.gif)

![image](https://user-images.githubusercontent.com/13299648/218920783-0d1cc275-a238-4d80-a717-dbbbf54b4713.png)

![image](https://user-images.githubusercontent.com/13299648/218920845-0c4c549d-df56-4b0a-9b72-95dd0c0fcaf5.png)

![image](https://user-images.githubusercontent.com/13299648/218921002-a25cfdd6-f27a-4b19-83fe-a6a264e4e4b5.png)

![image](https://user-images.githubusercontent.com/13299648/218920640-9be3b1ba-1dc2-42c5-922f-f3c5f97a9d96.png)


================================================
FILE: changelog.config.cjs
================================================
module.exports = {
  disableEmoji: false,
  // format: '{type}{scope}: {emoji}{subject}',
  list: ['test', 'feat', 'fix', 'chore', 'docs', 'refactor', 'style', 'ci', 'perf'],
  maxMessageLength: 64,
  minMessageLength: 3,
  questions: ['type', 'scope', 'subject', 'body', 'breaking', 'issues', 'packages'],
  types: {
    chore: {
      description: 'Build process or auxiliary tool changes',
      emoji: '🤖',
      value: 'chore',
    },
    ci: {
      description: 'CI related changes',
      emoji: '🎡',
      value: 'ci',
    },
    docs: {
      description: 'Documentation only changes',
      emoji: '✏️',
      value: 'docs',
    },
    feat: {
      description: 'A new feature',
      emoji: '🎸',
      value: 'feat',
    },
    fix: {
      description: 'A bug fix',
      emoji: '🐛',
      value: 'fix',
    },
    perf: {
      description: 'A code change that improves performance',
      emoji: '⚡️',
      value: 'perf',
    },
    refactor: {
      description: 'A code change that neither fixes a bug or adds a feature',
      emoji: '💡',
      value: 'refactor',
    },
    release: {
      description: 'Create a release commit',
      emoji: '🏹',
      value: 'release',
    },
    style: {
      description: 'Markup, white-space, formatting, missing semi-colons...',
      emoji: '💄',
      value: 'style',
    },
    test: {
      description: 'Adding missing tests',
      emoji: '💍',
      value: 'test',
    },
    messages: {
      type: "Select the type of change that you're committing:",
      customScope: 'Select the scope this component affects:',
      subject: 'Write a short, imperative mood description of the change:\n',
      body: 'Provide a longer description of the change:\n ',
      breaking: 'List any breaking changes:\n',
      footer: 'Issues this commit closes, e.g #123:',
      confirmCommit: 'The packages that this commit has affected\n',
    },
  },
};


================================================
FILE: design/chameleon.drawio
================================================
<mxfile host="Electron" modified="2023-05-09T14:29:55.352Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.3.0 Chrome/104.0.5112.114 Electron/20.1.3 Safari/537.36" etag="dS-NkhxV7Sr9prfl54vX" version="20.3.0" type="device" pages="2"><diagram id="TcPI6cIad4Egc41Xfp0x" name="工具栏展示逻辑">7Zpdk5owFIZ/DZfukCAfXq667s50tnbGfk3vIgRIBcKGUN3++iYQUEBntzOrrC1eKDlJCDnvk5xjVDNm8e6eoTR8pB6ONKh7O82YaxBCywHiQ1qeSwsAll5aAkY8ZdsbVuQ3VsaqWU48nDUackojTtKm0aVJgl3esCHG6LbZzKdRc9QUBbhjWLko6lq/EY+HpdWB9t7+gEkQ8np+k7ImRlVjNZMsRB7dHpiMO82YMUp5eRXvZjiS3qv8UvZbnKitH4zhhL+mw/d1Ov6afPxhPzmjDz+f11+eHozRuLzLLxTlasLqYflz5YFtSDhepciV5a2QWTOmIY8jUQLiEmVp6Xef7LAYapptMHdDVRsiN8wZvpe95mNh8GnCFygmkQTilrny5i7PxJBzlAs3YqYarWjOiiFDzoXW0DRuxZuYnXyTDbKbgNIgwigl2Y1L46LCzYqmC78cQlw2BjHhtD1MSZzwnXhyzugGz2hEWTF1Q74Wwp9T5SXMON6ddD+oRRXLAdMYcyaeQFcdRpahQKiWAjTL8nbPlemoNuEBU7URKZaD+uZ7ucWFUvwv1Icd9Wc0Tmkip9TGgNE88aTAc+mqF6C4XgZ6VbreHN9caaOj9Gexi04R+1919kkUHax0D2HHd4/tAZbr4LX/RmTUYU2RAZ0uGTUEh2QY5wLD7IDxSUZEqM+WCUckwV1CxPx5C4OG0xKxgbQ8rEwoIkEiiq7wV6GK9CYRwfZWVcTE8+QwR7lrknm96J1ji5n0zZE9JBIXSiQssxVdKk37yyOcIY84wyJvC22arxT6fGnEZEgj3kEaAXS7RQbsknHZ7b/Ka4Y84qq3GKD3DhIYEokLJRLABu8ukwDDkcQ51jmwdachtXEkYlw4lwDDmcR7SCYggE004KT3GNA9lR6SiWvYZNrxpP9sonu8tUw0+RNS2iEoC1GKCyz4KbEP6FojdxMU4i9zHhFJUmH3ENssRS/CpRP0G918EYvO8taL178PzMiGLWCOHJQfDUr62YCxjgMzpZxLrw3M9MyMMWkhM+7uMdC8LDPds8+CmccybgzM9M0MGFsvf9F5M2hEcf+jflF38N8I4+4P</diagram><diagram id="R30iJOuWzjQSZIw3P-wu" name="Style 面板">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</diagram></mxfile>

================================================
FILE: eslint.config.js
================================================
import js from '@eslint/js';
import globals from 'globals';
import reactHooks from 'eslint-plugin-react-hooks';
import reactRefresh from 'eslint-plugin-react-refresh';
import tseslint from 'typescript-eslint';

export default tseslint.config(
  { ignores: ['dist'] },
  {
    extends: [js.configs.recommended, ...tseslint.configs.recommended],
    languageOptions: {
      ecmaVersion: 2020,
      globals: globals.browser,
    },
    plugins: {
      'react-hooks': reactHooks,
      'react-refresh': reactRefresh,
    },
    rules: {
      ...reactHooks.configs.recommended.rules,
      'react-refresh/only-export-components': ['warn', { allowConstantExport: true }],
      '@typescript-eslint/no-explicit-any': ['off'],
      '@typescript-eslint/no-unused-vars': [
        'error',
        {
          args: 'all',
          argsIgnorePattern: '^_',
          caughtErrors: 'all',
          caughtErrorsIgnorePattern: '^_',
          destructuredArrayIgnorePattern: '^_',
          varsIgnorePattern: '^_',
          ignoreRestSiblings: true,
        },
      ],
      'no-debugger': ['warn'],
    },
  }
);


================================================
FILE: lerna.json
================================================
{
  "$schema": "node_modules/@lerna-lite/cli/schemas/lerna-schema.json",
  "packages": [
    "packages/*"
  ],
  "useWorkspaces": true,
  "npmClient": "pnpm",
  "command": {
    "run": {
      "npmClient": "pnpm"
    }
  },
  "changelogPreset": {
    "name": "conventionalcommits",
    "types": [
      {
        "type": "feat",
        "section": "✨ Features | 新功能"
      },
      {
        "type": "fix",
        "section": "🐛 Bug Fixes | Bug 修复"
      },
      {
        "type": "chore",
        "section": "🚀 Chore | 构建/工程依赖/工具",
        "hidden": true
      },
      {
        "type": "docs",
        "section": "📝 Documentation | 文档"
      },
      {
        "type": "style",
        "section": "💄 Styles | 样式"
      },
      {
        "type": "refactor",
        "section": "♻️ Code Refactoring | 代码重构"
      },
      {
        "type": "perf",
        "section": "⚡ Performance Improvements | 性能优化"
      },
      {
        "type": "test",
        "section": "✅ Tests | 测试",
        "hidden": true
      },
      {
        "type": "revert",
        "section": "⏪ Revert | 回退",
        "hidden": true
      },
      {
        "type": "build",
        "section": "📦‍ Build System | 打包构建"
      },
      {
        "type": "ci",
        "section": "👷 Continuous Integration | CI 配置"
      }
    ],
    "issuePrefixes": [
      "#"
    ],
    "issueUrlFormat": "{{host}}/{{owner}}/{{repository}}/issues/{{id}}",
    "commitUrlFormat": "{{host}}/{{owner}}/{{repository}}/commit/{{hash}}",
    "compareUrlFormat": "{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...{{currentTag}}",
    "userUrlFormat": "{{host}}/{{user}}"
  },
  "version": "0.10.4"
}

================================================
FILE: package.json
================================================
{
  "name": "chameleon",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "type": "module",
  "scripts": {
    "prepare": "husky install",
    "clear": "rm -rf ./node_modules",
    "lint": "lerna run lint",
    "build": "lerna run build",
    "changeVersion": "lerna version --force-publish --conventional-commits",
    "changeVersionPatch": "lerna version patch --force-publish --conventional-commits",
    "changeVersionMinor": "lerna version minor --force-publish --conventional-commits",
    "changeVersionMajor": "lerna version major --force-publish --conventional-commits",
    "toPublish": "npm run build && lerna publish from-package --force-publish --conventional-commits",
    "toFastPublish": "lerna publish from-package --force-publish --conventional-commits",
    "toPublishBeta": "npm run build && lerna publish --conventional-commits --dist-tag beta",
    "run-tests": "lerna run test",
    "cz": "git-cz"
  },
  "lint-staged": {
    "packages/*/src/**/*.{js,jsx,ts,tsx}": [
      "eslint --fix"
    ],
    "packages/*/src/**/*": "prettier --write --ignore-unknown"
  },
  "devDependencies": {
    "@hlerenow/git-cz": "^4.9.3",
    "@lerna-lite/cli": "^3.12.3",
    "@lerna-lite/list": "^3.12.3",
    "@lerna-lite/run": "^3.12.3",
    "@lerna-lite/version": "^3.12.3",
    "@lerna-lite/publish": "^3.12.3",
    "@lerna-lite/watch": "^3.12.3",
    "@types/jest": "^28.1.6",
    "clsx": "^1.1.1",
    "conventional-changelog-conventionalcommits": "^5.0.0",
    "cross-env": "^7.0.3",
    "husky": "^8.0.1",
    "lint-staged": "^13.0.3",
    "prettier": "2.7.1",
    "sass": "^1.53.0",
    "sass-loader": "10.1.1",
    "style-loader": "2.0.0",
    "ts-jest": "^28.0.7"
  },
  "engines": {
    "node": ">=16",
    "pnpm": ">=7"
  },
  "resolutions": {
    "react": "18.2.0",
    "@types/react": "^18.2.0"
  },
  "dependencies": {
    "@eslint/js": "^9.22.0",
    "eslint": "^9.22.0",
    "eslint-plugin-react-hooks": "^5.2.0",
    "eslint-plugin-react-refresh": "^0.4.19",
    "globals": "^16.0.0",
    "typescript": "~5.7.2",
    "typescript-eslint": "^8.26.1"
  }
}


================================================
FILE: packages/build-script/.eslintignore
================================================
scripts
bin/*
lib
example
jest.*

================================================
FILE: packages/build-script/CHANGELOG.md
================================================
# Change Log

All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [0.10.4](https://github.com/ByteCrazy/chameleon/compare/v0.10.3...v0.10.4) (2026-01-17)

**Note:** Version bump only for package @chamn/build-script

## [0.10.3](https://github.com/ByteCrazy/chameleon/compare/v0.10.2...v0.10.3) (2026-01-17)

**Note:** Version bump only for package @chamn/build-script

## [0.10.2](https://github.com/ByteCrazy/chameleon/compare/v0.10.1...v0.10.2) (2026-01-17)

**Note:** Version bump only for package @chamn/build-script

## [0.10.1](https://github.com/ByteCrazy/chameleon/compare/v0.10.0...v0.10.1) (2026-01-11)

### ✨ Features | 新功能

* **build-script, demo-page, engine, render:** 🎸 update build script dts & optimize modal root selector ([024d5ab](https://github.com/ByteCrazy/chameleon/commit/024d5ab26d19fc5f50172c328638a551fb99c129))

## [0.10.0](https://github.com/hlerenow/chameleon/compare/v0.9.3...v0.10.0) (2025-12-25)

### 🐛 Bug Fixes | Bug 修复

* 优化构建配置,修复 ES 模块外部化问题 ([866f0ae](https://github.com/hlerenow/chameleon/commit/866f0ae39472625137d73d143625d88d873f6c00))

### 📝 Documentation | 文档

* **build-script:** 添加完整的 README 使用文档 ([fcd6172](https://github.com/hlerenow/chameleon/commit/fcd6172e381364f010986864593264b160380342))

## [0.9.3](https://github.com/ByteCrazy/chameleon/compare/v0.9.2...v0.9.3) (2025-07-20)

**Note:** Version bump only for package @chamn/build-script

## [0.9.2](https://github.com/ByteCrazy/chameleon/compare/v0.9.1...v0.9.2) (2025-07-13)

**Note:** Version bump only for package @chamn/build-script

## [0.9.1](https://github.com/ByteCrazy/chameleon/compare/v0.9.0...v0.9.1) (2025-07-13)

**Note:** Version bump only for package @chamn/build-script

## [0.9.0](https://github.com/ByteCrazy/chameleon/compare/v0.8.6...v0.9.0) (2025-07-13)

**Note:** Version bump only for package @chamn/build-script

## [0.8.6](https://github.com/ByteCrazy/chameleon/compare/v0.8.5...v0.8.6) (2025-06-21)

**Note:** Version bump only for package @chamn/build-script

## [0.8.5](https://github.com/ByteCrazy/chameleon/compare/v0.8.4...v0.8.5) (2025-04-13)

**Note:** Version bump only for package @chamn/build-script

## [0.8.4](https://github.com/ByteCrazy/chameleon/compare/v0.8.3...v0.8.4) (2025-04-13)

**Note:** Version bump only for package @chamn/build-script

## [0.8.3](https://github.com/ByteCrazy/chameleon/compare/v0.8.2...v0.8.3) (2025-04-12)

**Note:** Version bump only for package @chamn/build-script

## [0.8.2](https://github.com/ByteCrazy/chameleon/compare/v0.8.1...v0.8.2) (2025-04-11)

**Note:** Version bump only for package @chamn/build-script

## [0.8.1](https://github.com/ByteCrazy/chameleon/compare/v0.8.0...v0.8.1) (2025-04-10)

**Note:** Version bump only for package @chamn/build-script

## [0.8.0](https://github.com/ByteCrazy/chameleon/compare/v0.7.0...v0.8.0) (2025-04-10)

**Note:** Version bump only for package @chamn/build-script

## [0.7.0](https://github.com/ByteCrazy/chameleon/compare/v0.6.0...v0.7.0) (2025-04-06)

**Note:** Version bump only for package @chamn/build-script

## [0.6.0](https://github.com/ByteCrazy/chameleon/compare/v0.5.2...v0.6.0) (2025-03-30)

**Note:** Version bump only for package @chamn/build-script

## [0.5.2](https://github.com/ByteCrazy/chameleon/compare/v0.5.1...v0.5.2) (2025-03-30)

**Note:** Version bump only for package @chamn/build-script

## [0.5.1](https://github.com/ByteCrazy/chameleon/compare/v0.5.0...v0.5.1) (2025-03-30)

**Note:** Version bump only for package @chamn/build-script

## [0.5.0](https://github.com/ByteCrazy/chameleon/compare/v0.4.0...v0.5.0) (2025-03-30)

**Note:** Version bump only for package @chamn/build-script

## [0.4.0](https://github.com/ByteCrazy/chameleon/compare/v0.3.21...v0.4.0) (2025-03-29)

**Note:** Version bump only for package @chamn/build-script

## [0.3.21](https://github.com/ByteCrazy/chameleon/compare/v0.3.20...v0.3.21) (2025-03-26)

**Note:** Version bump only for package @chamn/build-script

## [0.3.20](https://github.com/ByteCrazy/chameleon/compare/v0.3.19...v0.3.20) (2025-03-26)

**Note:** Version bump only for package @chamn/build-script

## [0.3.19](https://github.com/ByteCrazy/chameleon/compare/v0.3.18...v0.3.19) (2025-03-26)

**Note:** Version bump only for package @chamn/build-script

## [0.3.18](https://github.com/ByteCrazy/chameleon/compare/v0.3.17...v0.3.18) (2025-03-26)

**Note:** Version bump only for package @chamn/build-script

## [0.3.17](https://github.com/ByteCrazy/chameleon/compare/v0.3.16...v0.3.17) (2025-03-25)

**Note:** Version bump only for package @chamn/build-script

## [0.3.16](https://github.com/ByteCrazy/chameleon/compare/v0.3.15...v0.3.16) (2025-03-24)

**Note:** Version bump only for package @chamn/build-script

## [0.3.15](https://github.com/ByteCrazy/chameleon/compare/v0.3.14...v0.3.15) (2025-03-23)

**Note:** Version bump only for package @chamn/build-script

## [0.3.14](https://github.com/ByteCrazy/chameleon/compare/v0.3.13...v0.3.14) (2025-03-23)

**Note:** Version bump only for package @chamn/build-script

## [0.3.13](https://github.com/ByteCrazy/chameleon/compare/v0.3.12...v0.3.13) (2025-03-23)

**Note:** Version bump only for package @chamn/build-script

## [0.3.12](https://github.com/ByteCrazy/chameleon/compare/v0.3.11...v0.3.12) (2025-03-23)

**Note:** Version bump only for package @chamn/build-script

## [0.3.11](https://github.com/ByteCrazy/chameleon/compare/v0.3.10...v0.3.11) (2025-03-22)

**Note:** Version bump only for package @chamn/build-script

## [0.3.10](https://github.com/ByteCrazy/chameleon/compare/v0.3.9...v0.3.10) (2025-03-22)

**Note:** Version bump only for package @chamn/build-script

## [0.3.9](https://github.com/ByteCrazy/chameleon/compare/v0.3.8...v0.3.9) (2025-03-22)

**Note:** Version bump only for package @chamn/build-script

## [0.3.8](https://github.com/ByteCrazy/chameleon/compare/v0.3.7...v0.3.8) (2025-03-16)

**Note:** Version bump only for package @chamn/build-script

## [0.3.7](https://github.com/ByteCrazy/chameleon/compare/v0.3.6...v0.3.7) (2025-03-16)

**Note:** Version bump only for package @chamn/build-script

## [0.3.6](https://github.com/ByteCrazy/chameleon/compare/v0.3.5...v0.3.6) (2025-03-09)

**Note:** Version bump only for package @chamn/build-script

## [0.3.5](https://github.com/ByteCrazy/chameleon/compare/v0.3.4...v0.3.5) (2025-03-09)

**Note:** Version bump only for package @chamn/build-script

## [0.3.4](https://github.com/ByteCrazy/chameleon/compare/v0.3.3...v0.3.4) (2025-02-16)

**Note:** Version bump only for package @chamn/build-script

## [0.3.3](https://github.com/ByteCrazy/chameleon/compare/v0.3.2...v0.3.3) (2025-02-16)

**Note:** Version bump only for package @chamn/build-script

## [0.3.2](https://github.com/ByteCrazy/chameleon/compare/v0.3.1...v0.3.2) (2025-02-16)

**Note:** Version bump only for package @chamn/build-script

## [0.3.1](https://github.com/ByteCrazy/chameleon/compare/v0.3.0...v0.3.1) (2025-02-16)

**Note:** Version bump only for package @chamn/build-script

## [0.3.0](https://github.com/ByteCrazy/chameleon/compare/v0.2.4...v0.3.0) (2025-02-15)

**Note:** Version bump only for package @chamn/build-script

## [0.2.4](https://github.com/ByteCrazy/chameleon/compare/v0.2.3...v0.2.4) (2024-12-08)

**Note:** Version bump only for package @chamn/build-script

## [0.2.3](https://github.com/ByteCrazy/chameleon/compare/v0.2.2...v0.2.3) (2024-12-08)

**Note:** Version bump only for package @chamn/build-script

## [0.2.2](https://github.com/ByteCrazy/chameleon/compare/v0.2.1...v0.2.2) (2024-12-07)

**Note:** Version bump only for package @chamn/build-script

## [0.2.1](https://github.com/ByteCrazy/chameleon/compare/v0.2.0...v0.2.1) (2024-12-07)

### ✨ Features | 新功能

* **build-script, engine, engine-website-app, material, model, render:** 🎸 fixed RGL component and optimize project struct ([99f0679](https://github.com/ByteCrazy/chameleon/commit/99f0679d93a2fd696034ebed8f1abcd9d9e601d4))

## [0.2.0](https://github.com/ByteCrazy/chameleon/compare/v0.1.1...v0.2.0) (2024-12-07)

### ✨ Features | 新功能

* **build-script, demo-page, engine, engine-website-app, layout, material, model, render:** 🎸 upgrade vite to 6.0 ([bcac2b1](https://github.com/ByteCrazy/chameleon/commit/bcac2b15b83b41a7042ca37368c1b45302ad81d5))

## [0.1.1](https://github.com/ByteCrazy/chameleon/compare/v0.1.0...v0.1.1) (2024-11-11)

**Note:** Version bump only for package @chamn/build-script

## [0.1.0](https://github.com/ByteCrazy/chameleon/compare/v0.0.46...v0.1.0) (2024-09-07)

### ✨ Features | 新功能

* **build-script, demo-page, engine, layout, render:** 🎸 add lang switch ([29da65e](https://github.com/ByteCrazy/chameleon/commit/29da65ee1aa09550d910ddfbbcb9d8b4db983373))

### 👷 Continuous Integration | CI 配置

* **build-script, docs-website, material, render:** 🎡 not build docs ([37aa10a](https://github.com/ByteCrazy/chameleon/commit/37aa10abf0324f3465a6921a9a014875e9500f8f))

## [0.0.46](https://github.com/ByteCrazy/chameleon/compare/v0.0.45...v0.0.46) (2024-06-30)

**Note:** Version bump only for package @chamn/build-script

## [0.0.45](https://github.com/ByteCrazy/chameleon/compare/v0.0.44...v0.0.45) (2024-06-30)

**Note:** Version bump only for package @chamn/build-script

## [0.0.44](https://github.com/ByteCrazy/chameleon/compare/v0.0.43...v0.0.44) (2024-06-30)

**Note:** Version bump only for package @chamn/build-script

## [0.0.43](https://github.com/ByteCrazy/chameleon/compare/v0.0.42...v0.0.43) (2024-06-29)

### ✨ Features | 新功能

* **build-script, engine, layout:** 🎸 remove scss dts generate ([9ba7af3](https://github.com/ByteCrazy/chameleon/commit/9ba7af30601804f94e90a0408745fd48de38d8b5))

## [0.0.42](https://github.com/ByteCrazy/chameleon/compare/v0.0.41...v0.0.42) (2024-06-01)

**Note:** Version bump only for package @chamn/build-script

## [0.0.41](https://github.com/ByteCrazy/chameleon/compare/v0.0.40...v0.0.41) (2024-05-26)

### ✨ Features | 新功能

* **build-script, engine, layout, material, model, render:** 🎸 optimize build script ([0a60cc4](https://github.com/ByteCrazy/chameleon/commit/0a60cc4f5e5635d9e544b5141eaed5b8433901a5))

## [0.0.40](https://github.com/ByteCrazy/chameleon/compare/v0.0.39...v0.0.40) (2024-04-28)

**Note:** Version bump only for package @chamn/build-script

## [0.0.39](https://github.com/ByteCrazy/chameleon/compare/v0.0.38...v0.0.39) (2024-04-27)

### 🐛 Bug Fixes | Bug 修复

* **build-script, demo-page, engine, layout, material, model, render:** 🐛 fix flatObject collectVariable refeer pos ([1c4163a](https://github.com/ByteCrazy/chameleon/commit/1c4163aeeb89176a1ff5b50f76930889df7751fe))

## [0.0.38](https://github.com/ByteCrazy/chameleon/compare/v0.0.37...v0.0.38) (2024-04-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.37](https://github.com/ByteCrazy/chameleon/compare/v0.0.36...v0.0.37) (2024-04-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.36](https://github.com/ByteCrazy/chameleon/compare/v0.0.35...v0.0.36) (2024-04-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.35](https://github.com/ByteCrazy/chameleon/compare/v0.0.34...v0.0.35) (2024-04-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.34](https://github.com/ByteCrazy/chameleon/compare/v0.0.33...v0.0.34) (2024-04-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.33](https://github.com/ByteCrazy/chameleon/compare/v0.0.32...v0.0.33) (2024-04-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.32](https://github.com/ByteCrazy/chameleon/compare/v0.0.31...v0.0.32) (2024-01-30)

**Note:** Version bump only for package @chamn/build-script

## [0.0.31](https://github.com/ByteCrazy/chameleon/compare/v0.0.30...v0.0.31) (2023-10-17)

**Note:** Version bump only for package @chamn/build-script

## [0.0.30](https://github.com/ByteCrazy/chameleon/compare/v0.0.29...v0.0.30) (2023-10-17)

**Note:** Version bump only for package @chamn/build-script

## [0.0.29](https://github.com/ByteCrazy/chameleon/compare/v0.0.28...v0.0.29) (2023-10-17)

### ✨ Features | 新功能

* **build-script, engine:** 🎸 optimize css editor ([66c0541](https://github.com/ByteCrazy/chameleon/commit/66c0541eaee12b2eb0ceb4fb3a7748e1bf69768d))

### 🐛 Bug Fixes | Bug 修复

* **build-script, engine:** 🐛 recocer build-script bin file ([5a2ca69](https://github.com/ByteCrazy/chameleon/commit/5a2ca69c4e5c48b3b0686478f6e5c40cd21c08ad))

## [0.0.28](https://github.com/ByteCrazy/chameleon/compare/v0.0.27...v0.0.28) (2023-08-29)

**Note:** Version bump only for package @chamn/build-script

## [0.0.27](https://github.com/ByteCrazy/chameleon/compare/v0.0.26...v0.0.27) (2023-08-28)

**Note:** Version bump only for package @chamn/build-script

## [0.0.26](https://github.com/ByteCrazy/chameleon/compare/v0.0.25...v0.0.26) (2023-08-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.25](https://github.com/ByteCrazy/chameleon/compare/v0.0.24...v0.0.25) (2023-08-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.24](https://github.com/ByteCrazy/chameleon/compare/v0.0.23...v0.0.24) (2023-08-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.23](https://github.com/ByteCrazy/chameleon/compare/v0.0.22...v0.0.23) (2023-08-26)

**Note:** Version bump only for package @chamn/build-script

## [0.0.22](https://github.com/ByteCrazy/chameleon/compare/v0.0.21...v0.0.22) (2023-08-24)

**Note:** Version bump only for package @chamn/build-script

## [0.0.21](https://github.com/ByteCrazy/chameleon/compare/v0.0.20...v0.0.21) (2023-08-19)

**Note:** Version bump only for package @chamn/build-script

## [0.0.20](https://github.com/ByteCrazy/chameleon/compare/v0.0.19...v0.0.20) (2023-08-19)

**Note:** Version bump only for package @chamn/build-script

## [0.0.19](https://github.com/ByteCrazy/chameleon/compare/v0.0.18...v0.0.19) (2023-08-17)

**Note:** Version bump only for package @chamn/build-script

## [0.0.18](https://github.com/ByteCrazy/chameleon/compare/v0.0.17...v0.0.18) (2023-08-14)

**Note:** Version bump only for package @chamn/build-script

## [0.0.17](https://github.com/ByteCrazy/chameleon/compare/v0.0.16...v0.0.17) (2023-08-06)

**Note:** Version bump only for package @chamn/build-script

## [0.0.16](https://github.com/ByteCrazy/chameleon/compare/v0.0.15...v0.0.16) (2023-08-06)

**Note:** Version bump only for package @chamn/build-script

## [0.0.15](https://github.com/ByteCrazy/chameleon/compare/v0.0.14...v0.0.15) (2023-07-01)

**Note:** Version bump only for package @chamn/build-script

## [0.0.14](https://github.com/ByteCrazy/chameleon/compare/v0.0.13...v0.0.14) (2023-05-10)

**Note:** Version bump only for package @chamn/build-script

## [0.0.13](https://github.com/ByteCrazy/chameleon/compare/v0.0.12...v0.0.13) (2023-05-03)

### ✨ Features | 新功能

* **build-script, build-script-example, demo-page, engine, layout, material, model, render:** 🎸 config code style config ([2325504](https://github.com/ByteCrazy/chameleon/commit/23255048fa4a3d4fc8f5cfa1312db5abd6cac70d))
* **build-script, demo-page, engine, layout, model, render:** 🎸 update meterial schema ([14f4e5c](https://github.com/ByteCrazy/chameleon/commit/14f4e5caf0a4f6eca131e139d0c34ea21969dc0b))

## [0.0.12](https://github.com/ByteCrazy/chameleon/compare/v0.0.11...v0.0.12) (2023-04-23)

### 🐛 Bug Fixes | Bug 修复

* **build-script, build-script-example, engine, layout, material, model, render:** 🐛 fix can not find vite/client.d.ts problem ([8a53540](https://github.com/ByteCrazy/chameleon/commit/8a53540f75737707f69f93d2f701203dbf88084a))

## [0.0.11](https://github.com/ByteCrazy/chameleon/compare/v0.0.10...v0.0.11) (2023-04-21)

### ✨ Features | 新功能

* **build-script, build-script-example, demo-page, engine, layout, material, model, render:** 🎸 optimize build-script output file format ([eda44d2](https://github.com/ByteCrazy/chameleon/commit/eda44d255bd3c5af19013bdd61342e1f0817413a))
* **build-script, docs-website, engine:** 🎸 add material develop doc ([0aacca0](https://github.com/ByteCrazy/chameleon/commit/0aacca0f726bc13606b814f8890b4e8ff8982142))

## [0.0.10](https://github.com/ByteCrazy/chameleon/compare/v0.0.9...v0.0.10) (2023-04-17)

**Note:** Version bump only for package @chamn/build-script

## [0.0.9](https://github.com/ByteCrazy/chameleon/compare/v0.0.8...v0.0.9) (2023-04-17)

### ✨ Features | 新功能

* **build-script:** 🎸 build.config supprot es module ([275c97d](https://github.com/ByteCrazy/chameleon/commit/275c97d861b6394fbdd13b92fd1049c208f72b39))

## [0.0.8](https://github.com/ByteCrazy/chameleon/compare/v0.0.7...v0.0.8) (2023-04-16)

### ✨ Features | 新功能

* **build-script, engine, layout, model, render:** 🎸 optimize pack package ([78d99c5](https://github.com/ByteCrazy/chameleon/commit/78d99c507ad65ca39101f0239467737d2b445c87))

### 📝 Documentation | 文档

* **build-script, docs-website:** ✏️ change quickStart md ([f43945f](https://github.com/ByteCrazy/chameleon/commit/f43945fdd7eaf03b4ad3099980d7f3fb0a949b4c))

## [0.0.7](https://github.com/ByteCrazy/chameleon/compare/v0.0.6...v0.0.7) (2023-03-29)

### ✨ Features | 新功能

* **build-script, build-script-example, demo-page, engine, layout, material, model, render:** 🎸 external monaco eitor and remove style panel ([494d898](https://github.com/ByteCrazy/chameleon/commit/494d898fd75dabe84d867ff45e84ae63f9b59c5e))

## [0.0.6](https://github.com/ByteCrazy/chameleon/compare/v0.0.5...v0.0.6) (2023-03-28)

**Note:** Version bump only for package @chamn/build-script

## [0.0.5](https://github.com/ByteCrazy/chameleon/compare/v0.0.4...v0.0.5) (2023-03-28)

### ✨ Features | 新功能

* **build-script, engine, layout, material, model, render:** 🎸 complete package info ([86b095d](https://github.com/ByteCrazy/chameleon/commit/86b095da6c955946300591b1775f59c1a141c065))

## [0.0.4](https://github.com/ByteCrazy/chameleon/compare/v0.0.3...v0.0.4) (2023-03-27)

**Note:** Version bump only for package @chamn/build-script

## [0.0.2](https://github.com/ByteCrazy/chameleon/compare/v0.0.1...v0.0.2) (2023-03-27)

**Note:** Version bump only for package @chamn/build-script


================================================
FILE: packages/build-script/README.md
================================================
# @chamn/build-script

基于 Vite 的构建工具,用于构建库(Library)和应用(Application)项目。支持多种输出格式、TypeScript 类型定义生成、开发服务器等功能。

## 特性

- 🚀 基于 Vite,构建速度快
- 📦 支持多种输出格式:`cjs`、`es`、`umd`、`iife`
- 📝 自动生成 TypeScript 类型定义(.d.ts)
- 🔧 灵活的依赖外部化配置
- 🎯 支持按格式配置不同的 external 规则
- 🔍 支持构建分析(bundle analyzer)
- 👀 支持 watch 模式
- 🛠️ 支持开发服务器
- ⚙️ 支持自定义 Vite 配置

## 安装

```bash
npm install @chamn/build-script --save-dev
```

## 快速开始

### 1. 创建配置文件

在项目根目录创建 `build.config.js` 或 `build.config.ts` 文件:

```javascript
// build.config.js
export default {
  libMode: true, // 是否为库模式,false 为应用模式
  entry: './src/index.tsx', // 入口文件
  libName: 'MyLibrary', // 库名称(UMD 格式需要)
  fileName: 'index', // 输出文件名
  formats: ['cjs', 'es', 'umd'], // 输出格式
};
```

### 2. 配置 package.json

```json
{
  "scripts": {
    "dev": "build-script",
    "build": "build-script --build",
    "build:watch": "build-script --build --watch",
    "build:analyze": "build-script --build --analyze"
  }
}
```

### 3. 运行命令

```bash
# 开发模式
npm run dev

# 构建
npm run build

# 构建(watch 模式)
npm run build:watch

# 构建(分析模式)
npm run build:analyze
```

## 配置选项

### BuildScriptConfig

```typescript
type BuildScriptConfig = {
  // 是否为库模式,false 为应用模式(默认:true)
  libMode?: boolean;

  // 入口文件路径(必需)
  entry: string;

  // 库名称(UMD 格式需要)
  libName?: string;

  // 输出文件名(默认:'index')
  fileName?: string;

  // 样式文件名(默认:'style')
  cssFileName?: string;

  // 通用的 external 配置,对所有格式生效
  external?: ExternalOption;

  // 按格式配置不同的 external 规则,优先级高于 external
  externalByFormat?: {
    es?: ExternalOption;
    cjs?: ExternalOption;
    umd?: ExternalOption;
    iife?: ExternalOption;
  };

  // 自定义需要排除的别名前缀列表,这些路径不会被外部化
  // 默认值:['@/', '~/', '#/']
  externalAlias?: string[];

  // UMD 格式的全局变量映射
  global?: Record<string, string>;

  // 输出格式(默认:build 模式为 ['cjs', 'es', 'umd'],dev 模式为 ['cjs', 'es'])
  formats?: LibraryOptions['formats'];

  // 自定义 Vite 配置
  vite?: UserConfig;
};
```

### ExternalOption

```typescript
type ExternalOption = (string | RegExp)[] | ((id: string, importer?: string, isResolved?: boolean) => boolean);
```

## 使用示例

### 库模式(Library Mode)

```javascript
// build.config.js
export default {
  libMode: true,
  entry: './src/index.tsx',
  libName: 'MyLibrary',
  fileName: 'index',
  formats: ['cjs', 'es', 'umd'],
  global: {
    react: 'React',
    'react-dom': 'ReactDOM',
  },
  // 模块格式(es, cjs)使用严格的 external
  externalByFormat: {
    es: (id) => {
      if (id.startsWith('.') || id.startsWith('/')) return false;
      if (id.startsWith('@/')) return false;
      return true; // 外部化所有 node_modules 依赖
    },
    cjs: (id) => {
      if (id.startsWith('.') || id.startsWith('/')) return false;
      if (id.startsWith('@/')) return false;
      return true;
    },
    // 浏览器格式(umd)只外部化 react 和 react-dom
    umd: ['react', 'react-dom'],
  },
};
```

### 应用模式(Application Mode)

```javascript
// build.config.js
export default {
  libMode: false,
  entry: './src/index.tsx',
  vite: {
    base: '/my-app/',
    build: {
      outDir: './dist',
      copyPublicDir: true,
    },
    plugins: [
      // 自定义插件
    ],
  },
};
```

### 自定义别名配置

```javascript
// build.config.js
export default {
  entry: './src/index.tsx',
  libName: 'MyLibrary',
  // 自定义别名前缀,这些路径不会被外部化
  externalAlias: ['@/', '~/', '#/', '$lib/'],
};
```

### 自定义 Vite 配置

```javascript
// build.config.js
export default {
  entry: './src/index.tsx',
  libName: 'MyLibrary',
  vite: {
    define: {
      'process.env.NODE_ENV': JSON.stringify('production'),
      __VERSION__: JSON.stringify('1.0.0'),
    },
    plugins: [
      // 自定义 Vite 插件
    ],
    build: {
      minify: 'terser',
      terserOptions: {
        compress: {
          drop_console: true,
        },
      },
    },
  },
};
```

## CLI 参数

```bash
build-script [options]
```

### 选项

- `--build`: 构建模式(默认:开发模式)
- `--watch`: Watch 模式,文件变化时自动重新构建
- `--analyze`: 构建分析模式,生成并打开 bundle 分析报告
- `--generateDTS`: 生成 TypeScript 类型定义(默认:true,设置为 false 可禁用)
- `--sourcemap`: 生成 sourcemap(默认:true)

### 示例

```bash
# 开发模式
build-script

# 构建模式
build-script --build

# 构建 + Watch 模式
build-script --build --watch

# 构建 + 分析
build-script --build --analyze

# 构建 + 不生成类型定义
build-script --build --generateDTS=false

# 构建 + 不生成 sourcemap
build-script --build --sourcemap=false
```

## 输出格式说明

### CommonJS (cjs)

适用于 Node.js 环境,使用 `require()` 导入。

```javascript
const MyLibrary = require('my-library');
```

### ES Module (es)

适用于现代打包工具和浏览器,使用 `import` 导入。

```javascript
import MyLibrary from 'my-library';
```

### UMD (umd)

通用模块定义,同时支持 CommonJS、AMD 和全局变量。

```html
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="./dist/index.umd.js"></script>
<script>
  // 全局变量方式使用
  const app = MyLibrary.createApp();
</script>
```

### IIFE (iife)

立即执行函数表达式,适用于直接在浏览器中使用。

## 依赖外部化(External)

### 默认行为

- **模块格式(es, cjs)**:默认外部化所有 `node_modules` 中的依赖,但保留项目内部文件(相对路径、别名路径)
- **浏览器格式(umd, iife)**:默认只外部化 `react` 和 `react-dom`

### 自定义 External 配置

#### 方式一:通用配置

```javascript
export default {
  entry: './src/index.tsx',
  // 所有格式都使用这个配置
  external: ['react', 'react-dom', 'lodash'],
};
```

#### 方式二:按格式配置(推荐)

```javascript
export default {
  entry: './src/index.tsx',
  externalByFormat: {
    // 模块格式:外部化所有依赖
    es: (id) => {
      if (id.startsWith('.') || id.startsWith('/')) return false;
      if (id.startsWith('@/')) return false;
      return true;
    },
    cjs: (id) => {
      if (id.startsWith('.') || id.startsWith('/')) return false;
      if (id.startsWith('@/')) return false;
      return true;
    },
    // 浏览器格式:只外部化 react 和 react-dom
    umd: ['react', 'react-dom'],
  },
};
```

#### 方式三:函数式配置

```javascript
export default {
  entry: './src/index.tsx',
  external: (id) => {
    // 不外部化项目内部文件
    if (id.startsWith('.') || id.startsWith('/')) return false;
    if (id.startsWith('@/')) return false;

    // 外部化特定依赖
    if (id === 'react' || id === 'react-dom') return true;

    // 其他依赖打包进库
    return false;
  },
};
```

## TypeScript 支持

### 类型定义生成

默认会自动生成 TypeScript 类型定义文件(.d.ts),输出到 `dist` 目录。

如需禁用:

```bash
build-script --build --generateDTS=false
```

或在配置中:

```javascript
// 注意:CLI 参数优先级更高
export default {
  entry: './src/index.tsx',
  // ...
};
```

### 类型导出

在 `package.json` 中配置:

```json
{
  "main": "./dist/index.cjs.js",
  "module": "./dist/index.es.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "import": "./dist/index.es.js",
      "require": "./dist/index.cjs.js",
      "types": "./dist/index.d.ts"
    }
  }
}
```

## 开发服务器

开发模式下会自动启动 Vite 开发服务器:

```bash
build-script
# 或
build-script --dev
```

默认端口:`3000`

自定义端口:

```javascript
// build.config.js
export default {
  entry: './src/index.tsx',
  vite: {
    server: {
      port: 8080,
    },
  },
};
```

## 构建分析

使用 `--analyze` 参数可以生成并打开 bundle 分析报告:

```bash
build-script --build --analyze
```

这会生成一个可视化的 bundle 分析报告,帮助你了解打包后的文件大小和依赖关系。

## 常见问题

### Q: 如何排除某些依赖不被打包?

A: 使用 `external` 或 `externalByFormat` 配置:

```javascript
export default {
  external: ['lodash', 'moment'],
};
```

### Q: 如何打包所有依赖?

A: 设置 `external` 为空数组:

```javascript
export default {
  external: [],
};
```

### Q: 如何自定义输出目录?

A: 在 `vite` 配置中设置:

```javascript
export default {
  vite: {
    build: {
      outDir: './output',
    },
  },
};
```

### Q: 如何禁用类型定义生成?

A: 使用 CLI 参数:

```bash
build-script --build --generateDTS=false
```

### Q: 如何配置别名路径?

A: 在 `vite` 配置中设置:

```javascript
export default {
  vite: {
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src'),
      },
    },
  },
};
```

## 许可证

ISC

## 作者

levin


================================================
FILE: packages/build-script/bin/run.js
================================================
#!/usr/bin/env node

async function start() {
  const bScript = await import('../lib/index.mjs');
  bScript.run();
}

start();


================================================
FILE: packages/build-script/client.d.ts
================================================
/// <reference types="vite/client" />


================================================
FILE: packages/build-script/jest.config.js
================================================
/*
 * For a detailed explanation regarding each configuration property, visit:
 * https://jestjs.io/docs/configuration
 */

module.exports = {
  // All imported modules in your tests should be mocked automatically
  // automock: false,

  // Stop running tests after `n` failures
  // bail: 0,

  // The directory where Jest should store its cached dependency information
  // cacheDirectory: "/private/var/folders/l9/th_r5d_12wxdj16859_mctjw0000gn/T/jest_dx",

  // Automatically clear mock calls, instances, contexts and results before every test
  clearMocks: true,
  extensionsToTreatAsEsm: ['.ts'],
  // Indicates whether the coverage information should be collected while executing the test
  collectCoverage: false,

  // An array of glob patterns indicating a set of files for which coverage information should be collected
  collectCoverageFrom: ['src/**/*.{ts,tsx}', '!**/node_modules/**', '!**/vendor/**'],
  testMatch: ['<rootDir>/tests/**/*.test.ts'],

  // The directory where Jest should output its coverage files
  coverageDirectory: 'coverage',

  // An array of regexp pattern strings used to skip coverage collection
  // coveragePathIgnorePatterns: [
  //   "/node_modules/"
  // ],

  // Indicates which provider should be used to instrument code for coverage
  // coverageProvider: "babel",

  // A list of reporter names that Jest uses when writing coverage reports
  // coverageReporters: [
  //   "json",
  //   "text",
  //   "lcov",
  //   "clover"
  // ],

  // An object that configures minimum threshold enforcement for coverage results
  // coverageThreshold: undefined,

  // A path to a custom dependency extractor
  // dependencyExtractor: undefined,

  // Make calling deprecated APIs throw helpful error messages
  // errorOnDeprecated: false,

  // The default configuration for fake timers
  // fakeTimers: {
  //   "enableGlobally": false
  // },

  // Force coverage collection from ignored files using an array of glob patterns
  // forceCoverageMatch: [],

  // A path to a module which exports an async function that is triggered once before all test suites
  // globalSetup: undefined,

  // A path to a module which exports an async function that is triggered once after all test suites
  // globalTeardown: undefined,

  // A set of global variables that need to be available in all test environments
  // globals: {},

  // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
  // maxWorkers: "50%",

  // An array of directory names to be searched recursively up from the requiring module's location
  // moduleDirectories: [
  //   "node_modules"
  // ],

  // An array of file extensions your modules use
  // moduleFileExtensions: [
  //   "js",
  //   "mjs",
  //   "cjs",
  //   "jsx",
  //   "ts",
  //   "tsx",
  //   "json",
  //   "node"
  // ],

  // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
  // moduleNameMapper: {},

  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
  // modulePathIgnorePatterns: [],

  // Activates notifications for test results
  // notify: false,

  // An enum that specifies notification mode. Requires { notify: true }
  // notifyMode: "failure-change",

  // A preset that is used as a base for Jest's configuration
  preset: 'ts-jest',

  // Run tests from one or more projects
  // projects: undefined,

  // Use this configuration option to add custom reporters to Jest
  // reporters: undefined,

  // Automatically reset mock state before every test
  // resetMocks: false,

  // Reset the module registry before running each individual test
  // resetModules: false,

  // A path to a custom resolver
  // resolver: undefined,

  // Automatically restore mock state and implementation before every test
  // restoreMocks: false,

  // The root directory that Jest should scan for tests and modules within
  // rootDir: undefined,

  // A list of paths to directories that Jest should use to search for files in
  // roots: [
  //   "<rootDir>"
  // ],

  // Allows you to use a custom runner instead of Jest's default test runner
  // runner: "jest-runner",

  // The paths to modules that run some code to configure or set up the testing environment before each test
  // setupFiles: [],

  // A list of paths to modules that run some code to configure or set up the testing framework before each test
  // setupFilesAfterEnv: [],

  // The number of seconds after which a test is considered as slow and reported as such in the results.
  // slowTestThreshold: 5,

  // A list of paths to snapshot serializer modules Jest should use for snapshot testing
  // snapshotSerializers: [],

  // The test environment that will be used for testing
  testEnvironment: 'node',

  // Options that will be passed to the testEnvironment
  // testEnvironmentOptions: {},

  // Adds a location field to test results
  // testLocationInResults: false,

  // The glob patterns Jest uses to detect test files
  // testMatch: [
  //   "**/__tests__/**/*.[jt]s?(x)",
  //   "**/?(*.)+(spec|test).[tj]s?(x)"
  // ],

  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
  // testPathIgnorePatterns: [
  //   "/node_modules/"
  // ],

  // The regexp pattern or array of patterns that Jest uses to detect test files
  // testRegex: [],

  // This option allows the use of a custom results processor
  // testResultsProcessor: undefined,

  // This option allows use of a custom test runner
  // testRunner: "jest-circus/runner",

  // A map from regular expressions to paths to transformers
  // transform: undefined,

  // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
  transformIgnorePatterns: ['/node_modules/', '\\.pnp\\.[^\\/]+$'],

  // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
  // unmockedModulePathPatterns: undefined,

  // Indicates whether each individual test should be reported during the run
  // verbose: undefined,

  // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
  // watchPathIgnorePatterns: [],

  // Whether to use watchman for file crawling
  // watchman: true,
};


================================================
FILE: packages/build-script/package.json
================================================
{
  "name": "@chamn/build-script",
  "version": "0.10.4",
  "publishConfig": {
    "access": "public"
  },
  "description": "",
  "main": "./lib/index.mjs",
  "bin": {
    "build-script": "./bin/run.js"
  },
  "exports": {
    ".": {
      "types": "./lib/index.d.ts",
      "module-sync": "./lib/index.mjs",
      "import": "./lib/index.mjs",
      "require": "./lib/index.cjs"
    },
    "./lib/index.d.ts": "./lib/index.d.ts",
    "./client.d.ts": "./client.d.ts",
    "./package.json": "./package.json"
  },
  "scripts": {
    "start": "npm run clean && node scripts/build.cjs",
    "build:tsc": "tsc ./src/index.ts --declaration --emitDeclarationOnly --esModuleInterop true --skipLibCheck true --outDir ./lib ",
    "build": "npm run clean && npm run build:tsc && node scripts/build.cjs",
    "build:w": "npm run clean && nodemon --watch ./src -e ts,tsx,js,json scripts/build.cjs",
    "clean": "rimraf es lib dist types generated demo coverage output",
    "test": "echo 'skip test'",
    "test:cov": "jest --coverage",
    "test:update-snapshots": "cross-env jest -u"
  },
  "author": "levin",
  "license": "ISC",
  "devDependencies": {
    "@types/fs-extra": "^9.0.13",
    "@types/jest": "^28.1.6",
    "@types/node": "~22.10.0",
    "@types/yargs-parser": "^21.0.0",
    "esbuild": "^0.27.2",
    "lodash": "^4.17.21",
    "nodemon": "^3.1.9"
  },
  "dependencies": {
    "@vitejs/plugin-react": "^4.3.4",
    "concurrently": "^7.3.0",
    "fs-extra": "^10.1.0",
    "jest": "^28.1.3",
    "jest-environment-jsdom": "^28.1.3",
    "merge": "^2.1.1",
    "prettier": "2.7.1",
    "rimraf": "^4.4.1",
    "rollup-plugin-visualizer": "^5.12.0",
    "ts-jest": "^28.0.7",
    "ts-node": "^10.9.1",
    "typescript": "~5.7.2",
    "vite": "^6.2.2",
    "vite-plugin-dts": "^4.3.0",
    "vite-plugin-eslint2": "^5.0.3",
    "yargs-parser": "^21.0.1"
  },
  "config": {},
  "gitHead": "dc3e55fdeb903a8012f6ebd3ebc018ed61ad89db"
}

================================================
FILE: packages/build-script/scripts/build.cjs
================================================
/* eslint-disable no-undef */
/* eslint-disable @typescript-eslint/no-require-imports */

const _ = require('lodash');
const esbuild = require('esbuild');
const concurrently = require('concurrently');
const argv = require('yargs-parser')(process.argv.slice(2));
const packageJson = require('../package.json');

if (!argv.format) {
  buildAll(process.argv.slice(2).join(' '));
} else {
  buildFormat(argv.format, argv.out || 'dist');
}

function buildAll(options) {
  concurrently(
    [
      { name: 'build:cjs', command: `node scripts/build.cjs --format=cjs --out=lib ${options}` },
      { name: 'build:esm', command: `node scripts/build.cjs --format=esm --out=lib ${options}` },
    ],
    {
      prefix: 'name',
      killOthers: ['failure'],
      restartTries: 0,
    }
  ).result.then(
    () => {
      console.log('all done.');
    },
    () => {
      process.exit(1);
    }
  );
}

async function buildFormat(format, outDir) {
  const extMap = {
    esm: 'mjs',
    cjs: 'cjs',
  };
  try {
    console.log('building %s...', format);
    let config = {
      entryPoints: ['src/index.ts'],
      outfile: `${outDir}/index.${extMap[format]}`,
      bundle: true,
      platform: 'node',
      target: ['node10'],
      format,
      sourcemap: true,
      sourcesContent: true,
      define: {},
      treeShaking: true,
      external: _.keys(packageJson.dependencies),
      minify: false,
      legalComments: 'external',
    };

    if (argv.watch) {
      config.watch = {
        onRebuild(error, result) {
          if (error) console.error('watch build failed:', error);
          else console.log('watch build succeeded:', result);
        },
      };
    }
    const startTime = Date.now();
    const result = await esbuild.build(config);
    if (result.errors.length > 0) {
      throw result.errors;
    }

    if (result.warnings.length > 0) {
      result.warnings.forEach((warnings) => {
        console.warn(warnings);
      });
    }

    console.log('built %s in %ds', format, ((Date.now() - startTime) / 1000).toFixed(2));
  } catch (e) {
    console.error(e);
    process.exit(1);
  }
}


================================================
FILE: packages/build-script/src/config/base.ts
================================================
import path from 'path';
import fs from 'fs-extra';
import { loadConfigFromFile, type LibraryOptions, type UserConfig } from 'vite';
import argv from 'yargs-parser';

const cliArgs: {
  dev: boolean;
  build: boolean;
  watch: boolean;
  analyze: boolean;
  generateDTS: boolean;
  sourcemap: boolean;
} = argv(process.argv.slice(2)) as any;

export const CLI_ARGS_OBJ = cliArgs;

export const PROJECT_ROOT = path.resolve(process.cwd());

let customConfigPath = `${PROJECT_ROOT}/build.config.js`;

if (!fs.pathExistsSync(customConfigPath)) {
  customConfigPath = `${PROJECT_ROOT}/build.config.ts`;
}

export type ExternalOption = (string | RegExp)[] | ((id: string, importer?: string, isResolved?: boolean) => boolean);

export type BuildScriptConfig = {
  libMode?: boolean;
  entry: string;
  libName?: string;
  fileName?: string;
  /* 样式文件名 */
  cssFileName?: string;
  /* 通用的 external 配置,对所有格式生效 */
  external?: ExternalOption;
  /* 按格式配置不同的 external 规则,优先级高于 external */
  externalByFormat?: {
    es?: ExternalOption;
    cjs?: ExternalOption;
    umd?: ExternalOption;
    iife?: ExternalOption;
  };
  /* 自定义需要排除的别名前缀列表,这些路径不会被外部化
   * 默认值:['@/', '~/', '#/']
   * 示例:['@/', '~/', '$lib/', '@src/']
   */
  externalAlias?: string[];
  global?: Record<string, string>;
  formats?: LibraryOptions['formats'];
  vite?: UserConfig;
};

export let CUSTOM_CONFIG: BuildScriptConfig = null as any;
export const isBuild = !!process.env.VITE_TEST_BUILD;

export const getCustomConfig = async () => {
  if (CUSTOM_CONFIG) {
    return CUSTOM_CONFIG;
  }

  if (fs.pathExistsSync(customConfigPath)) {
    const customConfig = await loadConfigFromFile({} as any, customConfigPath, PROJECT_ROOT);
    CUSTOM_CONFIG = customConfig?.config as BuildScriptConfig;
    return customConfig?.config as BuildScriptConfig;
  }
};


================================================
FILE: packages/build-script/src/config/vite.build.ts
================================================
import { CLI_ARGS_OBJ, PROJECT_ROOT, getCustomConfig } from './base';
import { getCommonConfig } from './vite.common';
import { visualizer } from 'rollup-plugin-visualizer';
import path from 'path';

import dts from 'vite-plugin-dts';
import { mergeConfig, type LibraryFormats } from 'vite';

const generateDTS = CLI_ARGS_OBJ.generateDTS;

// https://vitejs.dev/config/
export const buildConfig = async function (specifiedFormats?: LibraryFormats[], keepOutDir: boolean = false) {
  const CUSTOM_CONFIG = await getCustomConfig();
  const commonConfig = await getCommonConfig(specifiedFormats);

  const plugins: any[] = [];

  // 只在第一次构建时生成 DTS(非 umd 单独构建时)
  if (generateDTS !== false && !keepOutDir) {
    plugins.push(
      dts({
        entryRoot: path.resolve(PROJECT_ROOT, './src'),
        compilerOptions: {
          skipDefaultLibCheck: false,
        },
      })
    );
  }

  if (CLI_ARGS_OBJ.analyze) {
    plugins.push(
      visualizer({
        open: true,
      })
    );
  }

  const config = mergeConfig(commonConfig, {
    mode: 'production',
    configFile: false,
    build: {
      watch: CLI_ARGS_OBJ.watch ?? false,
      emptyOutDir: !keepOutDir, // 如果 keepOutDir 为 true,不清空输出目录
    },
    plugins: plugins,
  });

  // 合并自定义 vite 配置
  // 注意:如果自定义配置中设置了 build.rollupOptions,它会覆盖基础配置
  // 因此建议在自定义配置中明确设置完整的 rollupOptions
  const finalConfig = mergeConfig(config, CUSTOM_CONFIG?.vite || {});
  return finalConfig;
};


================================================
FILE: packages/build-script/src/config/vite.common.ts
================================================
import path from 'path';
import react from '@vitejs/plugin-react';
import { CLI_ARGS_OBJ, PROJECT_ROOT, getCustomConfig } from './base';
import { defineConfig, type LibraryFormats } from 'vite';
import eslint from 'vite-plugin-eslint2';

// https://vitejs.dev/config/
export const getCommonConfig = async (specifiedFormats?: LibraryFormats[]) => {
  const CUSTOM_CONFIG = await getCustomConfig();

  if (!CUSTOM_CONFIG?.entry) {
    throw new Error('entry not find');
  }
  // 生产模式下默认包含 umd,否则只有 cjs 和 es
  const defaultFormats: LibraryFormats[] = CLI_ARGS_OBJ.build ? ['cjs', 'es', 'umd'] : ['cjs', 'es'];
  const formats = specifiedFormats || CUSTOM_CONFIG.formats || defaultFormats;

  // 根据当前构建的格式来决定 external 的逻辑
  const getExternal = () => {
    // 开发模式下不使用 external,打包所有依赖
    if (CLI_ARGS_OBJ.dev || !CLI_ARGS_OBJ.build) {
      return [];
    }

    // 优先使用按格式配置的 external
    if (CUSTOM_CONFIG.externalByFormat) {
      // 如果是单个格式,直接使用对应的配置
      if (formats.length === 1) {
        const format = formats[0] as keyof typeof CUSTOM_CONFIG.externalByFormat;
        const externalForFormat = CUSTOM_CONFIG.externalByFormat[format];
        if (externalForFormat !== undefined) {
          return externalForFormat;
        }
      }

      // 如果是多个格式,检查是否都是同一组
      const isAllModuleFormats = formats.every((f) => f === 'es' || f === 'cjs');
      const isAllBrowserFormats = formats.every((f) => f === 'umd' || f === 'iife');

      if (isAllModuleFormats) {
        // 如果都是模块格式,优先使用 es 的配置,然后是 cjs
        const moduleExternal = CUSTOM_CONFIG.externalByFormat.es || CUSTOM_CONFIG.externalByFormat.cjs;
        if (moduleExternal) {
          return moduleExternal;
        }
      }

      if (isAllBrowserFormats) {
        // 如果都是浏览器格式,优先使用 umd 的配置,然后是 iife
        const browserExternal = CUSTOM_CONFIG.externalByFormat.umd || CUSTOM_CONFIG.externalByFormat.iife;
        if (browserExternal) {
          return browserExternal;
        }
      }
    }

    // 如果用户自定义了通用的 external,使用自定义配置
    if (CUSTOM_CONFIG.external) {
      return CUSTOM_CONFIG.external;
    }

    // 默认规则:判断当前格式组
    const isAllBrowserFormats = formats.every((f) => f === 'umd' || f === 'iife');

    if (isAllBrowserFormats) {
      // 浏览器格式(umd, iife):只过滤 react 和 react-dom
      return ['react', 'react-dom'];
    }

    // 模块格式(es, cjs)或混合格式:使用更严格的过滤规则
    // 排除项目内部文件:相对路径、绝对路径、别名路径
    return (id: string) => {
      // 相对路径或绝对路径:项目内部文件
      if (id.startsWith('.') || id.startsWith('/')) {
        return false;
      }
      // 检查别名路径:使用用户配置的 externalAlias 或默认值
      const aliasPrefixes = CUSTOM_CONFIG.externalAlias || ['@/', '~/', '#/'];
      if (aliasPrefixes.some((prefix) => id.startsWith(prefix))) {
        return false; // 不外部化,需要打包
      }
      // 其他情况:node_modules 中的依赖,应该外部化
      return true;
    };
  };

  const commonConfigJson = defineConfig({
    root: PROJECT_ROOT,
    build: {
      sourcemap: CLI_ARGS_OBJ.sourcemap ?? true,
      lib: {
        name: CUSTOM_CONFIG.libName,
        entry: path.resolve(PROJECT_ROOT, CUSTOM_CONFIG.entry),
        formats: formats,
        fileName: (format: string) => `${CUSTOM_CONFIG.fileName || 'index'}.${format}.js`,
        cssFileName: CUSTOM_CONFIG.cssFileName ?? 'style',
      },
      rollupOptions: {
        // 确保外部化处理那些你不想打包进库的依赖
        external: getExternal(),
        output: {
          // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
          globals: CUSTOM_CONFIG.global || {},
        },
      },
    },
    plugins: [react(), eslint()],
  });

  if (CUSTOM_CONFIG.libMode === false) {
    delete commonConfigJson?.build?.lib;
    delete commonConfigJson?.build?.rollupOptions;
  }

  return commonConfigJson;
};


================================================
FILE: packages/build-script/src/config/vite.dev.ts
================================================
import { getCommonConfig } from './vite.common';
import { getCustomConfig } from './base';
import { mergeConfig } from 'vite';

// https://vitejs.dev/config/
export const devConfig = async () => {
  const CUSTOM_CONFIG = await getCustomConfig();
  const commonConfig = await getCommonConfig();

  const config = mergeConfig(commonConfig, {
    mode: 'development',
    configFile: false,
    server: {
      port: 3000,
    },
  });
  const finalConfig = mergeConfig(config, CUSTOM_CONFIG?.vite || {});
  // const fp = `${PROJECT_ROOT}/.temp.vite.config.json`;

  return finalConfig;
};


================================================
FILE: packages/build-script/src/core/devServer.ts
================================================
import { createServer } from 'vite';
import { devConfig } from '../config/vite.dev';

export const doDev = async () => {
  const server = await createServer(await devConfig());
  await server.listen();

  server.printUrls();
};


================================================
FILE: packages/build-script/src/core/doBuild.ts
================================================
import { build } from 'vite';
import { buildConfig } from '../config/vite.build';
import { getCustomConfig, CLI_ARGS_OBJ } from '../config/base';
import type { LibraryFormats } from 'vite';

export const doBuild = async () => {
  console.log('start to build .....');

  const CUSTOM_CONFIG = await getCustomConfig();
  const defaultFormats: LibraryFormats[] = CLI_ARGS_OBJ.build ? ['cjs', 'es', 'umd'] : ['cjs', 'es'];
  const formats = CUSTOM_CONFIG?.formats || defaultFormats;

  // 将格式分为两组:
  // 1. 模块格式组(es, cjs)- 通常使用更严格的 external
  // 2. 浏览器格式组(umd, iife)- 通常只 external react, react-dom
  const moduleFormats = formats.filter((f) => f === 'es' || f === 'cjs') as LibraryFormats[];
  const browserFormats = formats.filter((f) => f === 'umd' || f === 'iife') as LibraryFormats[];

  const hasModuleFormats = moduleFormats.length > 0;
  const hasBrowserFormats = browserFormats.length > 0;

  // 如果两组都存在,分两次构建
  if (hasModuleFormats && hasBrowserFormats) {
    // 先构建模块格式(es, cjs)
    console.log(`Building module formats: ${moduleFormats.join(', ')}...`);
    await build(await buildConfig(moduleFormats));

    // 再构建浏览器格式(umd, iife),不清空输出目录
    console.log(`Building browser formats: ${browserFormats.join(', ')}...`);
    await build(await buildConfig(browserFormats, true));
  } else {
    // 如果只有一组格式,正常构建
    await build(await buildConfig());
  }

  console.log('build finished.');
};


================================================
FILE: packages/build-script/src/index.ts
================================================
#!/usr/bin/env node
import { CLI_ARGS_OBJ } from './config/base';
import { doDev } from './core/devServer';
import { doBuild } from './core/doBuild';

export * from './config/base';
export * from './config/vite.common';
export * from './config/vite.build';
export * from './config/vite.dev';

export function run() {
  if (CLI_ARGS_OBJ.build) {
    doBuild();
  } else {
    doDev();
  }
}

export * from './config/base';


================================================
FILE: packages/build-script/test/demo.test.ts
================================================
import { a } from '../src';
describe('cli', () => {
  it('init', () => {
    expect(a()).toEqual(1);
  });
});


================================================
FILE: packages/build-script/tsconfig.json
================================================
{
  "compilerOptions": {
    "module": "ESNext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
    "strict": true /* Enable all strict type-checking options. */,
    "moduleResolution": "bundler" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */,
    "types": [
      "node",
      "jest"
    ],
    "skipLibCheck": true /* Skip type checking of declaration files. */,
    "outDir": "lib",
    "forceConsistentCasingInFileNames": true,
    "declaration": true,
    "esModuleInterop": true,
    "paths": {
      "@": [
        "./src"
      ]
    }
  },
  "exclude": [
    "test",
    "lib"
  ]
}

================================================
FILE: packages/demo-page/.gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?


================================================
FILE: packages/demo-page/.prettierrc.json
================================================
{
  "trailingComma": "es5",
  "tabWidth": 2,
  "semi": true,
  "singleQuote": true
}

================================================
FILE: packages/demo-page/CHANGELOG.md
================================================
# Change Log

All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [0.10.4](https://github.com/ByteCrazy/chameleon/compare/v0.10.3...v0.10.4) (2026-01-17)

**Note:** Version bump only for package @chamn/demo-page

## [0.10.3](https://github.com/ByteCrazy/chameleon/compare/v0.10.2...v0.10.3) (2026-01-17)

**Note:** Version bump only for package @chamn/demo-page

## [0.10.2](https://github.com/ByteCrazy/chameleon/compare/v0.10.1...v0.10.2) (2026-01-17)

**Note:** Version bump only for package @chamn/demo-page

## [0.10.1](https://github.com/ByteCrazy/chameleon/compare/v0.10.0...v0.10.1) (2026-01-11)

### ✨ Features | 新功能

* **build-script, demo-page, engine, render:** 🎸 update build script dts & optimize modal root selector ([024d5ab](https://github.com/ByteCrazy/chameleon/commit/024d5ab26d19fc5f50172c328638a551fb99c129))

## [0.10.0](https://github.com/hlerenow/chameleon/compare/v0.9.3...v0.10.0) (2025-12-25)

### 🐛 Bug Fixes | Bug 修复

* 优化构建配置,修复 ES 模块外部化问题 ([866f0ae](https://github.com/hlerenow/chameleon/commit/866f0ae39472625137d73d143625d88d873f6c00))

## [0.9.3](https://github.com/ByteCrazy/chameleon/compare/v0.9.2...v0.9.3) (2025-07-20)

**Note:** Version bump only for package @chamn/demo-page

## [0.9.2](https://github.com/ByteCrazy/chameleon/compare/v0.9.1...v0.9.2) (2025-07-13)

**Note:** Version bump only for package @chamn/demo-page

## [0.9.1](https://github.com/ByteCrazy/chameleon/compare/v0.9.0...v0.9.1) (2025-07-13)

**Note:** Version bump only for package @chamn/demo-page

## [0.9.0](https://github.com/ByteCrazy/chameleon/compare/v0.8.6...v0.9.0) (2025-07-13)

**Note:** Version bump only for package @chamn/demo-page

## [0.8.6](https://github.com/ByteCrazy/chameleon/compare/v0.8.5...v0.8.6) (2025-06-21)

### 🐛 Bug Fixes | Bug 修复

* **demo-page, engine, render:** 🐛 fixed action flow failed node not connect correct ([e235a2b](https://github.com/ByteCrazy/chameleon/commit/e235a2be2d1e1935dfc40b56936de763efc4fb67))

## [0.8.5](https://github.com/ByteCrazy/chameleon/compare/v0.8.4...v0.8.5) (2025-04-13)

**Note:** Version bump only for package @chamn/demo-page

## [0.8.4](https://github.com/ByteCrazy/chameleon/compare/v0.8.3...v0.8.4) (2025-04-13)

**Note:** Version bump only for package @chamn/demo-page

## [0.8.3](https://github.com/ByteCrazy/chameleon/compare/v0.8.2...v0.8.3) (2025-04-12)

**Note:** Version bump only for package @chamn/demo-page

## [0.8.2](https://github.com/ByteCrazy/chameleon/compare/v0.8.1...v0.8.2) (2025-04-11)

**Note:** Version bump only for package @chamn/demo-page

## [0.8.1](https://github.com/ByteCrazy/chameleon/compare/v0.8.0...v0.8.1) (2025-04-10)

**Note:** Version bump only for package @chamn/demo-page

## [0.8.0](https://github.com/ByteCrazy/chameleon/compare/v0.7.0...v0.8.0) (2025-04-10)

### ✨ Features | 新功能

* **demo-page, engine, render:** 🎸 update run time var for function ([d8fb90a](https://github.com/ByteCrazy/chameleon/commit/d8fb90ac72a233d7fdb5fcb36e0b7963f83c5acf))

## [0.7.0](https://github.com/ByteCrazy/chameleon/compare/v0.6.0...v0.7.0) (2025-04-06)

**Note:** Version bump only for package @chamn/demo-page

## [0.6.0](https://github.com/ByteCrazy/chameleon/compare/v0.5.2...v0.6.0) (2025-03-30)

**Note:** Version bump only for package @chamn/demo-page

## [0.5.2](https://github.com/ByteCrazy/chameleon/compare/v0.5.1...v0.5.2) (2025-03-30)

**Note:** Version bump only for package @chamn/demo-page

## [0.5.1](https://github.com/ByteCrazy/chameleon/compare/v0.5.0...v0.5.1) (2025-03-30)

**Note:** Version bump only for package @chamn/demo-page

## [0.5.0](https://github.com/ByteCrazy/chameleon/compare/v0.4.0...v0.5.0) (2025-03-30)

**Note:** Version bump only for package @chamn/demo-page

## [0.4.0](https://github.com/ByteCrazy/chameleon/compare/v0.3.21...v0.4.0) (2025-03-29)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.21](https://github.com/ByteCrazy/chameleon/compare/v0.3.20...v0.3.21) (2025-03-26)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.20](https://github.com/ByteCrazy/chameleon/compare/v0.3.19...v0.3.20) (2025-03-26)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.19](https://github.com/ByteCrazy/chameleon/compare/v0.3.18...v0.3.19) (2025-03-26)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.18](https://github.com/ByteCrazy/chameleon/compare/v0.3.17...v0.3.18) (2025-03-26)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.17](https://github.com/ByteCrazy/chameleon/compare/v0.3.16...v0.3.17) (2025-03-25)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.16](https://github.com/ByteCrazy/chameleon/compare/v0.3.15...v0.3.16) (2025-03-24)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.15](https://github.com/ByteCrazy/chameleon/compare/v0.3.14...v0.3.15) (2025-03-23)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.14](https://github.com/ByteCrazy/chameleon/compare/v0.3.13...v0.3.14) (2025-03-23)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.13](https://github.com/ByteCrazy/chameleon/compare/v0.3.12...v0.3.13) (2025-03-23)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.12](https://github.com/ByteCrazy/chameleon/compare/v0.3.11...v0.3.12) (2025-03-23)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.11](https://github.com/ByteCrazy/chameleon/compare/v0.3.10...v0.3.11) (2025-03-22)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.10](https://github.com/ByteCrazy/chameleon/compare/v0.3.9...v0.3.10) (2025-03-22)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.9](https://github.com/ByteCrazy/chameleon/compare/v0.3.8...v0.3.9) (2025-03-22)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.8](https://github.com/ByteCrazy/chameleon/compare/v0.3.7...v0.3.8) (2025-03-16)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.7](https://github.com/ByteCrazy/chameleon/compare/v0.3.6...v0.3.7) (2025-03-16)

### ✨ Features | 新功能

* **demo-page, engine, model, render:** 🎸 support inject eng inner env to runtime ([baa5c11](https://github.com/ByteCrazy/chameleon/commit/baa5c11d389019a7e4e4b8e000433a99038b4ae3))

## [0.3.6](https://github.com/ByteCrazy/chameleon/compare/v0.3.5...v0.3.6) (2025-03-09)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.5](https://github.com/ByteCrazy/chameleon/compare/v0.3.4...v0.3.5) (2025-03-09)

### 🐛 Bug Fixes | Bug 修复

* **demo-page, engine, render:** 🐛 fixed action flow only run first node ([c4bdb85](https://github.com/ByteCrazy/chameleon/commit/c4bdb85d0ca6ed09c6c66d15847de5bd14da556e))

## [0.3.4](https://github.com/ByteCrazy/chameleon/compare/v0.3.3...v0.3.4) (2025-02-16)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.3](https://github.com/ByteCrazy/chameleon/compare/v0.3.2...v0.3.3) (2025-02-16)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.2](https://github.com/ByteCrazy/chameleon/compare/v0.3.1...v0.3.2) (2025-02-16)

**Note:** Version bump only for package @chamn/demo-page

## [0.3.1](https://github.com/ByteCrazy/chameleon/compare/v0
Download .txt
gitextract_um330eu0/

├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── static.yml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .npmrc
├── .prettierignore
├── .prettierrc.json
├── .vscode/
│   └── settings.json
├── BUILD_FIX_SUMMARY.md
├── CHANGELOG.md
├── DEV_README.md
├── LICENSE
├── README.md
├── changelog.config.cjs
├── design/
│   └── chameleon.drawio
├── eslint.config.js
├── lerna.json
├── package.json
├── packages/
│   ├── build-script/
│   │   ├── .eslintignore
│   │   ├── CHANGELOG.md
│   │   ├── README.md
│   │   ├── bin/
│   │   │   └── run.js
│   │   ├── client.d.ts
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── scripts/
│   │   │   └── build.cjs
│   │   ├── src/
│   │   │   ├── config/
│   │   │   │   ├── base.ts
│   │   │   │   ├── vite.build.ts
│   │   │   │   ├── vite.common.ts
│   │   │   │   └── vite.dev.ts
│   │   │   ├── core/
│   │   │   │   ├── devServer.ts
│   │   │   │   └── doBuild.ts
│   │   │   └── index.ts
│   │   ├── test/
│   │   │   └── demo.test.ts
│   │   └── tsconfig.json
│   ├── demo-page/
│   │   ├── .gitignore
│   │   ├── .prettierrc.json
│   │   ├── CHANGELOG.md
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   ├── material/
│   │   │   │   ├── advanceCustomButton.ts
│   │   │   │   ├── button.tsx
│   │   │   │   ├── col.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── input.ts
│   │   │   │   ├── layout/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── modal.ts
│   │   │   │   ├── native.ts
│   │   │   │   ├── row.ts
│   │   │   │   └── table.ts
│   │   │   ├── pages/
│   │   │   │   ├── basePage-b-client.ts
│   │   │   │   ├── basePage.ts
│   │   │   │   ├── emptyPage.ts
│   │   │   │   ├── layout.ts
│   │   │   │   └── simplePage.ts
│   │   │   └── vite-env.d.ts
│   │   └── tsconfig.json
│   ├── docs-app/
│   │   ├── .gitignore
│   │   ├── .vscode/
│   │   │   ├── extensions.json
│   │   │   └── launch.json
│   │   ├── CHANGELOG.md
│   │   ├── README.md
│   │   ├── astro.config.mjs
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── codeSnippets/
│   │   │   │   ├── ButtonMeta.tsx
│   │   │   │   ├── Editor.tsx
│   │   │   │   ├── GridItemMeta.tsx
│   │   │   │   ├── GridLayoutComponent.tsx
│   │   │   │   ├── GridLayoutMeta.tsx
│   │   │   │   ├── GridLayoutWrap.tsx
│   │   │   │   ├── index.css
│   │   │   │   └── render.tsx
│   │   │   ├── components/
│   │   │   │   └── Link.tsx
│   │   │   ├── content/
│   │   │   │   ├── config.ts
│   │   │   │   └── docs/
│   │   │   │       ├── guides/
│   │   │   │       │   ├── addCustomComponent.mdx
│   │   │   │       │   ├── index.mdx
│   │   │   │       │   └── useRender.mdx
│   │   │   │       ├── index.mdx
│   │   │   │       └── reference/
│   │   │   │           ├── Engine/
│   │   │   │           │   ├── _category_.json
│   │   │   │           │   ├── api.mdx
│   │   │   │           │   ├── introduction.mdx
│   │   │   │           │   └── usage.mdx
│   │   │   │           ├── Material/
│   │   │   │           │   ├── _category_.json
│   │   │   │           │   ├── advanceDevelopMaterial.mdx
│   │   │   │           │   ├── developMaterial.mdx
│   │   │   │           │   └── introduction.mdx
│   │   │   │           ├── PageSchema/
│   │   │   │           │   ├── built-in-setter.mdx
│   │   │   │           │   ├── material.mdx
│   │   │   │           │   └── page.mdx
│   │   │   │           └── Plugin/
│   │   │   │               ├── built-in-plugins-usage.mdx
│   │   │   │               ├── custom-plugin-guide.mdx
│   │   │   │               ├── custom-setter.mdx
│   │   │   │               ├── innder-plugin-list.mdx
│   │   │   │               └── plugin-develop.mdx
│   │   │   └── env.d.ts
│   │   └── tsconfig.json
│   ├── engine/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── .storybook/
│   │   │   ├── main.js
│   │   │   └── preview.js
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.common.config.ts
│   │   ├── build.config.ts
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Engine.module.scss
│   │   │   ├── _dev_/
│   │   │   │   ├── index.css
│   │   │   │   ├── index.tsx
│   │   │   │   ├── lib/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── page/
│   │   │   │   │   ├── Editor/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── Preview/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   └── componentEditor/
│   │   │   │   │       └── index.tsx
│   │   │   │   ├── render.html
│   │   │   │   ├── render.tsx
│   │   │   │   └── router.tsx
│   │   │   ├── assets/
│   │   │   │   └── styles/
│   │   │   │       └── mixin.scss
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── component/
│   │   │   │   ├── CSSCodeEditor/
│   │   │   │   │   ├── helper.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── CSSEditor/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── CSSPropertiesEditor/
│   │   │   │   │   ├── cssProperties.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── signleProperty.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   ├── CSSPropertiesVariableBindEditor/
│   │   │   │   │   ├── SingleProperty.tsx
│   │   │   │   │   ├── cssProperties.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   ├── CSSSizeInput/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── ClassNameEditor/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── CustomColorPicker/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── CustomSchemaForm/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   ├── CFiledWithSwitchSetter/
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   ├── Form/
│   │   │   │   │   │   │   ├── Field/
│   │   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   │   ├── context.ts
│   │   │   │   │   │   │   └── index.tsx
│   │   │   │   │   │   ├── SetterSwitcher/
│   │   │   │   │   │   │   ├── core.tsx
│   │   │   │   │   │   │   ├── helper.tsx
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   └── Setters/
│   │   │   │   │   │       ├── ActionFlowSetter/
│   │   │   │   │   │       │   ├── component/
│   │   │   │   │   │       │   │   ├── CreateNewNodePopup/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   └── initData.ts
│   │   │   │   │   │       │   │   ├── InputHandle/
│   │   │   │   │   │       │   │   │   └── index.tsx
│   │   │   │   │   │       │   │   ├── NodeCard/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   └── style.module.scss
│   │   │   │   │   │       │   │   ├── OutputHandle/
│   │   │   │   │   │       │   │   │   └── index.tsx
│   │   │   │   │   │       │   │   ├── SelectNodeByTree/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── modal.tsx
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   └── SelectNodeState/
│   │   │   │   │   │       │   │       ├── index.tsx
│   │   │   │   │   │       │   │       └── util.ts
│   │   │   │   │   │       │   ├── config.ts
│   │   │   │   │   │       │   ├── context.ts
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   ├── node/
│   │   │   │   │   │       │   │   ├── AssignValueNode/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── CallNodeMethodNode/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── JumpLinkNode.tsx
│   │   │   │   │   │       │   │   ├── RequestAPINode/
│   │   │   │   │   │       │   │   │   ├── helper.ts
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── RunCodeNode/
│   │   │   │   │   │       │   │   │   ├── index.tsx
│   │   │   │   │   │       │   │   │   ├── style.module.scss
│   │   │   │   │   │       │   │   │   └── util.ts
│   │   │   │   │   │       │   │   ├── StartNode.tsx
│   │   │   │   │   │       │   │   └── index.ts
│   │   │   │   │   │       │   └── util.ts
│   │   │   │   │   │       ├── AdvanceSetterList.ts
│   │   │   │   │   │       ├── AntDColorSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── ArraySetter/
│   │   │   │   │   │       │   ├── ArrayItem.tsx
│   │   │   │   │   │       │   ├── SortItemOrderModal.tsx
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   └── style.module.scss
│   │   │   │   │   │       ├── BooleanSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── CSSSizeSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── CSSValueSetter/
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   └── style.module.scss
│   │   │   │   │   │       ├── ColorSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── EmptyValueSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── ExpressionSetter/
│   │   │   │   │   │       │   ├── index.tsx
│   │   │   │   │   │       │   └── style.module.scss
│   │   │   │   │   │       ├── FastLayoutSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── FunctionSetter/
│   │   │   │   │   │       │   ├── defaultDts.ts
│   │   │   │   │   │       │   ├── helper.ts
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── JSONSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── NumberSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── RadioGroupSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── SelectSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── ShapeSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── SliderSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── StringSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── TextAreaSetter/
│   │   │   │   │   │       │   └── index.tsx
│   │   │   │   │   │       ├── index.ts
│   │   │   │   │   │       └── type.ts
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── utils.ts
│   │   │   │   ├── DesignerSizer/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── InputNumberPlus/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── MonacoEditor/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── MoveableModal/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── StylePanel/
│   │   │   │   │   ├── BackgroundInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── BorderInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── DimensionInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── FontInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── MarginAndPaddingInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── ShadowInput/
│   │   │   │   │   │   └── index.tsx
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── type.ts
│   │   │   │   ├── Workbench/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   └── index.tsx
│   │   │   ├── config/
│   │   │   │   └── colorPickerColorList.ts
│   │   │   ├── core/
│   │   │   │   ├── assetPackagesListManage.ts
│   │   │   │   └── pluginManager.ts
│   │   │   ├── i18n/
│   │   │   │   ├── en_US/
│   │   │   │   │   └── index.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── zh_CN/
│   │   │   │       └── index.ts
│   │   │   ├── index.tsx
│   │   │   ├── material/
│   │   │   │   ├── container.meta.ts
│   │   │   │   └── innerMaterial.tsx
│   │   │   ├── plugins/
│   │   │   │   ├── AdvancePanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── ComponentLibrary/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   ├── DragItem/
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   └── ListView/
│   │   │   │   │   │       ├── index.tsx
│   │   │   │   │   │       └── style.module.scss
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   ├── ComponentStatePanel/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── Designer/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   ├── Canvas/
│   │   │   │   │   │   │   ├── advanceCustomHook.ts
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   ├── DefaultSelectToolBar/
│   │   │   │   │   │   │   ├── index.tsx
│   │   │   │   │   │   │   └── style.module.scss
│   │   │   │   │   │   └── GhostView/
│   │   │   │   │   │       └── index.tsx
│   │   │   │   │   ├── config.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   ├── type.ts
│   │   │   │   │   └── util.ts
│   │   │   │   ├── DisplaySourceSchema/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── EventPanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── panel.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── GlobalStatePanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   └── style.module.scss
│   │   │   │   ├── History/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── type.ts
│   │   │   │   ├── Hotkeys/
│   │   │   │   │   ├── action.ts
│   │   │   │   │   ├── hotKeyManager.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── keymap.ts
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   ├── type.ts
│   │   │   │   │   └── utils.ts
│   │   │   │   ├── OutlineTree/
│   │   │   │   │   ├── components/
│   │   │   │   │   │   └── TreeView/
│   │   │   │   │   │       ├── context.ts
│   │   │   │   │   │       ├── dataStruct.ts
│   │   │   │   │   │       ├── index.tsx
│   │   │   │   │   │       ├── style.module.scss
│   │   │   │   │   │       └── treeNode.tsx
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── localize/
│   │   │   │   │   │   ├── en_US/
│   │   │   │   │   │   │   └── index.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── zh_CN/
│   │   │   │   │   │       └── index.ts
│   │   │   │   │   └── util.tsx
│   │   │   │   ├── PropertyPanel/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   ├── utils.ts
│   │   │   │   │   └── view.tsx
│   │   │   │   ├── RightPanel/
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   ├── type.ts
│   │   │   │   │   └── view.tsx
│   │   │   │   ├── VisualPanelPlus/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   └── style.module.scss
│   │   │   │   └── index.tsx
│   │   │   ├── stories/
│   │   │   │   ├── Button.jsx
│   │   │   │   ├── Button.stories.js
│   │   │   │   ├── Configure.mdx
│   │   │   │   ├── Header.jsx
│   │   │   │   ├── Header.stories.js
│   │   │   │   ├── Page.jsx
│   │   │   │   ├── Page.stories.js
│   │   │   │   ├── assets/
│   │   │   │   │   └── avif-test-image.avif
│   │   │   │   ├── button.css
│   │   │   │   ├── components/
│   │   │   │   │   ├── CustomSchemaForm/
│   │   │   │   │   │   └── components/
│   │   │   │   │   │       └── Setters/
│   │   │   │   │   │           ├── actionFlow.stories.tsx
│   │   │   │   │   │           └── mock.ts
│   │   │   │   │   └── inputPlus.stories.tsx
│   │   │   │   ├── header.css
│   │   │   │   ├── page.css
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── CSSEditor.stories.tsx
│   │   │   │   │   └── VisualPanelPlus.stories.tsx
│   │   │   │   └── setters/
│   │   │   │       └── colorSetter.stories.tsx
│   │   │   ├── style.d.ts
│   │   │   ├── type.ts
│   │   │   ├── typing.d.ts
│   │   │   └── utils/
│   │   │       ├── css.ts
│   │   │       ├── defaultEngineConfig.tsx
│   │   │       ├── index.ts
│   │   │       └── logger.ts
│   │   └── tsconfig.json
│   ├── engine-website-app/
│   │   ├── .gitignore
│   │   ├── .npmignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── build.common.config.js
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── index.css
│   │   │   ├── index.tsx
│   │   │   ├── lib/
│   │   │   │   └── index.tsx
│   │   │   ├── page/
│   │   │   │   ├── Editor/
│   │   │   │   │   └── index.tsx
│   │   │   │   └── Preview/
│   │   │   │       └── index.tsx
│   │   │   ├── render.html
│   │   │   ├── render.tsx
│   │   │   ├── router.tsx
│   │   │   └── typing.d.ts
│   │   └── tsconfig.json
│   ├── layout/
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── render.umd.js
│   │   ├── src/
│   │   │   ├── _dev_/
│   │   │   │   ├── dev.css
│   │   │   │   ├── dev.tsx
│   │   │   │   ├── render.html
│   │   │   │   └── render.tsx
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── components/
│   │   │   │   ├── DefaultDropPlaceholder/
│   │   │   │   │   └── index.tsx
│   │   │   │   ├── DropAnchor/
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── util.ts
│   │   │   │   └── HighlightBox/
│   │   │   │       ├── index.tsx
│   │   │   │       └── style.module.scss
│   │   │   ├── core/
│   │   │   │   ├── dragAndDrop/
│   │   │   │   │   ├── common.ts
│   │   │   │   │   ├── emitter.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── sensor.ts
│   │   │   │   └── iframeContainer/
│   │   │   │       └── index.tsx
│   │   │   ├── index.module.scss
│   │   │   ├── index.tsx
│   │   │   ├── render.ts
│   │   │   ├── types/
│   │   │   │   ├── dragAndDrop.ts
│   │   │   │   └── index.ts
│   │   │   ├── typing.d.ts
│   │   │   └── utils/
│   │   │       └── index.ts
│   │   └── tsconfig.json
│   ├── material/
│   │   ├── .gitignore
│   │   ├── .prettierrc.json
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── __tests__/
│   │   │   └── demo.test.ts
│   │   ├── build.config.ts
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── _dev_/
│   │   │   │   ├── editor.tsx
│   │   │   │   ├── index.scss
│   │   │   │   ├── index.tsx
│   │   │   │   ├── preview.tsx
│   │   │   │   ├── react.ts
│   │   │   │   ├── render.html
│   │   │   │   ├── render.tsx
│   │   │   │   └── router.tsx
│   │   │   ├── components/
│   │   │   │   ├── ReactGridLayout/
│   │   │   │   │   ├── GridItem.tsx
│   │   │   │   │   ├── config.ts
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── edit/
│   │   │   │   │   │   └── layoutWrap.tsx
│   │   │   │   │   ├── index.tsx
│   │   │   │   │   ├── item.meta.tsx
│   │   │   │   │   ├── layout.scss
│   │   │   │   │   ├── meta.tsx
│   │   │   │   │   ├── snippets.ts
│   │   │   │   │   ├── style.module.scss
│   │   │   │   │   └── type.ts
│   │   │   │   └── index.ts
│   │   │   ├── index.tsx
│   │   │   ├── meta.tsx
│   │   │   └── vite-env.d.ts
│   │   └── tsconfig.json
│   ├── model/
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── __tests__/
│   │   │   ├── Material/
│   │   │   │   └── index.test.ts
│   │   │   ├── Page/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── index.test.ts.snap
│   │   │   │   ├── editMethods.test.ts
│   │   │   │   └── index.test.ts
│   │   │   ├── Schema/
│   │   │   │   └── Node.test.ts
│   │   │   └── demo.test.ts
│   │   ├── build.config.js
│   │   ├── index.html
│   │   ├── jest.config.js
│   │   ├── jest.setup.js
│   │   ├── mockPage/
│   │   │   ├── basePage.ts
│   │   │   ├── material.ts
│   │   │   └── simplePage.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── Material/
│   │   │   │   ├── index.test.ts
│   │   │   │   └── index.ts
│   │   │   ├── Page/
│   │   │   │   ├── RootNode/
│   │   │   │   │   ├── Node/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── prop.ts
│   │   │   │   │   │   └── slot.ts
│   │   │   │   │   └── index.ts
│   │   │   │   └── index.ts
│   │   │   ├── build-script-env.d.ts
│   │   │   ├── const/
│   │   │   │   ├── eventList.ts
│   │   │   │   └── schema.ts
│   │   │   ├── index.ts
│   │   │   ├── types/
│   │   │   │   ├── base.ts
│   │   │   │   ├── material.ts
│   │   │   │   ├── node.ts
│   │   │   │   ├── page.ts
│   │   │   │   └── rootNode.ts
│   │   │   └── util/
│   │   │       ├── dataCheck.ts
│   │   │       ├── index.ts
│   │   │       ├── lodash.ts
│   │   │       └── modelEmitter.ts
│   │   └── tsconfig.json
│   └── render/
│       ├── .gitignore
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── __tests__/
│       │   └── demo.test.ts
│       ├── build.config.ts
│       ├── index.html
│       ├── jest.config.js
│       ├── package.json
│       ├── src/
│       │   ├── _dev_/
│       │   │   ├── components.tsx
│       │   │   ├── dev.tsx
│       │   │   ├── index.css
│       │   │   ├── page/
│       │   │   │   ├── DesignerRenderDemo.tsx
│       │   │   │   └── RenderDemo.tsx
│       │   │   ├── router.tsx
│       │   │   └── testPageData.ts
│       │   ├── build-script-env.d.ts
│       │   ├── commonComponent/
│       │   │   └── index.tsx
│       │   ├── const/
│       │   │   └── index.ts
│       │   ├── core/
│       │   │   ├── ReactAdapter/
│       │   │   │   ├── buildComponent.ts
│       │   │   │   ├── convertModelToComponent.ts
│       │   │   │   ├── help.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── transformProps/
│       │   │   │   │   ├── actionNode.ts
│       │   │   │   │   └── index.ts
│       │   │   │   └── type.ts
│       │   │   ├── ReactErrorBoundary.ts
│       │   │   ├── adapter.ts
│       │   │   ├── designReactRender.ts
│       │   │   ├── refManager.ts
│       │   │   ├── render.ts
│       │   │   ├── storeManager.ts
│       │   │   ├── type.ts
│       │   │   └── variableManager.ts
│       │   ├── index.ts
│       │   └── util/
│       │       ├── assetsLoader.ts
│       │       ├── codeRuntimeHelper.ts
│       │       ├── index.ts
│       │       └── reactHelp.ts
│       └── tsconfig.json
└── pnpm-workspace.yaml
Download .txt
SYMBOL INDEX (1146 symbols across 166 files)

FILE: packages/build-script/bin/run.js
  function start (line 3) | async function start() {

FILE: packages/build-script/scripts/build.cjs
  function buildAll (line 16) | function buildAll(options) {
  function buildFormat (line 37) | async function buildFormat(format, outDir) {

FILE: packages/build-script/src/config/base.ts
  constant CLI_ARGS_OBJ (line 15) | const CLI_ARGS_OBJ = cliArgs;
  constant PROJECT_ROOT (line 17) | const PROJECT_ROOT = path.resolve(process.cwd());
  type ExternalOption (line 25) | type ExternalOption = (string | RegExp)[] | ((id: string, importer?: str...
  type BuildScriptConfig (line 27) | type BuildScriptConfig = {
  constant CUSTOM_CONFIG (line 53) | let CUSTOM_CONFIG: BuildScriptConfig = null as any;

FILE: packages/build-script/src/index.ts
  function run (line 11) | function run() {

FILE: packages/docs-app/src/codeSnippets/GridItemMeta.tsx
  constant GRID_ITEM_INSTANCE_MAP (line 11) | const GRID_ITEM_INSTANCE_MAP: any = {};

FILE: packages/docs-app/src/codeSnippets/GridLayoutComponent.tsx
  type ReactGridLayoutPropsType (line 13) | type ReactGridLayoutPropsType = {

FILE: packages/docs-app/src/codeSnippets/GridLayoutWrap.tsx
  type ChangeLayoutEvent (line 7) | type ChangeLayoutEvent = {

FILE: packages/engine/.storybook/main.js
  function getAbsolutePath (line 9) | function getAbsolutePath(value) {

FILE: packages/engine/src/component/CSSCodeEditor/helper.ts
  function parseCssToObject (line 3) | function parseCssToObject(css: string): Record<string, Record<string, st...

FILE: packages/engine/src/component/CSSCodeEditor/index.tsx
  type CSSCodeEditorProps (line 18) | type CSSCodeEditorProps = {
  type CSSCodeEditorRef (line 22) | type CSSCodeEditorRef = InputCommonRef;

FILE: packages/engine/src/component/CSSEditor/index.tsx
  constant DOM_CSS_STATUS (line 12) | const DOM_CSS_STATUS = [
  type DomCSSStatusType (line 23) | type DomCSSStatusType = typeof DOM_CSS_STATUS[number];
  constant DOM_CSS_STATUS_LIST (line 25) | const DOM_CSS_STATUS_LIST = DOM_CSS_STATUS.map((el) => {
  type MediaQueryItem (line 32) | type MediaQueryItem = {
  type CSSVal (line 38) | type CSSVal = Partial<
  type CSSEditorRef (line 49) | type CSSEditorRef = {
  type CSSEditorProps (line 53) | type CSSEditorProps = {

FILE: packages/engine/src/component/CSSPropertiesEditor/cssProperties.ts
  type CSSPropertiesKey (line 1060) | type CSSPropertiesKey = keyof typeof CSSProperties;

FILE: packages/engine/src/component/CSSPropertiesEditor/index.tsx
  type CSSPropertiesEditorProps (line 15) | type CSSPropertiesEditorProps = {
  type CSSPropertiesEditorRef (line 20) | type CSSPropertiesEditorRef = {

FILE: packages/engine/src/component/CSSPropertiesEditor/signleProperty.tsx
  type SinglePropertyEditorProps (line 11) | type SinglePropertyEditorProps = {
  type SinglePropertyEditorRef (line 26) | type SinglePropertyEditorRef = {

FILE: packages/engine/src/component/CSSPropertiesVariableBindEditor/SingleProperty.tsx
  type InnerSinglePropertyEditorProps (line 19) | type InnerSinglePropertyEditorProps = {
  type InnerSinglePropertyEditorRef (line 32) | type InnerSinglePropertyEditorRef = {

FILE: packages/engine/src/component/CSSPropertiesVariableBindEditor/cssProperties.ts
  type CSSPropertiesKey (line 780) | type CSSPropertiesKey = keyof typeof CSSProperties;

FILE: packages/engine/src/component/CSSPropertiesVariableBindEditor/index.tsx
  type CSSPropertiesVariableBindEditorProps (line 8) | type CSSPropertiesVariableBindEditorProps = {
  type CSSPropertiesVariableBindEditorRef (line 12) | type CSSPropertiesVariableBindEditorRef = {

FILE: packages/engine/src/component/CSSSizeInput/index.tsx
  type CumulativeInfoType (line 9) | type CumulativeInfoType = {
  constant UNIT_LIST (line 16) | const UNIT_LIST = [
  type MinMaxType (line 141) | type MinMaxType = {
  type CSSSizeInputProps (line 148) | type CSSSizeInputProps = {

FILE: packages/engine/src/component/ClassNameEditor/index.tsx
  type ClassNameEditorProps (line 7) | type ClassNameEditorProps = {
  type ClassNameEditorRef (line 13) | type ClassNameEditorRef = {
  method setValue (line 73) | setValue(newValue) {

FILE: packages/engine/src/component/CustomColorPicker/index.tsx
  type CustomColorPickerRef (line 4) | type CustomColorPickerRef = {
  type Color (line 8) | type Color = GetProp<ColorPickerProps, 'value'>;
  type CustomColorPickerProps (line 10) | type CustomColorPickerProps = Omit<ColorPickerProps, 'onChange'> & {

FILE: packages/engine/src/component/CustomSchemaForm/components/Form/Field/index.tsx
  type CFiledChildProps (line 8) | type CFiledChildProps = {
  type CFieldProps (line 14) | type CFieldProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Form/context.ts
  type ContextState (line 4) | type ContextState = Record<string, any>;
  type CFormContextData (line 6) | type CFormContextData = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Form/index.tsx
  type CFormProps (line 5) | type CFormProps = {
  constant CUSTOM_SETTER_MAP (line 13) | const CUSTOM_SETTER_MAP = {};
  class CForm (line 21) | class CForm extends React.Component<CFormProps, CFormContextData> {
    method constructor (line 24) | constructor(props: CFormProps) {
    method componentDidMount (line 60) | componentDidMount(): void {
    method componentWillUnmount (line 64) | componentWillUnmount(): void {
    method render (line 90) | render(): ReactNode {

FILE: packages/engine/src/component/CustomSchemaForm/components/SetterSwitcher/core.tsx
  type SetterSwitcherProps (line 10) | type SetterSwitcherProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/SetterSwitcher/helper.tsx
  function EmptySetter (line 4) | function EmptySetter(props: { setterName: string }) {

FILE: packages/engine/src/component/CustomSchemaForm/components/SetterSwitcher/index.tsx
  type SetterSwitcherProps (line 13) | type SetterSwitcherProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/CreateNewNodePopup/initData.ts
  constant DEFAULT_NODE_LIST (line 12) | const DEFAULT_NODE_LIST = [

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/modal.tsx
  type SelectNodeModalProps (line 7) | interface SelectNodeModalProps {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/config.ts
  constant REACT_FLOW_DRAG_CLASS_NAME (line 1) | const REACT_FLOW_DRAG_CLASS_NAME = 'chamn-action-drag-handler';
  constant INPUT_HANDLE_ID (line 3) | const INPUT_HANDLE_ID = 'INPUT_HANDLE_ID';
  constant OUTPUT_HANDLE_ID (line 5) | const OUTPUT_HANDLE_ID = 'OUTPUT_HANDLE_ID';
  constant REQUEST_API_FAILED_HANDLE_ID (line 7) | const REQUEST_API_FAILED_HANDLE_ID = 'REQUEST_API_FAILED_HANDLE_ID';

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/context.ts
  type ActionFlowContextType (line 5) | interface ActionFlowContextType {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/index.tsx
  type TActionFlowSetterCore (line 26) | type TActionFlowSetterCore = CSetterProps<{

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/index.tsx
  type TAssignValueNode (line 19) | type TAssignValueNode = Node<TLogicAssignValueItem, 'AssignValueNode'>;

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/util.ts
  function isValidJSVariableName (line 1) | function isValidJSVariableName(name: string) {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/index.tsx
  type TCallNodeMethodNode (line 16) | type TCallNodeMethodNode = Node<TLogicCallNodeMethodItem, 'CallNodeMetho...

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/util.ts
  function isValidJSVariableName (line 4) | function isValidJSVariableName(name: string) {
  constant ARGS_PREFIX (line 20) | const ARGS_PREFIX = 'args.';

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/JumpLinkNode.tsx
  type TJumpLinkNode (line 11) | type TJumpLinkNode = Node<TLogicJumpLinkItem, 'JumpLinkNode'>;

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/index.tsx
  type TRequestAPINode (line 27) | type TRequestAPINode = Node<TLogicRequestAPIItem, 'RequestAPINode'>;

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/util.ts
  function isValidJSVariableName (line 1) | function isValidJSVariableName(name: string) {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RunCodeNode/index.tsx
  type TRunCodeNode (line 9) | type TRunCodeNode = Node<TLogicRunCodeItem, 'RunCodeNode'>;

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RunCodeNode/util.ts
  function isValidJSVariableName (line 1) | function isValidJSVariableName(name: string) {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/StartNode.tsx
  type CounterNode (line 4) | type CounterNode = Node<any, 'StartNode'>;

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/index.ts
  type NODE_TYPE (line 9) | enum NODE_TYPE {
  constant NODE_MAP (line 18) | const NODE_MAP = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/AdvanceSetterList.ts
  constant BUILD_IN_ADVANCE_SETTER_MAP (line 5) | const BUILD_IN_ADVANCE_SETTER_MAP = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/AntDColorSetter/index.tsx
  type ColorSetterProps (line 5) | type ColorSetterProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ArraySetter/ArrayItem.tsx
  function ArrayItem (line 7) | function ArrayItem(props: {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ArraySetter/SortItemOrderModal.tsx
  type SortItemOrderProps (line 18) | type SortItemOrderProps = {
  function handleDragEnd (line 55) | function handleDragEnd(event: DragEndEvent) {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ArraySetter/index.tsx
  type CArraySetterProps (line 11) | type CArraySetterProps = {
  function formatValue (line 21) | function formatValue(value: unknown) {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/BooleanSetter/index.tsx
  type BooleanSetterProps (line 5) | type BooleanSetterProps = SwitchProps;

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/CSSValueSetter/index.tsx
  type CSSValueSetterProps (line 9) | type CSSValueSetterProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ColorSetter/index.tsx
  type ColorSetterProps (line 5) | type ColorSetterProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ExpressionSetter/index.tsx
  type ExpressionSetterProps (line 9) | type ExpressionSetterProps = CSetterProps<{

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/FunctionSetter/defaultDts.ts
  type SetStateInternal (line 1) | type SetStateInternal<T> = {
  type StoreApi (line 12) | interface StoreApi<T> {
  type PageState (line 22) | type PageState = any;
  type NodeId (line 24) | type NodeId = keyof PageState;
  type MethodsManager (line 26) | type MethodsManager = any;
  type GlobalState (line 28) | type GlobalState = any;
  type CurrentNodeState (line 30) | type CurrentNodeState = any;
  type PageStateManager (line 32) | type PageStateManager<K extends keyof PageState> = {
  type PageStateManagerMap (line 37) | type PageStateManagerMap = {
  type ContextType (line 41) | type ContextType = {
  class StoreManager (line 71) | class StoreManager<T extends NodeId> {
  type UpdaterMap (line 85) | type UpdaterMap = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/FunctionSetter/helper.ts
  function quicktypeJSON (line 6) | async function quicktypeJSON(typeName: string, jsonString: string) {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/RadioGroupSetter/index.tsx
  type ColorSetterProps (line 4) | type ColorSetterProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/ShapeSetter/index.tsx
  type CShapeSetterProps (line 9) | type CShapeSetterProps = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/TextAreaSetter/index.tsx
  type TTextAreaSetterProps (line 6) | type TTextAreaSetterProps = TextAreaProps & {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/index.ts
  constant BUILD_IN_SETTER_MAP (line 21) | const BUILD_IN_SETTER_MAP = {

FILE: packages/engine/src/component/CustomSchemaForm/components/Setters/type.ts
  type CSetter (line 4) | type CSetter<T = any> = {
  type CSetterProps (line 9) | type CSetterProps<T = { _: any }> = {

FILE: packages/engine/src/component/CustomSchemaForm/context.ts
  type ContextState (line 7) | type ContextState = Record<string, any>;
  type CCustomSchemaFormContextData (line 9) | type CCustomSchemaFormContextData = {

FILE: packages/engine/src/component/CustomSchemaForm/index.tsx
  type CustomSchemaFormInstance (line 13) | type CustomSchemaFormInstance = CForm;
  type CustomSchemaFormProps (line 15) | type CustomSchemaFormProps = {

FILE: packages/engine/src/component/InputNumberPlus/index.tsx
  type InputNumberPlusProps (line 5) | type InputNumberPlusProps = Omit<InputProps, 'onChange'> & {

FILE: packages/engine/src/component/MonacoEditor/index.tsx
  type EditorType (line 3) | type EditorType = EditorProps;
  type MonacoEditorInstance (line 5) | type MonacoEditorInstance = Parameters<Required<EditorType>['onMount']>[0];
  type MonacoEditorProps (line 7) | type MonacoEditorProps = {

FILE: packages/engine/src/component/MoveableModal/index.tsx
  type SortItemOrderProps (line 7) | type SortItemOrderProps = {} & ModalProps;

FILE: packages/engine/src/component/StylePanel/BackgroundInput/index.tsx
  constant CSS_BACKGROUND_KEY_LIST (line 10) | const CSS_BACKGROUND_KEY_LIST = [
  type CSSBackgroundKeyType (line 17) | type CSSBackgroundKeyType = typeof CSS_BACKGROUND_KEY_LIST[number];
  type Value (line 19) | type Value = Record<CSSBackgroundKeyType, string>;
  type BackgroundInputProps (line 21) | type BackgroundInputProps = {

FILE: packages/engine/src/component/StylePanel/BorderInput/index.tsx
  constant CSS_BORDER_KEY_LIST (line 12) | const CSS_BORDER_KEY_LIST = ['border', 'border-radius'] as const;
  type CSSBorderKeyType (line 14) | type CSSBorderKeyType = typeof CSS_BORDER_KEY_LIST[number];
  type Value (line 15) | type Value = Record<CSSBorderKeyType, string>;
  type BorderInputProps (line 29) | type BorderInputProps = {

FILE: packages/engine/src/component/StylePanel/DimensionInput/index.tsx
  type Value (line 41) | type Value = Record<typeof keyList[number], string>;
  type DimensionInputProps (line 43) | type DimensionInputProps = {
  function getDefaultValue (line 49) | function getDefaultValue(list: string[]): any {

FILE: packages/engine/src/component/StylePanel/FontInput/index.tsx
  constant FONT_CSS_KEY_LIST (line 11) | const FONT_CSS_KEY_LIST = ['font-size', 'color', 'text-align', 'font-wei...
  type FontKeyType (line 12) | type FontKeyType = typeof FONT_CSS_KEY_LIST[number];
  type Value (line 13) | type Value = Record<FontKeyType, string>;
  type FontInputProps (line 15) | type FontInputProps = {

FILE: packages/engine/src/component/StylePanel/MarginAndPaddingInput/index.tsx
  type Value (line 9) | type Value = Record<string, string>;
  type MarginAndPaddingInputProps (line 11) | type MarginAndPaddingInputProps = {

FILE: packages/engine/src/component/StylePanel/ShadowInput/index.tsx
  type Value (line 11) | type Value = Record<'box-shadow', string>;
  type ShadowInputProps (line 17) | type ShadowInputProps = {

FILE: packages/engine/src/component/StylePanel/index.tsx
  type StyleUIPanelProps (line 16) | type StyleUIPanelProps = {
  type StyleUIPanelRef (line 23) | type StyleUIPanelRef = InputCommonRef;

FILE: packages/engine/src/component/StylePanel/type.ts
  type InputCommonRef (line 1) | type InputCommonRef = {

FILE: packages/engine/src/component/Workbench/index.tsx
  type PluginContext (line 11) | interface PluginContext {
  type PanelItem (line 18) | type PanelItem = {
  type WorkbenchCustomView (line 25) | type WorkbenchCustomView = {
  type TWidgetVisible (line 30) | type TWidgetVisible = {
  type WorkbenchStateType (line 38) | type WorkbenchStateType = {
  type WorkbenchPropsType (line 59) | type WorkbenchPropsType = {
  class Workbench (line 63) | class Workbench extends React.Component<WorkbenchPropsType, WorkbenchSta...
    method constructor (line 66) | constructor(props: WorkbenchPropsType) {
    method getHiddenWidgetConfig (line 96) | getHiddenWidgetConfig() {
    method hiddenWidget (line 105) | hiddenWidget(config: Partial<TWidgetVisible>) {
    method addCustomView (line 135) | addCustomView(view: WorkbenchCustomView) {
    method componentDidMount (line 281) | componentDidMount() {
    method render (line 285) | render() {

FILE: packages/engine/src/config/colorPickerColorList.ts
  constant DEFAULT_PRESET_COLORS (line 1) | const DEFAULT_PRESET_COLORS = [

FILE: packages/engine/src/core/assetPackagesListManage.ts
  class AssetsPackageListManager (line 3) | class AssetsPackageListManager {
    method constructor (line 5) | constructor(assets: AssetPackage[]) {
    method getList (line 9) | getList() {
    method setList (line 13) | setList(newAssets: AssetPackage[]) {

FILE: packages/engine/src/core/pluginManager.ts
  type PluginObj (line 8) | type PluginObj<C, E = any> = {
  type PluginFunction (line 24) | interface PluginFunction<C, E> {
  type CPlugin (line 29) | type CPlugin<C = Record<string, any>, E = any> = PluginObj<C, E> | Plugi...
  type PluginManagerOptions (line 31) | type PluginManagerOptions = {
  type CPluginCtx (line 40) | type CPluginCtx<C = any> = {
  type PluginInstance (line 49) | type PluginInstance<C = any, E = any> = {
  type CustomPluginHook (line 56) | type CustomPluginHook<P extends PluginInstance<any, any> = any> = (plugi...
  class PluginManager (line 58) | class PluginManager {
    method constructor (line 68) | constructor({ getWorkbench, emitter, pageModel, i18n, assetsPackageLis...
    method add (line 102) | async add(plugin: CPlugin) {
    method get (line 129) | async get<P extends PluginInstance<any, any>>(pluginName: string): Pro...
    method remove (line 139) | async remove(name: string) {
    method onPluginReadyOk (line 145) | onPluginReadyOk(pluginName: string, cb?: (pluginHandle: PluginInstance...

FILE: packages/engine/src/i18n/index.ts
  type CustomI18n (line 27) | type CustomI18n = typeof i18n & {

FILE: packages/engine/src/index.tsx
  class Engine (line 20) | class Engine extends React.Component<EngineProps> {
    method constructor (line 37) | constructor(props: EngineProps) {
    method updateCurrentSelectNode (line 66) | updateCurrentSelectNode(node: CNode | CRootNode | null) {
    method componentDidMount (line 73) | async componentDidMount() {
    method getActiveNode (line 126) | getActiveNode() {
    method getI18n (line 183) | getI18n() {
    method preview (line 188) | async preview() {
    method existPreview (line 203) | async existPreview() {
    method hiddenWidget (line 213) | hiddenWidget(config: Partial<TWidgetVisible>) {
    method render (line 217) | render() {

FILE: packages/engine/src/material/innerMaterial.tsx
  constant INNER_META_VERSION (line 51) | const INNER_META_VERSION = '1.0.0';
  constant PKG_NAME (line 52) | const PKG_NAME = 'CHAMELEON_INNER_PKG';

FILE: packages/engine/src/plugins/AdvancePanel/index.tsx
  type AdvancePanelProps (line 9) | type AdvancePanelProps = {

FILE: packages/engine/src/plugins/ComponentLibrary/components/DragItem/index.tsx
  type DragComponentItemProps (line 6) | type DragComponentItemProps = {
  constant DRAG_ITEM_KEY (line 61) | const DRAG_ITEM_KEY = 'data-drag-key';

FILE: packages/engine/src/plugins/ComponentLibrary/components/ListView/index.tsx
  type ListViewProps (line 7) | type ListViewProps = {

FILE: packages/engine/src/plugins/ComponentLibrary/index.tsx
  type ComponentLibViewProps (line 27) | interface ComponentLibViewProps extends WithTranslation {
  constant PLUGIN_NAME (line 31) | const PLUGIN_NAME = 'ComponentLib';
  type ComponentLibViewState (line 38) | type ComponentLibViewState = {
  type ComponentLibPluginConfig (line 48) | type ComponentLibPluginConfig = {
  class ComponentLibView (line 55) | class ComponentLibView extends React.Component<ComponentLibViewProps, Co...
    method constructor (line 60) | constructor(props: ComponentLibViewProps) {
    method updateComponentsList (line 78) | updateComponentsList() {
    method componentDidMount (line 96) | async componentDidMount() {
    method componentWillUnmount (line 112) | componentWillUnmount(): void {
    method render (line 277) | render(): React.ReactNode {
  method init (line 341) | async init(ctx) {
  method destroy (line 358) | async destroy(ctx) {

FILE: packages/engine/src/plugins/ComponentStatePanel/index.tsx
  type ComponentStatePanelProps (line 8) | type ComponentStatePanelProps = {

FILE: packages/engine/src/plugins/Designer/components/Canvas/advanceCustomHook.ts
  type AdvanceCustomHookOptions (line 6) | interface AdvanceCustomHookOptions {
  type HookParameter (line 15) | type HookParameter = {
  class AdvanceCustomHook (line 21) | class AdvanceCustomHook {
    method constructor (line 25) | constructor(options: AdvanceCustomHookOptions) {
    method canDrag (line 31) | async canDrag({ dragNode, eventObj }: HookParameter): ReturnType<Requi...
    method canDrop (line 46) | async canDrop({ dragNode, dropNode, eventObj }: HookParameter): Return...
    method onNewAdd (line 86) | async onNewAdd({ dragNode, dropNode, eventObj }: HookParameter): Retur...
    method getSelectRectViewRender (line 100) | getSelectRectViewRender(node: CNode | CRootNode) {
    method getHoverRectViewRender (line 105) | getHoverRectViewRender(node?: CNode | CRootNode | null) {
    method getDropViewRender (line 113) | getDropViewRender(node?: CNode | CRootNode | null) {
    method getGhostViewRender (line 121) | getGhostViewRender(node?: CNode | CRootNode | null) {
    method getToolbarViewRender (line 128) | getToolbarViewRender(node?: CNode | CRootNode | null) {
    method onCopy (line 136) | async onCopy(node: CNode | CRootNode) {
    method onDelete (line 165) | async onDelete(node: CNode | CRootNode) {

FILE: packages/engine/src/plugins/Designer/components/Canvas/index.tsx
  type DesignerCtx (line 19) | type DesignerCtx = CPluginCtx<DesignerPluginConfig>;
  type DesignerPropsType (line 20) | type DesignerPropsType = {
  type WrapComponentOptionsType (line 24) | type WrapComponentOptionsType = {
  type DesignerStateType (line 29) | type DesignerStateType = {
  class Designer (line 40) | class Designer extends React.Component<DesignerPropsType, DesignerStateT...
    method constructor (line 43) | constructor(props: DesignerPropsType) {
    method updateRenderComponents (line 82) | async updateRenderComponents(newComponentMap: Record<string, any> = {}) {
    method componentDidMount (line 102) | componentDidMount(): void {
    method getIframeDom (line 110) | getIframeDom() {
    method reloadRender (line 114) | reloadRender() {
    method init (line 119) | async init() {
    method render (line 524) | render() {

FILE: packages/engine/src/plugins/Designer/components/DefaultSelectToolBar/index.tsx
  type DefaultSelectToolBarProps (line 8) | type DefaultSelectToolBarProps = {

FILE: packages/engine/src/plugins/Designer/config.ts
  constant PLUGIN_NAME (line 1) | const PLUGIN_NAME = 'Designer';

FILE: packages/engine/src/plugins/Designer/index.tsx
  method init (line 14) | async init(ctx) {
  method destroy (line 19) | async destroy(ctx) {
  method setMode (line 25) | setMode(newMode) {
  method setPreviewMode (line 28) | setPreviewMode() {
  method setEditMode (line 31) | setEditMode() {
  method setCanvasWidth (line 34) | setCanvasWidth(width: number | string) {
  method getIframeDom (line 46) | getIframeDom() {

FILE: packages/engine/src/plugins/Designer/type.ts
  type DesignerExport (line 7) | type DesignerExport = {
  type DesignerPluginConfig (line 29) | type DesignerPluginConfig = Omit<
  type DesignerPluginType (line 44) | type DesignerPluginType = CPlugin<DesignerPluginConfig, DesignerExport>;
  type DesignerPluginInstance (line 45) | type DesignerPluginInstance = PluginInstance<DesignerPluginConfig, Desig...

FILE: packages/engine/src/plugins/DisplaySourceSchema/index.tsx
  type DisplaySourceSchemaProps (line 9) | type DisplaySourceSchemaProps = {

FILE: packages/engine/src/plugins/EventPanel/panel.tsx
  type EventPanelProps (line 10) | type EventPanelProps = {
  constant INNER_EVENT_LIST_MAP (line 15) | const INNER_EVENT_LIST_MAP = [

FILE: packages/engine/src/plugins/GlobalStatePanel/index.tsx
  constant PLUGIN_NAME (line 10) | const PLUGIN_NAME = 'GlobalState';
  type GlobalStatePanelProps (line 13) | type GlobalStatePanelProps = {
  method init (line 79) | async init(ctx) {
  method destroy (line 95) | async destroy() {}

FILE: packages/engine/src/plugins/History/index.tsx
  constant PLUGIN_NAME (line 7) | const PLUGIN_NAME = 'History' as const;
  method init (line 94) | async init(ctx) {
  method destroy (line 103) | async destroy(ctx) {

FILE: packages/engine/src/plugins/History/type.ts
  type HistoryExport (line 3) | type HistoryExport = {
  type HistoryPluginConfig (line 12) | type HistoryPluginConfig = any;
  type HistoryPluginType (line 13) | type HistoryPluginType = CPlugin<HistoryPluginConfig, HistoryExport>;
  type HistoryPluginInstance (line 14) | type HistoryPluginInstance = PluginInstance<HistoryPluginConfig, History...

FILE: packages/engine/src/plugins/Hotkeys/hotKeyManager.ts
  class HotKeysManager (line 3) | class HotKeysManager {
    method constructor (line 16) | constructor(options: { elements: HTMLElement[]; customGetKeyCodeByEven...
    method setDisable (line 21) | setDisable(status: boolean) {
    method init (line 25) | init() {
    method addElement (line 31) | addElement(el: HTMLElement) {
    method registerKeyEvent (line 36) | registerKeyEvent(el: HTMLElement) {
    method addHotAction (line 82) | addHotAction(keys: (number | string)[], cb: () => void) {
    method triggerHotKey (line 99) | triggerHotKey() {
    method getTriggerHotkeyDebounce (line 111) | getTriggerHotkeyDebounce() {
    method getKeyCodeByLabel (line 116) | getKeyCodeByLabel(label: string) {
    method getKeyString (line 120) | getKeyString(code: number) {
    method filterInputElement (line 131) | filterInputElement(event: KeyboardEvent) {
    method destroy (line 151) | destroy() {

FILE: packages/engine/src/plugins/Hotkeys/index.ts
  constant PLUGIN_NAME (line 7) | const PLUGIN_NAME = 'Hotkeys' as const;
  method init (line 13) | async init(ctx) {
  method destroy (line 76) | async destroy(ctx) {

FILE: packages/engine/src/plugins/Hotkeys/type.ts
  type HotKeysExport (line 3) | type HotKeysExport = {
  type HotKeysPluginConfig (line 8) | type HotKeysPluginConfig = object;
  type HotKeysPluginType (line 9) | type HotKeysPluginType = CPlugin<HotKeysPluginConfig, HotKeysExport>;
  type HotKeysPluginInstance (line 10) | type HotKeysPluginInstance = PluginInstance<HotKeysPluginType, HotKeysEx...

FILE: packages/engine/src/plugins/Hotkeys/utils.ts
  function getMods (line 4) | function getMods(modifier: string[], key: string[]) {
  function getKeys (line 11) | function getKeys(key: string) {

FILE: packages/engine/src/plugins/OutlineTree/components/TreeView/context.ts
  type DragState (line 6) | enum DragState {
  type ContextState (line 10) | type ContextState = {
  type CTreeContextData (line 19) | type CTreeContextData = {

FILE: packages/engine/src/plugins/OutlineTree/components/TreeView/dataStruct.ts
  type TreeNodeData (line 3) | type TreeNodeData = {

FILE: packages/engine/src/plugins/OutlineTree/components/TreeView/index.tsx
  type TreeViewProps (line 15) | interface TreeViewProps extends WithTranslation {
  class TreeView (line 20) | class TreeView extends React.Component<
    method constructor (line 29) | constructor(props: TreeViewProps) {
    method componentDidMount (line 96) | async componentDidMount() {
    method render (line 387) | render() {

FILE: packages/engine/src/plugins/OutlineTree/components/TreeView/treeNode.tsx
  constant DRAG_ITEM_KEY (line 12) | const DRAG_ITEM_KEY = 'data-drag-key';
  type TreeNodeProps (line 14) | type TreeNodeProps = {

FILE: packages/engine/src/plugins/OutlineTree/index.tsx
  constant PLUGIN_NAME (line 7) | const PLUGIN_NAME = 'OutlineTree';
  method init (line 13) | async init(ctx) {
  method destroy (line 31) | async destroy(ctx) {

FILE: packages/engine/src/plugins/OutlineTree/util.tsx
  function calculateDropPosInfo (line 212) | function calculateDropPosInfo(params: { point: { x: number; y: number };...

FILE: packages/engine/src/plugins/RightPanel/context.ts
  type ContextState (line 6) | type ContextState = Record<string, any>;
  type CRightPanelData (line 8) | type CRightPanelData = {

FILE: packages/engine/src/plugins/RightPanel/index.tsx
  constant PLUGIN_NAME (line 6) | const PLUGIN_NAME = 'RightPanel';
  method init (line 12) | async init(ctx) {
  method destroy (line 16) | async destroy() {}

FILE: packages/engine/src/plugins/RightPanel/type.ts
  type RightPanelConfig (line 4) | type RightPanelConfig = {
  type TCustomAPIInput (line 11) | type TCustomAPIInput = (props: {

FILE: packages/engine/src/plugins/RightPanel/view.tsx
  type RightPanelOptions (line 13) | type RightPanelOptions = { node: CNode | CRootNode | null; pluginCtx: CP...
  type CRightPanelItem (line 15) | type CRightPanelItem = {
  type RightPanelProps (line 22) | interface RightPanelProps {
  type RightPanelState (line 26) | interface RightPanelState {
  class RightPanel (line 33) | class RightPanel extends React.Component<RightPanelProps, RightPanelStat...
    method constructor (line 34) | constructor(props: RightPanelProps) {
    method componentDidMount (line 148) | componentDidMount(): void {
    method render (line 172) | render() {

FILE: packages/engine/src/plugins/index.tsx
  constant DEFAULT_PLUGIN_LIST (line 12) | const DEFAULT_PLUGIN_LIST: CPlugin[] = [
  constant DEFAULT_PLUGIN_NAME_MAP (line 34) | const DEFAULT_PLUGIN_NAME_MAP = {

FILE: packages/engine/src/type.ts
  type EnginContext (line 6) | type EnginContext = {
  type EngineProps (line 11) | type EngineProps = {

FILE: packages/engine/src/utils/css.ts
  type StyleArr (line 7) | type StyleArr = {
  type StateType (line 104) | type StateType = keyof CSSVal;
  type BoxShadowObjType (line 182) | type BoxShadowObjType = {

FILE: packages/engine/src/utils/logger.ts
  constant LOGGER (line 2) | const LOGGER = consola.create({

FILE: packages/layout/public/render.umd.js
  function ia (line 14) | function ia(t) {
  function ga (line 66) | function ga(t) {
  function ja (line 78) | function ja(t) {
  function lt (line 84) | function lt(t) {
  function X (line 87) | function X(t) {
  function Ee (line 91) | function Ee(t) {
  function Ne (line 94) | function Ne(t, e) {
  function kr (line 103) | function kr(t) {
  function V (line 110) | function V(t) {
  function $e (line 114) | function $e(t) {
  function Te (line 121) | function Te(t) {
  function Pa (line 132) | function Pa(t) {
  function ft (line 137) | function ft(t) {
  function za (line 161) | function za(t) {
  function Ga (line 166) | function Ga(t, e) {
  function dt (line 169) | function dt(t, e) {
  function t (line 177) | function t() {}
  function Ja (line 187) | function Ja(t, e, r) {
  function qa (line 200) | function qa() {}
  function Hr (line 201) | function Hr(t, e) {
  function Ka (line 210) | function Ka(t) {
  function Za (line 222) | function Za(t) {
  function ni (line 241) | function ni(t, e) {
  function oi (line 245) | function oi(t, e, r, n) {
  function ai (line 249) | function ai(t) {
  function ii (line 252) | function ii(t, e, r) {
  function si (line 256) | function si(t, e, r) {
  function ci (line 259) | function ci(t, e) {
  function se (line 265) | function se(t, e) {
  function Pe (line 271) | function Pe(t, e, r) {
  function Ut (line 274) | function Ut(t, e) {
  function xe (line 279) | function xe(t, e, r) {
  function bt (line 283) | function bt(t, e, r, n) {
  function Jr (line 294) | function Jr(t, e, r) {
  function qr (line 305) | function qr(t, e) {
  function De (line 309) | function De(t) {
  function ce (line 312) | function ce(t) {
  function hi (line 315) | function hi(t, e, r) {
  function vi (line 320) | function vi(t) {
  function Re (line 340) | function Re(t) {
  function yi (line 345) | function yi(t, e) {
  function Qr (line 350) | function Qr(t) {
  function Si (line 366) | function Si() {
  function Yi (line 418) | function Yi(t) {
  function Ie (line 421) | function Ie(t) {
  function rn (line 442) | function rn(t, e) {
  function nn (line 462) | function nn(t, e) {
  function is (line 471) | function is(t) {
  function ue (line 477) | function ue(t) {
  function ss (line 480) | function ss(t) {
  function ls (line 487) | function ls(t) {
  function Ht (line 494) | function Ht(t) {
  function Be (line 499) | function Be(t, e) {
  function hs (line 508) | function hs() {
  function vs (line 511) | function vs(t) {
  function bs (line 518) | function bs(t) {
  function Ss (line 528) | function Ss(t) {
  function Cs (line 533) | function Cs(t, e) {
  function pt (line 537) | function pt(t) {
  function ws (line 550) | function ws() {
  function le (line 553) | function le(t, e) {
  function $s (line 559) | function $s(t) {
  function Ts (line 566) | function Ts(t) {
  function As (line 571) | function As(t) {
  function Ms (line 574) | function Ms(t, e) {
  function et (line 579) | function et(t) {
  function xs (line 594) | function xs() {
  function Ds (line 597) | function Ds(t) {
  function fe (line 601) | function fe(t, e) {
  function Rs (line 605) | function Rs(t) {
  function Is (line 609) | function Is(t) {
  function Ls (line 612) | function Ls(t) {
  function Fs (line 615) | function Fs(t, e) {
  function rt (line 620) | function rt(t) {
  function Ue (line 634) | function Ue(t, e) {
  function ks (line 648) | function ks(t) {
  function Ws (line 668) | function Ws(t) {
  function jt (line 671) | function jt(t, e) {
  function St (line 675) | function St(t) {
  function de (line 680) | function de(t, e) {
  function on (line 685) | function on(t, e, r) {
  function ke (line 689) | function ke(t, e) {
  function qs (line 694) | function qs(t) {
  function ze (line 697) | function ze(t, e, r, n, o) {
  function Qs (line 706) | function Qs(t) {
  function Ys (line 710) | function Ys(t) {
  function U (line 721) | function U(t) {
  function nc (line 728) | function nc(t, e, r) {
  function oc (line 739) | function oc() {
  function ac (line 742) | function ac(t) {
  function ic (line 747) | function ic(t) {
  function sc (line 750) | function sc(t) {
  function uc (line 754) | function uc(t, e) {
  function W (line 763) | function W(t) {
  function lc (line 772) | function lc(t, e) {
  function fc (line 775) | function fc(t, e) {
  function dn (line 783) | function dn(t, e) {
  function pc (line 789) | function pc(t, e) {
  function pn (line 796) | function pn() {
  function yc (line 813) | function yc(t, e) {
  function _c (line 824) | function _c(t, e) {
  function mn (line 827) | function mn(t, e, r) {
  function Ve (line 831) | function Ve(t) {
  function We (line 834) | function We(t) {
  function Pc (line 882) | function Pc(t) {
  function Qe (line 889) | function Qe(t) {
  function Dc (line 893) | function Dc(t, e) {
  function Ic (line 898) | function Ic(t) {
  function Lc (line 904) | function Lc(t) {
  function Cn (line 907) | function Cn(t, e) {
  function nu (line 930) | function nu(t, e, r) {
  function wn (line 963) | function wn(t) {
  function au (line 967) | function au(t) {
  function uu (line 974) | function uu(t) {
  function qt (line 1034) | function qt(t, e, r, n, o, a) {
  function Mn (line 1078) | function Mn(t) {
  function ku (line 1082) | function ku(t) {
  function zu (line 1085) | function zu(t) {
  function Qt (line 1088) | function Qt(t) {
  function Gu (line 1094) | function Gu(t, e) {
  function Pn (line 1098) | function Pn(t, e) {
  function xn (line 1103) | function xn(t, e, r, n, o, a) {
  function Wu (line 1139) | function Wu(t) {
  function Ye (line 1149) | function Ye(t) {
  function il (line 1174) | function il(t, e, r, n, o, a, s) {
  function ll (line 1208) | function ll(t, e, r, n, o, a) {
  function pl (line 1252) | function pl(t, e, r, n, o, a) {
  function Ke (line 1277) | function Ke(t, e, r, n, o) {
  function ml (line 1282) | function ml(t, e, r, n) {
  function Fn (line 1306) | function Fn(t) {
  function yl (line 1309) | function yl(t) {
  function Bn (line 1317) | function Bn(t, e) {
  function gl (line 1322) | function gl(t) {
  function bl (line 1330) | function bl(t, e) {
  function _l (line 1333) | function _l(t, e, r) {
  function jl (line 1342) | function jl(t, e) {
  function Cl (line 1347) | function Cl(t, e) {
  function wl (line 1355) | function wl(t) {
  function El (line 1360) | function El(t) {
  function Nl (line 1365) | function Nl(t) {
  function Ze (line 1368) | function Ze(t) {
  function $l (line 1379) | function $l(t) {
  function tr (line 1390) | function tr(t, e, r) {
  function er (line 1393) | function er(t) {
  function rr (line 1396) | function rr(t, e) {
  function Ml (line 1399) | function Ml(t) {
  function Pl (line 1402) | function Pl(t, e, r, n, o, a, s) {
  function Un (line 1433) | function Un(t, e, r, n, o) {
  function xl (line 1447) | function xl(t, e, r) {
  function kn (line 1451) | function kn(t) {
  function Dl (line 1455) | function Dl(t, e) {
  function Ll (line 1463) | function Ll(t) {
  function Fl (line 1480) | function Fl(t, e) {
  function Bl (line 1483) | function Bl(t) {
  function Hl (line 1502) | function Hl(t, e, r, n) {
  function Vl (line 1517) | function Vl(t, e, r) {
  function Wl (line 1525) | function Wl(t, e) {
  function Jl (line 1537) | function Jl(t, e) {
  function Kl (line 1549) | function Kl(t, e, r) {
  class Hn (line 1577) | class Hn extends TypeError {
    method constructor (line 1578) | constructor(e, r) {
  function ef (line 1596) | function ef(t) {
  function J (line 1599) | function J(t) {
  function z (line 1602) | function z(t) {
  function rf (line 1605) | function rf(t) {
  function nf (line 1609) | function nf(t, e, r, n) {
  class K (line 1660) | class K {
    method constructor (line 1661) | constructor(e) {
    method assert (line 1687) | assert(e) {
    method create (line 1690) | create(e) {
    method is (line 1693) | is(e) {
    method mask (line 1696) | mask(e) {
    method validate (line 1699) | validate(e, r) {
  function Wn (line 1703) | function Wn(t, e) {
  function of (line 1707) | function of(t, e) {
  function af (line 1712) | function af(t, e) {
  function sf (line 1717) | function sf(t, e) {
  function Ct (line 1720) | function Ct(t, e, r) {
  function or (line 1733) | function or() {
  function st (line 1740) | function st(t, e) {
  function wt (line 1743) | function wt(t) {
  function Jn (line 1761) | function Jn(t, e) {
  function R (line 1772) | function R() {
  function x (line 1775) | function x(t) {
  function nt (line 1790) | function nt() {
  function ar (line 1793) | function ar(t) {
  function qn (line 1805) | function qn() {
  function k (line 1808) | function k(t) {
  function cf (line 1819) | function cf() {
  function Qn (line 1822) | function Qn() {
  function C (line 1825) | function C(t) {
  function m (line 1846) | function m(t) {
  function Yt (line 1853) | function Yt(t, e) {
  function v (line 1869) | function v() {
  function Yn (line 1872) | function Yn(t) {
  function B (line 1885) | function B(t) {
  function uf (line 1910) | function uf() {
  function Of (line 2062) | function Of(t) {
  class $t (line 2100) | class $t {
    method constructor (line 2101) | constructor(e, r) {
    method value (line 2114) | get value() {
    method export (line 2117) | export(e) {
  class ct (line 2162) | class ct {
    method constructor (line 2163) | constructor(e, r, n) {
    method isIncludeSlot (line 2178) | isIncludeSlot() {
    method isIncludeExpression (line 2181) | isIncludeExpression() {
    method value (line 2184) | get value() {
    method updateValue (line 2187) | updateValue(e) {
    method material (line 2199) | get material() {
    method export (line 2206) | export(e) {
  class A (line 2265) | class A {
    method constructor (line 2266) | constructor(e, r) {
    method registerListener (line 2285) | registerListener() {
    method onChange (line 2295) | onChange(e) {
    method destroy (line 2303) | destroy() {
    method id (line 2306) | get id() {
    method value (line 2309) | get value() {
    method clone (line 2312) | clone(e) {
    method updateValue (line 2316) | updateValue(e) {
    method contains (line 2321) | contains(e) {
    method props (line 2324) | get props() {
    method material (line 2327) | get material() {
    method getPlainProps (line 2331) | getPlainProps() {
    method export (line 2341) | export(e) {
  class Kt (line 2390) | class Kt {
    method constructor (line 2391) | constructor(e, { parent: r, materials: n }) {
    method registerListener (line 2408) | registerListener() {
    method onChange (line 2418) | onChange(e) {
    method id (line 2426) | get id() {
    method value (line 2429) | get value() {
    method props (line 2432) | get props() {
    method material (line 2435) | get material() {
    method updateValue (line 2439) | updateValue(e) {
    method contains (line 2445) | contains(e) {
    method export (line 2448) | export(e = sr.SAVE) {
    method getPlainProps (line 2466) | getPlainProps() {
    method destroy (line 2476) | destroy() {
    method clone (line 2479) | clone(e) {
  function yr (line 2491) | function yr(t, e) {
  class Af (line 2546) | class Af {
    method constructor (line 2547) | constructor(e) {
    method value (line 2550) | get value() {
    method rawValue (line 2553) | get rawValue() {
    method componentName (line 2556) | get componentName() {
    method snippets (line 2559) | get snippets() {
    method getSnippetById (line 2562) | getSnippetById(e) {
  class mt (line 2576) | class mt {
    method constructor (line 2577) | constructor(e) {
    method findByComponentName (line 2580) | findByComponentName(e) {
    method findSnippetById (line 2583) | findSnippetById(e) {
    method getAllSnippets (line 2592) | getAllSnippets() {
    method value (line 2623) | get value() {
    method rawValue (line 2626) | get rawValue() {
  class ye (line 2643) | class ye {
    method constructor (line 2644) | constructor(e, r) {
    method updatePage (line 2658) | updatePage(e) {
    method reloadPage (line 2664) | reloadPage(e) {
    method value (line 2670) | get value() {
    method getNode (line 2673) | getNode(e) {
    method addNode (line 2677) | addNode(e, r, n = 'AFTER') {
    method createNode (line 2723) | createNode(e) {
    method addNodeById (line 2726) | addNodeById(e, r, n = 'AFTER') {
    method copyNode (line 2730) | copyNode(e) {
    method copyNodeById (line 2736) | copyNodeById(e) {
    method moveNode (line 2740) | moveNode(e, r, n) {
    method moveNodeById (line 2745) | moveNodeById(e, r, n) {
    method deleteNode (line 2750) | deleteNode(e) {
    method deleteNodeById (line 2767) | deleteNodeById(e) {
    method export (line 2771) | export(e = sr.SAVE) {
  function Uf (line 2815) | function Uf(t) {
  function Gf (line 2827) | function Gf(t) {
  function te (line 2833) | function te(t) {
  function Mt (line 2836) | function Mt(t) {
  function Jf (line 2840) | function Jf(t) {
  function qf (line 2843) | function qf(t, e) {
  function so (line 2852) | function so(t) {
  function yt (line 2859) | function yt(t) {
  function co (line 2863) | function co(t) {
  function br (line 2870) | function br(t) {
  function rd (line 2881) | function rd(t) {
  function ad (line 2886) | function ad(t) {
  function pd (line 2911) | function pd(t) {
  function hd (line 2916) | function hd(t, e) {
  function jr (line 2919) | function jr(t, e) {
  function t (line 2925) | function t() {}
  function yd (line 2935) | function yd(t, e, r) {
  function gd (line 2948) | function gd(t, e) {
  function Sd (line 2957) | function Sd(t) {
  function Od (line 2969) | function Od(t) {
  function fo (line 2990) | function fo(t, e) {
  function Sr (line 2996) | function Sr(t, e, r) {
  function be (line 2999) | function be(t, e) {
  function Pd (line 3004) | function Pd(t, e, r) {
  function xd (line 3008) | function xd(t, e, r, n) {
  function Dd (line 3019) | function Dd(t, e, r) {
  function Rd (line 3030) | function Rd(t, e) {
  function ho (line 3034) | function ho(t) {
  function Or (line 3037) | function Or(t) {
  function Ld (line 3040) | function Ld(t, e, r) {
  function Fd (line 3045) | function Fd(t) {
  function vo (line 3065) | function vo(t) {
  function Ud (line 3070) | function Ud(t, e) {
  function mo (line 3075) | function mo(t) {
  function Vd (line 3091) | function Vd() {
  function bp (line 3143) | function bp(t) {
  function _p (line 3146) | function _p(t) {
  function Ep (line 3167) | function Ep(t, e) {
  function Np (line 3187) | function Np(t, e) {
  function $p (line 3192) | function $p(t) {
  function Mp (line 3199) | function Mp(t) {
  function Eo (line 3206) | function Eo(t) {
  function xp (line 3211) | function xp() {
  function Dp (line 3214) | function Dp(t) {
  function Fp (line 3221) | function Fp(t) {
  function kp (line 3231) | function kp(t) {
  function Gp (line 3236) | function Gp(t, e) {
  function gt (line 3240) | function gt(t) {
  function Hp (line 3253) | function Hp() {
  function _e (line 3256) | function _e(t, e) {
  function Jp (line 3262) | function Jp(t) {
  function qp (line 3269) | function qp(t) {
  function Qp (line 3274) | function Qp(t) {
  function Yp (line 3277) | function Yp(t, e) {
  function ot (line 3282) | function ot(t) {
  function Kp (line 3297) | function Kp() {
  function Zp (line 3300) | function Zp(t) {
  function je (line 3304) | function je(t, e) {
  function th (line 3308) | function th(t) {
  function eh (line 3312) | function eh(t) {
  function rh (line 3315) | function rh(t) {
  function nh (line 3318) | function nh(t, e) {
  function xt (line 3323) | function xt(t) {
  function $o (line 3336) | function $o(t) {
  function Dt (line 3347) | function Dt(t) {
  function lh (line 3354) | function lh(t, e, r) {
  function fh (line 3365) | function fh(t, e, r) {
  function Mo (line 3377) | function Mo(t) {
  function _h (line 3380) | function _h(t) {
  function xh (line 3403) | function xh(t) {
  function Dh (line 3406) | function Dh(t) {
  function Rh (line 3409) | function Rh(t) {
  function Fh (line 3420) | function Fh(t) {
  function Bh (line 3423) | function Bh() {
  function Uh (line 3426) | function Uh(t) {
  function kh (line 3431) | function kh(t) {
  function zh (line 3434) | function zh(t) {
  function Hh (line 3438) | function Hh(t, e) {
  function Rt (line 3447) | function Rt(t) {
  function Wh (line 3461) | function Wh(t, e) {
  function qh (line 3469) | function qh(t) {
  function Qh (line 3473) | function Qh(t, e) {
  function Yh (line 3477) | function Yh(t) {
  function Xh (line 3480) | function Xh(t) {
  function $r (line 3491) | function $r(t, e, r) {
  function tv (line 3494) | function tv(t) {
  function Tr (line 3497) | function Tr(t, e) {
  function ev (line 3500) | function ev(t) {
  function rv (line 3503) | function rv(t, e, r, n, o, a, s) {
  function Go (line 3534) | function Go(t, e, r, n, o) {
  function av (line 3552) | function av(t) {
  function iv (line 3556) | function iv(t) {
  function sv (line 3566) | function sv(t) {
  class dv (line 3672) | class dv {
    method constructor (line 3673) | constructor() {
    method addStore (line 3676) | addStore(e, r) {
    method setStore (line 3680) | setStore(e, r) {
    method removeStore (line 3683) | removeStore(e) {
    method getStore (line 3686) | getStore(e) {
    method connect (line 3689) | connect(e, r) {
    method getStateSnapshot (line 3693) | getStateSnapshot() {
    method destroy (line 3707) | destroy() {
  class qo (line 3714) | class qo {
    method constructor (line 3715) | constructor() {
    method getComponent (line 3726) | getComponent(e) {
    method getContext (line 3736) | getContext(e = {}, r) {
    method pageRender (line 3740) | pageRender(
    method transformProps (line 3773) | transformProps(e = {}, { $$context: r }) {
    method collectSpecialProps (line 3833) | collectSpecialProps(e = {}, r) {
    method convertModelToComponent (line 3851) | convertModelToComponent(e, r) {
    method buildComponent (line 4080) | buildComponent(e, { $$context: r = {} }) {
    method render (line 4100) | render(e, r = {}, ...n) {
    method clear (line 4108) | clear() {
  class yv (line 4332) | class yv {
    method constructor (line 4333) | constructor() {
    method get (line 4336) | get(e) {
    method add (line 4339) | add(e, r) {
    method remove (line 4342) | remove(e) {
    method destroy (line 4345) | destroy() {
  class Qo (line 4349) | class Qo extends O.default.Component {
    method constructor (line 4350) | constructor(r) {
    method getPageModel (line 4370) | getPageModel() {
    method componentDidMount (line 4373) | componentDidMount() {
    method componentWillUnmount (line 4377) | componentWillUnmount() {
    method render (line 4380) | render() {
  class bv (line 4408) | class bv extends O.default.Component {
    method constructor (line 4409) | constructor(r) {
    method getDerivedStateFromError (line 4416) | static getDerivedStateFromError(r) {
    method componentDidCatch (line 4419) | componentDidCatch(r, n) {
    method render (line 4423) | render() {
  class Yo (line 4469) | class Yo {
    method constructor (line 4470) | constructor() {
    method get (line 4473) | get(e) {
    method add (line 4476) | add(e, r) {
    method remove (line 4480) | remove(e, r) {
    method destroy (line 4487) | destroy() {
  class _v (line 4522) | class _v extends O.default.Component {
    method constructor (line 4523) | constructor(r) {
    method componentDidMount (line 4569) | componentDidMount() {
    method getPageModel (line 4573) | getPageModel() {
    method rerender (line 4577) | rerender(r) {
    method getInstancesById (line 4581) | getInstancesById(r, n) {
    method getInstanceByDom (line 4585) | getInstanceByDom(r) {
    method getDomsById (line 4591) | getDomsById(r, n) {
    method getDomRectById (line 4608) | getDomRectById(r, n) {
    method render (line 4613) | render() {
  method getInstancesById (line 4660) | getInstancesById(e, r) {
  method getInstanceByDom (line 4664) | getInstanceByDom(e) {
  method getDomsById (line 4668) | getDomsById(e, r) {
  method getDomRectById (line 4672) | getDomRectById(e, r) {
  function s (line 4697) | function s(f, p) {
  function i (line 4720) | function i(f, p) {
  function c (line 4726) | function c(f, p) {
  function u (line 4729) | function u(f, p, h, y) {
  function l (line 4774) | function l(f, p, h) {
  function d (line 4794) | function d(f, p, h) {
  class Ov (line 4835) | class Ov {
    method constructor (line 4836) | constructor(e) {
    method load (line 4843) | load() {
    method onSuccess (line 4870) | onSuccess(e) {
    method onError (line 4873) | onError(e) {

FILE: packages/layout/src/components/DropAnchor/index.tsx
  type HighlightCanvasRefType (line 10) | type HighlightCanvasRefType = {
  type DropAnchorPropsType (line 14) | type DropAnchorPropsType<E = LayoutDragAndDropExtraDataType> = {
  function DropAnchor (line 26) | function DropAnchor(props: DropAnchorPropsType<LayoutDragAndDropExtraDat...
  function DropAnchorCanvasCore (line 219) | function DropAnchorCanvasCore(

FILE: packages/layout/src/components/DropAnchor/util.ts
  function judgeVertical (line 4) | function judgeVertical(styles: CSSStyleDeclaration, parentStyle: CSSStyl...
  function calculateDropPosInfo (line 18) | function calculateDropPosInfo(params: {

FILE: packages/layout/src/components/HighlightBox/index.tsx
  type HighlightCanvasRefType (line 6) | type HighlightCanvasRefType = {
  type HighlightBoxPropsType (line 10) | type HighlightBoxPropsType = {
  method update (line 133) | update() {
  type HighlightCanvasCoreProps (line 161) | type HighlightCanvasCoreProps = {
  method update (line 179) | update() {

FILE: packages/layout/src/core/dragAndDrop/common.ts
  type Pointer (line 1) | type Pointer = {

FILE: packages/layout/src/core/dragAndDrop/emitter.ts
  class DEmitter (line 3) | class DEmitter<T extends Record<string, unknown> = any> {
    method constructor (line 5) | constructor() {

FILE: packages/layout/src/core/dragAndDrop/index.ts
  type EmptyFunc (line 7) | type EmptyFunc = () => void;
  type DragAndDropEventType (line 9) | type DragAndDropEventType<E> = {
  class DragAndDrop (line 17) | class DragAndDrop<E = Record<string, any>> {
    method constructor (line 48) | constructor(options: {
    method preventDefaultEvent (line 135) | preventDefaultEvent() {
    method batchSensorEmit (line 141) | batchSensorEmit(eventName: keyof SensorEventType, eventObj: SensorEven...
    method registerSensor (line 148) | registerSensor(sensor: Sensor) {
    method cancelDrag (line 367) | cancelDrag() {
    method resetDrag (line 371) | resetDrag() {
    method clearSensors (line 375) | clearSensors() {
    method getTargetSensor (line 382) | getTargetSensor(options: { sensor: Sensor; event: MouseEvent }) {
    method findSensorByDom (line 424) | findSensorByDom(dom: Element) {

FILE: packages/layout/src/core/dragAndDrop/sensor.ts
  type SensorOffsetType (line 6) | type SensorOffsetType = {
  type SensorEventObjType (line 11) | type SensorEventObjType<T extends Record<string, any> = any> = {
  type SensorClickEventObjType (line 18) | type SensorClickEventObjType = Omit<SensorEventObjType, 'pointer'>;
  type SensorEventType (line 20) | type SensorEventType<E extends Record<string, any> = any> = {
  type SensorEventNameType (line 30) | type SensorEventNameType = keyof SensorEventType<any>;
  class Sensor (line 32) | class Sensor<E extends Record<string, any> = any> extends DEmitter<Senso...
    method constructor (line 57) | constructor(options: {
    method registerSyncOffsetEvent (line 81) | registerSyncOffsetEvent() {
    method registerEvent (line 99) | registerEvent() {
    method getPointer (line 233) | getPointer(e: { clientX: number; clientY: number }) {
    method updateOffset (line 240) | updateOffset(offset: SensorOffsetType) {
    method getOffset (line 244) | getOffset() {
    method setCanDrag (line 248) | setCanDrag(cb: typeof this.canDrag) {
    method setCanDrop (line 252) | setCanDrop(cb: typeof this.canDrop) {
    method destroy (line 256) | destroy() {

FILE: packages/layout/src/core/iframeContainer/index.tsx
  class IFrameContainer (line 6) | class IFrameContainer {
    method constructor (line 13) | constructor() {
    method createIframe (line 18) | createIframe() {
    method getHTMLTemplate (line 27) | getHTMLTemplate() {
    method load (line 59) | load(containerDom: HTMLDivElement) {
    method loadUrl (line 95) | loadUrl(url: string) {
    method ready (line 106) | ready(cb: () => void) {
    method onLoadFailed (line 117) | onLoadFailed(cb: (e: { msg: string }) => void) {
    method getWindow (line 127) | getWindow():
    method getDocument (line 139) | getDocument() {
    method injectJS (line 143) | injectJS(jsUrl: string) {
    method injectJsText (line 159) | injectJsText(jsText: string) {
    method injectStyleText (line 173) | injectStyleText(styleText: string) {
    method destroy (line 186) | destroy() {

FILE: packages/layout/src/index.tsx
  type LayoutDragEvent (line 29) | type LayoutDragEvent<T = LayoutDragAndDropExtraDataType> = DragAndDropEv...
  type LayoutMode (line 31) | enum LayoutMode {
  type LayoutPropsType (line 37) | type LayoutPropsType = Omit<DesignRenderProp, 'adapter' | 'ref'> & {
  type LayoutStateType (line 92) | type LayoutStateType = {
  constant SELECT_LOCK_STYLE (line 111) | const SELECT_LOCK_STYLE: React.CSSProperties = {
  class Layout (line 115) | class Layout extends React.Component<LayoutPropsType, LayoutStateType> {
    method constructor (line 134) | constructor(props: LayoutPropsType) {
    method componentDidMount (line 172) | componentDidMount(): void {
    method reload (line 184) | reload() {
    method setMode (line 188) | setMode(newMode: LayoutMode) {
    method init (line 196) | init() {
    method banSelectNode (line 250) | banSelectNode() {
    method recoverSelectNode (line 257) | recoverSelectNode() {
    method getPageModel (line 263) | getPageModel() {
    method readyOk (line 267) | private readyOk() {
    method registerSelectEvent (line 279) | registerSelectEvent() {
    method registerHoverEvent (line 327) | registerHoverEvent() {
    method registerEventLimit (line 379) | registerEventLimit() {
    method cancelDrag (line 427) | cancelDrag(_event?: LayoutDragEvent<LayoutDragAndDropExtraDataType>) {
    method registerDragAndDropEvent (line 435) | registerDragAndDropEvent() {
    method selectNode (line 731) | selectNode(nodeId: string) {
    method clearSelectNode (line 767) | clearSelectNode() {
    method componentWillUnmount (line 788) | componentWillUnmount(): void {
    method ready (line 794) | async ready(cb?: (layoutInstance: Layout) => void) {
    method render (line 841) | render() {

FILE: packages/layout/src/types/dragAndDrop.ts
  type DragAndDropEventObj (line 5) | type DragAndDropEventObj<T = Record<string, any>> = {
  type BaseDragAndDropEventType (line 15) | type BaseDragAndDropEventType<T = Record<string, any>> = {
  type LayoutDragAndDropExtraDataType (line 22) | type LayoutDragAndDropExtraDataType = DragAndDropEventExtraData;

FILE: packages/layout/src/utils/index.ts
  function addEventListenerReturnCancel (line 1) | function addEventListenerReturnCancel<K extends keyof HTMLElementEventMap>(

FILE: packages/material/build.config.ts
  constant GLOBAL_LIB_NAME (line 4) | const GLOBAL_LIB_NAME = 'ChamnCommonComponents';
  constant LIB_NAME (line 14) | const LIB_NAME = process.env.LIB_NAME;

FILE: packages/material/src/components/ReactGridLayout/GridItem.tsx
  type PosAndSizeInfoType (line 10) | type PosAndSizeInfoType = {
  type ResponsiveItemInfo (line 17) | type ResponsiveItemInfo = {
  type GridItemPropsType (line 22) | type GridItemPropsType = {
  type GridItemRefType (line 34) | type GridItemRefType = {

FILE: packages/material/src/components/ReactGridLayout/config.ts
  constant DEFAULT_RESPONSIVE_SIZE (line 9) | const DEFAULT_RESPONSIVE_SIZE = 'lg';

FILE: packages/material/src/components/ReactGridLayout/context.ts
  function getDefaultContextValue (line 6) | function getDefaultContextValue() {
  type GridContextType (line 16) | type GridContextType = {

FILE: packages/material/src/components/ReactGridLayout/edit/layoutWrap.tsx
  type ChangeLayoutEvent (line 7) | type ChangeLayoutEvent = {

FILE: packages/material/src/components/ReactGridLayout/index.tsx
  type ReactGridLayoutPropsType (line 17) | type ReactGridLayoutPropsType = {

FILE: packages/material/src/components/ReactGridLayout/item.meta.tsx
  constant GRID_ITEM_INSTANCE_MAP (line 11) | const GRID_ITEM_INSTANCE_MAP: any = {};

FILE: packages/material/src/components/ReactGridLayout/type.ts
  type GridItemInstance (line 1) | type GridItemInstance = {
  type ResponsivePoint (line 5) | type ResponsivePoint = {

FILE: packages/model/src/Material/index.ts
  class CMaterial (line 30) | class CMaterial {
    method constructor (line 33) | constructor(data: CMaterialType) {
    method value (line 38) | get value() {
    method rawValue (line 42) | get rawValue() {
    method componentName (line 46) | get componentName() {
    method snippets (line 50) | get snippets() {
    method getSnippetById (line 54) | getSnippetById(id: string) {
  type SnippetsCollection (line 79) | type SnippetsCollection = {
  class CMaterials (line 83) | class CMaterials {
    method constructor (line 89) | constructor(data: CMaterialType[]) {
    method addMaterials (line 95) | addMaterials(data: CMaterialType[]) {
    method replaceMaterials (line 114) | replaceMaterials(data: CMaterialType[]) {
    method removeMaterial (line 119) | removeMaterial(componentNames: string[]) {
    method findByComponentName (line 126) | findByComponentName(componentName: string) {
    method findSnippetById (line 131) | findSnippetById(id: string) {
    method getAllSnippets (line 141) | getAllSnippets() {
    method value (line 207) | get value() {
    method rawValue (line 211) | get rawValue() {

FILE: packages/model/src/Page/RootNode/Node/index.ts
  type CNodeModelDataType (line 25) | type CNodeModelDataType = Omit<CNodeDataType, 'children'> & {
  type OnNodeChangeType (line 95) | type OnNodeChangeType = (params: DataModelEventType['onNodeChange']) => ...
  type ParentType (line 96) | type ParentType = CNode | CRootNode | CSlot | null;
  class CNode (line 98) | class CNode {
    method constructor (line 108) | constructor(data: CNodeDataType, options?: { parent?: ParentType; mate...
    method registerListener (line 120) | registerListener() {
    method onChange (line 133) | onChange(cb: OnNodeChangeType) {
    method destroy (line 140) | destroy() {
    method id (line 144) | get id() {
    method value (line 148) | get value(): CNodeModelDataType {
    method clone (line 152) | clone(id?: string) {
    method updateWithPlainObj (line 162) | updateWithPlainObj(val?: Partial<CNodeModelDataType | CNodeDataType>) {
    method updateValue (line 171) | updateValue(val?: Partial<CNodeModelDataType | CNodeDataType>) {
    method contains (line 181) | contains(nodeId: string) {
    method props (line 186) | get props() {
    method material (line 190) | get material() {
    method getPlainProps (line 195) | getPlainProps() {
    method getMaterialConfig (line 205) | getMaterialConfig(key: 'isContainer') {
    method isContainer (line 213) | isContainer() {
    method export (line 217) | export(mode: ExportType): CNodeDataType {

FILE: packages/model/src/Page/RootNode/Node/prop.ts
  type CSpecialPropDataType (line 18) | type CSpecialPropDataType = CJSSlotPropDataType | FunctionPropType | JSE...
  type CPropModelDataType (line 20) | type CPropModelDataType = NormalPropType | CSpecialPropDataType | CSpeci...
  type ParentType (line 63) | type ParentType = CProp | null;
  class CProp (line 76) | class CProp {
    method constructor (line 84) | constructor(
    method isIncludeSlot (line 97) | isIncludeSlot() {
    method isIncludeExpression (line 101) | isIncludeExpression() {
    method value (line 105) | get value() {
    method updateValue (line 109) | updateValue(val?: CPropDataType | CPropModelDataType) {
    method material (line 127) | get material() {
    method export (line 139) | export(mode: ExportType): any {

FILE: packages/model/src/Page/RootNode/Node/slot.ts
  type CJSSlotPropDataType (line 11) | type CJSSlotPropDataType = Omit<RenderPropType, 'value'> & {
  type ParentType (line 14) | type ParentType = CSlot | null;
  class CSlot (line 48) | class CSlot {
    method constructor (line 56) | constructor(data: RenderPropType, options?: { parent: CProp | null; ma...
    method value (line 65) | get value() {
    method export (line 69) | export(mode: ExportType) {

FILE: packages/model/src/Page/RootNode/index.ts
  type CRootNodeModelDataType (line 13) | type CRootNodeModelDataType = Omit<CRootNodeDataType, 'children'> & {
  type OnNodeChangeType (line 90) | type OnNodeChangeType = (params: DataModelEventType['onNodeChange']) => ...
  class CRootNode (line 92) | class CRootNode {
    method constructor (line 102) | constructor(data: any, { parent, materials }: { parent: CPage | null; ...
    method registerListener (line 112) | registerListener() {
    method onChange (line 125) | onChange(cb: OnNodeChangeType) {
    method id (line 132) | get id() {
    method value (line 136) | get value() {
    method props (line 140) | get props() {
    method material (line 144) | get material() {
    method updateWithPlainObj (line 149) | updateWithPlainObj(val?: Partial<CRootNodeModelDataType | CRootNodeDat...
    method updateValue (line 158) | updateValue(val?: Partial<CRootNodeModelDataType | CRootNodeDataType>) {
    method contains (line 168) | contains(nodeId: string) {
    method getMaterialConfig (line 178) | getMaterialConfig(key: 'isContainer') {
    method isContainer (line 186) | isContainer() {
    method export (line 190) | export(mode: ExportType = ExportTypeEnum.SAVE): CRootNodeDataType {
    method getPlainProps (line 214) | getPlainProps() {
    method destroy (line 223) | destroy() {
    method clone (line 227) | clone(id?: string) {

FILE: packages/model/src/Page/index.ts
  type CPpageDataModelType (line 37) | type CPpageDataModelType = Omit<CPageDataType, 'componentsTree'> & {
  type PosObj (line 41) | type PosObj = {
  type InsertNodePosType (line 47) | type InsertNodePosType = 'BEFORE' | 'AFTER' | 'CHILD_START' | 'CHILD_END...
  class CPage (line 49) | class CPage {
    method constructor (line 58) | constructor(
    method updatePage (line 72) | updatePage(data: CPageDataType) {
    method reloadPage (line 83) | reloadPage(data?: CPageDataType) {
    method value (line 96) | get value() {
    method getNode (line 101) | getNode(id?: string) {
    method addNode (line 107) | addNode(newNode: CNode, targetNode: CNode | CRootNode, pos: InsertNode...
    method createNode (line 191) | createNode(nodeData: CNodeDataType) {
    method addNodeById (line 200) | addNodeById(newNode: CNode, targetNodeId: string, pos: InsertNodePosTy...
    method copyNode (line 210) | copyNode(node: CNode) {
    method copyNodeById (line 221) | copyNodeById(nodeId: string) {
    method moveNode (line 230) | moveNode(from: CNode, to: CNode, pos: InsertNodePosType) {
    method moveNodeById (line 242) | moveNodeById(fromId: string, toId: string, pos: InsertNodePosType) {
    method deleteNode (line 254) | deleteNode(node: CNode | CRootNode) {
    method deleteNodeById (line 282) | deleteNodeById(nodeId: string) {
    method export (line 289) | export(mode: ExportType = ExportTypeEnum.SAVE): CPageDataType {
    method getRootNode (line 339) | getRootNode() {

FILE: packages/model/src/const/eventList.ts
  constant DEFAULT_EVENT_LIST (line 3) | const DEFAULT_EVENT_LIST: CMaterialEventType[] = [

FILE: packages/model/src/const/schema.ts
  type CNodePropsTypeEnum (line 1) | enum CNodePropsTypeEnum {
  type ExportTypeEnum (line 9) | enum ExportTypeEnum {
  type ExportType (line 14) | type ExportType = ExportTypeEnum | `${ExportTypeEnum}`;
  type SlotRenderType (line 16) | enum SlotRenderType {

FILE: packages/model/src/types/base.ts
  type SetterTypeEnum (line 6) | enum SetterTypeEnum {
  type SetterBasicType (line 23) | type SetterBasicType = string;
  type ComplexSetterTypeEnum (line 25) | enum ComplexSetterTypeEnum {
  type AssetItem (line 30) | type AssetItem = {
  type AssetPackage (line 36) | type AssetPackage = {
  type LibMetaType (line 44) | type LibMetaType = {
  type MaterialAssetPackage (line 71) | type MaterialAssetPackage = {
  type CSSValue (line 78) | type CSSValue = {
  type CSSType (line 90) | type CSSType = {
  type DropPosType (line 107) | type DropPosType = {
  type DesignerInjectProps (line 112) | type DesignerInjectProps = {
  constant DEV_CONFIG_KEY (line 117) | const DEV_CONFIG_KEY = '__DEV_CONFIG__';

FILE: packages/model/src/types/material.ts
  type BaseDataType (line 32) | enum BaseDataType {
  type AdvanceDataType (line 40) | enum AdvanceDataType {
  type SpecialDataType (line 46) | enum SpecialDataType {
  type MTitle (line 52) | type MTitle =
  type ShapeDataType (line 83) | type ShapeDataType = {
  type EnumDataType (line 105) | type EnumDataType = {
  type ArrayDataType (line 115) | type ArrayDataType = {
  type UnionDataType (line 127) | type UnionDataType = {
  type PropsValueType (line 139) | type PropsValueType =
  type SetterType (line 157) | type SetterType<T extends SetterBasicType = ''> =
  type BasicSetterObjType (line 166) | type BasicSetterObjType<T extends SetterBasicType = ''> = {
  type ShapeSetterObjType (line 179) | type ShapeSetterObjType<T extends SetterBasicType = ''> = {
  type ArraySetterObjType (line 198) | type ArraySetterObjType<T extends SetterBasicType = ''> = {
  type SetterObjType (line 221) | type SetterObjType<T extends SetterBasicType = ''> =
  type MaterialPropType (line 238) | type MaterialPropType<CustomSetter extends SetterBasicType = ''> = {
  type ActionType (line 260) | type ActionType = string | ((node: CNode | CRootNode, context: any) => R...
  type PropsUIType (line 264) | enum PropsUIType {
  type SpecialMaterialPropType (line 269) | type SpecialMaterialPropType<CustomSetter extends SetterBasicType = ''> =
  type CMaterialPropsType (line 281) | type CMaterialPropsType<CustomSetter extends SetterBasicType = ''> = (
  type TFunctionOrEventParameter (line 296) | type TFunctionOrEventParameter = {
  type CMaterialEventType (line 305) | type CMaterialEventType =
  type SnippetsType (line 337) | type SnippetsType = {
  type SnippetsStanderType (line 354) | type SnippetsStanderType = Omit<SnippetsType, 'schema'> & {
  type ContainerConfig (line 373) | type ContainerConfig = {
  type DragAndDropEventExtraData (line 380) | type DragAndDropEventExtraData = {
  type CustomViewRenderProps (line 389) | type CustomViewRenderProps = {
  type AdvanceCustomFuncParam (line 397) | type AdvanceCustomFuncParam = {
  type EventName (line 412) | type EventName = keyof HTMLElementEventMap;
  type AdvanceCustom (line 414) | type AdvanceCustom = {
  type CMaterialType (line 551) | type CMaterialType<PropsSetter extends string = ''> = {
  type CMaterialStanderType (line 598) | type CMaterialStanderType = Omit<CMaterialType, 'snippets'> & {

FILE: packages/model/src/types/node.ts
  type NormalPropType (line 23) | type NormalPropType = string | boolean | number | Record<string, any> | ...
  type IValue (line 26) | type IValue = `${SlotRenderType}`;
  type RenderPropType (line 28) | type RenderPropType = {
  type JSExpressionPropType (line 35) | type JSExpressionPropType = {
  type TBaseFunction (line 40) | type TBaseFunction = {
  type FunctionPropType (line 51) | type FunctionPropType = {
  type LogicType (line 55) | enum LogicType {
  type TDynamicValue (line 65) | type TDynamicValue = string | number | JSExpressionPropType | FunctionPr...
  type TBaseActionNode (line 67) | type TBaseActionNode = {
  type TActionFlowDevConfig (line 72) | type TActionFlowDevConfig = {
  type TLogicJumpLinkItem (line 83) | type TLogicJumpLinkItem = {
  type TLogicRunCodeItem (line 90) | type TLogicRunCodeItem = {
  type TLogicCallNodeMethodItem (line 97) | type TLogicCallNodeMethodItem = {
  type TLogicRequestAPIItem (line 107) | type TLogicRequestAPIItem = {
  type AssignValueType (line 127) | enum AssignValueType {
  type TAssignValueType (line 133) | type TAssignValueType = `${AssignValueType}`;
  type TargetValueNameObject (line 135) | type TargetValueNameObject = {
  type TLogicAssignValueItem (line 140) | type TLogicAssignValueItem = {
  type TLogicItemHandlerFlow (line 149) | type TLogicItemHandlerFlow = (
  type TActionLogicItem (line 157) | type TActionLogicItem = {
  type SpecialProp (line 164) | type SpecialProp = RenderPropType | JSExpressionPropType | FunctionPropT...
  type CPropDataType (line 166) | type CPropDataType = NormalPropType | SpecialProp | CPropObjDataType;
  type CPropObjDataType (line 168) | type CPropObjDataType = {
  type ClassNameType (line 222) | type ClassNameType = {
  type ENGEnvEnum (line 228) | enum ENGEnvEnum {
  type CNodeDataType (line 232) | type CNodeDataType<ExtraT = any> = {

FILE: packages/model/src/types/page.ts
  type ComponentMetaType (line 9) | type ComponentMetaType = {
  type RenderType (line 13) | enum RenderType {
  type LifecycleItem (line 18) | type LifecycleItem = {
  type CPageDataType (line 23) | type CPageDataType<T = any> = {
  type CPageNode (line 67) | type CPageNode = CNode | CPage | CRootNode;

FILE: packages/model/src/types/rootNode.ts
  type InnerComponentNameEnum (line 5) | enum InnerComponentNameEnum {
  type CRootNodeDataType (line 9) | type CRootNodeDataType<ExtraT = any> = CNodeDataType<ExtraT> & {

FILE: packages/model/src/util/dataCheck.ts
  type BaseDataCheckParameters (line 3) | type BaseDataCheckParameters = {
  type DataCheckFunc (line 8) | type DataCheckFunc = (parameters: BaseDataCheckParameters) => {

FILE: packages/model/src/util/index.ts
  function findNode (line 106) | function findNode(nodeTree: CRootNode | CNode, iterator: (item: CNode | ...
  function getNode (line 155) | function getNode(nodeTree: CRootNode | CNode, id: string) {
  function findContainerNode (line 159) | function findContainerNode(
  type CBFunction (line 169) | type CBFunction = (node: CNode | CRootNode) => any;

FILE: packages/model/src/util/modelEmitter.ts
  type DataModelEventType (line 9) | type DataModelEventType = {
  type DataModelEmitterType (line 34) | type DataModelEmitterType = Emitter<DataModelEventType>;

FILE: packages/render/src/_dev_/page/DesignerRenderDemo.tsx
  type AppProp (line 9) | type AppProp = {
  function DesignerRenderDemo (line 13) | function DesignerRenderDemo() {

FILE: packages/render/src/_dev_/page/RenderDemo.tsx
  type AppProp (line 8) | type AppProp = {
  function RenderDemo (line 12) | function RenderDemo() {

FILE: packages/render/src/const/index.ts
  constant DYNAMIC_COMPONENT_TYPE (line 2) | const DYNAMIC_COMPONENT_TYPE = 'DYNAMIC';
  constant ON_DID_RENDER (line 8) | const ON_DID_RENDER = 'ON_DID_RENDER';
  constant ON_WILL_DESTROY (line 11) | const ON_WILL_DESTROY = 'ON_WILL_DESTROY';
  constant INNER_EVENT_LIST (line 13) | const INNER_EVENT_LIST = [ON_DID_RENDER, ON_WILL_DESTROY];

FILE: packages/render/src/core/ReactAdapter/convertModelToComponent.ts
  type PropsType (line 30) | type PropsType = {
  class DynamicComponent (line 53) | class DynamicComponent extends React.Component<PropsType> implements IDy...
    method constructor (line 78) | constructor(props: PropsType) {
    method setStateIfChanged (line 138) | setStateIfChanged(updater: any) {
    method connectStore (line 157) | connectStore() {
    method componentDidMount (line 291) | componentDidMount(): void {
    method componentWillUnmount (line 327) | componentWillUnmount(): void {
    method transformMethods (line 346) | transformMethods(option: { context: ContextType }) {
    method processRootContext (line 370) | processRootContext(context: ContextType) {
    method processNodeClassName (line 381) | processNodeClassName(className: string, context: ContextType) {
    method processNodeStyle (line 409) | processNodeStyle(newContext: ContextType) {
    method processNodeChild (line 425) | processNodeChild(children: any, newContext: ContextType) {
    method processNodeConditionAndConfigHook (line 447) | processNodeConditionAndConfigHook(newProps: any, newChildren: any, new...
    method processNodeEventListener (line 482) | processNodeEventListener(newContext: ContextType) {
    method createCurrentNodeCtx (line 501) | createCurrentNodeCtx() {
    method injectEngEnv (line 554) | injectEngEnv() {
    method renderCore (line 570) | renderCore(): React.ReactNode {
    method renderLoop (line 625) | renderLoop(): React.ReactNode {
    method render (line 739) | render(): React.ReactNode {

FILE: packages/render/src/core/ReactAdapter/index.ts
  class DefineReactAdapter (line 10) | class DefineReactAdapter {
    method getComponent (line 34) | getComponent(currentNode: CNode | CRootNode) {
    method pageRender (line 51) | pageRender(
    method clear (line 115) | clear() {

FILE: packages/render/src/core/ReactAdapter/transformProps/actionNode.ts
  type CommonOption (line 18) | type CommonOption = {
  function buildJumpLink (line 144) | function buildJumpLink(item: TLogicJumpLinkItem, option: CommonOption) {

FILE: packages/render/src/core/ReactAdapter/type.ts
  type TRenderBaseOption (line 7) | type TRenderBaseOption = {
  type IDynamicComponent (line 21) | interface IDynamicComponent {

FILE: packages/render/src/core/ReactErrorBoundary.ts
  type Props (line 4) | type Props = {
  class ErrorBoundary (line 10) | class ErrorBoundary extends React.Component<
    method constructor (line 17) | constructor(props: Props) {
    method getDerivedStateFromError (line 22) | static getDerivedStateFromError(error: any) {
    method componentDidCatch (line 27) | componentDidCatch(_: Error, errorInfo: React.ErrorInfo): void {
    method render (line 38) | render() {

FILE: packages/render/src/core/adapter.ts
  type ContextType (line 7) | type ContextType = {
  type RuntimeRenderHelper (line 54) | type RuntimeRenderHelper = {
  type ComponentsType (line 64) | type ComponentsType = Record<any, any>;
  type AdapterOptionType (line 66) | type AdapterOptionType = {
  type AdapterType (line 99) | interface AdapterType {
  type CustomAdvanceAdapterMethodListType (line 153) | type CustomAdvanceAdapterMethodListType = typeof CustomAdvanceAdapter[nu...
  type AdapterMethodListType (line 156) | type AdapterMethodListType = typeof AdapterMethodList[number];

FILE: packages/render/src/core/designReactRender.ts
  class ComponentInstanceManager (line 17) | class ComponentInstanceManager {
    method get (line 20) | get(id: string) {
    method add (line 23) | add(id: string, handle: any) {
    method remove (line 32) | remove(id: string, val?: any) {
    method destroy (line 42) | destroy() {
  type DesignRenderProp (line 47) | type DesignRenderProp = Omit<RenderPropsType, 'ref' | 'render'> & {
  class DesignRender (line 101) | class DesignRender extends React.Component<DesignRenderProp> {
    method constructor (line 107) | constructor(props: DesignRenderProp) {
    method updateComponents (line 116) | updateComponents(newComponents: Record<string, string> = {}) {
    method componentDidMount (line 122) | componentDidMount(): void {
    method getPageModel (line 128) | getPageModel() {
    class DesignWrap (line 144) | class DesignWrap extends React.Component<any> {
      method componentDidMount (line 154) | componentDidMount(): void {
      method getTargetComponentRef (line 158) | getTargetComponentRef() {
      method componentWillUnmount (line 162) | componentWillUnmount(): void {
      method getDom (line 167) | getDom() {
      method render (line 184) | render() {
    method rerender (line 249) | rerender(newPage?: CPageDataType | CPage) {
    method getInstancesById (line 253) | getInstancesById(id: string, uniqueId?: string): RenderInstance[] {
    method getInstanceByDom (line 263) | getInstanceByDom(el: HTMLHtmlElement | Element): RenderInstance | null {
    method getDomsById (line 271) | getDomsById(id: string, selector?: string) {
    method getDomRectById (line 292) | getDomRectById(id: string, selector?: string) {
    method render (line 303) | render() {
  type UseDesignRenderReturnType (line 360) | type UseDesignRenderReturnType = Pick<UseRenderReturnType, 'rerender'> & {
  type SimpleFiberNodeType (line 382) | type SimpleFiberNodeType = {
  method getInstancesById (line 407) | getInstancesById(id, uid) {
  method getInstanceByDom (line 410) | getInstanceByDom(el) {
  method getDomsById (line 413) | getDomsById(id: string, selector?: string) {
  method getDomRectById (line 416) | getDomRectById(id: string, selector?: string) {

FILE: packages/render/src/core/refManager.ts
  class RefManager (line 1) | class RefManager {
    method get (line 4) | get(id: string) {
    method add (line 7) | add(id: string, handle: any) {
    method remove (line 11) | remove(id: string) {
    method destroy (line 15) | destroy() {

FILE: packages/render/src/core/render.ts
  type RenderPropsType (line 9) | type RenderPropsType = {
  class Render (line 19) | class Render extends React.Component<
    method constructor (line 28) | constructor(props: RenderPropsType) {
    method getPageModel (line 36) | getPageModel() {
    method componentDidMount (line 40) | componentDidMount(): void {
    method componentWillUnmount (line 52) | componentWillUnmount(): void {
    method render (line 62) | render() {
  type UseRenderReturnType (line 120) | type UseRenderReturnType = {

FILE: packages/render/src/core/storeManager.ts
  class StoreManager (line 3) | class StoreManager {
    method addStore (line 6) | addStore(storeName: string, storeState: StateCreator<any>) {
    method setStore (line 14) | setStore(storeName: string, store: StoreApi<any>) {
    method removeStore (line 18) | removeStore(storeName: string) {
    method getStore (line 22) | getStore(storeName: string) {
    method getState (line 26) | getState(nodeId: string) {
    method getStateObj (line 30) | getStateObj(nodeId: string) {
    method setState (line 39) | setState(nodeId: string, newState: Record<any, any>) {
    method connect (line 43) | connect<T extends Record<any, any> = any>(name: string, cb: (newState:...
    method getStateSnapshot (line 56) | getStateSnapshot() {
    method destroy (line 64) | destroy() {

FILE: packages/render/src/core/type.ts
  type RenderInstance (line 3) | type RenderInstance = React.ReactInstance & {

FILE: packages/render/src/core/variableManager.ts
  class VariableManager (line 2) | class VariableManager {
    method get (line 5) | get(id: string) {
    method add (line 8) | add(id: string, handle: any) {
    method remove (line 12) | remove(id: string) {
    method destroy (line 16) | destroy() {
    method getStateSnapshot (line 20) | getStateSnapshot() {

FILE: packages/render/src/util/assetsLoader.ts
  type Asset (line 4) | type Asset = AssetPackage;
  class AssetLoader (line 6) | class AssetLoader {
    method constructor (line 12) | constructor(
    method load (line 25) | load(options?: {
    method onSuccess (line 72) | onSuccess(cb: () => void) {
    method onError (line 77) | onError(cb: () => void) {

FILE: packages/render/src/util/index.ts
  function shouldConstruct (line 21) | function shouldConstruct(Component: any) {
  function canAcceptsRef (line 26) | function canAcceptsRef(Comp: any) {
  function compWrapper (line 37) | function compWrapper(Comp: any) {

FILE: packages/render/src/util/reactHelp.ts
  function getInstance (line 5) | function getInstance(key: any) {
  type PublicInstance (line 10) | type PublicInstance = Element | Text;
  function getPublicInstance (line 13) | function getPublicInstance(instance: PublicInstance): PublicInstance {
  function findHostInstance (line 18) | function findHostInstance(component: Component): PublicInstance | null {
  function findDOMNode (line 36) | function findDOMNode(componentOrElement: Component<any, any>): null | El...
Condensed preview — 502 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,990K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 743,
    "preview": "# These are supported funding model platforms\n\ngithub: [hlerenow]\npatreon: # Replace with a single Patreon username\nopen"
  },
  {
    "path": ".github/workflows/static.yml",
    "chars": 1439,
    "preview": "name: Deploy static content to Pages\n\non:\n  push:\n    branches: [master]\n  workflow_dispatch:\n\nconcurrency:\n  group: 'pa"
  },
  {
    "path": ".gitignore",
    "chars": 702,
    "preview": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# compiled output\ndist\ntmp\n/out-tsc\n\n# depend"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 69,
    "preview": "#!/usr/bin/env sh\n. \"$(dirname -- \"$0\")/_/husky.sh\"\n\nnpx lint-staged\n"
  },
  {
    "path": ".npmrc",
    "chars": 36,
    "preview": "registry=https://registry.npmjs.org/"
  },
  {
    "path": ".prettierignore",
    "chars": 107,
    "preview": "# Ignore artifacts:\nbuild\ncoverage\n\n# Ignore all HTML files:\n*.html\n\n**/.git\n**/.svn\n**/.hg\n**/node_modules"
  },
  {
    "path": ".prettierrc.json",
    "chars": 105,
    "preview": "{\n  \"trailingComma\": \"es5\",\n  \"tabWidth\": 2,\n  \"semi\": true,\n  \"singleQuote\": true,\n  \"printWidth\": 120\n}"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 150,
    "preview": "{\n  \"cSpell.words\": [\n    \"chamn\",\n    \"crossorigin\",\n    \"CSSUI\",\n    \"JSEXPRESSION\",\n    \"lowcode\",\n    \"monac\",\n    \""
  },
  {
    "path": "BUILD_FIX_SUMMARY.md",
    "chars": 4410,
    "preview": "# 构建配置修复总结\n\n## 问题描述\n\n1. **CommonJS 引入问题**:错误提示 `Missing \"./src/types/material\" specifier in \"@chamn/model\" package`\n2. *"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 57186,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "DEV_README.md",
    "chars": 101,
    "preview": "# chameleon\n\n## Dev steps\n\n```shell\ncd ./\npnpm i\npnpm run build\ncd package/engine\npnpm run start\n```\n"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 1135,
    "preview": "# Chameleon\n\n> Chameleon is ever-changing\n\nA web visual programming engine, help to build a web page with 5 minutes. eve"
  },
  {
    "path": "changelog.config.cjs",
    "chars": 1910,
    "preview": "module.exports = {\n  disableEmoji: false,\n  // format: '{type}{scope}: {emoji}{subject}',\n  list: ['test', 'feat', 'fix'"
  },
  {
    "path": "design/chameleon.drawio",
    "chars": 55957,
    "preview": "<mxfile host=\"Electron\" modified=\"2023-05-09T14:29:55.352Z\" agent=\"5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/5"
  },
  {
    "path": "eslint.config.js",
    "chars": 1111,
    "preview": "import js from '@eslint/js';\nimport globals from 'globals';\nimport reactHooks from 'eslint-plugin-react-hooks';\nimport r"
  },
  {
    "path": "lerna.json",
    "chars": 1661,
    "preview": "{\n  \"$schema\": \"node_modules/@lerna-lite/cli/schemas/lerna-schema.json\",\n  \"packages\": [\n    \"packages/*\"\n  ],\n  \"useWor"
  },
  {
    "path": "package.json",
    "chars": 2091,
    "preview": "{\n  \"name\": \"chameleon\",\n  \"private\": true,\n  \"workspaces\": [\n    \"packages/*\"\n  ],\n  \"type\": \"module\",\n  \"scripts\": {\n "
  },
  {
    "path": "packages/build-script/.eslintignore",
    "chars": 32,
    "preview": "scripts\nbin/*\nlib\nexample\njest.*"
  },
  {
    "path": "packages/build-script/CHANGELOG.md",
    "chars": 18169,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/build-script/README.md",
    "chars": 7637,
    "preview": "# @chamn/build-script\n\n基于 Vite 的构建工具,用于构建库(Library)和应用(Application)项目。支持多种输出格式、TypeScript 类型定义生成、开发服务器等功能。\n\n## 特性\n\n- 🚀 基"
  },
  {
    "path": "packages/build-script/bin/run.js",
    "chars": 127,
    "preview": "#!/usr/bin/env node\n\nasync function start() {\n  const bScript = await import('../lib/index.mjs');\n  bScript.run();\n}\n\nst"
  },
  {
    "path": "packages/build-script/client.d.ts",
    "chars": 38,
    "preview": "/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "packages/build-script/jest.config.js",
    "chars": 6591,
    "preview": "/*\n * For a detailed explanation regarding each configuration property, visit:\n * https://jestjs.io/docs/configuration\n "
  },
  {
    "path": "packages/build-script/package.json",
    "chars": 1932,
    "preview": "{\n  \"name\": \"@chamn/build-script\",\n  \"version\": \"0.10.4\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"descriptio"
  },
  {
    "path": "packages/build-script/scripts/build.cjs",
    "chars": 2119,
    "preview": "/* eslint-disable no-undef */\n/* eslint-disable @typescript-eslint/no-require-imports */\n\nconst _ = require('lodash');\nc"
  },
  {
    "path": "packages/build-script/src/config/base.ts",
    "chars": 1816,
    "preview": "import path from 'path';\nimport fs from 'fs-extra';\nimport { loadConfigFromFile, type LibraryOptions, type UserConfig } "
  },
  {
    "path": "packages/build-script/src/config/vite.build.ts",
    "chars": 1443,
    "preview": "import { CLI_ARGS_OBJ, PROJECT_ROOT, getCustomConfig } from './base';\nimport { getCommonConfig } from './vite.common';\ni"
  },
  {
    "path": "packages/build-script/src/config/vite.common.ts",
    "chars": 3676,
    "preview": "import path from 'path';\nimport react from '@vitejs/plugin-react';\nimport { CLI_ARGS_OBJ, PROJECT_ROOT, getCustomConfig "
  },
  {
    "path": "packages/build-script/src/config/vite.dev.ts",
    "chars": 587,
    "preview": "import { getCommonConfig } from './vite.common';\nimport { getCustomConfig } from './base';\nimport { mergeConfig } from '"
  },
  {
    "path": "packages/build-script/src/core/devServer.ts",
    "chars": 228,
    "preview": "import { createServer } from 'vite';\nimport { devConfig } from '../config/vite.dev';\n\nexport const doDev = async () => {"
  },
  {
    "path": "packages/build-script/src/core/doBuild.ts",
    "chars": 1395,
    "preview": "import { build } from 'vite';\nimport { buildConfig } from '../config/vite.build';\nimport { getCustomConfig, CLI_ARGS_OBJ"
  },
  {
    "path": "packages/build-script/src/index.ts",
    "chars": 422,
    "preview": "#!/usr/bin/env node\nimport { CLI_ARGS_OBJ } from './config/base';\nimport { doDev } from './core/devServer';\nimport { doB"
  },
  {
    "path": "packages/build-script/test/demo.test.ts",
    "chars": 111,
    "preview": "import { a } from '../src';\ndescribe('cli', () => {\n  it('init', () => {\n    expect(a()).toEqual(1);\n  });\n});\n"
  },
  {
    "path": "packages/build-script/tsconfig.json",
    "chars": 708,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"ESNext\" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', "
  },
  {
    "path": "packages/demo-page/.gitignore",
    "chars": 253,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
  },
  {
    "path": "packages/demo-page/.prettierrc.json",
    "chars": 84,
    "preview": "{\n  \"trailingComma\": \"es5\",\n  \"tabWidth\": 2,\n  \"semi\": true,\n  \"singleQuote\": true\n}"
  },
  {
    "path": "packages/demo-page/CHANGELOG.md",
    "chars": 22246,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/demo-page/__tests__/demo.test.ts",
    "chars": 63,
    "preview": "test('adds 1 + 2 to equal 3', () => {\n  expect(3).toBe(3);\n});\n"
  },
  {
    "path": "packages/demo-page/build.config.js",
    "chars": 301,
    "preview": "/* eslint-disable no-undef */\n// 开发模式默认读取 index.html 作为开发模式入口\n// entry 作为打包库入口\nexport default {\n  entry: './src/index.ts"
  },
  {
    "path": "packages/demo-page/index.html",
    "chars": 366,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/"
  },
  {
    "path": "packages/demo-page/jest.config.js",
    "chars": 6525,
    "preview": "/* eslint-disable no-undef */\n/*\n * For a detailed explanation regarding each configuration property, visit:\n * https://"
  },
  {
    "path": "packages/demo-page/package.json",
    "chars": 1111,
    "preview": "{\n  \"name\": \"@chamn/demo-page\",\n  \"private\": false,\n  \"type\": \"module\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"publishConfig\": "
  },
  {
    "path": "packages/demo-page/src/index.ts",
    "chars": 292,
    "preview": "export { BasePage } from './pages/basePage';\nexport { BasePageBClient } from './pages/basePage-b-client';\nexport { Sampl"
  },
  {
    "path": "packages/demo-page/src/material/advanceCustomButton.ts",
    "chars": 4513,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const AdvanceButtonMeta: CMaterialType = {\n  title: 'Button',\n  co"
  },
  {
    "path": "packages/demo-page/src/material/button.tsx",
    "chars": 5250,
    "preview": "import { CMaterialType } from '@chamn/model';\nimport React from 'react';\n\nexport const ButtonMeta: CMaterialType<\n  | 'C"
  },
  {
    "path": "packages/demo-page/src/material/col.ts",
    "chars": 734,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const ColMeta: CMaterialType = {\n  title: 'Col',\n  componentName: "
  },
  {
    "path": "packages/demo-page/src/material/index.ts",
    "chars": 549,
    "preview": "import { CMaterialType } from '@chamn/model';\nimport { ButtonMeta } from './button';\n// import { ColMeta } from './col';"
  },
  {
    "path": "packages/demo-page/src/material/input.ts",
    "chars": 725,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const InputMeta: CMaterialType = {\n  title: 'Input',\n  componentNa"
  },
  {
    "path": "packages/demo-page/src/material/layout/index.tsx",
    "chars": 2573,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const LayoutMeta: CMaterialType = {\n  title: 'CLayout',\n  componen"
  },
  {
    "path": "packages/demo-page/src/material/modal.ts",
    "chars": 771,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const ModalMeta: CMaterialType = {\n  title: 'Modal',\n  componentNa"
  },
  {
    "path": "packages/demo-page/src/material/native.ts",
    "chars": 1040,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const DivMeta: CMaterialType = {\n  title: 'Div',\n  componentName: "
  },
  {
    "path": "packages/demo-page/src/material/row.ts",
    "chars": 734,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const RowMeta: CMaterialType = {\n  title: 'Row',\n  componentName: "
  },
  {
    "path": "packages/demo-page/src/material/table.ts",
    "chars": 6968,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const TableMeta: CMaterialType = {\n  title: 'Table',\n  componentNa"
  },
  {
    "path": "packages/demo-page/src/pages/basePage-b-client.ts",
    "chars": 8041,
    "preview": "import { CPageDataType } from '@chamn/model';\nconst data = [\n  {\n    key: '1',\n    name: 'John Brown',\n    age: 32,\n    "
  },
  {
    "path": "packages/demo-page/src/pages/basePage.ts",
    "chars": 28085,
    "preview": "import { CPageDataType } from '@chamn/model';\n\nexport const BasePage: CPageDataType = {\n  version: '1.0.0',\n  name: 'Bas"
  },
  {
    "path": "packages/demo-page/src/pages/emptyPage.ts",
    "chars": 295,
    "preview": "import { CPageDataType, InnerComponentNameEnum } from '@chamn/model';\n\nexport const EmptyPage: CPageDataType = {\n  versi"
  },
  {
    "path": "packages/demo-page/src/pages/layout.ts",
    "chars": 8983,
    "preview": "import { CPageDataType } from '@chamn/model';\n\nexport const LayoutPage: CPageDataType = {\n  version: '1.0.0',\n  name: 'L"
  },
  {
    "path": "packages/demo-page/src/pages/simplePage.ts",
    "chars": 9279,
    "preview": "import {\n  CNodePropsTypeEnum,\n  CPageDataType,\n  LogicType,\n  TLogicAssignValueItem,\n  TLogicJumpLinkItem,\n} from '@cha"
  },
  {
    "path": "packages/demo-page/src/vite-env.d.ts",
    "chars": 38,
    "preview": "/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "packages/demo-page/tsconfig.json",
    "chars": 534,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"useDefineForClassFields\": true,\n    \"lib\": [\n      \"DOM\",\n      \"D"
  },
  {
    "path": "packages/docs-app/.gitignore",
    "chars": 229,
    "preview": "# build output\ndist/\n# generated types\n.astro/\n\n# dependencies\nnode_modules/\n\n# logs\nnpm-debug.log*\nyarn-debug.log*\nyarn"
  },
  {
    "path": "packages/docs-app/.vscode/extensions.json",
    "chars": 87,
    "preview": "{\n  \"recommendations\": [\"astro-build.astro-vscode\"],\n  \"unwantedRecommendations\": []\n}\n"
  },
  {
    "path": "packages/docs-app/.vscode/launch.json",
    "chars": 207,
    "preview": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"command\": \"./node_modules/.bin/astro dev\",\n      \"name\": \"Dev"
  },
  {
    "path": "packages/docs-app/CHANGELOG.md",
    "chars": 3910,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/docs-app/README.md",
    "chars": 2538,
    "preview": "# Starlight Starter Kit: Basics\n\n[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https"
  },
  {
    "path": "packages/docs-app/astro.config.mjs",
    "chars": 986,
    "preview": "/* eslint-disable no-undef */\nimport { defineConfig, passthroughImageService } from 'astro/config';\nimport starlight fro"
  },
  {
    "path": "packages/docs-app/package.json",
    "chars": 793,
    "preview": "{\n  \"name\": \"docs-app\",\n  \"type\": \"module\",\n  \"private\": true,\n  \"version\": \"0.10.4\",\n  \"scripts\": {\n    \"dev\": \"astro d"
  },
  {
    "path": "packages/docs-app/src/codeSnippets/ButtonMeta.tsx",
    "chars": 3359,
    "preview": "import { CMaterialType } from '@chamn/model';\n\nexport const ButtonMeta: CMaterialType = {\n  title: 'Button',\n  component"
  },
  {
    "path": "packages/docs-app/src/codeSnippets/Editor.tsx",
    "chars": 4825,
    "preview": "import { BasePage, Material } from '@chamn/demo-page';\nimport { Button, message, Modal } from 'antd';\nimport React, { us"
  },
  {
    "path": "packages/docs-app/src/codeSnippets/GridItemMeta.tsx",
    "chars": 8151,
    "preview": "/* eslint-disable react-hooks/rules-of-hooks */\nimport { CMaterialType } from '@chamn/model';\nimport { snippetsGridItem "
  },
  {
    "path": "packages/docs-app/src/codeSnippets/GridLayoutComponent.tsx",
    "chars": 3479,
    "preview": "import React, { useCallback, useRef } from 'react';\nimport { ColumnOptions, GridStack } from 'gridstack';\nimport 'gridst"
  },
  {
    "path": "packages/docs-app/src/codeSnippets/GridLayoutMeta.tsx",
    "chars": 3724,
    "preview": "import { CMaterialType } from '@chamn/model';\nimport { snippets } from './snippets';\nimport { LayoutWrap } from './edit/"
  },
  {
    "path": "packages/docs-app/src/codeSnippets/GridLayoutWrap.tsx",
    "chars": 2045,
    "preview": "import { useRef } from 'react';\nimport { GridLayout, ReactGridLayoutPropsType } from '..';\nimport { GridStack, GridStack"
  },
  {
    "path": "packages/docs-app/src/codeSnippets/index.css",
    "chars": 262,
    "preview": "html,\nbody,\n#root {\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n\nbody {\n  margin: 0;\n  padding: 0;\n}\n\n.logo {\n "
  },
  {
    "path": "packages/docs-app/src/codeSnippets/render.tsx",
    "chars": 1974,
    "preview": "import { useEffect, useState } from 'react';\nimport {\n  ReactAdapter,\n  Render,\n  useRender,\n  AssetLoader,\n  collectVar"
  },
  {
    "path": "packages/docs-app/src/components/Link.tsx",
    "chars": 207,
    "preview": "import React from 'react';\n\nexport const Link = (props: { children: any; url: string }) => {\n  const baseUrl = import.me"
  },
  {
    "path": "packages/docs-app/src/content/config.ts",
    "chars": 191,
    "preview": "import { defineCollection } from 'astro:content';\nimport { docsSchema } from '@astrojs/starlight/schema';\n\nexport const "
  },
  {
    "path": "packages/docs-app/src/content/docs/guides/addCustomComponent.mdx",
    "chars": 4585,
    "preview": "---\ntitle: 添加自定义组件物料\nsidebar:\n  order: 3\n---\n\nimport { Code } from '@astrojs/starlight/components';\n\n引擎内置只提供了基础的 HTML Ta"
  },
  {
    "path": "packages/docs-app/src/content/docs/guides/index.mdx",
    "chars": 4204,
    "preview": "---\ntitle: 快速开始\ndescripttopn:\nsidebar:\n  order: 1\n---\n\nimport { Tabs, TabItem, FileTree, CardGrid, LinkCard, Steps, Code"
  },
  {
    "path": "packages/docs-app/src/content/docs/guides/useRender.mdx",
    "chars": 7996,
    "preview": "---\ntitle: 接入渲染器\ndescription: 了解如何将页面 schema 协议渲染为可运行的 React 页面\nsidebar:\n  order: 2\n---\n\nimport { Tabs, TabItem, Code } "
  },
  {
    "path": "packages/docs-app/src/content/docs/index.mdx",
    "chars": 1170,
    "preview": "---\ntitle: Welcome to Chameleon Engine\ndescription: Get started building your docs site with Starlight.\ntemplate: splash"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Engine/_category_.json",
    "chars": 148,
    "preview": "{\n  \"position\": 1,\n  \"label\": \"Engine\",\n  \"collapsible\": true,\n  \"collapsed\": false,\n  \"customProps\": {\n    \"description"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Engine/api.mdx",
    "chars": 28654,
    "preview": "---\ntitle: Engine API\nsidebar:\n  order: 2\n---\n\nimport { Tabs, TabItem } from '@astrojs/starlight/components';\n\n# Engine "
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Engine/introduction.mdx",
    "chars": 5459,
    "preview": "---\ntitle: Engine 介绍\nsidebar:\n  order: 1\n---\n\nimport { Tabs, TabItem } from '@astrojs/starlight/components';\n\n# Engine 介"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Engine/usage.mdx",
    "chars": 21573,
    "preview": "---\ntitle: Engine 使用示例\nsidebar:\n  order: 3\n---\n\n# Engine 使用示例\n\n## 基础使用\n\n最简单的使用方式,使用默认插件列表:\n\n```tsx\nimport { Engine, plug"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Material/_category_.json",
    "chars": 182,
    "preview": "{\n  \"position\": 2,\n  \"label\": \"组件物料\",\n  \"collapsible\": true,\n  \"collapsed\": false,\n  \"customProps\": {\n    \"description\":"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Material/advanceDevelopMaterial.mdx",
    "chars": 5520,
    "preview": "---\ntitle: 高级物料开发\nsidebar:\n  order: 3\n---\n\nimport { Code } from '@astrojs/starlight/components';\nimport GridLayoutMeta f"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Material/developMaterial.mdx",
    "chars": 405,
    "preview": "---\ntitle: 物料开发\nsidebar:\n  order: 2\n---\n\n物料开发使用该[【模版工程】](https://github.com/ByteCrazy/chameleon-material-template.git)即可"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Material/introduction.mdx",
    "chars": 777,
    "preview": "---\ntitle: 什么是组件物料?\nsidebar:\n  order: 1\n---\n\nimport { Code } from '@astrojs/starlight/components';\nimport MetarialImg fr"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/PageSchema/built-in-setter.mdx",
    "chars": 5135,
    "preview": "---\nsidebar:\n  order: 3\ntitle: Setter\n---\n\n## 什么是 setter ?\n\nSetter 是一个输入控件,用于在组件物料协议中描述组件 props 的输入方式,同时提供对应的输入控件让用户可以准确"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/PageSchema/material.mdx",
    "chars": 261,
    "preview": "---\nsidebar:\n  order: 2\ntitle: 物料协议\n---\n\n描述请参考 [【 Material 模型定义】](https://github.com/hlerenow/chameleon/blob/master/pack"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/PageSchema/page.mdx",
    "chars": 3101,
    "preview": "---\nsidebar:\n  order: 1\ntitle: 页面协议\n---\n\n# PageSchema\n\n| Key            | Value Type        | Description               "
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Plugin/built-in-plugins-usage.mdx",
    "chars": 12979,
    "preview": "---\ntitle: 内置插件使用指南\nsidebar:\n  order: 4\n---\n\n# 内置插件使用指南\n\nChameleon Engine 提供了一套完整的内置插件,覆盖了低代码编辑器的核心功能。本文档详细介绍每个插件的功能、配置和"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Plugin/custom-plugin-guide.mdx",
    "chars": 26864,
    "preview": "---\nsidebar:\n  order: 5\ntitle: 替换内置插件实战指南\n---\n\n# 替换内置插件实战指南\n\n本指南将通过实际案例,教你如何从零开发自定义插件、替换内置插件,以及实现高度定制的引擎。\n\n## CPlugin 类型"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Plugin/custom-setter.mdx",
    "chars": 1705,
    "preview": "---\nsidebar:\n  order: 2\ntitle: 自定义 setter\n---\n\n### Setter 定义\n\n```tsx\nimport { ConfigProvider, Switch } from 'antd';\nimpo"
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Plugin/innder-plugin-list.mdx",
    "chars": 6284,
    "preview": "---\nsidebar:\n  order: 3\ntitle: 内置插件列表\n---\n\n# 内置插件列表\n\nChameleon Engine 提供了一套完整的内置插件系统。以下是所有可用的内置插件:\n\n## 核心插件\n\n### 默认插件列表 "
  },
  {
    "path": "packages/docs-app/src/content/docs/reference/Plugin/plugin-develop.mdx",
    "chars": 19041,
    "preview": "---\nsidebar:\n  order: 1\ntitle: 插件开发指南\n---\n\n# 插件开发指南\n\nChameleon Engine 采用插件化架构,所有功能都可以通过插件扩展。本文档将详细介绍如何开发自定义插件。\n\n## 插件架构总"
  },
  {
    "path": "packages/docs-app/src/env.d.ts",
    "chars": 148,
    "preview": "/* eslint-disable @typescript-eslint/triple-slash-reference */\n/// <reference path=\"../.astro/types.d.ts\" />\n/// <refere"
  },
  {
    "path": "packages/docs-app/tsconfig.json",
    "chars": 109,
    "preview": "{\n  \"extends\": \"astro/tsconfigs/strict\",\n  \"include\": [\".astro/types.d.ts\", \"**/*\"],\n  \"exclude\": [\"dist\"]\n}\n"
  },
  {
    "path": "packages/engine/.gitignore",
    "chars": 280,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
  },
  {
    "path": "packages/engine/.npmignore",
    "chars": 267,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\nexample\n\nnode_modules\n"
  },
  {
    "path": "packages/engine/.storybook/main.js",
    "chars": 991,
    "preview": "import { join, dirname } from 'path';\nimport { mergeConfig } from 'vite';\nimport commonConfig from '../build.common.conf"
  },
  {
    "path": "packages/engine/.storybook/preview.js",
    "chars": 232,
    "preview": "/** @type { import('@storybook/react').Preview } */\nconst preview = {\n  parameters: {\n    controls: {\n      matchers: {\n"
  },
  {
    "path": "packages/engine/CHANGELOG.md",
    "chars": 45607,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/engine/LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "packages/engine/README.md",
    "chars": 1088,
    "preview": "# chameleon\n\n> Chameleon is ever-changing\n\nA web visual programming engine, help to build a web page with 5 minutes. eve"
  },
  {
    "path": "packages/engine/__tests__/demo.test.ts",
    "chars": 63,
    "preview": "test('adds 1 + 2 to equal 3', () => {\n  expect(3).toBe(3);\n});\n"
  },
  {
    "path": "packages/engine/build.common.config.ts",
    "chars": 333,
    "preview": "/* eslint-disable @typescript-eslint/no-var-requires */\nimport path from 'path';\n\nexport default {\n  resolve: {\n    alia"
  },
  {
    "path": "packages/engine/build.config.ts",
    "chars": 1100,
    "preview": "import { viteStaticCopy } from 'vite-plugin-static-copy';\nimport pkg from './package.json';\nimport commonConfig from './"
  },
  {
    "path": "packages/engine/index.html",
    "chars": 363,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\" />\n  <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite."
  },
  {
    "path": "packages/engine/jest.config.js",
    "chars": 6525,
    "preview": "/* eslint-disable no-undef */\n/*\n * For a detailed explanation regarding each configuration property, visit:\n * https://"
  },
  {
    "path": "packages/engine/package.json",
    "chars": 3065,
    "preview": "{\n  \"name\": \"@chamn/engine\",\n  \"version\": \"0.10.4\",\n  \"type\": \"module\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"main\": \"dist/ind"
  },
  {
    "path": "packages/engine/src/Engine.module.scss",
    "chars": 155,
    "preview": ".engineContainer {\n  color: $fontColor;\n  font-size: $fontSize;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  * {"
  },
  {
    "path": "packages/engine/src/_dev_/index.css",
    "chars": 262,
    "preview": "html,\nbody,\n#root {\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n\nbody {\n  margin: 0;\n  padding: 0;\n}\n\n.logo {\n "
  },
  {
    "path": "packages/engine/src/_dev_/index.tsx",
    "chars": 252,
    "preview": "import ReactDOMClient from 'react-dom/client';\nimport { RouterProvider } from 'react-router-dom';\nimport { router } from"
  },
  {
    "path": "packages/engine/src/_dev_/lib/index.tsx",
    "chars": 1937,
    "preview": "import { Resizable } from 're-resizable';\nimport { useEffect, useRef, useState } from 'react';\nimport ContentEditable fr"
  },
  {
    "path": "packages/engine/src/_dev_/page/Editor/index.tsx",
    "chars": 11816,
    "preview": "import { BasePage } from '@chamn/demo-page';\nimport { Button, message, Modal, Select } from 'antd';\nimport React, { useC"
  },
  {
    "path": "packages/engine/src/_dev_/page/Preview/index.tsx",
    "chars": 1982,
    "preview": "import { useEffect, useState } from 'react';\nimport {\n  ReactAdapter,\n  Render,\n  useRender,\n  AssetLoader,\n  collectVar"
  },
  {
    "path": "packages/engine/src/_dev_/page/componentEditor/index.tsx",
    "chars": 3330,
    "preview": "import { BasePage } from '@chamn/demo-page';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nim"
  },
  {
    "path": "packages/engine/src/_dev_/render.html",
    "chars": 688,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\" />\n  <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite."
  },
  {
    "path": "packages/engine/src/_dev_/render.tsx",
    "chars": 172,
    "preview": "import renderAsURL from '@chamn/render/dist/index.umd.js?url';\nimport loadjs from 'loadjs';\n\nloadjs([renderAsURL], () =>"
  },
  {
    "path": "packages/engine/src/_dev_/router.tsx",
    "chars": 413,
    "preview": "import { createHashRouter } from 'react-router-dom';\nimport { App } from './page/Editor';\nimport { Preview } from './pag"
  },
  {
    "path": "packages/engine/src/assets/styles/mixin.scss",
    "chars": 309,
    "preview": "@use 'sass:color';\n$baseColor: #1677ff;\n/* base style variables */\n$borderColor: rgb(233 233 233);\n$baseBackgroundColor:"
  },
  {
    "path": "packages/engine/src/build-script-env.d.ts",
    "chars": 211,
    "preview": "/// <reference types=\"@chamn/build-script/client\" />\n\n/** 包版本号 */\ndeclare const __PACKAGE_VERSION__: string;\n/** 构建版本号 *"
  },
  {
    "path": "packages/engine/src/component/CSSCodeEditor/helper.ts",
    "chars": 946,
    "preview": "import * as csstree from 'css-tree';\n\nexport function parseCssToObject(css: string): Record<string, Record<string, strin"
  },
  {
    "path": "packages/engine/src/component/CSSCodeEditor/index.tsx",
    "chars": 2290,
    "preview": "import { forwardRef, useImperativeHandle, useRef } from 'react';\nimport { MonacoEditor, MonacoEditorInstance } from '../"
  },
  {
    "path": "packages/engine/src/component/CSSCodeEditor/style.module.scss",
    "chars": 209,
    "preview": ".cssCodeEditor {\n  :global {\n    .monaco-editor .suggest-widget {\n      width: 300px !important;\n      left: 0 !importan"
  },
  {
    "path": "packages/engine/src/component/CSSEditor/index.tsx",
    "chars": 7302,
    "preview": "import { waitReactUpdate } from '@/utils';\nimport { formatCSSTextProperty, StyleArr, styleList2Text } from '@/utils/css'"
  },
  {
    "path": "packages/engine/src/component/CSSEditor/style.module.scss",
    "chars": 419,
    "preview": ".stateTag {\n  position: relative;\n  .stateTagClose {\n    position: absolute;\n    right: -10px;\n    top: -10px;\n    backg"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesEditor/cssProperties.ts",
    "chars": 26968,
    "preview": "const CSSSourceInfo = {\n  cssColors: {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    a"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesEditor/index.tsx",
    "chars": 3544,
    "preview": "import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { CSSPropertyList } from '."
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesEditor/signleProperty.tsx",
    "chars": 7251,
    "preview": "import { MinusOutlined, PlusOutlined } from '@ant-design/icons';\nimport { AutoComplete, Button } from 'antd';\nimport { I"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesEditor/style.module.scss",
    "chars": 1099,
    "preview": ".cssFieldBox {\n  display: flex;\n  align-items: center;\n  color: $textColor !important;\n  :global {\n    .ant-select-selec"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesEditor/util.ts",
    "chars": 608,
    "preview": "export const getTextWidth = async (text: string, fontSize = 14) => {\n  return new Promise<string>((resolve) => {\n    con"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesVariableBindEditor/SingleProperty.tsx",
    "chars": 6913,
    "preview": "import { AutoComplete, Button, ConfigProvider } from 'antd';\nimport { MinusOutlined, PlusOutlined } from '@ant-design/ic"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesVariableBindEditor/cssProperties.ts",
    "chars": 24699,
    "preview": "const CSSSourceInfo = {\n  cssColors: {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    a"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesVariableBindEditor/index.tsx",
    "chars": 3600,
    "preview": "import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { ConfigProvider, message }"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesVariableBindEditor/style.module.scss",
    "chars": 852,
    "preview": ".cssFieldBox {\n  display: flex;\n  color: $textColor !important;\n  :global {\n    .ant-select-selector input {\n      color"
  },
  {
    "path": "packages/engine/src/component/CSSPropertiesVariableBindEditor/util.ts",
    "chars": 608,
    "preview": "export const getTextWidth = async (text: string, fontSize = 14) => {\n  return new Promise<string>((resolve) => {\n    con"
  },
  {
    "path": "packages/engine/src/component/CSSSizeInput/index.tsx",
    "chars": 9504,
    "preview": "/* eslint-disable react-refresh/only-export-components */\nimport { ConfigProvider, InputProps, Select } from 'antd';\nimp"
  },
  {
    "path": "packages/engine/src/component/CSSSizeInput/style.module.scss",
    "chars": 478,
    "preview": ".cssSizeInput {\n  display: inline-block;\n  .unitSelect {\n    :global {\n      .ant-select-focused .ant-select-selector {\n"
  },
  {
    "path": "packages/engine/src/component/ClassNameEditor/index.tsx",
    "chars": 2689,
    "preview": "import { forwardRef, useImperativeHandle, useRef } from 'react';\nimport { ConfigProvider } from 'antd';\nimport { CustomS"
  },
  {
    "path": "packages/engine/src/component/ClassNameEditor/style.module.scss",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "packages/engine/src/component/CustomColorPicker/index.tsx",
    "chars": 922,
    "preview": "import { ColorPicker, ColorPickerProps, GetProp } from 'antd';\nimport { forwardRef, useImperativeHandle, useState } from"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/CFiledWithSwitchSetter/index.tsx",
    "chars": 3547,
    "preview": "import { useContext, useMemo, useState } from 'react';\nimport { SetterObjType, SetterType } from '@chamn/model';\nimport "
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/CFiledWithSwitchSetter/style.module.scss",
    "chars": 162,
    "preview": ".fieldBox {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.switchBtn {\n  color: $fontColor;\n  fo"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Form/Field/index.tsx",
    "chars": 4548,
    "preview": "import React, { isValidElement, ReactNode, useEffect, useState } from 'react';\nimport styles from './style.module.scss';"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Form/Field/style.module.scss",
    "chars": 836,
    "preview": ".fieldBox {\n  display: flex;\n  flex-wrap: nowrap;\n  flex-shrink: 0;\n  flex-grow: 1;\n  min-width: 250px;\n  align-items: c"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Form/context.ts",
    "chars": 764,
    "preview": "import React from 'react';\nimport { CSetter } from '../Setters/type';\n\nexport type ContextState = Record<string, any>;\n\n"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Form/index.tsx",
    "chars": 2669,
    "preview": "import React from 'react';\nimport { ReactNode } from 'react';\nimport { CFormContext, CFormContextData, ContextState } fr"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/SetterSwitcher/core.tsx",
    "chars": 2401,
    "preview": "import React, { useContext, useEffect } from 'react';\nimport { SetterObjType } from '@chamn/model';\nimport InnerSetters "
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/SetterSwitcher/helper.tsx",
    "chars": 844,
    "preview": "/* eslint-disable react-refresh/only-export-components */\nimport styles from './style.module.scss';\n\nexport function Emp"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/SetterSwitcher/index.tsx",
    "chars": 7336,
    "preview": "import React, { useContext, useMemo, useState } from 'react';\nimport { SetterObjType, SetterTypeEnum } from '@chamn/mode"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/SetterSwitcher/style.module.scss",
    "chars": 218,
    "preview": ".switchBtn {\n  color: $fontColor;\n  font-size: 12px;\n  padding: 0 5px 0 10px;\n}\n\n.shapeFieldBox,\n.collapseHeader {\n  col"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/CreateNewNodePopup/index.tsx",
    "chars": 1751,
    "preview": "import { Popover } from 'antd';\nimport { useState } from 'react';\nimport { DEFAULT_NODE_LIST } from './initData';\nimport"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/CreateNewNodePopup/initData.ts",
    "chars": 2253,
    "preview": "import {\n  AssignValueType,\n  getRandomStr,\n  LogicType,\n  TLogicAssignValueItem,\n  TLogicCallNodeMethodItem,\n  TLogicJu"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/InputHandle/index.tsx",
    "chars": 268,
    "preview": "import { Handle, HandleProps, Position } from '@xyflow/react';\nimport { INPUT_HANDLE_ID } from '../../config';\n\nexport c"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/NodeCard/index.tsx",
    "chars": 3440,
    "preview": "import { Card, CardProps } from 'antd';\nimport { OUTPUT_HANDLE_ID, REACT_FLOW_DRAG_CLASS_NAME } from '../../config';\nimp"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/NodeCard/style.module.scss",
    "chars": 613,
    "preview": ".l {\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 100%;\n  width: 20px;\n  cursor: grab;\n}\n\n.r {\n  position: absol"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/OutputHandle/index.tsx",
    "chars": 274,
    "preview": "import { Handle, HandleProps, Position } from '@xyflow/react';\nimport { OUTPUT_HANDLE_ID } from '../../config';\n\nexport "
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/index.tsx",
    "chars": 1309,
    "preview": "import { Button } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { CPage } from '@chamn/model';\nimport {"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/modal.tsx",
    "chars": 2119,
    "preview": "import { Modal, TreeSelect } from 'antd';\nimport { CPage } from '@chamn/model';\nimport { useRef, useMemo } from 'react';"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeByTree/util.ts",
    "chars": 936,
    "preview": "import { TreeDataNode } from 'antd';\n\nexport const getParentKey = (key: React.Key, tree: TreeDataNode[]): React.Key => {"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeState/index.tsx",
    "chars": 1082,
    "preview": "import { CPage } from '@chamn/model';\nimport { SelectNodeByTree } from '../SelectNodeByTree';\nimport { Input, Space } fr"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/component/SelectNodeState/util.ts",
    "chars": 921,
    "preview": "import { TreeDataNode } from 'antd';\nimport { Key } from 'react';\n\nexport const getParentKey = (key: React.Key, tree: Tr"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/config.ts",
    "chars": 252,
    "preview": "export const REACT_FLOW_DRAG_CLASS_NAME = 'chamn-action-drag-handler';\n\nexport const INPUT_HANDLE_ID = 'INPUT_HANDLE_ID'"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/context.ts",
    "chars": 705,
    "preview": "import { createContext, useContext } from 'react';\nimport { CNode, CPage } from '@chamn/model';\nimport { CPluginCtx } fr"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/index.tsx",
    "chars": 6619,
    "preview": "import {\n  addEdge,\n  Background,\n  Controls,\n  MiniMap,\n  OnConnect,\n  ReactFlow,\n  ReactFlowProvider,\n  useEdgesState,"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/index.tsx",
    "chars": 5557,
    "preview": "import { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { AssignValueType, "
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/style.module.scss",
    "chars": 34,
    "preview": ".line {\n  padding-bottom: 10px;\n}\n"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/AssignValueNode/util.ts",
    "chars": 307,
    "preview": "export function isValidJSVariableName(name: string) {\n  // 1. 使用正则表达式验证变量名规则\n  const identifierRegex = /^[a-zA-Z_$][a-zA"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/index.tsx",
    "chars": 6284,
    "preview": "import { BUILD_IN_SETTER_MAP, CustomSchemaForm, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport {"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/style.module.scss",
    "chars": 34,
    "preview": ".line {\n  padding-bottom: 10px;\n}\n"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/CallNodeMethodNode/util.ts",
    "chars": 1622,
    "preview": "import { CMaterialPropsType, CPageNode, isNodeModel } from '@chamn/model';\nimport { CommonDynamicValueSetter } from '../"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/JumpLinkNode.tsx",
    "chars": 2130,
    "preview": "import { BUILD_IN_SETTER_MAP, CustomSchemaFormInstance } from '@/component/CustomSchemaForm';\nimport { isExpression, isF"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/helper.ts",
    "chars": 883,
    "preview": "import { SetterType } from '@chamn/model';\n\nexport const requestParamsSchemaSetterList: SetterType[] = [\n  {\n    compone"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/index.tsx",
    "chars": 9744,
    "preview": "import { DEV_CONFIG_KEY, TLogicRequestAPIItem } from '@chamn/model';\nimport { useReactFlow, NodeProps, Node } from '@xyf"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/style.module.scss",
    "chars": 34,
    "preview": ".line {\n  padding-bottom: 10px;\n}\n"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RequestAPINode/util.ts",
    "chars": 307,
    "preview": "export function isValidJSVariableName(name: string) {\n  // 1. 使用正则表达式验证变量名规则\n  const identifierRegex = /^[a-zA-Z_$][a-zA"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RunCodeNode/index.tsx",
    "chars": 1383,
    "preview": "import { DEV_CONFIG_KEY, TLogicRunCodeItem } from '@chamn/model';\nimport { NodeProps, Node } from '@xyflow/react';\n\nimpo"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RunCodeNode/style.module.scss",
    "chars": 34,
    "preview": ".line {\n  padding-bottom: 10px;\n}\n"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/RunCodeNode/util.ts",
    "chars": 307,
    "preview": "export function isValidJSVariableName(name: string) {\n  // 1. 使用正则表达式验证变量名规则\n  const identifierRegex = /^[a-zA-Z_$][a-zA"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/StartNode.tsx",
    "chars": 558,
    "preview": "import { NodeProps, Node } from '@xyflow/react';\nimport { NodeCard } from '../component/NodeCard';\n\nexport type CounterN"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/node/index.ts",
    "chars": 874,
    "preview": "import { LogicType } from '@chamn/model';\nimport { AssignValueNode } from './AssignValueNode';\nimport { StartNode } from"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ActionFlowSetter/util.ts",
    "chars": 7098,
    "preview": "import { Edge, Node, useReactFlow } from '@xyflow/react';\nimport Dagre from '@dagrejs/dagre';\nimport { getRandomStr, Set"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/AdvanceSetterList.ts",
    "chars": 240,
    "preview": "import { ActionFlowSetter } from './ActionFlowSetter';\nimport { CSetter } from './type';\n\n/** 需要单独导出避免循环以来,因为 ActionFlow"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/AntDColorSetter/index.tsx",
    "chars": 839,
    "preview": "import { ColorPicker, ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { DEFAULT_PR"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ArraySetter/ArrayItem.tsx",
    "chars": 1565,
    "preview": "import React, { useEffect, useRef } from 'react';\nimport { CForm } from '../../Form';\nimport { SetterSwitcher } from '.."
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ArraySetter/SortItemOrderModal.tsx",
    "chars": 4358,
    "preview": "import React, { useEffect, useRef, useState } from 'react';\nimport { CSS, Transform } from '@dnd-kit/utilities';\nimport "
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ArraySetter/index.tsx",
    "chars": 3265,
    "preview": "import { useEffect, useMemo, useState } from 'react';\nimport { Button, ConfigProvider } from 'antd';\nimport { CSetterPro"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ArraySetter/style.module.scss",
    "chars": 391,
    "preview": ".dragItem {\n  cursor: grab;\n  border: 1px solid $borderColor;\n  background-color: white;\n  padding: 10px;\n  text-align: "
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/BooleanSetter/index.tsx",
    "chars": 771,
    "preview": "import React from 'react';\nimport { ConfigProvider, Switch, SwitchProps } from 'antd';\nimport { CSetter, CSetterProps } "
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/CSSSizeSetter/index.tsx",
    "chars": 736,
    "preview": "import { ConfigProvider } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CSSSizeInput, CSSSizeIn"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/CSSValueSetter/index.tsx",
    "chars": 1991,
    "preview": "import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { AutoComplete, ConfigProvider } from 'antd'"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/CSSValueSetter/style.module.scss",
    "chars": 129,
    "preview": ".inputAuto {\n  border-bottom: 1px solid rgba(128, 128, 128, 0.23);\n}\n\n.active {\n  border-bottom: 1px solid rgb(128, 177,"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ColorSetter/index.tsx",
    "chars": 1532,
    "preview": "import { ConfigProvider, Input, Popover } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { SketchP"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/EmptyValueSetter/index.tsx",
    "chars": 2076,
    "preview": "import { ConfigProvider, Radio } from 'antd';\nimport { CSetter, CSetterProps } from '../type';\nimport { CheckboxGroupPro"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ExpressionSetter/index.tsx",
    "chars": 4485,
    "preview": "import React, { useRef, useState } from 'react';\nimport { Button, ConfigProvider, Modal } from 'antd';\nimport { CSetter,"
  },
  {
    "path": "packages/engine/src/component/CustomSchemaForm/components/Setters/ExpressionSetter/style.module.scss",
    "chars": 216,
    "preview": ".expressionCodeEditor {\n  :global {\n    .monaco-editor .suggest-widget {\n      width: 300px !important;\n      left: 0 !i"
  }
]

// ... and 302 more files (download for full content)

About this extraction

This page contains the full source code of the hlerenow/chameleon GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 502 files (1.7 MB), approximately 544.6k tokens, and a symbol index with 1146 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!