├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github ├── CONTRIBUTING.md ├── FUNDING.yml ├── GIT_COMMIT_SPECIFIC.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── config.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── check-pr-title.yml │ ├── ci.yml │ ├── commitlint.yml │ ├── package-size.yml │ └── pr-welcome.yml ├── .gitignore ├── .npmrc ├── .prettierrc.js ├── .travis.yml ├── .vscode ├── cspell.json └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── examples-vue ├── playground │ ├── .eslintrc │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── main.tsx │ │ └── widgets │ │ │ ├── ContentWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ └── index.tsx │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── vite.config.ts ├── react │ ├── .eslintrc │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── app.tsx │ │ ├── index.ts │ │ └── widgets │ │ │ ├── SchemaEditorWidget.tsx │ │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json └── vue │ ├── .eslintrc │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ ├── components │ │ ├── card.tsx │ │ ├── card.vue │ │ ├── field.vue │ │ ├── index.ts │ │ └── style.less │ ├── index.ts │ └── sources │ │ ├── card.ts │ │ ├── field.ts │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── examples ├── .eslintrc ├── basic │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── content.tsx │ │ ├── main.tsx │ │ └── sandbox.tsx │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── vite.config.ts ├── multi-workspace │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── content.tsx │ │ └── main.tsx │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── vite.config.ts ├── sandbox-multi-workspace │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── content.tsx │ │ ├── env │ │ │ ├── designable.ts │ │ │ ├── formily.ts │ │ │ └── index.ts │ │ ├── main.tsx │ │ └── sandbox.tsx │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── vite.config.ts │ └── vite.sandbox.ts └── sandbox │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ ├── content.tsx │ ├── env │ │ ├── designable.ts │ │ ├── formily.ts │ │ └── index.ts │ ├── main.tsx │ └── sandbox.tsx │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── vite.config.ts │ └── vite.sandbox.ts ├── formily ├── .eslintrc ├── antd │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── copy.ts │ ├── index.html │ ├── package.json │ ├── playground │ │ ├── main.tsx │ │ ├── service │ │ │ ├── index.ts │ │ │ └── schema.ts │ │ ├── style.less │ │ ├── tsconfig.json │ │ ├── vite.config.ts │ │ └── widgets │ │ │ ├── ActionsWidget.tsx │ │ │ ├── LogoWidget.tsx │ │ │ ├── MarkupSchemaWidget.tsx │ │ │ ├── PreviewWidget │ │ │ ├── components.tsx │ │ │ └── index.tsx │ │ │ ├── SchemaEditorWidget.tsx │ │ │ └── index.ts │ ├── src │ │ ├── common │ │ │ ├── Container │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── FormItemSwitcher │ │ │ │ └── index.tsx │ │ │ └── LoadTemplate │ │ │ │ └── index.tsx │ │ ├── components │ │ │ ├── ArrayBase │ │ │ │ └── index.ts │ │ │ ├── ArrayCards │ │ │ │ ├── index.ts │ │ │ │ ├── preview.tsx │ │ │ │ └── styles.less │ │ │ ├── ArrayTable │ │ │ │ ├── index.ts │ │ │ │ ├── preview.tsx │ │ │ │ └── styles.less │ │ │ ├── Card │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Cascader │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Checkbox │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── DatePicker │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Field │ │ │ │ ├── index.ts │ │ │ │ ├── preview.tsx │ │ │ │ └── shared.ts │ │ │ ├── Form │ │ │ │ ├── index.tsx │ │ │ │ ├── preview.tsx │ │ │ │ └── styles.less │ │ │ ├── FormCollapse │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── FormGrid │ │ │ │ ├── index.ts │ │ │ │ ├── preview.tsx │ │ │ │ └── styles.less │ │ │ ├── FormLayout │ │ │ │ ├── index.ts │ │ │ │ └── preview.ts │ │ │ ├── FormTab │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Input │ │ │ │ ├── index.ts │ │ │ │ └── preview.ts │ │ │ ├── NumberPicker │ │ │ │ ├── index.ts │ │ │ │ └── preview.ts │ │ │ ├── Object │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Password │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Radio │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Rate │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Select │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Slider │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Space │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Switch │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Text │ │ │ │ ├── index.ts │ │ │ │ ├── preview.tsx │ │ │ │ └── styles.less │ │ │ ├── TimePicker │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Transfer │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── TreeSelect │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ ├── Upload │ │ │ │ ├── index.ts │ │ │ │ └── preview.tsx │ │ │ └── index.ts │ │ ├── hooks │ │ │ ├── index.ts │ │ │ └── useDropTemplate.ts │ │ ├── index.ts │ │ ├── locales │ │ │ ├── ArrayBase.ts │ │ │ ├── ArrayCards.ts │ │ │ ├── ArrayTable.ts │ │ │ ├── Card.ts │ │ │ ├── Cascader.ts │ │ │ ├── Checkbox.ts │ │ │ ├── Component.ts │ │ │ ├── DatePicker.ts │ │ │ ├── Field.ts │ │ │ ├── Form.ts │ │ │ ├── FormCollapse.ts │ │ │ ├── FormGrid.ts │ │ │ ├── FormLayout.ts │ │ │ ├── FormTab.ts │ │ │ ├── Input.ts │ │ │ ├── NumberPicker.ts │ │ │ ├── Object.ts │ │ │ ├── Password.ts │ │ │ ├── Radio.ts │ │ │ ├── Rate.ts │ │ │ ├── Select.ts │ │ │ ├── Slider.ts │ │ │ ├── Space.ts │ │ │ ├── Switch.ts │ │ │ ├── Text.ts │ │ │ ├── TextArea.ts │ │ │ ├── TimePicker.ts │ │ │ ├── Transfer.ts │ │ │ ├── TreeSelect.ts │ │ │ ├── Upload.ts │ │ │ ├── Void.ts │ │ │ ├── all.ts │ │ │ └── index.ts │ │ ├── schemas │ │ │ ├── ArrayCards.ts │ │ │ ├── ArrayTable.ts │ │ │ ├── CSSStyle.ts │ │ │ ├── Card.ts │ │ │ ├── Cascader.ts │ │ │ ├── Checkbox.ts │ │ │ ├── DatePicker.ts │ │ │ ├── Form.ts │ │ │ ├── FormCollapse.ts │ │ │ ├── FormGrid.ts │ │ │ ├── FormItem.ts │ │ │ ├── FormLayout.ts │ │ │ ├── FormTab.ts │ │ │ ├── Input.ts │ │ │ ├── NumberPicker.ts │ │ │ ├── Password.ts │ │ │ ├── Radio.ts │ │ │ ├── Rate.ts │ │ │ ├── Select.ts │ │ │ ├── Slider.ts │ │ │ ├── Space.ts │ │ │ ├── Switch.ts │ │ │ ├── Text.ts │ │ │ ├── TimePicker.ts │ │ │ ├── Transfer.ts │ │ │ ├── TreeSelect.ts │ │ │ ├── Upload.ts │ │ │ ├── all.ts │ │ │ └── index.ts │ │ ├── shared.ts │ │ └── sources.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── setters │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── copy.ts │ ├── package.json │ ├── src │ │ ├── components │ │ │ ├── DataSourceSetter │ │ │ │ ├── DataSettingPanel.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── Title.tsx │ │ │ │ ├── TreePanel.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── shared.ts │ │ │ │ ├── styles.less │ │ │ │ └── types.ts │ │ │ ├── ReactionsSetter │ │ │ │ ├── FieldPropertySetter.tsx │ │ │ │ ├── PathSelector.tsx │ │ │ │ ├── declarations.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── properties.ts │ │ │ │ ├── styles.less │ │ │ │ └── types.ts │ │ │ ├── ValidatorSetter │ │ │ │ └── index.tsx │ │ │ └── index.ts │ │ ├── index.ts │ │ └── locales │ │ │ ├── en-US.ts │ │ │ ├── index.ts │ │ │ ├── ko-KR.ts │ │ │ └── zh-CN.ts │ ├── tsconfig.build.json │ └── tsconfig.json └── transformer │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── jest.config.js ├── lerna.json ├── package.json ├── packages ├── .eslintrc ├── core │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── drivers │ │ │ ├── DragDropDriver.ts │ │ │ ├── KeyboardDriver.ts │ │ │ ├── MouseClickDriver.ts │ │ │ ├── MouseMoveDriver.ts │ │ │ ├── ViewportResizeDriver.ts │ │ │ ├── ViewportScrollDriver.ts │ │ │ └── index.ts │ │ ├── effects │ │ │ ├── index.ts │ │ │ ├── useAutoScrollEffect.ts │ │ │ ├── useContentEditableEffect.ts │ │ │ ├── useCursorEffect.ts │ │ │ ├── useDragDropEffect.ts │ │ │ ├── useFreeSelectionEffect.ts │ │ │ ├── useKeyboardEffect.ts │ │ │ ├── useResizeEffect.ts │ │ │ ├── useSelectionEffect.ts │ │ │ ├── useTranslateEffect.ts │ │ │ ├── useViewportEffect.ts │ │ │ └── useWorkspaceEffect.ts │ │ ├── events │ │ │ ├── cursor │ │ │ │ ├── AbstractCursorEvent.ts │ │ │ │ ├── DragMoveEvent.ts │ │ │ │ ├── DragStartEvent.ts │ │ │ │ ├── DragStopEvent.ts │ │ │ │ ├── MouseClickEvent.ts │ │ │ │ ├── MouseMoveEvent.ts │ │ │ │ └── index.ts │ │ │ ├── history │ │ │ │ ├── AbstractHistoryEvent.ts │ │ │ │ ├── HistoryGotoEvent.ts │ │ │ │ ├── HistoryPushEvent.ts │ │ │ │ ├── HistoryRedoEvent.ts │ │ │ │ ├── HistoryUndoEvent.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── keyboard │ │ │ │ ├── AbstractKeyboardEvent.ts │ │ │ │ ├── KeyDownEvent.ts │ │ │ │ ├── KeyUpEvent.ts │ │ │ │ └── index.ts │ │ │ ├── mutation │ │ │ │ ├── AbstractMutationNodeEvent.ts │ │ │ │ ├── AppendNodeEvent.ts │ │ │ │ ├── CloneNodeEvent.ts │ │ │ │ ├── DragNodeEvent.ts │ │ │ │ ├── DropNodeEvent.ts │ │ │ │ ├── FromNodeEvent.ts │ │ │ │ ├── HoverNodeEvent.ts │ │ │ │ ├── InsertAfterEvent.ts │ │ │ │ ├── InsertBeforeEvent.ts │ │ │ │ ├── InsertChildrenEvent.ts │ │ │ │ ├── PrependNodeEvent.ts │ │ │ │ ├── RemoveNodeEvent.ts │ │ │ │ ├── SelectNodeEvent.ts │ │ │ │ ├── UnSelectNodeEvent.ts │ │ │ │ ├── UpdateChildrenEvent.ts │ │ │ │ ├── UpdateNodePropsEvent.ts │ │ │ │ ├── UserSelectNodeEvent.ts │ │ │ │ ├── WrapNodeEvent.ts │ │ │ │ └── index.ts │ │ │ ├── viewport │ │ │ │ ├── AbstractViewportEvent.ts │ │ │ │ ├── ViewportResizeEvent.ts │ │ │ │ ├── ViewportScrollEvent.ts │ │ │ │ └── index.ts │ │ │ └── workbench │ │ │ │ ├── AbstractWorkspaceEvent.ts │ │ │ │ ├── AddWorkspaceEvent.ts │ │ │ │ ├── RemoveWorkspaceEvent.ts │ │ │ │ ├── SwitchWorkspaceEvent.ts │ │ │ │ └── index.ts │ │ ├── exports.ts │ │ ├── externals.ts │ │ ├── index.ts │ │ ├── internals.ts │ │ ├── models │ │ │ ├── Cursor.ts │ │ │ ├── Engine.ts │ │ │ ├── History.ts │ │ │ ├── Hover.ts │ │ │ ├── Keyboard.ts │ │ │ ├── MoveHelper.ts │ │ │ ├── Operation.ts │ │ │ ├── Screen.ts │ │ │ ├── Selection.ts │ │ │ ├── Shortcut.ts │ │ │ ├── SnapLine.ts │ │ │ ├── SpaceBlock.ts │ │ │ ├── TransformHelper.ts │ │ │ ├── TreeNode.ts │ │ │ ├── Viewport.ts │ │ │ ├── Workbench.ts │ │ │ ├── Workspace.ts │ │ │ └── index.ts │ │ ├── presets.ts │ │ ├── registry.ts │ │ ├── shortcuts │ │ │ ├── CursorSwitch.ts │ │ │ ├── MultiSelection.ts │ │ │ ├── NodeMutation.ts │ │ │ ├── QuickSelection.ts │ │ │ ├── UndoRedo.ts │ │ │ └── index.ts │ │ └── types.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── react-sandbox │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── components │ │ │ ├── Sandbox.tsx │ │ │ └── index.ts │ │ ├── hooks │ │ │ ├── index.ts │ │ │ ├── useSandbox.ts │ │ │ └── useSandboxScope.ts │ │ ├── index.ts │ │ └── shared │ │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── react-settings-form │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── copy.ts │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── SchemaField.tsx │ │ ├── SettingsForm.tsx │ │ ├── components │ │ │ ├── BackgroundStyleSetter │ │ │ │ └── index.tsx │ │ │ ├── BorderRadiusStyleSetter │ │ │ │ └── index.tsx │ │ │ ├── BorderStyleSetter │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── BoxShadowStyleSetter │ │ │ │ └── index.tsx │ │ │ ├── BoxStyleSetter │ │ │ │ └── index.tsx │ │ │ ├── CollapseItem │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── ColorInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── CornerInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── DisplayStyleSetter │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── DrawerSetter │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── FlexStyleSetter │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── FoldItem │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── FontStyleSetter │ │ │ │ └── index.tsx │ │ │ ├── ImageInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── InputItems │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── MonacoInput │ │ │ │ ├── config.ts │ │ │ │ ├── format.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.less │ │ │ │ └── themes │ │ │ │ │ ├── chrome.ts │ │ │ │ │ └── monokai.ts │ │ │ ├── PolyInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── PositionInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── SizeInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── ValueInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ └── index.ts │ │ ├── effects │ │ │ ├── index.ts │ │ │ ├── useLocales.tsx │ │ │ └── useSnapshot.tsx │ │ ├── index.ts │ │ ├── locales │ │ │ ├── en-US.ts │ │ │ ├── index.ts │ │ │ ├── ko-KR.ts │ │ │ └── zh-CN.ts │ │ ├── registry.ts │ │ ├── shared │ │ │ ├── context.ts │ │ │ └── loadScript.ts │ │ ├── styles.less │ │ └── types.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── react │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── copy.ts │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── containers │ │ │ ├── Designer.tsx │ │ │ ├── Layout.tsx │ │ │ ├── Simulator.tsx │ │ │ ├── Viewport.tsx │ │ │ ├── Workbench.tsx │ │ │ ├── Workspace.tsx │ │ │ ├── index.ts │ │ │ └── styles.less │ │ ├── context.ts │ │ ├── hooks │ │ │ ├── index.ts │ │ │ ├── useComponents.ts │ │ │ ├── useCursor.ts │ │ │ ├── useDesigner.ts │ │ │ ├── useHistory.ts │ │ │ ├── useHover.ts │ │ │ ├── useLayout.ts │ │ │ ├── useMoveHelper.ts │ │ │ ├── useNodeIdProps.ts │ │ │ ├── useOperation.ts │ │ │ ├── useOutline.ts │ │ │ ├── usePosition.ts │ │ │ ├── usePrefix.ts │ │ │ ├── useRegistry.ts │ │ │ ├── useScreen.ts │ │ │ ├── useSelected.ts │ │ │ ├── useSelectedNode.ts │ │ │ ├── useSelection.ts │ │ │ ├── useTheme.ts │ │ │ ├── useTransformHelper.ts │ │ │ ├── useTree.ts │ │ │ ├── useTreeNode.ts │ │ │ ├── useValidNodeOffsetRect.ts │ │ │ ├── useViewport.ts │ │ │ ├── useWorkbench.ts │ │ │ └── useWorkspace.ts │ │ ├── icons │ │ │ ├── actions.tsx │ │ │ ├── add.tsx │ │ │ ├── animations.tsx │ │ │ ├── boolean.tsx │ │ │ ├── clone.tsx │ │ │ ├── close.tsx │ │ │ ├── code.tsx │ │ │ ├── command.tsx │ │ │ ├── component.tsx │ │ │ ├── container.tsx │ │ │ ├── corner.tsx │ │ │ ├── delete.tsx │ │ │ ├── design.tsx │ │ │ ├── display.tsx │ │ │ ├── dragmove.tsx │ │ │ ├── expand.tsx │ │ │ ├── expression.tsx │ │ │ ├── eyes.tsx │ │ │ ├── flex.tsx │ │ │ ├── flip.tsx │ │ │ ├── focus.tsx │ │ │ ├── font.tsx │ │ │ ├── formula.tsx │ │ │ ├── freemove.tsx │ │ │ ├── help.tsx │ │ │ ├── hidden.tsx │ │ │ ├── history.tsx │ │ │ ├── image.tsx │ │ │ ├── index.ts │ │ │ ├── json.tsx │ │ │ ├── logo.tsx │ │ │ ├── menu.tsx │ │ │ ├── mobile.tsx │ │ │ ├── move.tsx │ │ │ ├── number.tsx │ │ │ ├── outline.tsx │ │ │ ├── page.tsx │ │ │ ├── pc.tsx │ │ │ ├── play.tsx │ │ │ ├── position.tsx │ │ │ ├── pushpin.tsx │ │ │ ├── recover.tsx │ │ │ ├── redo.tsx │ │ │ ├── remove.tsx │ │ │ ├── responsive.tsx │ │ │ ├── return.tsx │ │ │ ├── selection.tsx │ │ │ ├── setting.tsx │ │ │ ├── shadow.tsx │ │ │ ├── shift.tsx │ │ │ ├── sources.tsx │ │ │ ├── text.tsx │ │ │ ├── undo.tsx │ │ │ └── upload.tsx │ │ ├── index.ts │ │ ├── locales │ │ │ ├── global.ts │ │ │ ├── icons.ts │ │ │ ├── index.ts │ │ │ ├── operations.ts │ │ │ └── panels.ts │ │ ├── panels │ │ │ ├── CompositePanel.tsx │ │ │ ├── SettingsPanel.tsx │ │ │ ├── StudioPanel.tsx │ │ │ ├── ToolbarPanel.tsx │ │ │ ├── ViewPanel.tsx │ │ │ ├── ViewportPanel.tsx │ │ │ ├── WorkspacePanel.tsx │ │ │ ├── index.ts │ │ │ └── styles.less │ │ ├── simulators │ │ │ ├── MobileSimulator │ │ │ │ ├── body.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── PCSimulator │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ ├── ResponsiveSimulator │ │ │ │ ├── handle.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.less │ │ │ └── index.tsx │ │ ├── theme.less │ │ ├── types.ts │ │ ├── variables.less │ │ └── widgets │ │ │ ├── AuxToolWidget │ │ │ ├── Copy.tsx │ │ │ ├── Cover.tsx │ │ │ ├── DashedBox.tsx │ │ │ ├── Delete.tsx │ │ │ ├── DragHandler.tsx │ │ │ ├── FreeSelection.tsx │ │ │ ├── Helpers.tsx │ │ │ ├── Insertion.tsx │ │ │ ├── ResizeHandler.tsx │ │ │ ├── Selection.tsx │ │ │ ├── Selector.tsx │ │ │ ├── SnapLine.tsx │ │ │ ├── SpaceBlock.tsx │ │ │ ├── TranslateHandler.tsx │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── ComponentTreeWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── DesignerToolsWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── DroppableWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── EmptyWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── GhostWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── HistoryWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── IconWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── NodeActionsWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── NodePathWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── NodeTitleWidget │ │ │ └── index.tsx │ │ │ ├── OutlineWidget │ │ │ ├── Insertion.tsx │ │ │ ├── OutlineNode.tsx │ │ │ ├── context.ts │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── ResourceListWidget │ │ │ └── index.tsx │ │ │ ├── ResourceWidget │ │ │ ├── index.tsx │ │ │ └── styles.less │ │ │ ├── TextWidget │ │ │ └── index.tsx │ │ │ ├── ViewToolsWidget │ │ │ └── index.tsx │ │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── shared │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── animation.ts │ │ ├── array.ts │ │ ├── clone.ts │ │ ├── compose.ts │ │ ├── coordinate.ts │ │ ├── element.ts │ │ ├── event.ts │ │ ├── globalThisPolyfill.ts │ │ ├── index.ts │ │ ├── instanceof.ts │ │ ├── keycode.ts │ │ ├── lru.ts │ │ ├── observer.ts │ │ ├── request-idle.ts │ │ ├── scroller.ts │ │ ├── subscribable.ts │ │ ├── types.ts │ │ └── uid.ts │ ├── tsconfig.build.json │ └── tsconfig.json └── vue │ ├── .npmignore │ ├── LICENSE.md │ ├── README.md │ ├── copy.ts │ ├── package.json │ ├── rollup.config.js │ ├── src │ ├── context.ts │ ├── hooks │ │ ├── index.ts │ │ ├── useComponents.ts │ │ ├── useDesigner.ts │ │ ├── usePrefix.ts │ │ └── useTreeNode.ts │ ├── index.ts │ ├── types.ts │ └── widgets │ │ ├── ComponentTreeWidget │ │ └── index.tsx │ │ └── index.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts ├── build-style │ ├── buildAllStyles.ts │ ├── buildStyle.ts │ ├── copy.ts │ ├── helper.ts │ └── index.ts ├── global.ts ├── jest.base.js ├── release │ ├── git.ts │ └── index.ts ├── rollup.base.js └── validate-commit-msg.js ├── tsconfig.build.json ├── tsconfig.jest.json └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | indent_style = space 11 | indent_size = 2 12 | 13 | [*.gradle] 14 | indent_size = 4 -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | dist 4 | build 5 | coverage 6 | expected 7 | website 8 | gh-pages 9 | weex 10 | build.ts 11 | docs 12 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | ko_fi: # Replace with a single Ko-fi username 6 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 7 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 8 | liberapay: # Replace with a single Liberapay username 9 | issuehunt: # Replace with a single IssueHunt username 10 | otechie: # Replace with a single Otechie username 11 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '[Bug Report]' 5 | --- 6 | 7 | - [x] I have searched the [issues](https://github.com/pindjs/designable/issues) of this repository and believe that this is not a duplicate. 8 | 9 | ### Reproduction link 10 | 11 | ### Steps to reproduce 12 | 13 | ### What is expected? 14 | 15 | ### What is actually happening? 16 | 17 | ### Package 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: ✨ Question Answer / Idea 4 | url: https://github.com/pindjs/designable/discussions/new 5 | about: All questions can be solved here. At the same time you can provide all your ideas here. 6 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | _Before_ submitting a pull request, please make sure the following is done... 2 | 3 | - [ ] Ensure the pull request title and commit message follow the [Commit Specific](https://github.com/pindjs/designable/blob/main/.github/GIT_COMMIT_SPECIFIC.md) in **English**. 4 | - [ ] Fork the repo and create your branch from `main`. 5 | - [ ] If you've added code that should be tested, add tests! 6 | - [ ] If you've changed APIs, update the documentation. 7 | - [ ] Ensure the test suite passes (`npm test`). 8 | - [ ] Make sure your code lints (`npm run lint`) - we've done our best to make sure these rules match our internal linting guidelines. 9 | -------------------------------------------------------------------------------- /.github/workflows/check-pr-title.yml: -------------------------------------------------------------------------------- 1 | name: Check PR title 2 | on: 3 | pull_request_target: 4 | types: 5 | - opened 6 | - reopened 7 | - edited 8 | - synchronize 9 | 10 | jobs: 11 | lint: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: aslafy-z/conventional-pr-title-action@master 15 | with: 16 | preset: conventional-changelog-angular@^5.0.6 17 | env: 18 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 19 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Node CI 2 | 3 | # on: 4 | # push: 5 | # branches: 6 | # - main 7 | # pull_request: 8 | # branches: 9 | # - main 10 | 11 | # jobs: 12 | # build: 13 | # runs-on: ${{ matrix.os }} 14 | # strategy: 15 | # matrix: 16 | # node_version: [10.x, 11.x] 17 | # os: [ubuntu-latest] 18 | # steps: 19 | # - uses: actions/checkout@v1 20 | # - name: Use Node.js ${{ matrix.node_version }} 21 | # uses: actions/setup-node@v1 22 | # with: 23 | # node-version: ${{ matrix.node_version }} 24 | 25 | # - run: yarn -v 26 | # - run: yarn --ignore-engines 27 | # - run: yarn build 28 | # - run: yarn test:prod 29 | # env: 30 | # CI: true 31 | # HEADLESS: false 32 | # PROGRESS: none 33 | # NODE_ENV: test 34 | # NODE_OPTIONS: --max_old_space_size=4096 35 | 36 | # - name: Upload coverage to Codecov 37 | # uses: codecov/codecov-action@v1 38 | # with: 39 | # token: ${{ secrets.CODECOV_TOKEN }} 40 | -------------------------------------------------------------------------------- /.github/workflows/commitlint.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Check Commit spec 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the main branch 8 | push: 9 | branches: [main] 10 | pull_request: 11 | branches: [main] 12 | 13 | # Allows you to run this workflow manually from the Actions tab 14 | workflow_dispatch: 15 | 16 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 17 | jobs: 18 | # This workflow contains a single job called "build" 19 | commitlint: 20 | # The type of runner that the job will run on 21 | runs-on: ubuntu-latest 22 | 23 | # Steps represent a sequence of tasks that will be executed as part of the job 24 | steps: 25 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 26 | - uses: actions/checkout@v2 27 | with: 28 | fetch-depth: 0= 29 | - uses: wagoid/commitlint-github-action@v3 30 | -------------------------------------------------------------------------------- /.github/workflows/package-size.yml: -------------------------------------------------------------------------------- 1 | name: Compressed Size 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v2 11 | - uses: preactjs/compressed-size-action@v2 12 | with: 13 | repo-token: '${{ secrets.GITHUB_TOKEN }}' 14 | -------------------------------------------------------------------------------- /.github/workflows/pr-welcome.yml: -------------------------------------------------------------------------------- 1 | name: PR Welcome 2 | 3 | on: 4 | pull_request_target: 5 | types: [opened] 6 | 7 | jobs: 8 | welcome: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions-cool/pr-welcome@v1.1.2 12 | with: 13 | pr-emoji: '+1, heart' 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *.swp 3 | .DS_Store 4 | .tea 5 | npm-debug.log 6 | lerna-debug.log 7 | npm-debug.log* 8 | package-lock.json 9 | lib/ 10 | esm/ 11 | temp_esm/ 12 | dist/ 13 | build/ 14 | coverage/ 15 | node_modules/ 16 | examples/test 17 | .idea/ 18 | TODO.md 19 | tsconfig.tsbuildinfo 20 | package/ 21 | benchmark 22 | package.zip 23 | .umi 24 | .umi-production 25 | .cjsescache 26 | doc-site 27 | .lerna-changelog -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npmmirror.com/ 2 | auto-install-peers=true 3 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | semi: false, 3 | tabWidth: 2, 4 | singleQuote: true, 5 | } 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | 3 | language: node_js 4 | 5 | before_install: 6 | - npm i -g npm@6 7 | 8 | node_js: 9 | - '8' 10 | - '11' 11 | 12 | before_script: 13 | - rm -rf node_modules 14 | - npm install 15 | - lerna clean --yes 16 | - lerna bootstrap --no-ci 17 | 18 | script: 19 | - npm run lint 20 | - npm run build 21 | -------------------------------------------------------------------------------- /.vscode/cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1", 3 | "language": "en", 4 | "ignoreWords": [ 5 | "autorun", 6 | "mutators", 7 | "Formily", 8 | "formily", 9 | "untrack", 10 | "untracker", 11 | "untracked", 12 | "Untracking", 13 | "cloneable", 14 | "deletable", 15 | "Unmount", 16 | "octokit", 17 | "repos", 18 | "alibaba", 19 | "Lifecycles", 20 | "antd", 21 | "Antd", 22 | "alifd", 23 | "Mixins", 24 | "builtins", 25 | "cascader", 26 | "Cascader", 27 | "middlewares", 28 | "contenteditable", 29 | "compositionstart", 30 | "compositionupdate", 31 | "compositionend", 32 | "Roundable" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "vue3snippets.enable-compile-vue-file-on-did-save-code": false 4 | } 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Alibaba 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
= React.FC
& { 31 | Resource?: IResource[] 32 | Behavior?: IBehavior[] 33 | } 34 | 35 | export type DnComponent
= React.ComponentType
& {
36 | Resource?: IResource[]
37 | Behavior?: IBehavior[]
38 | }
39 |
--------------------------------------------------------------------------------
/packages/react/src/variables.less:
--------------------------------------------------------------------------------
1 | @prefix-cls: ~'dn';
2 |
--------------------------------------------------------------------------------
/packages/react/src/widgets/AuxToolWidget/Copy.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { TreeNode } from '@pind/designable-core'
3 | import { usePrefix } from '../../hooks'
4 | import { IconWidget } from '../IconWidget'
5 | import { Button } from 'antd'
6 | import { ReactFC } from '@formily/reactive-react'
7 | export interface ICopyProps {
8 | node: TreeNode
9 | style?: React.CSSProperties
10 | }
11 |
12 | export const Copy: ReactFC = ReturnType = Component & {
7 | Resource?: IResource[]
8 | Behavior?: IBehavior[]
9 | }
10 |
11 | export type DnComponent = Component & {
12 | Resource?: IResource[]
13 | Behavior?: IBehavior[]
14 | }
15 |
16 | export interface IDesignerComponents {
17 | [key: string]: DnFC