@gedit/editor-2d 0.1.104 → 0.1.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/lib/browser/model/editor2d-document.d.ts +1 -1
  2. package/lib/browser/model/editor2d-document.d.ts.map +1 -1
  3. package/lib/browser/model/editor2d-document.js +3 -3
  4. package/lib/browser/model/editor2d-document.js.map +1 -1
  5. package/lib/browser/model/editor2d.d.ts +3 -3
  6. package/lib/browser/model/editor2d.d.ts.map +1 -1
  7. package/lib/browser/model/editor2d.js +13 -6
  8. package/lib/browser/model/editor2d.js.map +1 -1
  9. package/lib/browser/model/utils/anim.utils.d.ts.map +1 -1
  10. package/lib/browser/model/utils/anim.utils.js +2 -0
  11. package/lib/browser/model/utils/anim.utils.js.map +1 -1
  12. package/lib/browser/playground/index.d.ts +2 -0
  13. package/lib/browser/playground/index.d.ts.map +1 -1
  14. package/lib/browser/playground/index.js +4 -0
  15. package/lib/browser/playground/index.js.map +1 -1
  16. package/lib/browser/playground/selection-entity-manager.d.ts.map +1 -1
  17. package/lib/browser/playground/selection-entity-manager.js +8 -5
  18. package/lib/browser/playground/selection-entity-manager.js.map +1 -1
  19. package/lib/browser/playground/selector-extend-icons.d.ts +8 -0
  20. package/lib/browser/playground/selector-extend-icons.d.ts.map +1 -0
  21. package/lib/browser/playground/selector-extend-icons.js +42 -0
  22. package/lib/browser/playground/selector-extend-icons.js.map +1 -0
  23. package/lib/browser/playground/selector-extend-renderer.d.ts +9 -0
  24. package/lib/browser/playground/selector-extend-renderer.d.ts.map +1 -0
  25. package/lib/browser/playground/selector-extend-renderer.js +150 -0
  26. package/lib/browser/playground/selector-extend-renderer.js.map +1 -0
  27. package/package.json +9 -8
  28. package/src/browser/model/editor2d-document.ts +6 -4
  29. package/src/browser/model/editor2d.ts +14 -6
  30. package/src/browser/model/utils/anim.utils.ts +2 -1
  31. package/src/browser/playground/index.ts +3 -0
  32. package/src/browser/playground/selection-entity-manager.tsx +10 -6
  33. package/src/browser/playground/selector-extend-icons.tsx +82 -0
  34. package/src/browser/playground/selector-extend-renderer.tsx +212 -0
  35. package/src/browser/style/index.less +1 -0
  36. package/src/browser/style/selector-extend.less +47 -0
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.SelectorExtendRender = void 0;
15
+ var React = require("react");
16
+ var clsx_1 = require("clsx");
17
+ var ui_1 = require("@gedit/ui");
18
+ var selector_extend_icons_1 = require("./selector-extend-icons");
19
+ var getClassName = function (str) { return "gedit-selector-extend-".concat(str); };
20
+ var defaultExtends = [
21
+ {
22
+ type: selector_extend_icons_1.SelectorExtendType.LINK,
23
+ title: '配置链接',
24
+ category: 1,
25
+ order: 0,
26
+ visible: function (node, register) { return (register === null || register === void 0 ? void 0 : register.getDisableKeys().indexOf('link')) === -1; },
27
+ event: {
28
+ title: '跳转链接配置',
29
+ type: 'selectorExtendAttr',
30
+ children: [
31
+ {
32
+ type: 'text',
33
+ key: 'link',
34
+ label: '链接',
35
+ placeholder: '请输出 url 地址',
36
+ },
37
+ ],
38
+ },
39
+ },
40
+ {
41
+ type: selector_extend_icons_1.SelectorExtendType.TO_TOP,
42
+ title: '前置一层',
43
+ category: 2,
44
+ order: 0,
45
+ },
46
+ {
47
+ type: selector_extend_icons_1.SelectorExtendType.TO_BOTTOM,
48
+ title: '后置一层',
49
+ category: 2,
50
+ order: 1,
51
+ },
52
+ {
53
+ type: selector_extend_icons_1.SelectorExtendType.FLIP_X,
54
+ title: 'X 轴镜像',
55
+ category: 2,
56
+ order: 2,
57
+ visible: function (node, register) { return (register === null || register === void 0 ? void 0 : register.getDisableKeys().indexOf('flip.x')) === -1; },
58
+ },
59
+ {
60
+ type: selector_extend_icons_1.SelectorExtendType.FLIP_Y,
61
+ title: 'Y 轴镜像',
62
+ category: 2,
63
+ order: 3,
64
+ visible: function (node, register) { return (register === null || register === void 0 ? void 0 : register.getDisableKeys().indexOf('flip.y')) === -1; },
65
+ },
66
+ {
67
+ type: selector_extend_icons_1.SelectorExtendType.DELETE,
68
+ title: '删除图层',
69
+ parentClassName: getClassName('delete'),
70
+ category: 3,
71
+ order: 0,
72
+ },
73
+ ];
74
+ var sortData = function (data) {
75
+ var states = {};
76
+ data.forEach(function (c) {
77
+ var _a = c.category, category = _a === void 0 ? 'empty' : _a;
78
+ states[category] = states[category] || [];
79
+ states[category].push(c);
80
+ states[category] = states[category].sort(function (a, b) { return (a.order || 0) - (b.order || 0); });
81
+ });
82
+ return Object.keys(states)
83
+ .sort(function (a, b) { return parseFloat(a || '0') - parseFloat(b || '0'); })
84
+ .map(function (k) { return states[parseFloat(k)]; });
85
+ };
86
+ var SelectorIcon = function (props) {
87
+ var item = props.item, onChange = props.onChange, node = props.node;
88
+ var child = (React.createElement("div", { className: (0, clsx_1.default)(getClassName('icon'), item.className), onMouseDown: function (e) {
89
+ e.stopPropagation();
90
+ e.preventDefault();
91
+ if (item.event) {
92
+ return;
93
+ }
94
+ onChange === null || onChange === void 0 ? void 0 : onChange(item.type);
95
+ } }, selector_extend_icons_1.selectIcon[item.type]));
96
+ if (item.event) {
97
+ return (React.createElement(ui_1.Popover, { content: ui_1.Form.renderBySchema(__assign(__assign({}, item.event), { context: {
98
+ node: node,
99
+ }, onChange: function (key, value) {
100
+ var _a;
101
+ onChange === null || onChange === void 0 ? void 0 : onChange('updateData', (_a = {},
102
+ _a[key] = value,
103
+ _a));
104
+ }, values: node, size: 'middle' })), title: item.event.title || item.title, placement: "right" }, child));
105
+ }
106
+ if (item.title) {
107
+ return (React.createElement(ui_1.Tooltip, { title: item.title, placement: "right" }, child));
108
+ }
109
+ return child;
110
+ };
111
+ var SelectorExtendRender = function (props) {
112
+ var entity = props.entity, register = props.register, context = props.context;
113
+ var node = entity.node;
114
+ var _a = ((register === null || register === void 0 ? void 0 : register.decoration) || {}).selectorExtends, selectorExtends = _a === void 0 ? [] : _a;
115
+ var childData = sortData([]
116
+ .concat(defaultExtends, selectorExtends)
117
+ .filter(function (c) { return (c.visible ? c.visible(node, register) : true); }));
118
+ var onChange = function (type, value) {
119
+ var _a, _b;
120
+ var document = context.document;
121
+ switch (type) {
122
+ case selector_extend_icons_1.SelectorExtendType.TO_TOP:
123
+ document.moveUp(node);
124
+ break;
125
+ case selector_extend_icons_1.SelectorExtendType.TO_BOTTOM:
126
+ document.moveDown(node);
127
+ break;
128
+ case selector_extend_icons_1.SelectorExtendType.FLIP_X:
129
+ document.updateNode(node, { flip: __assign(__assign({}, node === null || node === void 0 ? void 0 : node.flip), { x: !((_a = node === null || node === void 0 ? void 0 : node.flip) === null || _a === void 0 ? void 0 : _a.x) }) }, true);
130
+ break;
131
+ case selector_extend_icons_1.SelectorExtendType.FLIP_Y:
132
+ document.updateNode(node, { flip: __assign(__assign({}, node === null || node === void 0 ? void 0 : node.flip), { y: !((_b = node === null || node === void 0 ? void 0 : node.flip) === null || _b === void 0 ? void 0 : _b.y) }) }, true);
133
+ break;
134
+ case selector_extend_icons_1.SelectorExtendType.DELETE:
135
+ document.delNodes(node);
136
+ break;
137
+ case 'updateData':
138
+ console.log(value);
139
+ document.updateNode(node, value, true);
140
+ break;
141
+ default:
142
+ console.warn("\u65E0\u6548\u7C7B\u578B: ".concat(type, "."));
143
+ break;
144
+ }
145
+ };
146
+ return (React.createElement("div", { className: getClassName('wrapper') },
147
+ React.createElement("div", null, childData.map(function (c, i) { return (React.createElement("div", { className: (0, clsx_1.default)(getClassName('icon-wrapper'), c.map(function (d) { return d.parentClassName; }).join(' ')), key: i.toString() }, c.map(function (item) { return (React.createElement(SelectorIcon, { item: item, onChange: onChange, node: node, key: item.type })); }))); }))));
148
+ };
149
+ exports.SelectorExtendRender = SelectorExtendRender;
150
+ //# sourceMappingURL=selector-extend-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-extend-renderer.js","sourceRoot":"","sources":["../../../src/browser/playground/selector-extend-renderer.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gedit/editor-2d",
3
- "version": "0.1.104",
3
+ "version": "0.1.105",
4
4
  "license": "MIT",
5
5
  "main": "lib/browser/index",
6
6
  "typings": "lib/browser/index.d.ts",
@@ -9,12 +9,13 @@
9
9
  "src"
10
10
  ],
11
11
  "dependencies": {
12
- "@gedit/app-config": "^0.1.99",
13
- "@gedit/editor": "^0.1.76",
14
- "@gedit/playground": "^0.1.84",
15
- "@gedit/render-engine-ide": "^0.1.104",
16
- "@gedit/workspace-2d": "^0.1.80",
17
- "json-stringify-pretty-compact": "^2.0.0"
12
+ "@gedit/app-config": "^0.1.100",
13
+ "@gedit/editor": "^0.1.77",
14
+ "@gedit/playground": "^0.1.85",
15
+ "@gedit/render-engine-ide": "^0.1.105",
16
+ "@gedit/workspace-2d": "^0.1.81",
17
+ "json-stringify-pretty-compact": "^2.0.0",
18
+ "nanoid": "^3.3.2"
18
19
  },
19
20
  "geditExtensions": [
20
21
  {
@@ -34,5 +35,5 @@
34
35
  "nyc": {
35
36
  "extends": "../../configs/nyc.json"
36
37
  },
37
- "gitHead": "22979d48c63462a6f271ffbab8068e2652bb973a"
38
+ "gitHead": "5f27beb01166079863d9fd1107bb8d4f4c41afe2"
38
39
  }
@@ -96,9 +96,11 @@ export class Editor2dDocument extends TreeImpl<Editor2dNode, Editor2dContainerNo
96
96
  */
97
97
  getComponentContent(compPath: string, parentNode: Editor2dNode): Editor2dNode[] | undefined {
98
98
  const comp = this.componentContents[compPath];
99
- if (comp && comp.children) return comp.children.map(c => ({ ...c, parent: parentNode })) as Editor2dNode[];
99
+ if (comp && comp.children) return comp.children.map(c => ({...c, parent: parentNode})) as Editor2dNode[];
100
100
  }
101
- createDisplayNode<E extends Editor2dNode = Editor2dNode>(displayType: GameObjectType, parent?: Editor2dNode, position?: PositionSchema, index?: number): E {
101
+
102
+ createDisplayNode<E extends Editor2dNode = Editor2dNode>(
103
+ displayType: GameObjectType, parent?: Editor2dNode, position?: PositionSchema, index?: number, data?: Partial<Editor2dNode>): E {
102
104
  let parentNode: Editor2dContainerNode;
103
105
  if (!parent || Editor2dNode.isRootNode(parent)) {
104
106
  parentNode = this.getNode(Editor2dNode.ROOT_NODE_ID) as Editor2dContainerNode;
@@ -126,7 +128,7 @@ export class Editor2dDocument extends TreeImpl<Editor2dNode, Editor2dContainerNo
126
128
  parentNode.children || [],
127
129
  this.engineService.getGameObjectIDERegister(this.engineName, displayType).decoration.name,
128
130
  displayType);
129
- const node = Editor2dNode.createNode({ ...attrs, name }, displayType);
131
+ const node = Editor2dNode.createNode({...attrs, ...data, name}, displayType, undefined, Object.keys(this.nodes));
130
132
  this.addChildren(node, parentNode, index === undefined ? 0 : index);
131
133
  return node as E;
132
134
  }
@@ -146,7 +148,7 @@ export class Editor2dDocument extends TreeImpl<Editor2dNode, Editor2dContainerNo
146
148
  parent = parentNode.parent;
147
149
  }
148
150
  if (parent) {
149
- const newNode = Editor2dNode.clone(nodeData as Editor2dNode);
151
+ const newNode = Editor2dNode.clone(nodeData as Editor2dNode, [], Object.keys(this.nodes));
150
152
  if (newNode.position) {
151
153
  newNode.position.x = newNode.position.x + 20;
152
154
  newNode.position.y = newNode.position.y + 20;
@@ -1,6 +1,6 @@
1
1
  import { EditorDocumentNode } from '@gedit/editor';
2
2
  import { ExpandableTreeNode, SelectableTreeNode, TreeNode } from '@gedit/tree';
3
- import { deepClone, Disposable, generateUuid, omit, URI } from '@gedit/utils';
3
+ import { deepClone, Disposable, omit, URI } from '@gedit/utils';
4
4
  import { ResourceAutoSaveOptions, ResourceAutoSaveService, ResourceChangeEvent } from '@gedit/resource/lib/browser';
5
5
  import type { Editor2dDocument } from './editor2d-document';
6
6
  import { GameObjectBaseType, GameObjectData, GameObjectType } from '@gedit/render-engine';
@@ -10,6 +10,7 @@ import { WorkspaceResourceService } from '@gedit/workspace-2d';
10
10
  import { PlaygroundConfig, SelectorEntityRendererProps } from '@gedit/playground';
11
11
  import type { CanvasDraw } from '../playground/canvas-draw';
12
12
  import type { PlaygroundContext2d } from '../playground/playground-context';
13
+ import { nanoid } from 'nanoid';
13
14
 
14
15
  const stringify = require('json-stringify-pretty-compact');
15
16
 
@@ -87,8 +88,14 @@ export interface Editor2dContainerNode extends Editor2dNode, ExpandableTreeNode
87
88
  export namespace Editor2dNode {
88
89
  export const ROOT_NODE_ID = 'root';
89
90
  export const GLOBAL_ADD_EVENT = 'global_add_event'; // 全局添加标记事件
90
- export function createNodeId(): string {
91
- return generateUuid();
91
+ export function createNodeId(checks?: string[]): string {
92
+ // 用短id生成减少大小
93
+ const newId = nanoid(10);
94
+ // id 冲突,重新生成
95
+ if (checks && checks.includes(newId)) {
96
+ return createNodeId(checks);
97
+ }
98
+ return newId;
92
99
  }
93
100
  export function toContainerNode(node: Editor2dNode | Editor2dContainerNode): Editor2dContainerNode {
94
101
  if (!node.children) {
@@ -153,9 +160,9 @@ export namespace Editor2dNode {
153
160
  }
154
161
  return new URI(workspaceURI.path.join(path).toString());
155
162
  }
156
- export function clone(targetNode: Editor2dNode, omitKeys: string[] = []): Editor2dNode {
163
+ export function clone(targetNode: Editor2dNode, omitKeys: string[] = [], checks?: string[]): Editor2dNode {
157
164
  return deepClone(omitNode(targetNode, ['id', 'selected', ...omitKeys], node => Object.assign(node, {
158
- id: createNodeId(),
165
+ id: createNodeId(checks),
159
166
  selected: false
160
167
  })));
161
168
  }
@@ -163,7 +170,8 @@ export namespace Editor2dNode {
163
170
  /**
164
171
  * 生成普通节点
165
172
  */
166
- export function createNode(members: Partial<Editor2dNode> = {}, displayType: GameObjectType, id: string = createNodeId()): Editor2dNode {
173
+ export function createNode(members: Partial<Editor2dNode> = {}, displayType: GameObjectType, id?: string, checks?: string[]): Editor2dNode {
174
+ id = id || createNodeId(checks);
167
175
  return {
168
176
  ...members,
169
177
  displayType,
@@ -9,7 +9,7 @@ interface KeysValue {
9
9
  key: string;
10
10
  name: string;
11
11
  }
12
-
12
+ // 添加进时间轴动画的条件;
13
13
  const supportKeys: SchemaType[] = ['integer', 'float', 'color'];
14
14
  function readAnimationKeys(
15
15
  deco: SchemaDecoration,
@@ -22,6 +22,7 @@ function readAnimationKeys(
22
22
  parentName && deco.label ? `${parentName}.${deco.label}` : deco.label;
23
23
  currentKey =
24
24
  parentKey && currentKey ? `${parentKey}.${currentKey}` : currentKey;
25
+ // 进时间轴条件,必须带 label, ref: { label: 'xxx', type: 'float' };
25
26
  if (deco.properties) {
26
27
  Object.keys(deco.properties).forEach((property: string) => {
27
28
  readAnimationKeys(
@@ -3,3 +3,6 @@ export * from './playground-context';
3
3
  export * from './playground-contribution';
4
4
  export * from './canvas-layer';
5
5
  export * from './canvas-draw';
6
+
7
+ export { SelectorExtendType } from './selector-extend-icons';
8
+ export * from './selector-extend-renderer';
@@ -6,11 +6,12 @@ import {
6
6
  DefaultSelectorEntityRenderer,
7
7
  EntityManager,
8
8
  PlaygroundConfigEntity,
9
- SelectorConfigEntity
9
+ SelectorConfigEntity,
10
10
  } from '@gedit/playground';
11
11
  import type { PlaygroundContext2d } from './playground-context';
12
12
  import { Rectangle } from '@gedit/math';
13
13
  import { GameObject } from '@gedit/render-engine';
14
+ import { SelectorExtendRender } from './selector-extend-renderer';
14
15
 
15
16
  const numberToFixed4 = (data: {[key: string]: any}) => {
16
17
  const d: any = {};
@@ -44,12 +45,15 @@ export class SelectionEntityManager {
44
45
  selectionConfigEntity?.customSelectorEntityRenderer(props => {
45
46
  const newProps = {...props};
46
47
  const entity = newProps.entity as Editor2dEntity;
47
- if (this.context.options.extendEntityRenderer) {
48
- newProps.extendRenderer = () => this.context.options.extendEntityRenderer!({ ...props, context: this.context });
49
- }
50
- const deco = entity.node
51
- ? this.context.renderEngine.getGameObjectDecoration(entity.gameObject.scene.config.engine, entity.node.displayType)
48
+
49
+ const register = entity.node
50
+ ? this.context.renderEngine.getGameObjectIDERegister(entity.gameObject.scene.config.engine, entity.node.displayType)
52
51
  : undefined;
52
+ const deco = register?.decoration;
53
+ newProps.extendRenderer = () => <SelectorExtendRender {...props} register={register} context={this.context} />;
54
+ /* if (this.context.options.extendEntityRenderer) {
55
+ newProps.extendRenderer = () => this.context.options.extendEntityRenderer!({ ...props, context: this.context });
56
+ } */
53
57
  // 自定义渲染器
54
58
  if (deco && deco.selectionRenderer) {
55
59
  const Comp = deco.selectionRenderer;
@@ -0,0 +1,82 @@
1
+ /* eslint-disable max-len */
2
+ import * as React from 'react';
3
+ import Icon, {
4
+ ArrowUpOutlined,
5
+ ArrowDownOutlined,
6
+ DeleteOutlined,
7
+ LinkOutlined,
8
+ } from '@ant-design/icons';
9
+ import { GameObjectSelectorExtendType as SelectorExtendType } from '@gedit/render-engine-ide';
10
+
11
+ export {
12
+ SelectorExtendType,
13
+ };
14
+ /* const commonIcon = () => (
15
+ <svg
16
+ viewBox="0 0 1024 1024"
17
+ width="1em"
18
+ height="1em"
19
+ fill="currentColor"
20
+ fillRule="nonzero"
21
+ stroke="none"
22
+ >
23
+ <path
24
+ d="M704 64a64 64 0 0 1 64 64v128h128a64 64 0 0 1 64 64v576a64 64 0 0 1-64 64H320a64 64 0 0 1-64-64v-128H128a64 64 0 0 1-64-64V128a64 64 0 0 1 64-64h576z m0 64H128v576h288v64H320v128h576V320h-128v96h-64V128zM416 288v192A96 96 0 0 0 512 576h134.336L565.504 495.168l45.248-45.248 158.4 158.4-158.4 158.4-45.248-45.248L646.848 640H512a160 160 0 0 1-159.68-149.504L352 480v-192h64z"
25
+ p-id="4758"
26
+ />
27
+ </svg>
28
+ ); */
29
+
30
+ const flipX = () => (
31
+ <svg width="1em" height="1em" viewBox="0 0 14 13">
32
+ <g
33
+ id="页面-1"
34
+ stroke="currentColor"
35
+ strokeWidth="1"
36
+ fill="none"
37
+ fillRule="evenodd"
38
+ strokeLinecap="round"
39
+ strokeLinejoin="round"
40
+ >
41
+ <polygon
42
+ id="路径-2"
43
+ points="0 10.9051487 4.6880494 10.9051487 4.6880494 1.4679916e-14"
44
+ ></polygon>
45
+ <polygon
46
+ id="路径-2备份"
47
+ fill="currentColor"
48
+ transform="translate(9.344025, 5.452574) scale(-1, 1) translate(-9.344025, -5.452574) "
49
+ points="7 10.9051487 11.6880494 10.9051487 11.6880494 1.4679916e-14"
50
+ ></polygon>
51
+ </g>
52
+ </svg>
53
+ );
54
+ export const flipY = () => (
55
+ <svg width="1em" height="1em" viewBox="0 0 13 14">
56
+ <g
57
+ id="页面-1"
58
+ stroke="currentColor"
59
+ strokeWidth="1"
60
+ fill="none"
61
+ fillRule="evenodd"
62
+ strokeLinecap="round"
63
+ strokeLinejoin="round"
64
+ transform="scale(-1, 1) rotate(90.000000)"
65
+ >
66
+ <polygon points="0 10.9051487 4.6880494 10.9051487 4.6880494 4.80706427e-14" />
67
+ <polygon
68
+ fill="currentColor"
69
+ transform="translate(9.344025, 5.452574) scale(-1, 1) translate(-9.344025, -5.452574) "
70
+ points="7 10.9051487 11.6880494 10.9051487 11.6880494 4.84992691e-14"
71
+ />
72
+ </g>
73
+ </svg>
74
+ );
75
+ export const selectIcon: { [key: string]: any } = {
76
+ [SelectorExtendType.TO_TOP]: <ArrowUpOutlined />,
77
+ [SelectorExtendType.TO_BOTTOM]: <ArrowDownOutlined />,
78
+ [SelectorExtendType.FLIP_X]: <Icon component={flipX} />,
79
+ [SelectorExtendType.FLIP_Y]: <Icon component={flipY} />,
80
+ [SelectorExtendType.DELETE]: <DeleteOutlined />,
81
+ [SelectorExtendType.LINK]: <LinkOutlined />,
82
+ };
@@ -0,0 +1,212 @@
1
+ import * as React from 'react';
2
+
3
+ import clsx from 'clsx';
4
+ import { Form, Popover, Tooltip } from '@gedit/ui';
5
+
6
+ import { selectIcon, SelectorExtendType } from './selector-extend-icons';
7
+ import { GameObjectIDERegister, GameObjectSelectorExtend as SelectorExtend } from '@gedit/render-engine-ide';
8
+ import { PlaygroundContext, SelectorEntityRendererProps, } from '@gedit/playground';
9
+ import type { Editor2dEntity } from './entities/editor2d-entity';
10
+ import { Editor2dNode } from '../model';
11
+
12
+ const getClassName = (str: string) => `gedit-selector-extend-${str}`;
13
+
14
+ export interface SelectorExtendProps extends SelectorEntityRendererProps {
15
+ register?: GameObjectIDERegister;
16
+ context?: PlaygroundContext;
17
+ }
18
+
19
+ const defaultExtends: SelectorExtend[] = [
20
+ {
21
+ type: SelectorExtendType.LINK,
22
+ title: '配置链接',
23
+ category: 1,
24
+ order: 0,
25
+ visible: (node: Editor2dNode, register: GameObjectIDERegister) => register?.getDisableKeys().indexOf('link') === -1,
26
+ event: {
27
+ title: '跳转链接配置',
28
+ type: 'selectorExtendAttr',
29
+ children: [
30
+ {
31
+ type: 'text',
32
+ key: 'link',
33
+ label: '链接',
34
+ placeholder: '请输出 url 地址',
35
+ },
36
+ ],
37
+ },
38
+ },
39
+ {
40
+ type: SelectorExtendType.TO_TOP,
41
+ title: '前置一层',
42
+ category: 2,
43
+ order: 0,
44
+ },
45
+ {
46
+ type: SelectorExtendType.TO_BOTTOM,
47
+ title: '后置一层',
48
+ category: 2,
49
+ order: 1,
50
+ },
51
+ {
52
+ type: SelectorExtendType.FLIP_X,
53
+ title: 'X 轴镜像',
54
+ category: 2,
55
+ order: 2,
56
+ visible: (node: Editor2dNode, register: GameObjectIDERegister) => register?.getDisableKeys().indexOf('flip.x') === -1,
57
+ },
58
+ {
59
+ type: SelectorExtendType.FLIP_Y,
60
+ title: 'Y 轴镜像',
61
+ category: 2,
62
+ order: 3,
63
+ visible: (node: Editor2dNode, register: GameObjectIDERegister) => register?.getDisableKeys().indexOf('flip.y') === -1,
64
+ },
65
+ {
66
+ type: SelectorExtendType.DELETE,
67
+ title: '删除图层',
68
+ parentClassName: getClassName('delete'),
69
+ category: 3,
70
+ order: 0,
71
+ },
72
+ ];
73
+
74
+ const sortData = (data: SelectorExtend[]) => {
75
+ const states: { [key: string | number]: SelectorExtend[] } = {};
76
+ data.forEach(c => {
77
+ const {category = 'empty'} = c;
78
+ states[category] = states[category] || [];
79
+ states[category].push(c);
80
+ states[category] = states[category].sort(
81
+ (a, b) => (a.order || 0) - (b.order || 0)
82
+ );
83
+ });
84
+ return Object.keys(states)
85
+ .sort((a, b) => parseFloat(a || '0') - parseFloat(b || '0'))
86
+ .map(k => states[parseFloat(k)]);
87
+ };
88
+
89
+ const SelectorIcon = (props: {
90
+ item: SelectorExtend;
91
+ onChange: (type: SelectorExtendType | 'updateData', value?: any) => void;
92
+ node: any;
93
+ }) => {
94
+ const {item, onChange, node} = props;
95
+ const child = (
96
+ <div
97
+ className={clsx(getClassName('icon'), item.className)}
98
+ onMouseDown={(e: React.MouseEvent) => {
99
+ e.stopPropagation();
100
+ e.preventDefault();
101
+ if (item.event) {
102
+ return;
103
+ }
104
+ onChange?.(item.type);
105
+ }}
106
+ >
107
+ {selectIcon[item.type]}
108
+ </div>
109
+ );
110
+ if (item.event) {
111
+ return (
112
+ <Popover
113
+ content={Form.renderBySchema({
114
+ ...item.event,
115
+ context: {
116
+ node,
117
+ },
118
+ onChange: (key: string, value: any) => {
119
+ onChange?.('updateData', {
120
+ [key]: value,
121
+ });
122
+ },
123
+ values: node,
124
+ size: 'middle',
125
+ })}
126
+ title={item.event.title || item.title}
127
+ placement="right"
128
+ >
129
+ {child}
130
+ </Popover>
131
+ );
132
+ }
133
+ if (item.title) {
134
+ return (
135
+ <Tooltip title={item.title} placement="right">
136
+ {child}
137
+ </Tooltip>
138
+ );
139
+ }
140
+ return child;
141
+ };
142
+
143
+ export const SelectorExtendRender = (props: SelectorExtendProps) => {
144
+ const {entity, register, context} = props;
145
+ const {node} = entity as Editor2dEntity;
146
+ const {selectorExtends = []} = register?.decoration || {};
147
+
148
+ const childData = sortData(
149
+ ([] as SelectorExtend[])
150
+ .concat(defaultExtends, selectorExtends)
151
+ .filter(c => (c.visible ? c.visible(node, register) : true))
152
+ );
153
+ const onChange = (type: SelectorExtendType | 'updateData', value?: any) => {
154
+ const {document} = context;
155
+ switch (type) {
156
+ case SelectorExtendType.TO_TOP:
157
+ document.moveUp(node);
158
+ break;
159
+ case SelectorExtendType.TO_BOTTOM:
160
+ document.moveDown(node);
161
+ break;
162
+ case SelectorExtendType.FLIP_X:
163
+ document.updateNode(
164
+ node,
165
+ {flip: {...node?.flip, x: !node?.flip?.x}},
166
+ true
167
+ );
168
+ break;
169
+ case SelectorExtendType.FLIP_Y:
170
+ document.updateNode(
171
+ node,
172
+ {flip: {...node?.flip, y: !node?.flip?.y}},
173
+ true
174
+ );
175
+ break;
176
+ case SelectorExtendType.DELETE:
177
+ document.delNodes(node);
178
+ break;
179
+ case 'updateData':
180
+ console.log(value);
181
+ document.updateNode(node, value, true);
182
+ break;
183
+ default:
184
+ console.warn(`无效类型: ${type}.`);
185
+ break;
186
+ }
187
+ };
188
+ return (
189
+ <div className={getClassName('wrapper')}>
190
+ <div>
191
+ {childData.map((c, i) => (
192
+ <div
193
+ className={clsx(
194
+ getClassName('icon-wrapper'),
195
+ c.map(d => d.parentClassName).join(' ')
196
+ )}
197
+ key={i.toString()}
198
+ >
199
+ {c.map(item => (
200
+ <SelectorIcon
201
+ item={item}
202
+ onChange={onChange}
203
+ node={node}
204
+ key={item.type}
205
+ />
206
+ ))}
207
+ </div>
208
+ ))}
209
+ </div>
210
+ </div>
211
+ );
212
+ };
@@ -1,6 +1,7 @@
1
1
  @import './engine2d.css';
2
2
  @import './canvas-layer.css';
3
3
  @import './canvas-draw-layer.less';
4
+ @import './selector-extend.less';
4
5
 
5
6
  :root {
6
7
  --g-mask-transparent: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADKADAAQAAAABAAAADAAAAAATDPpdAAAAfUlEQVQoFbVQQQ7AIAgD7Sf8/8s8+gd1s0vIptMlHkZiUGyBVmOMRwux4B2AhBDEOWflK6uqgICRYLVn3Zh9C6t+5G3CcqXVkKYPnQYCvfdSSpFaa8ejaM05N223S0QQmFJ6NeIfaN1I4JtnNmFb9L8Ergm6MWrg7jP36NIJC0BbmAiDWGoAAAAASUVORK5CYII=');;