@moda-editor/core 0.1.1 → 0.1.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.
- package/dist/styles.css +135 -17
- package/package.json +1 -1
package/dist/styles.css
CHANGED
|
@@ -243,10 +243,12 @@
|
|
|
243
243
|
font-size: 0.88em;
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
-
/* 리스트 — li 안 문단은 자체 여백이 없다 (li가 줄 간격을 담당)
|
|
246
|
+
/* 리스트 — li 안 문단은 자체 여백이 없다 (li가 줄 간격을 담당).
|
|
247
|
+
* 패딩이 마커 열이다: outside 마커(•, 1.)가 텍스트 왼쪽에 붙어
|
|
248
|
+
* 그려지므로, 마커가 거터 구분선에 닿지 않을 만큼의 들여쓰기가 필요 */
|
|
247
249
|
.me-editor ul,
|
|
248
250
|
.me-editor ol {
|
|
249
|
-
padding-left:
|
|
251
|
+
padding-left: 2.1em;
|
|
250
252
|
}
|
|
251
253
|
.me-editor li > p {
|
|
252
254
|
margin: 0;
|
|
@@ -256,14 +258,15 @@
|
|
|
256
258
|
margin: 2px 0;
|
|
257
259
|
}
|
|
258
260
|
|
|
259
|
-
/* 할일 목록 — 마커는 ::before, 클릭 영역은 li의 왼쪽 패딩(~
|
|
261
|
+
/* 할일 목록 — 마커는 ::before, 클릭 영역은 li의 왼쪽 패딩(~24px).
|
|
262
|
+
* ul 패딩과 li 패딩을 더해 텍스트 시작점이 다른 리스트와 맞는다 */
|
|
260
263
|
.me-editor ul.me-tasks {
|
|
261
|
-
padding-left:
|
|
264
|
+
padding-left: 8px;
|
|
262
265
|
}
|
|
263
266
|
.me-editor li.me-task {
|
|
264
267
|
list-style: none;
|
|
265
268
|
position: relative;
|
|
266
|
-
padding-left:
|
|
269
|
+
padding-left: 24px;
|
|
267
270
|
}
|
|
268
271
|
.me-editor li.me-task::before {
|
|
269
272
|
--me-checkbox-border: #94a3b8;
|
|
@@ -509,21 +512,25 @@
|
|
|
509
512
|
font-size: 12px;
|
|
510
513
|
}
|
|
511
514
|
|
|
512
|
-
/* 팝오버 — 링크/이미지 입력 패널 (버블 메뉴와 같은
|
|
515
|
+
/* 팝오버 — 링크/이미지 입력 패널 + 표 크기 피커 (버블 메뉴와 같은
|
|
516
|
+
* 크롬). 트리거 버튼 아래에 앵커로 뜨고, 좁은 뷰포트에서는 접혀서
|
|
517
|
+
* 넘치지 않는다 (flex-wrap + max-width) */
|
|
513
518
|
.me-pop {
|
|
514
519
|
position: fixed;
|
|
515
520
|
z-index: 60;
|
|
516
521
|
display: flex;
|
|
517
522
|
align-items: center;
|
|
523
|
+
flex-wrap: wrap;
|
|
518
524
|
gap: 4px;
|
|
519
525
|
padding: 6px;
|
|
526
|
+
max-width: calc(100vw - 16px);
|
|
520
527
|
background: var(--me-toolbar-bg, #fff);
|
|
521
528
|
border: 1px solid var(--me-border-color);
|
|
522
529
|
border-radius: 8px;
|
|
523
530
|
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.18);
|
|
524
531
|
}
|
|
525
532
|
.me-pop-input {
|
|
526
|
-
width: 220px;
|
|
533
|
+
width: min(220px, 46vw);
|
|
527
534
|
padding: 5px 8px;
|
|
528
535
|
font-size: 12px;
|
|
529
536
|
color: inherit;
|
|
@@ -557,6 +564,38 @@
|
|
|
557
564
|
align-items: center;
|
|
558
565
|
}
|
|
559
566
|
|
|
567
|
+
/* 표 크기 피커 — GDocs 표 삽입 그리드 관례. 열 수는 data.ts의
|
|
568
|
+
* TGRID_COLS(10)와 짝 — 바꾸면 둘 다 갱신한다 */
|
|
569
|
+
.me-tgrid {
|
|
570
|
+
display: grid;
|
|
571
|
+
grid-template-columns: repeat(10, 18px);
|
|
572
|
+
gap: 2px;
|
|
573
|
+
}
|
|
574
|
+
.me-tcell {
|
|
575
|
+
width: 18px;
|
|
576
|
+
height: 18px;
|
|
577
|
+
padding: 0;
|
|
578
|
+
border: 1px solid var(--me-border-color);
|
|
579
|
+
border-radius: 3px;
|
|
580
|
+
background: transparent;
|
|
581
|
+
cursor: pointer;
|
|
582
|
+
}
|
|
583
|
+
.me-tcell.is-on {
|
|
584
|
+
background: var(--me-tool-active-bg, #dbeafe);
|
|
585
|
+
border-color: var(--me-accent, #2563eb);
|
|
586
|
+
}
|
|
587
|
+
.me-tcell:focus-visible {
|
|
588
|
+
outline: 2px solid var(--me-editor-focus, #3b82f6);
|
|
589
|
+
outline-offset: -2px;
|
|
590
|
+
}
|
|
591
|
+
.me-tgrid-label {
|
|
592
|
+
padding: 0 4px;
|
|
593
|
+
font-size: 11px;
|
|
594
|
+
color: var(--me-text-color);
|
|
595
|
+
opacity: 0.7;
|
|
596
|
+
white-space: nowrap;
|
|
597
|
+
}
|
|
598
|
+
|
|
560
599
|
/* 링크 카드 — 캐럿이 링크 위에 있을 때 뜨는 액션 칩 (GDocs 관례):
|
|
561
600
|
* URL 표시 + 복사/수정/제거. 수정은 링크 팝오버로 이어진다 */
|
|
562
601
|
.me-linkcard {
|
|
@@ -640,7 +679,10 @@
|
|
|
640
679
|
|
|
641
680
|
display: flex;
|
|
642
681
|
align-items: center;
|
|
643
|
-
|
|
682
|
+
/* 한 줄 원칙 — 넘치는 항목은 두 줄로 내리지 않고 ⋯ 메뉴로 보낸다
|
|
683
|
+
* (data-rsp 티어, 아래 미디어 쿼리). 남는 초窄 폭은 overflow로 자른다 */
|
|
684
|
+
flex-wrap: nowrap;
|
|
685
|
+
overflow: hidden;
|
|
644
686
|
gap: 2px;
|
|
645
687
|
padding: 6px 8px;
|
|
646
688
|
background: var(--me-toolbar-bg);
|
|
@@ -669,9 +711,25 @@
|
|
|
669
711
|
font-size: 13px;
|
|
670
712
|
font-weight: 600;
|
|
671
713
|
cursor: pointer;
|
|
714
|
+
display: inline-flex;
|
|
715
|
+
align-items: center;
|
|
716
|
+
justify-content: center;
|
|
672
717
|
transition: background-color 0.12s ease, color 0.12s ease;
|
|
673
718
|
}
|
|
674
719
|
|
|
720
|
+
/* 툴바 아이콘 — 24px viewBox stroke 아이콘을 currentColor로.
|
|
721
|
+
* fragment는 경로만 들고 있으므로 스트로크는 여기서 공급한다 */
|
|
722
|
+
.me-ic {
|
|
723
|
+
display: block;
|
|
724
|
+
width: 16px;
|
|
725
|
+
height: 16px;
|
|
726
|
+
fill: none;
|
|
727
|
+
stroke: currentColor;
|
|
728
|
+
stroke-width: 2;
|
|
729
|
+
stroke-linecap: round;
|
|
730
|
+
stroke-linejoin: round;
|
|
731
|
+
}
|
|
732
|
+
|
|
675
733
|
.me-tool:hover:not(:disabled) {
|
|
676
734
|
background: var(--me-tool-hover-bg);
|
|
677
735
|
}
|
|
@@ -679,6 +737,7 @@
|
|
|
679
737
|
/* 키보드 포커스 표시 — VSCode 크롬 관례 (마우스 클릭엔 링 없음) */
|
|
680
738
|
.me-tool:focus-visible,
|
|
681
739
|
.me-overflow > summary:focus-visible,
|
|
740
|
+
.me-styles > summary:focus-visible,
|
|
682
741
|
.me-size:focus-visible,
|
|
683
742
|
.me-blockfmt:focus-visible {
|
|
684
743
|
outline: 2px solid var(--me-editor-focus, #3b82f6);
|
|
@@ -708,20 +767,32 @@
|
|
|
708
767
|
min-width: 74px;
|
|
709
768
|
}
|
|
710
769
|
|
|
711
|
-
/*
|
|
712
|
-
*
|
|
713
|
-
*
|
|
714
|
-
|
|
770
|
+
/* 오버플로/스타일 드롭다운 — 덜 쓰는 커맨드는 ⋯ 아래, 인라인 글자
|
|
771
|
+
* 서식은 A▾ 아래에 모은다 (GDocs ⋮ overflow·Format 메뉴 관례).
|
|
772
|
+
* details/summary라 프레임워크 상태 없이 토글되고, 패널 크롬은
|
|
773
|
+
* 버블 메뉴와 같다 */
|
|
774
|
+
.me-overflow,
|
|
775
|
+
.me-styles {
|
|
715
776
|
position: relative;
|
|
716
777
|
display: inline-flex;
|
|
717
778
|
}
|
|
718
|
-
|
|
779
|
+
/* ⋯는 항상 우측 끝에 살아있어야 한다 — 툴바가 잘려도(sticky가
|
|
780
|
+
* 스크롤/클립 경계에 붙는다) 오버플로 진입점이 사라지지 않는다 */
|
|
781
|
+
.me-toolbar > .me-overflow {
|
|
782
|
+
position: sticky;
|
|
783
|
+
right: 0;
|
|
784
|
+
flex-shrink: 0;
|
|
785
|
+
background: var(--me-toolbar-bg);
|
|
786
|
+
}
|
|
787
|
+
.me-overflow > summary,
|
|
788
|
+
.me-styles > summary {
|
|
719
789
|
list-style: none;
|
|
720
790
|
cursor: pointer;
|
|
721
791
|
user-select: none;
|
|
722
792
|
display: inline-flex;
|
|
723
793
|
align-items: center;
|
|
724
794
|
justify-content: center;
|
|
795
|
+
gap: 2px;
|
|
725
796
|
min-width: 30px;
|
|
726
797
|
height: 30px;
|
|
727
798
|
padding: 0 7px;
|
|
@@ -730,20 +801,34 @@
|
|
|
730
801
|
font-weight: 600;
|
|
731
802
|
color: var(--me-text-color);
|
|
732
803
|
}
|
|
733
|
-
.me-overflow > summary::-webkit-details-marker
|
|
804
|
+
.me-overflow > summary::-webkit-details-marker,
|
|
805
|
+
.me-styles > summary::-webkit-details-marker {
|
|
734
806
|
display: none;
|
|
735
807
|
}
|
|
736
|
-
.me-overflow > summary:hover
|
|
808
|
+
.me-overflow > summary:hover,
|
|
809
|
+
.me-styles > summary:hover {
|
|
737
810
|
background: var(--me-tool-hover-bg);
|
|
738
811
|
}
|
|
739
|
-
.me-overflow[open] > summary
|
|
812
|
+
.me-overflow[open] > summary,
|
|
813
|
+
.me-styles[open] > summary {
|
|
740
814
|
background: var(--me-tool-active-bg);
|
|
741
815
|
color: var(--me-tool-active-color);
|
|
742
816
|
}
|
|
817
|
+
/* A▾ 드롭다운 표시 — 스타일 패널 버튼 뒤의 캐럿 */
|
|
818
|
+
.me-styles > summary::after {
|
|
819
|
+
content: "";
|
|
820
|
+
width: 0;
|
|
821
|
+
height: 0;
|
|
822
|
+
border-left: 3px solid transparent;
|
|
823
|
+
border-right: 3px solid transparent;
|
|
824
|
+
border-top: 4px solid currentColor;
|
|
825
|
+
opacity: 0.6;
|
|
826
|
+
}
|
|
743
827
|
.me-menu {
|
|
744
828
|
position: absolute;
|
|
745
829
|
top: calc(100% + 6px);
|
|
746
830
|
right: 0;
|
|
831
|
+
left: auto;
|
|
747
832
|
z-index: 60;
|
|
748
833
|
display: flex;
|
|
749
834
|
align-items: center;
|
|
@@ -755,8 +840,41 @@
|
|
|
755
840
|
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.18);
|
|
756
841
|
white-space: nowrap;
|
|
757
842
|
}
|
|
843
|
+
/* A▾ 패널은 툴바 중간에서 열리므로 버튼 왼쪽 아래에 붙인다 */
|
|
844
|
+
.me-styles .me-menu {
|
|
845
|
+
right: auto;
|
|
846
|
+
left: 0;
|
|
847
|
+
}
|
|
758
848
|
|
|
759
|
-
/* 툴바
|
|
849
|
+
/* ── 반응형 툴바 — 한 줄 원칙 + ⋯ 오버플로 축소 ────────────────
|
|
850
|
+
* data-rsp 티어: 1 = ≤900px(삽입/정렬 그룹), 2 = ≤620px(목록·보조
|
|
851
|
+
* 서식 + A▾ 패널). 본줄의 티어 요소는 숨기고, ⋯ 메뉴 안의 같은
|
|
852
|
+
* 항목(data-rsp가 달린 복사본)만 연다 — 항목은 양쪽에 렌더되고
|
|
853
|
+
* 표시 여부만 CSS가 가른다. 브레이크포인트는 TOOL_ITEMS의 rsp
|
|
854
|
+
* 값과 짝이다 (뷰포트 기준 — 데모 .page가 툴바 폭을 지배한다) */
|
|
855
|
+
.me-menu [data-rsp] {
|
|
856
|
+
display: none;
|
|
857
|
+
}
|
|
858
|
+
@media (max-width: 900px) {
|
|
859
|
+
.me-toolbar > [data-rsp="1"],
|
|
860
|
+
.me-toolbar > .me-styles[data-rsp="1"] {
|
|
861
|
+
display: none;
|
|
862
|
+
}
|
|
863
|
+
.me-menu [data-rsp="1"] {
|
|
864
|
+
display: inline-flex;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
@media (max-width: 620px) {
|
|
868
|
+
.me-toolbar > [data-rsp="2"],
|
|
869
|
+
.me-toolbar > .me-styles[data-rsp="2"] {
|
|
870
|
+
display: none;
|
|
871
|
+
}
|
|
872
|
+
.me-menu [data-rsp="2"] {
|
|
873
|
+
display: inline-flex;
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
/* 툴바 인라인 스타일 컨트롤 — A▾ 패널 안의 컬러 피커/크기 셀렉트 */
|
|
760
878
|
.me-style {
|
|
761
879
|
display: inline-flex;
|
|
762
880
|
align-items: center;
|