@jvs-milkdown/crepe 1.2.0 → 1.2.2

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 (75) hide show
  1. package/lib/cjs/builder.js +55 -2
  2. package/lib/cjs/builder.js.map +1 -1
  3. package/lib/cjs/feature/block-edit/index.js +73 -5
  4. package/lib/cjs/feature/block-edit/index.js.map +1 -1
  5. package/lib/cjs/feature/code-mirror/index.js +65 -3
  6. package/lib/cjs/feature/code-mirror/index.js.map +1 -1
  7. package/lib/cjs/feature/cursor/index.js +55 -2
  8. package/lib/cjs/feature/cursor/index.js.map +1 -1
  9. package/lib/cjs/feature/image-block/index.js +76 -8
  10. package/lib/cjs/feature/image-block/index.js.map +1 -1
  11. package/lib/cjs/feature/latex/index.js +55 -2
  12. package/lib/cjs/feature/latex/index.js.map +1 -1
  13. package/lib/cjs/feature/link-tooltip/index.js +55 -2
  14. package/lib/cjs/feature/link-tooltip/index.js.map +1 -1
  15. package/lib/cjs/feature/list-item/index.js +55 -2
  16. package/lib/cjs/feature/list-item/index.js.map +1 -1
  17. package/lib/cjs/feature/placeholder/index.js +55 -2
  18. package/lib/cjs/feature/placeholder/index.js.map +1 -1
  19. package/lib/cjs/feature/table/index.js +55 -2
  20. package/lib/cjs/feature/table/index.js.map +1 -1
  21. package/lib/cjs/feature/toolbar/index.js +73 -5
  22. package/lib/cjs/feature/toolbar/index.js.map +1 -1
  23. package/lib/cjs/index.js +457 -31
  24. package/lib/cjs/index.js.map +1 -1
  25. package/lib/esm/builder.js +55 -2
  26. package/lib/esm/builder.js.map +1 -1
  27. package/lib/esm/feature/block-edit/index.js +73 -5
  28. package/lib/esm/feature/block-edit/index.js.map +1 -1
  29. package/lib/esm/feature/code-mirror/index.js +65 -3
  30. package/lib/esm/feature/code-mirror/index.js.map +1 -1
  31. package/lib/esm/feature/cursor/index.js +55 -2
  32. package/lib/esm/feature/cursor/index.js.map +1 -1
  33. package/lib/esm/feature/image-block/index.js +76 -8
  34. package/lib/esm/feature/image-block/index.js.map +1 -1
  35. package/lib/esm/feature/latex/index.js +55 -2
  36. package/lib/esm/feature/latex/index.js.map +1 -1
  37. package/lib/esm/feature/link-tooltip/index.js +55 -2
  38. package/lib/esm/feature/link-tooltip/index.js.map +1 -1
  39. package/lib/esm/feature/list-item/index.js +55 -2
  40. package/lib/esm/feature/list-item/index.js.map +1 -1
  41. package/lib/esm/feature/placeholder/index.js +55 -2
  42. package/lib/esm/feature/placeholder/index.js.map +1 -1
  43. package/lib/esm/feature/table/index.js +55 -2
  44. package/lib/esm/feature/table/index.js.map +1 -1
  45. package/lib/esm/feature/toolbar/index.js +73 -5
  46. package/lib/esm/feature/toolbar/index.js.map +1 -1
  47. package/lib/esm/index.js +458 -32
  48. package/lib/esm/index.js.map +1 -1
  49. package/lib/theme/common/code-mirror.css +13 -0
  50. package/lib/theme/common/image-block.css +324 -22
  51. package/lib/theme/common/reset.css +3 -0
  52. package/lib/theme/common/toolbar.css +27 -2
  53. package/lib/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +4 -4
  55. package/src/core/locale.ts +55 -0
  56. package/src/feature/block-edit/menu/config.ts +19 -3
  57. package/src/feature/code-mirror/index.ts +3 -0
  58. package/src/feature/fixed-toolbar/component.tsx +31 -2
  59. package/src/feature/fixed-toolbar/config.ts +18 -3
  60. package/src/feature/fixed-toolbar/document-header.tsx +8 -4
  61. package/src/feature/fixed-toolbar/index.ts +18 -1
  62. package/src/feature/fixed-toolbar/menu-bar.tsx +91 -3
  63. package/src/feature/fixed-toolbar/shortcut-help-modal.tsx +244 -0
  64. package/src/feature/fixed-toolbar/view-menu-state.ts +9 -0
  65. package/src/feature/image-block/index.ts +11 -1
  66. package/src/icons/border.ts +5 -0
  67. package/src/icons/close.ts +3 -0
  68. package/src/icons/crop.ts +6 -0
  69. package/src/icons/index.ts +5 -0
  70. package/src/icons/keyboard.ts +3 -0
  71. package/src/icons/word-wrap.ts +6 -0
  72. package/src/theme/common/code-mirror.css +13 -0
  73. package/src/theme/common/image-block.css +368 -23
  74. package/src/theme/common/reset.css +3 -0
  75. package/src/theme/common/toolbar.css +30 -2
@@ -35,6 +35,10 @@
35
35
  background: transparent;
36
36
  }
37
37
 
38
+ .milkdown .milkdown-code-block .cm-activeLineGutter {
39
+ background-color: #f5f5f5;
40
+ }
41
+
38
42
  .milkdown .milkdown-code-block .cm-panel {
39
43
  font-family: var(--crepe-font-default);
40
44
  background: transparent;
@@ -152,6 +156,15 @@
152
156
  border-bottom-right-radius: 100px;
153
157
  }
154
158
 
159
+ .milkdown .milkdown-code-block .tools .tools-button-group button.word-wrap-active {
160
+ background: var(--crepe-color-selected);
161
+ color: var(--crepe-color-primary);
162
+ }
163
+
164
+ .milkdown .milkdown-code-block .tools .tools-button-group button.word-wrap-active svg {
165
+ stroke: var(--crepe-color-primary);
166
+ }
167
+
155
168
  .milkdown .milkdown-code-block .tools .language-button {
156
169
  display: flex;
157
170
  align-items: center;
@@ -160,11 +160,16 @@
160
160
  outline: none;
161
161
  margin: 4px 0;
162
162
  display: block;
163
+ position: relative;
163
164
  }
165
+ .milkdown .milkdown-image-block:hover {
166
+ z-index: 120;
167
+ }
164
168
  .milkdown .milkdown-image-block > .image-wrapper {
165
169
  position: relative;
166
170
  width: -moz-fit-content;
167
171
  width: fit-content;
172
+ max-width: 100%;
168
173
  margin: 0 auto;
169
174
  min-width: 100px;
170
175
  }
@@ -174,13 +179,6 @@
174
179
  .milkdown .milkdown-image-block[data-align='right'] > .image-wrapper {
175
180
  margin: 0 0 0 auto;
176
181
  }
177
- .milkdown .milkdown-image-block > .image-wrapper .operation {
178
- position: absolute;
179
- display: flex;
180
- }
181
- .milkdown .milkdown-image-block > .image-wrapper .operation > .operation-item {
182
- cursor: pointer;
183
- }
184
182
  .milkdown .milkdown-image-block > .image-wrapper img {
185
183
  max-width: 100%;
186
184
  min-height: 100px;
@@ -262,28 +260,58 @@
262
260
  justify-content: center;
263
261
  align-items: center;
264
262
  }
265
- .milkdown .milkdown-image-block .image-wrapper .operation {
266
- gap: 12px;
267
- right: 12px;
268
- top: 12px;
263
+ .milkdown .milkdown-image-block .image-wrapper.cropping {
264
+ outline: none !important;
265
+ }
266
+ .milkdown .milkdown-image-block .image-toolbar {
267
+ position: absolute;
268
+ bottom: calc(100% + 8px);
269
+ left: 50%;
270
+ transform: translateX(-50%);
271
+ display: flex;
272
+ align-items: center;
273
+ justify-content: center;
274
+ gap: 4px;
275
+ padding: 4px 8px;
276
+ background: var(--crepe-color-surface);
277
+ border-radius: 8px;
278
+ box-shadow: var(--crepe-shadow-1);
269
279
  opacity: 0;
270
- transition: all 0.2s;
280
+ pointer-events: none;
281
+ transition: opacity 0.2s;
282
+ width: -moz-fit-content;
283
+ width: fit-content;
284
+ z-index: 10;
285
+ white-space: nowrap;
271
286
  }
272
- .milkdown .milkdown-image-block:hover > .image-wrapper .operation {
287
+ .milkdown .milkdown-image-block .image-toolbar::after {
288
+ content: '';
289
+ position: absolute;
290
+ left: 0;
291
+ right: 0;
292
+ bottom: -8px;
293
+ height: 8px;
294
+ }
295
+ .milkdown .milkdown-image-block:hover > .image-toolbar {
273
296
  opacity: 1;
297
+ pointer-events: auto;
274
298
  }
275
- .milkdown .milkdown-image-block .image-wrapper .operation > .operation-item {
276
- color: var(--crepe-color-on-inverse);
277
- padding: 4px;
278
- background: var(--crepe-color-inverse);
279
- opacity: 0.6;
280
- border-radius: 50%;
299
+ .milkdown .milkdown-image-block .image-toolbar-item {
300
+ display: flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ cursor: pointer;
281
304
  width: 32px;
282
305
  height: 32px;
306
+ border-radius: 6px;
307
+ color: var(--crepe-color-on-surface-variant);
283
308
  }
284
- .milkdown .milkdown-image-block .image-wrapper .operation > .operation-item svg {
285
- width: 24px;
286
- height: 24px;
309
+ .milkdown .milkdown-image-block .image-toolbar-item svg {
310
+ width: 20px;
311
+ height: 20px;
312
+ }
313
+ .milkdown .milkdown-image-block .image-toolbar-item:hover {
314
+ background: var(--crepe-color-hover);
287
315
  }
288
316
  .milkdown .milkdown-image-block .image-wrapper .image-resize-handle {
289
317
  position: absolute;
@@ -401,3 +429,277 @@
401
429
  ),
402
430
  var(--crepe-color-secondary);
403
431
  }
432
+ .milkdown .milkdown-image-block .setting-panel {
433
+ position: absolute;
434
+ top: 44px;
435
+ right: 0;
436
+ z-index: 10;
437
+ background: var(--crepe-color-surface);
438
+ border-radius: 8px;
439
+ box-shadow: var(--crepe-shadow-1);
440
+ padding: 12px;
441
+ min-width: 200px;
442
+ }
443
+ .milkdown .milkdown-image-block .setting-panel-title {
444
+ font-size: 12px;
445
+ font-weight: 600;
446
+ color: var(--crepe-color-on-surface-variant);
447
+ margin-bottom: 8px;
448
+ text-transform: uppercase;
449
+ font-family: var(--crepe-font-default);
450
+ }
451
+ .milkdown .milkdown-image-block .crop-options {
452
+ display: flex;
453
+ gap: 4px;
454
+ flex-wrap: wrap;
455
+ }
456
+ .milkdown .milkdown-image-block .crop-option {
457
+ padding: 4px 12px;
458
+ border-radius: 4px;
459
+ font-size: 12px;
460
+ font-weight: 600;
461
+ cursor: pointer;
462
+ background: var(--crepe-color-surface-low);
463
+ color: var(--crepe-color-on-surface-variant);
464
+ font-family: var(--crepe-font-default);
465
+ }
466
+ .milkdown .milkdown-image-block .crop-option:hover {
467
+ background: var(--crepe-color-hover);
468
+ }
469
+ .milkdown .milkdown-image-block .crop-option.active {
470
+ background: var(--crepe-color-selected);
471
+ color: var(--crepe-color-primary);
472
+ }
473
+ .milkdown .milkdown-image-block .setting-row {
474
+ display: flex;
475
+ align-items: center;
476
+ gap: 8px;
477
+ margin-bottom: 8px;
478
+ }
479
+ .milkdown .milkdown-image-block .setting-label {
480
+ font-size: 12px;
481
+ font-weight: 600;
482
+ color: var(--crepe-color-on-surface-variant);
483
+ min-width: 32px;
484
+ font-family: var(--crepe-font-default);
485
+ }
486
+ .milkdown .milkdown-image-block .setting-value {
487
+ font-size: 12px;
488
+ color: var(--crepe-color-on-surface-variant);
489
+ min-width: 30px;
490
+ font-family: var(--crepe-font-default);
491
+ }
492
+ .milkdown .milkdown-image-block .border-style-options {
493
+ display: flex;
494
+ gap: 4px;
495
+ }
496
+ .milkdown .milkdown-image-block .border-style-option {
497
+ padding: 4px 10px;
498
+ border-radius: 4px;
499
+ font-size: 12px;
500
+ font-weight: 600;
501
+ cursor: pointer;
502
+ background: var(--crepe-color-surface-low);
503
+ color: var(--crepe-color-on-surface-variant);
504
+ font-family: var(--crepe-font-default);
505
+ }
506
+ .milkdown .milkdown-image-block .border-style-option:hover {
507
+ background: var(--crepe-color-hover);
508
+ }
509
+ .milkdown .milkdown-image-block .border-style-option.active {
510
+ background: var(--crepe-color-selected);
511
+ color: var(--crepe-color-primary);
512
+ }
513
+ .milkdown .milkdown-image-block input[type='range'] {
514
+ flex: 1;
515
+ height: 4px;
516
+ accent-color: var(--crepe-color-primary);
517
+ }
518
+ .milkdown .milkdown-image-block input[type='color'] {
519
+ width: 28px;
520
+ height: 28px;
521
+ padding: 0;
522
+ border: 1px solid var(--crepe-color-outline);
523
+ border-radius: 4px;
524
+ cursor: pointer;
525
+ background: transparent;
526
+ }
527
+ .milkdown .milkdown-image-block .crop-actions {
528
+ display: flex;
529
+ gap: 4px;
530
+ margin-top: 8px;
531
+ flex-wrap: wrap;
532
+ }
533
+ .milkdown .milkdown-image-block .crop-action-btn {
534
+ padding: 4px 12px;
535
+ border-radius: 4px;
536
+ font-size: 12px;
537
+ font-weight: 600;
538
+ cursor: pointer;
539
+ border: 1px solid var(--crepe-color-outline);
540
+ background: var(--crepe-color-surface-low);
541
+ color: var(--crepe-color-on-surface-variant);
542
+ font-family: var(--crepe-font-default);
543
+ }
544
+ .milkdown .milkdown-image-block .crop-action-btn:hover {
545
+ background: var(--crepe-color-hover);
546
+ }
547
+ .milkdown .milkdown-image-block .crop-action-btn.primary {
548
+ background: var(--crepe-color-primary);
549
+ color: #fff;
550
+ border-color: var(--crepe-color-primary);
551
+ }
552
+ .milkdown .milkdown-image-block .crop-overlay {
553
+ position: absolute;
554
+ inset: 0;
555
+ z-index: 5;
556
+ overflow: hidden;
557
+ display: flex;
558
+ flex-direction: column;
559
+ justify-content: flex-end;
560
+ }
561
+ .milkdown .milkdown-image-block .crop-box {
562
+ position: absolute;
563
+ /* border: 2px solid transparent; */
564
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5);
565
+ cursor: move;
566
+ z-index: 2;
567
+ }
568
+ .milkdown .milkdown-image-block .crop-grid {
569
+ position: absolute;
570
+ inset: 0;
571
+ pointer-events: none;
572
+ }
573
+ .milkdown .milkdown-image-block .crop-grid-line {
574
+ position: absolute;
575
+ background: rgba(255, 255, 255, 0.4);
576
+ }
577
+ .milkdown .milkdown-image-block .crop-grid-line.horizontal {
578
+ left: 0;
579
+ right: 0;
580
+ height: 1px;
581
+ }
582
+ .milkdown .milkdown-image-block .crop-grid-line.horizontal.first {
583
+ top: 33.33%;
584
+ }
585
+ .milkdown .milkdown-image-block .crop-grid-line.horizontal.second {
586
+ top: 66.66%;
587
+ }
588
+ .milkdown .milkdown-image-block .crop-grid-line.vertical {
589
+ top: 0;
590
+ bottom: 0;
591
+ width: 1px;
592
+ }
593
+ .milkdown .milkdown-image-block .crop-grid-line.vertical.first {
594
+ left: 33.33%;
595
+ }
596
+ .milkdown .milkdown-image-block .crop-grid-line.vertical.second {
597
+ left: 66.66%;
598
+ }
599
+ .milkdown .milkdown-image-block .crop-handle {
600
+ position: absolute;
601
+ background: transparent;
602
+ z-index: 3;
603
+ }
604
+ .milkdown .milkdown-image-block .crop-handle.nw {
605
+ top: 0;
606
+ left: 0;
607
+ width: 20px;
608
+ height: 20px;
609
+ border-top: 2px solid #000;
610
+ border-left: 2px solid #000;
611
+ cursor: nwse-resize;
612
+ }
613
+ .milkdown .milkdown-image-block .crop-handle.ne {
614
+ top: 0;
615
+ right: 0;
616
+ width: 20px;
617
+ height: 20px;
618
+ border-top: 2px solid #000;
619
+ border-right: 2px solid #000;
620
+ cursor: nesw-resize;
621
+ }
622
+ .milkdown .milkdown-image-block .crop-handle.sw {
623
+ bottom: 0;
624
+ left: 0;
625
+ width: 20px;
626
+ height: 20px;
627
+ border-bottom: 2px solid #000;
628
+ border-left: 2px solid #000;
629
+ cursor: nesw-resize;
630
+ }
631
+ .milkdown .milkdown-image-block .crop-handle.se {
632
+ bottom: 0;
633
+ right: 0;
634
+ width: 20px;
635
+ height: 20px;
636
+ border-bottom: 2px solid #000;
637
+ border-right: 2px solid #000;
638
+ cursor: nwse-resize;
639
+ }
640
+ .milkdown .milkdown-image-block .crop-handle.n {
641
+ top: 0;
642
+ left: 50%;
643
+ transform: translateX(-50%);
644
+ width: 20px;
645
+ height: 0;
646
+ border-top: 2px solid #000;
647
+ cursor: ns-resize;
648
+ }
649
+ .milkdown .milkdown-image-block .crop-handle.s {
650
+ bottom: 0;
651
+ left: 50%;
652
+ transform: translateX(-50%);
653
+ width: 20px;
654
+ height: 0;
655
+ border-bottom: 2px solid #000;
656
+ cursor: ns-resize;
657
+ }
658
+ .milkdown .milkdown-image-block .crop-handle.w {
659
+ left: 0;
660
+ top: 50%;
661
+ transform: translateY(-50%);
662
+ width: 0;
663
+ height: 20px;
664
+ border-left: 2px solid #000;
665
+ cursor: ew-resize;
666
+ }
667
+ .milkdown .milkdown-image-block .crop-handle.e {
668
+ right: 0;
669
+ top: 50%;
670
+ transform: translateY(-50%);
671
+ width: 0;
672
+ height: 20px;
673
+ border-right: 2px solid #000;
674
+ cursor: ew-resize;
675
+ }
676
+ .milkdown .milkdown-image-block .crop-toolbar {
677
+ position: absolute;
678
+ bottom: 12px;
679
+ left: 50%;
680
+ transform: translateX(-50%);
681
+ display: flex;
682
+ gap: 8px;
683
+ z-index: 10;
684
+ background: var(--crepe-color-surface);
685
+ border-radius: 8px;
686
+ padding: 4px;
687
+ box-shadow: var(--crepe-shadow-1);
688
+ }
689
+ .milkdown .milkdown-image-block .crop-toolbar-btn {
690
+ width: 36px;
691
+ height: 36px;
692
+ display: flex;
693
+ align-items: center;
694
+ justify-content: center;
695
+ cursor: pointer;
696
+ border-radius: 6px;
697
+ color: var(--crepe-color-on-surface-variant);
698
+ }
699
+ .milkdown .milkdown-image-block .crop-toolbar-btn svg {
700
+ width: 20px;
701
+ height: 20px;
702
+ }
703
+ .milkdown .milkdown-image-block .crop-toolbar-btn:hover {
704
+ background: var(--crepe-color-hover);
705
+ }
@@ -237,6 +237,7 @@
237
237
  .milkdown .ProseMirror ul:has(mark) p:has(mark),
238
238
  .milkdown .ProseMirror ol:has(mark) p:has(mark) {
239
239
  padding: 4px 0;
240
+ margin: 0px;
240
241
  border: none;
241
242
  border-radius: 0;
242
243
  background-color: transparent;
@@ -260,6 +261,7 @@
260
261
  .milkdown .ProseMirror pre code {
261
262
  padding: 0;
262
263
  background: transparent;
264
+ color: var(--crepe-color-inline-code);
263
265
  }
264
266
 
265
267
  .milkdown .ProseMirror blockquote {
@@ -323,4 +325,5 @@
323
325
  .milkdown .ProseMirror ul,
324
326
  .milkdown .ProseMirror ol {
325
327
  padding: 0;
328
+ list-style: none;
326
329
  }
@@ -17,13 +17,14 @@
17
17
  }
18
18
  .milkdown .milkdown-toolbar .divider {
19
19
  width: 1px;
20
+ align-self: center;
20
21
  background: color-mix(
21
22
  in srgb,
22
23
  var(--crepe-color-outline),
23
24
  transparent 80%
24
25
  );
25
26
  height: 24px;
26
- margin: 10px;
27
+ margin: 0 4px;
27
28
  }
28
29
  .milkdown .milkdown-toolbar .toolbar-item {
29
30
  min-width: 32px;
@@ -33,6 +34,9 @@
33
34
  cursor: pointer;
34
35
  border-radius: 4px;
35
36
  }
37
+ .milkdown .milkdown-toolbar .toolbar-item:has(.milkdown-icon) {
38
+ padding: 2px 6px;
39
+ }
36
40
  .milkdown .milkdown-toolbar .toolbar-item:hover {
37
41
  background: var(--crepe-color-hover);
38
42
  }
@@ -72,15 +76,33 @@
72
76
  top: 0;
73
77
  flex-shrink: 0;
74
78
  }
79
+ .milkdown .milkdown-fixed-toolbar .toolbar-shortcut-btn {
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ flex-shrink: 0;
84
+ width: 28px;
85
+ height: 28px;
86
+ border: none;
87
+ background: transparent;
88
+ cursor: pointer;
89
+ border-radius: 4px;
90
+ color: var(--crepe-color-on-surface-variant, #666);
91
+ margin-left: 6px;
92
+ }
93
+ .milkdown .milkdown-fixed-toolbar .toolbar-shortcut-btn:hover {
94
+ background: var(--crepe-color-hover);
95
+ }
75
96
  .milkdown .milkdown-fixed-toolbar .divider {
76
97
  width: 1px;
98
+ align-self: center;
77
99
  background: color-mix(
78
100
  in srgb,
79
101
  var(--crepe-color-outline),
80
102
  transparent 80%
81
103
  );
82
104
  height: 20px;
83
- margin: 10px;
105
+ margin: 0 4px;
84
106
  }
85
107
  .milkdown .milkdown-fixed-toolbar .toolbar-item {
86
108
  min-width: 28px;
@@ -90,6 +112,9 @@
90
112
  cursor: pointer;
91
113
  border-radius: 4px;
92
114
  }
115
+ .milkdown .milkdown-fixed-toolbar .toolbar-item:has(.milkdown-icon) {
116
+ padding: 2px 6px;
117
+ }
93
118
  .milkdown .milkdown-fixed-toolbar .toolbar-item:hover {
94
119
  background: var(--crepe-color-hover);
95
120
  }