@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.
Files changed (2) hide show
  1. package/dist/styles.css +135 -17
  2. 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: 1.4em;
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의 왼쪽 패딩(~28px) */
261
+ /* 할일 목록 — 마커는 ::before, 클릭 영역은 li의 왼쪽 패딩(~24px).
262
+ * ul 패딩과 li 패딩을 더해 텍스트 시작점이 다른 리스트와 맞는다 */
260
263
  .me-editor ul.me-tasks {
261
- padding-left: 4px;
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: 28px;
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
- flex-wrap: wrap;
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
- /* 오버플로 패널 — 덜 쓰는 커맨드는 ⋯ 아래에 모은다 (GDocs ⋮
712
- * overflow 관례). details/summary라 프레임워크 상태 없이 토글되고,
713
- * 패널 크롬은 버블 메뉴와 같다 */
714
- .me-overflow {
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
- .me-overflow > summary {
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moda-editor/core",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Headless core — state, snapshot, events",
5
5
  "license": "MIT",
6
6
  "type": "module",