mce 0.12.5 → 0.13.0

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.
package/README.md CHANGED
@@ -61,6 +61,9 @@ npm i mce
61
61
  localDb: false,
62
62
  customUpload: async (blob) => URL.createObjectURL(blob),
63
63
  customContextMenu: (menu) => menu,
64
+ locale: {
65
+ locale: 'zhHans', // default 'en'
66
+ },
64
67
  defaultFont: { family: 'SourceHanSansCN-Normal', src: '/SourceHanSansCN-Normal.woff' },
65
68
  doc: {
66
69
  children: [
@@ -40,9 +40,9 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
40
40
  default: undefined;
41
41
  };
42
42
  }>> & Readonly<{}>, {
43
+ offset: number;
43
44
  location: import("@floating-ui/vue").Side | "left-end" | "left-start" | "right-end" | "right-start" | "top-end" | "top-start" | "bottom-end" | "bottom-start";
44
45
  attach: string | boolean | Element | null | undefined;
45
- offset: number;
46
46
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
47
47
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
48
48
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,41 @@
1
+ import type { Node } from 'modern-canvas';
2
+ import type { PropType } from 'vue';
3
+ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ root: BooleanConstructor;
5
+ node: {
6
+ type: PropType<Node>;
7
+ required: true;
8
+ };
9
+ active: BooleanConstructor;
10
+ indent: {
11
+ type: NumberConstructor;
12
+ default: number;
13
+ };
14
+ opened: {
15
+ type: PropType<boolean>;
16
+ };
17
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
+ "update:opened": (value: boolean) => any;
19
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
20
+ root: BooleanConstructor;
21
+ node: {
22
+ type: PropType<Node>;
23
+ required: true;
24
+ };
25
+ active: BooleanConstructor;
26
+ indent: {
27
+ type: NumberConstructor;
28
+ default: number;
29
+ };
30
+ opened: {
31
+ type: PropType<boolean>;
32
+ };
33
+ }>> & Readonly<{
34
+ "onUpdate:opened"?: ((value: boolean) => any) | undefined;
35
+ }>, {
36
+ root: boolean;
37
+ active: boolean;
38
+ indent: number;
39
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
40
+ declare const _default: typeof __VLS_export;
41
+ export default _default;
@@ -93,11 +93,11 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
93
93
  }, string, {
94
94
  color: string;
95
95
  visibility: "visible" | "none" | "auto";
96
+ resizable: boolean;
96
97
  tag: string | any;
97
98
  resizeStrategy: "free" | "aspectRatio" | "diagonalAspectRatio";
98
99
  moveable: boolean;
99
100
  rotatable: boolean;
100
- resizable: boolean;
101
101
  threshold: number;
102
102
  handleStrategy: "default" | "point";
103
103
  handleColor: string;
@@ -125,11 +125,11 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
125
125
  } & Readonly<{
126
126
  color: string;
127
127
  visibility: "visible" | "none" | "auto";
128
+ resizable: boolean;
128
129
  tag: string | any;
129
130
  resizeStrategy: "free" | "aspectRatio" | "diagonalAspectRatio";
130
131
  moveable: boolean;
131
132
  rotatable: boolean;
132
- resizable: boolean;
133
133
  threshold: number;
134
134
  handleStrategy: "default" | "point";
135
135
  handleColor: string;
@@ -156,7 +156,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
156
156
  onEnd?: ((args_0: OrientedBoundingBox) => any) | undefined;
157
157
  onStart?: ((args_0: OrientedBoundingBox) => any) | undefined;
158
158
  "onUpdate:modelValue"?: ((args_0: OrientedBoundingBox) => any) | undefined;
159
- }>, "start" | "transforming" | "activeHandle" | ("color" | "visibility" | "tag" | "resizeStrategy" | "moveable" | "rotatable" | "resizable" | "threshold" | "handleStrategy" | "handleColor" | "handles")> & import("vue").ShallowUnwrapRef<{
159
+ }>, "start" | "transforming" | "activeHandle" | ("color" | "visibility" | "resizable" | "tag" | "resizeStrategy" | "moveable" | "rotatable" | "threshold" | "handleStrategy" | "handleColor" | "handles")> & import("vue").ShallowUnwrapRef<{
160
160
  start: (event?: MouseEvent, index?: number) => boolean;
161
161
  activeHandle: import("vue").Ref<("move" | "rotate-top-left" | "rotate-top-right" | "rotate-bottom-left" | "rotate-bottom-right" | "resize-top" | "resize-right" | "resize-bottom" | "resize-left" | "resize-top-left" | "resize-top-right" | "resize-bottom-left" | "resize-bottom-right") | undefined, ("move" | "rotate-top-left" | "rotate-top-right" | "rotate-bottom-left" | "rotate-bottom-right" | "resize-top" | "resize-right" | "resize-bottom" | "resize-left" | "resize-top-left" | "resize-top-right" | "resize-bottom-left" | "resize-bottom-right") | undefined>;
162
162
  transforming: import("vue").Ref<boolean, boolean>;
@@ -164,11 +164,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
164
164
  $slots: {
165
165
  default?: (props: {
166
166
  value: Partial<OrientedBoundingBox> | undefined;
167
- moveProps: {
167
+ props: {
168
168
  onPointerdown: (event?: MouseEvent, index?: number) => boolean;
169
- style: {
170
- cursor: string;
171
- };
172
169
  };
173
170
  start: (event?: MouseEvent, index?: number) => boolean;
174
171
  }) => any;
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,26 @@
1
+ import type { OrientedBoundingBox } from '../../types';
2
+ type __VLS_Props = {
3
+ title?: string;
4
+ defaultTransform?: Partial<OrientedBoundingBox>;
5
+ };
6
+ type __VLS_ModelProps = {
7
+ modelValue?: boolean;
8
+ };
9
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
+ declare var __VLS_20: {};
11
+ type __VLS_Slots = {} & {
12
+ default?: (props: typeof __VLS_20) => any;
13
+ };
14
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ "update:modelValue": (value: boolean | undefined) => any;
16
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
17
+ "onUpdate:modelValue"?: ((value: boolean | undefined) => any) | undefined;
18
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
+ declare const _default: typeof __VLS_export;
21
+ export default _default;
22
+ type __VLS_WithSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
@@ -57,9 +57,9 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
57
57
  }>> & Readonly<{
58
58
  "onUpdate:modelValue"?: ((value: boolean | undefined) => any) | undefined;
59
59
  }>, {
60
+ offset: number;
60
61
  location: import("@floating-ui/vue").Side | "left-end" | "left-start" | "right-end" | "right-start" | "top-end" | "top-start" | "bottom-end" | "bottom-start";
61
62
  attach: string | boolean | Element | null | undefined;
62
- offset: number;
63
63
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
64
64
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
65
65
  declare const _default: typeof __VLS_export;
@@ -21,11 +21,8 @@ type __VLS_Props = {
21
21
  declare function start(event?: MouseEvent, index?: number): boolean;
22
22
  declare var __VLS_7: {
23
23
  value: Partial<OrientedBoundingBox> | undefined;
24
- moveProps: {
24
+ props: {
25
25
  onPointerdown: typeof start;
26
- style: {
27
- cursor: string;
28
- };
29
26
  };
30
27
  start: typeof start;
31
28
  }, __VLS_9: {
@@ -59,11 +56,11 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
59
56
  }>, {
60
57
  color: string;
61
58
  visibility: "visible" | "none" | "auto";
59
+ resizable: boolean;
62
60
  tag: string | any;
63
61
  resizeStrategy: "free" | "aspectRatio" | "diagonalAspectRatio";
64
62
  moveable: boolean;
65
63
  rotatable: boolean;
66
- resizable: boolean;
67
64
  threshold: number;
68
65
  handleStrategy: "default" | "point";
69
66
  handleColor: string;
@@ -1,6 +1,7 @@
1
1
  export * from './editor';
2
2
  export * from './icon';
3
3
  export * from './icons';
4
+ export * from './layer';
4
5
  export * from './layout';
5
6
  export * from './menu';
6
7
  export * from './overlay';
@@ -0,0 +1,33 @@
1
+ import type { Node } from 'modern-canvas';
2
+ import type { ComponentInternalInstance, InjectionKey, Ref } from 'vue';
3
+ interface LayerProvide {
4
+ selecting: Ref<boolean>;
5
+ sortedSelection: Ref<Node[]>;
6
+ register: (vm: ComponentInternalInstance, options: {
7
+ id: string;
8
+ dom: Ref<HTMLElement | undefined>;
9
+ opened: Ref<boolean>;
10
+ }) => void;
11
+ unregister: (id: string) => void;
12
+ }
13
+ export declare const MceLayerKey: InjectionKey<LayerProvide>;
14
+ export declare const MceLayerItemKey: InjectionKey<{
15
+ id: string;
16
+ }>;
17
+ export declare function createLayer(options: {
18
+ sortedSelection: Ref<Node[]>;
19
+ }): {
20
+ selecting: Ref<boolean, boolean>;
21
+ openedItems: import("vue").Reactive<Map<string, Ref<boolean, boolean>>>;
22
+ domItems: import("vue").Reactive<Map<string, Ref<HTMLElement | undefined, HTMLElement | undefined>>>;
23
+ };
24
+ export declare function useLayerItem(options: {
25
+ id: string;
26
+ node: Ref<Node>;
27
+ opened: Ref<boolean>;
28
+ dom: Ref<HTMLElement | undefined>;
29
+ }): {
30
+ selecting: Ref<boolean>;
31
+ sortedSelection: Ref<Node[]>;
32
+ };
33
+ export {};
package/dist/index.css CHANGED
@@ -205,6 +205,156 @@
205
205
  border-style: solid;
206
206
  border-width: 2px;
207
207
  color: rgba(var(--mce-theme-primary), 1);
208
+ }.mce-btn {
209
+ padding: 4px;
210
+ border-radius: 4px;
211
+ height: 24px;
212
+ width: 24px;
213
+ font-size: 12px;
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ }.mce-layer {
218
+ position: relative;
219
+ flex: none;
220
+ display: flex;
221
+ align-items: center;
222
+ height: 32px;
223
+ font-size: 12px;
224
+ padding-left: var(--indent-padding, 0);
225
+ width: 100%;
226
+ min-width: max-content;
227
+ border-radius: 4px;
228
+ }
229
+ .mce-layer:before {
230
+ content: "";
231
+ position: absolute;
232
+ left: 0;
233
+ right: 0;
234
+ top: 4px;
235
+ bottom: 4px;
236
+ background-color: var(--underlay-color, transparent);
237
+ pointer-events: none;
238
+ border-radius: inherit;
239
+ }
240
+ .mce-layer:after {
241
+ content: "";
242
+ position: absolute;
243
+ left: 0;
244
+ right: 0;
245
+ top: 4px;
246
+ bottom: 4px;
247
+ background-color: var(--overlay-color, transparent);
248
+ pointer-events: none;
249
+ border-radius: inherit;
250
+ }
251
+ .mce-layer--root {
252
+ margin-bottom: 4px;
253
+ font-weight: bold;
254
+ }
255
+ .mce-layer--root .mce-layer__thumbnail {
256
+ display: none;
257
+ }
258
+ .mce-layer--hover {
259
+ --overlay-color: rgba(var(--mce-theme-on-background), var(--mce-hover-opacity));
260
+ }
261
+ .mce-layer--active:before {
262
+ top: 0;
263
+ bottom: 0;
264
+ border-radius: 0;
265
+ }
266
+ .mce-layer--first:before {
267
+ border-top-left-radius: 4px;
268
+ border-top-right-radius: 4px;
269
+ top: 4px;
270
+ }
271
+ .mce-layer--last:before {
272
+ border-bottom-left-radius: 4px;
273
+ border-bottom-right-radius: 4px;
274
+ bottom: 4px;
275
+ }
276
+ .mce-layer--active {
277
+ --underlay-color: rgba(var(--mce-theme-primary), calc(var(--mce-activated-opacity) * 3));
278
+ }
279
+ .mce-layer--active:hover {
280
+ --overlay-color: rgba(var(--mce-theme-primary), var(--mce-hover-opacity));
281
+ }
282
+ .mce-layer--open .mce-layer__expand .mce-icon {
283
+ transform: rotate(90deg);
284
+ }
285
+ .mce-layer__expand {
286
+ display: flex;
287
+ align-items: center;
288
+ width: 16px;
289
+ height: 100%;
290
+ flex: none;
291
+ }
292
+ .mce-layer__content {
293
+ flex: 1;
294
+ display: flex;
295
+ align-items: center;
296
+ height: 100%;
297
+ }
298
+ .mce-layer__thumbnail {
299
+ display: flex;
300
+ align-items: center;
301
+ width: 12px;
302
+ height: 100%;
303
+ font-size: 12px;
304
+ overflow: hidden;
305
+ margin-right: 4px;
306
+ }
307
+ .mce-layer__name {
308
+ position: relative;
309
+ flex: 1;
310
+ }
311
+ .mce-layer__input {
312
+ position: absolute;
313
+ left: 0;
314
+ top: 0;
315
+ padding: 0;
316
+ width: 100%;
317
+ height: 100%;
318
+ border: none;
319
+ outline: 1px solid rgb(var(--mce-theme-primary));
320
+ font-size: inherit;
321
+ font-weight: inherit;
322
+ border-radius: 2px;
323
+ }
324
+ .mce-layer__action {
325
+ flex: none;
326
+ display: flex;
327
+ align-items: center;
328
+ }
329
+ .mce-btn--hide {
330
+ opacity: 0;
331
+ }
332
+ .mce-btn:hover {
333
+ background-color: rgb(var(--mce-theme-background));
334
+ }
335
+ .mce-btn + .mce-btn {
336
+ margin-left: -4px;
337
+ }.mce-layers {
338
+ position: relative;
339
+ width: 100%;
340
+ height: 100%;
341
+ min-width: auto;
342
+ overflow: auto;
343
+ background-color: rgb(var(--mce-theme-surface));
344
+ }
345
+ .mce-layers__wrapper {
346
+ padding: 8px;
347
+ width: max-content;
348
+ min-width: 100%;
349
+ }
350
+ .mce-layers .mce-layer__expand {
351
+ opacity: 0;
352
+ }
353
+ .mce-layers .mce-layer--root:hover .mce-layer__expand {
354
+ opacity: 1;
355
+ }
356
+ .mce-layers:hover .mce-layer:not(.mce-layer--root) .mce-layer__expand {
357
+ opacity: 1;
208
358
  }.mce-tooltip {
209
359
  background: rgb(var(--mce-theme-surface-variant));
210
360
  color: rgb(var(--mce-theme-on-surface-variant));
@@ -303,7 +453,6 @@
303
453
  }.mce-transformable {
304
454
  left: 0;
305
455
  top: 0;
306
- color: rgb(var(--mce-theme-primary));
307
456
  }
308
457
  .mce-transformable__svg {
309
458
  position: absolute;
@@ -313,6 +462,7 @@
313
462
  height: 100%;
314
463
  overflow: visible;
315
464
  pointer-events: none;
465
+ color: rgb(var(--mce-theme-primary));
316
466
  }
317
467
  .mce-transformable__box {
318
468
  stroke: currentColor;
@@ -363,6 +513,34 @@
363
513
  border-width: 1px;
364
514
  border-style: solid;
365
515
  color: rgba(var(--mce-theme-primary), 1);
516
+ }.mce-float-panel {
517
+ position: absolute;
518
+ pointer-events: auto !important;
519
+ }
520
+ .mce-float-panel__card {
521
+ display: flex;
522
+ flex-direction: column;
523
+ width: 100%;
524
+ height: 100%;
525
+ border-radius: 12px;
526
+ background-color: rgb(var(--mce-theme-surface));
527
+ box-shadow: var(--mce-shadow);
528
+ overflow: hidden;
529
+ }
530
+ .mce-float-panel__title {
531
+ display: flex;
532
+ justify-content: space-between;
533
+ align-items: center;
534
+ padding: 8px;
535
+ font-size: 12px;
536
+ font-weight: bold;
537
+ border-bottom: 1px solid rgba(var(--mce-border-color), var(--mce-border-opacity));
538
+ }
539
+ .mce-float-panel__content {
540
+ position: relative;
541
+ width: 100%;
542
+ height: 100%;
543
+ overflow-y: auto;
366
544
  }.mce-layout {
367
545
  --mce-scrollbar-offset: 0px;
368
546
  display: flex;
@@ -825,105 +1003,6 @@
825
1003
  width: 100%;
826
1004
  height: 100%;
827
1005
  display: block;
828
- }.mce-layer-item {
829
- flex: none;
830
- display: flex;
831
- align-items: center;
832
- height: 24px;
833
- font-size: 12px;
834
- border-radius: 4px;
835
- padding-left: var(--indent-padding, 0);
836
- width: 100%;
837
- min-width: max-content;
838
- }
839
- .mce-layer-item:hover {
840
- background-color: rgba(var(--mce-theme-on-background), var(--mce-hover-opacity));
841
- }
842
- .mce-layer-item__expand {
843
- display: flex;
844
- align-items: center;
845
- width: 16px;
846
- height: 100%;
847
- opacity: 0;
848
- flex: none;
849
- }
850
- .mce-layer-item__content {
851
- flex: 1;
852
- display: flex;
853
- align-items: center;
854
- height: 100%;
855
- }
856
- .mce-layer-item__thumbnail {
857
- display: flex;
858
- align-items: center;
859
- width: 12px;
860
- height: 100%;
861
- font-size: 12px;
862
- overflow: hidden;
863
- }
864
- .mce-layer-item__name {
865
- padding: 0 8px;
866
- }
867
- .mce-layer-item__name-input {
868
- border: none;
869
- padding: 0;
870
- outline: none;
871
- font-size: inherit;
872
- font-weight: inherit;
873
- }
874
- .mce-layer {
875
- flex: none;
876
- display: flex;
877
- flex-direction: column;
878
- gap: 8px;
879
- border-radius: 4px;
880
- width: 100%;
881
- min-width: max-content;
882
- }
883
- .mce-layer--active {
884
- background-color: rgba(var(--mce-theme-primary), var(--mce-activated-opacity));
885
- }
886
- .mce-layer--opened .mce-layer-item__expand .mce-icon {
887
- transform: rotate(90deg);
888
- }
889
- .mce-layers {
890
- position: relative;
891
- display: flex;
892
- flex-direction: column;
893
- gap: 8px;
894
- width: 100%;
895
- height: 100%;
896
- min-width: auto;
897
- padding: 8px;
898
- overflow: auto;
899
- background-color: rgb(var(--mce-theme-surface));
900
- }
901
- .mce-layers:hover .mce-layer-item__expand {
902
- opacity: 1;
903
- }
904
- .mce-layers__action {
905
- position: absolute;
906
- padding-right: 8px;
907
- height: 24px;
908
- display: flex;
909
- align-items: center;
910
- background-color: rgb(var(--mce-theme-surface));
911
- }
912
- .mce-btn {
913
- padding: 4px;
914
- border-radius: 4px;
915
- height: 24px;
916
- width: 24px;
917
- font-size: 12px;
918
- display: flex;
919
- align-items: center;
920
- justify-content: center;
921
- }
922
- .mce-btn:hover {
923
- background-color: rgb(var(--mce-theme-background));
924
- }
925
- .mce-btn + .mce-btn {
926
- margin-left: -4px;
927
1006
  }.mce-dialog > * {
928
1007
  box-shadow: var(--mce-shadow);
929
1008
  }