mce 0.15.7 → 0.15.8

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.
@@ -8,7 +8,6 @@ export interface LayerItem {
8
8
  }
9
9
  export interface LayerProvide {
10
10
  selecting: Ref<boolean>;
11
- sortedSelection: Ref<Node[]>;
12
11
  register: (vm: ComponentInternalInstance, item: LayerItem) => void;
13
12
  unregister: (id: string) => void;
14
13
  onMousedown?: (event: MouseEvent, id: string) => void;
@@ -19,7 +18,7 @@ export declare const MceLayerKey: InjectionKey<LayerProvide>;
19
18
  export declare const MceLayerItemKey: InjectionKey<{
20
19
  id: string;
21
20
  }>;
22
- export declare function createLayer(options: Pick<LayerProvide, 'sortedSelection'>): {
21
+ export declare function createLayer(): {
23
22
  selecting: Ref<boolean, boolean>;
24
23
  openedItems: import("vue").Reactive<Map<string, Ref<boolean, boolean>>>;
25
24
  domItems: import("vue").Reactive<Map<string, Ref<HTMLElement | undefined, HTMLElement | undefined>>>;
@@ -30,7 +29,6 @@ export declare function useLayerItem(options: Omit<LayerItem, 'id'>): {
30
29
  dropping: import("vue").ComputedRef<boolean>;
31
30
  onMousedown: (e: MouseEvent) => void | undefined;
32
31
  selecting: Ref<boolean>;
33
- sortedSelection: Ref<Node[]>;
34
32
  register: (vm: ComponentInternalInstance, item: LayerItem) => void;
35
33
  unregister: (id: string) => void;
36
34
  dragging: Ref<boolean>;
package/dist/index.css CHANGED
@@ -134,7 +134,6 @@
134
134
  border-radius: inherit;
135
135
  }
136
136
  .mce-layer--root {
137
- margin-bottom: 4px;
138
137
  font-weight: bold;
139
138
  }
140
139
  .mce-layer--root .mce-layer__thumbnail {
@@ -148,12 +147,12 @@
148
147
  bottom: 0;
149
148
  border-radius: 0;
150
149
  }
151
- .mce-layer--first .mce-layer__underlay {
150
+ .mce-layer--active:not(.mce-layer--active + .mce-layer--active) .mce-layer__underlay {
152
151
  border-top-left-radius: 4px;
153
152
  border-top-right-radius: 4px;
154
153
  top: 4px;
155
154
  }
156
- .mce-layer--last .mce-layer__underlay {
155
+ .mce-layer--active:not(:has(+ .mce-layer--active)) .mce-layer__underlay {
157
156
  border-bottom-left-radius: 4px;
158
157
  border-bottom-right-radius: 4px;
159
158
  bottom: 4px;
@@ -225,17 +224,23 @@
225
224
  flex: none;
226
225
  display: flex;
227
226
  align-items: center;
228
- background-color: var(--overlay-color, transparent);
229
- backdrop-filter: blur(8px);
230
227
  border-radius: 4px;
231
- }
232
- .mce-layer__action--hide {
233
228
  background-color: transparent;
234
229
  backdrop-filter: none;
235
230
  }
236
- .mce-layer__action--hide .mce-layer__btn {
231
+ .mce-layer__action .mce-layer__btn {
237
232
  opacity: 0;
238
233
  }
234
+ .mce-layer__action--hover .mce-layer__btn {
235
+ opacity: 1;
236
+ }
237
+ .mce-layer__action--show {
238
+ background-color: var(--overlay-color, transparent);
239
+ backdrop-filter: blur(8px);
240
+ }
241
+ .mce-layer__btn--show {
242
+ opacity: 1 !important;
243
+ }
239
244
  .mce-layer__btn + .mce-layer__btn {
240
245
  margin-left: -4px;
241
246
  }.mce-layers {
@@ -259,6 +264,9 @@
259
264
  }
260
265
  .mce-layers:hover .mce-layer:not(.mce-layer--root) .mce-layer__prepend {
261
266
  opacity: 1;
267
+ }
268
+ .mce-layers .mce-layer {
269
+ scroll-margin: 8px;
262
270
  }.mce-made-with {
263
271
  pointer-events: auto !important;
264
272
  position: absolute;
package/dist/index.js CHANGED
@@ -3800,7 +3800,7 @@ function useIcon(props) {
3800
3800
  }
3801
3801
  const MceLayerKey = /* @__PURE__ */ Symbol.for("mce:layer");
3802
3802
  const MceLayerItemKey = /* @__PURE__ */ Symbol.for("mce:layer-item");
3803
- function createLayer(options) {
3803
+ function createLayer() {
3804
3804
  const registered = ref([]);
3805
3805
  const nodeItems = /* @__PURE__ */ new Map();
3806
3806
  const openedItems = reactive(/* @__PURE__ */ new Map());
@@ -3819,7 +3819,6 @@ function createLayer(options) {
3819
3819
  return id;
3820
3820
  }
3821
3821
  provide(MceLayerKey, {
3822
- ...options,
3823
3822
  selecting,
3824
3823
  dragging,
3825
3824
  droppingItemId,
@@ -5093,7 +5092,6 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5093
5092
  const dom = ref();
5094
5093
  const {
5095
5094
  selecting,
5096
- sortedSelection,
5097
5095
  dragging,
5098
5096
  dropping,
5099
5097
  onMousedown,
@@ -5103,17 +5101,6 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5103
5101
  node: computed(() => props.node),
5104
5102
  dom: computed(() => dom.value)
5105
5103
  });
5106
- const isFrist = computed(() => sortedSelection.value[0]?.equal(props.node));
5107
- const isLast = computed(() => {
5108
- const last = sortedSelection.value[sortedSelection.value.length - 1];
5109
- if (last) {
5110
- if (last.equal(props.node)) {
5111
- if (!opened.value || !props.node?.children.length)
5112
- return true;
5113
- } else if (last.equal(props.node?.parent)) ;
5114
- }
5115
- return false;
5116
- });
5117
5104
  const isActive = computed(() => selection.value.some((v) => v.equal(props.node)));
5118
5105
  const children = computed(() => props.node.children);
5119
5106
  const childrenLength = computed(() => children.value.length);
@@ -5160,6 +5147,9 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5160
5147
  opened.value = !opened.value;
5161
5148
  }
5162
5149
  function onMousedownContent(e) {
5150
+ if (e.button === 2) {
5151
+ return;
5152
+ }
5163
5153
  selecting.value = true;
5164
5154
  if (e.shiftKey) {
5165
5155
  const _nodes = [
@@ -5257,8 +5247,6 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5257
5247
  class: normalizeClass(["mce-layer", [
5258
5248
  props.root && "mce-layer--root",
5259
5249
  (__props.active || isActive.value) && "mce-layer--active",
5260
- isFrist.value && "mce-layer--first",
5261
- isLast.value && "mce-layer--last",
5262
5250
  opened.value && "mce-layer--open",
5263
5251
  isHoverElement.value && "mce-layer--hover",
5264
5252
  unref(dropping) && "mce-layer--dropping"
@@ -5272,8 +5260,8 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5272
5260
  onMouseleave,
5273
5261
  onContextmenu
5274
5262
  }, [
5275
- _cache[5] || (_cache[5] = createElementVNode("span", { class: "mce-layer__underlay" }, null, -1)),
5276
- _cache[6] || (_cache[6] = createElementVNode("span", { class: "mce-layer__overlay" }, null, -1)),
5263
+ _cache[4] || (_cache[4] = createElementVNode("span", { class: "mce-layer__underlay" }, null, -1)),
5264
+ _cache[5] || (_cache[5] = createElementVNode("span", { class: "mce-layer__overlay" }, null, -1)),
5277
5265
  createElementVNode("div", _hoisted_2$c, [
5278
5266
  createElementVNode("div", _hoisted_3$b, [
5279
5267
  childrenLength.value ? (openBlock(), createBlock(unref(_sfc_main$C), {
@@ -5300,6 +5288,9 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5300
5288
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => editValue.value = $event),
5301
5289
  type: "text",
5302
5290
  class: "mce-layer__input",
5291
+ spellcheck: "false",
5292
+ autocapitalize: "off",
5293
+ autocorrect: "off",
5303
5294
  autofocus: "",
5304
5295
  onBlur: onInputBlur
5305
5296
  }, null, 544), [
@@ -5312,26 +5303,17 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5312
5303
  ], 32),
5313
5304
  createElementVNode("div", {
5314
5305
  class: normalizeClass(["mce-layer__action", {
5315
- "mce-layer__action--hide": !hovering.value && !unref(isLock)(props.node) && unref(isVisible)(props.node)
5306
+ "mce-layer__action--hover": hovering.value,
5307
+ "mce-layer__action--show": hovering.value || unref(isLock)(props.node) || !unref(isVisible)(props.node)
5316
5308
  }])
5317
5309
  }, [
5318
- props.root ? (openBlock(), createBlock(_sfc_main$y, {
5319
- key: 0,
5320
- icon: "",
5321
- class: "mce-layer__btn",
5322
- onClick: _cache[2] || (_cache[2] = ($event) => unref(setLock)(props.node, !unref(isLock)(props.node)))
5323
- }, {
5324
- default: withCtx(() => [
5325
- createVNode(unref(_sfc_main$C), {
5326
- icon: unref(isLock)(props.node) ? "$lock" : "$unlock"
5327
- }, null, 8, ["icon"])
5328
- ]),
5329
- _: 1
5330
- })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
5310
+ props.root ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
5331
5311
  createVNode(_sfc_main$y, {
5332
5312
  icon: "",
5333
- class: "mce-layer__btn",
5334
- onClick: _cache[3] || (_cache[3] = withModifiers(($event) => unref(setLock)(props.node, !unref(isLock)(props.node)), ["prevent", "stop"]))
5313
+ class: normalizeClass(["mce-layer__btn", {
5314
+ "mce-layer__btn--show": unref(isLock)(props.node)
5315
+ }]),
5316
+ onClick: _cache[2] || (_cache[2] = withModifiers(($event) => unref(setLock)(props.node, !unref(isLock)(props.node)), ["prevent", "stop"]))
5335
5317
  }, {
5336
5318
  default: withCtx(() => [
5337
5319
  createVNode(unref(_sfc_main$C), {
@@ -5339,11 +5321,13 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5339
5321
  }, null, 8, ["icon"])
5340
5322
  ]),
5341
5323
  _: 1
5342
- }),
5324
+ }, 8, ["class"]),
5343
5325
  createVNode(_sfc_main$y, {
5344
5326
  icon: "",
5345
- class: "mce-layer__btn",
5346
- onClick: _cache[4] || (_cache[4] = withModifiers(($event) => unref(setVisible)(props.node, !unref(isVisible)(props.node)), ["prevent", "stop"]))
5327
+ class: normalizeClass(["mce-layer__btn", {
5328
+ "mce-layer__btn--show": !unref(isVisible)(props.node)
5329
+ }]),
5330
+ onClick: _cache[3] || (_cache[3] = withModifiers(($event) => unref(setVisible)(props.node, !unref(isVisible)(props.node)), ["prevent", "stop"]))
5347
5331
  }, {
5348
5332
  default: withCtx(() => [
5349
5333
  createVNode(unref(_sfc_main$C), {
@@ -5351,7 +5335,7 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
5351
5335
  }, null, 8, ["icon"])
5352
5336
  ]),
5353
5337
  _: 1
5354
- })
5338
+ }, 8, ["class"])
5355
5339
  ], 64))
5356
5340
  ], 2)
5357
5341
  ])
@@ -5376,25 +5360,14 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
5376
5360
  const {
5377
5361
  root,
5378
5362
  selection,
5379
- state,
5380
- nodeIndexMap
5363
+ state
5381
5364
  } = useEditor();
5382
- const sortedSelection = computed(() => {
5383
- return selection.value.map((node) => {
5384
- return {
5385
- node,
5386
- index: nodeIndexMap.get(node.id) ?? 0
5387
- };
5388
- }).sort((a, b) => a.index - b.index).map((v) => v.node);
5389
- });
5390
5365
  const {
5391
5366
  selecting,
5392
5367
  openedItems,
5393
5368
  domItems,
5394
5369
  getIdByNode
5395
- } = createLayer({
5396
- sortedSelection
5397
- });
5370
+ } = createLayer();
5398
5371
  watch(selection, (selection2) => {
5399
5372
  if (state.value === "selecting" || selecting.value) {
5400
5373
  return;
@@ -10485,6 +10458,23 @@ const _pen = definePlugin((editor) => {
10485
10458
  ]
10486
10459
  };
10487
10460
  });
10461
+ const _rotate = definePlugin((editor) => {
10462
+ const {
10463
+ elementSelection
10464
+ } = editor;
10465
+ function rotate(deg) {
10466
+ elementSelection.value.forEach((el) => {
10467
+ el.style.rotate += deg;
10468
+ });
10469
+ }
10470
+ return {
10471
+ name: "mce:rotate",
10472
+ commands: [
10473
+ { command: "rotate", handle: rotate },
10474
+ { command: "rotate90", handle: () => rotate(90) }
10475
+ ]
10476
+ };
10477
+ });
10488
10478
  const _hoisted_1$g = {
10489
10479
  key: 0,
10490
10480
  class: "mce-tooltip__arrow"
@@ -13588,6 +13578,7 @@ const plugins = [
13588
13578
  _open,
13589
13579
  _panels,
13590
13580
  _pen,
13581
+ _rotate,
13591
13582
  _ruler,
13592
13583
  _saveAs,
13593
13584
  _scroll,
@@ -0,0 +1,10 @@
1
+ declare global {
2
+ namespace Mce {
3
+ interface Commands {
4
+ rotate: (deg: number) => void;
5
+ rotate90: () => void;
6
+ }
7
+ }
8
+ }
9
+ declare const _default: import("..").Plugin;
10
+ export default _default;
@@ -53,6 +53,7 @@ import './plugins/node'
53
53
  import './plugins/open'
54
54
  import './plugins/panels'
55
55
  import './plugins/pen'
56
+ import './plugins/rotate'
56
57
  import './plugins/ruler'
57
58
  import './plugins/saveAs'
58
59
  import './plugins/scroll'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mce",
3
3
  "type": "module",
4
- "version": "0.15.7",
4
+ "version": "0.15.8",
5
5
  "description": "The headless canvas editor framework. only the ESM.",
6
6
  "author": "wxm",
7
7
  "license": "MIT",
@@ -61,10 +61,10 @@
61
61
  "diff": "^8.0.2",
62
62
  "file-saver": "^2.0.5",
63
63
  "lodash-es": "^4.17.22",
64
- "modern-canvas": "^0.14.22",
64
+ "modern-canvas": "^0.14.23",
65
65
  "modern-font": "^0.4.4",
66
66
  "modern-idoc": "^0.10.8",
67
- "modern-text": "^1.10.6",
67
+ "modern-text": "^1.10.7",
68
68
  "yjs": "^13.6.28"
69
69
  },
70
70
  "peerDependencies": {