@braincrew-lab/langchain-canvas 0.3.0 → 0.4.9
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.ko.md +11 -23
- package/README.md +11 -23
- package/dist/{ChartRenderer-ABRQ5YFN.js → ChartRenderer-JGRJ23OB.js} +39 -67
- package/dist/{DocumentRenderer-YTEMC3Z4.js → DocumentRenderer-ZQDQMX7X.js} +18 -19
- package/dist/FileRenderer-3ZHNORZJ.js +39 -0
- package/dist/SlidesRenderer-56R3TNWN.js +496 -0
- package/dist/TableRenderer-3ESF577F.js +275 -0
- package/dist/chunk-7T5DRR3F.js +109 -0
- package/dist/{chunk-ZLXAWRUP.js → chunk-EHW446VF.js} +49 -50
- package/dist/chunk-FTNRRJ3K.js +13 -0
- package/dist/chunk-IFNRLN4Y.js +137 -0
- package/dist/{chunk-FSFOURG5.js → chunk-K2UZAYW2.js} +1 -1
- package/dist/chunk-SGOPRUQ4.js +182 -0
- package/dist/formula-27TCEZI5.js +2 -0
- package/dist/formula-cli.d.ts +2 -0
- package/dist/formula-cli.js +37 -0
- package/dist/index.d.ts +166 -1002
- package/dist/index.js +354 -2523
- package/dist/langgraph/index.d.ts +68 -0
- package/dist/langgraph/index.js +111 -0
- package/dist/styles.css +59 -409
- package/dist/types-BfGP9R2I.d.ts +324 -0
- package/package.json +15 -4
- package/dist/PdfRenderer-GDA67MES.js +0 -98
- package/dist/SlidesRenderer-JNPXNTNJ.js +0 -964
- package/dist/TableRenderer-BJQE2HMO.js +0 -636
- package/dist/chunk-QMOJEGRH.js +0 -207
package/dist/styles.css
CHANGED
|
@@ -278,16 +278,6 @@
|
|
|
278
278
|
.cv-body--flush { padding: 0; overflow: hidden; }
|
|
279
279
|
.cv-fallback { color: var(--cv-muted); font-size: 14px; }
|
|
280
280
|
|
|
281
|
-
/* Browsing an old version: a preview, not an editing surface. Interaction is
|
|
282
|
-
blocked wholesale — renderers patch by artifact id, so edits made "in the
|
|
283
|
-
past" would silently overwrite the live version. */
|
|
284
|
-
.cv-body--history > :not(.cv-history-note) { pointer-events: none; user-select: none; }
|
|
285
|
-
.cv-history-note {
|
|
286
|
-
position: sticky; top: 0; z-index: 5; margin-bottom: 12px;
|
|
287
|
-
padding: 6px 12px; border-radius: 8px; font-size: 12.5px; font-weight: 600;
|
|
288
|
-
color: var(--cv-muted); background: var(--cv-surface); border: 1px solid var(--cv-border);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
281
|
/* --- inline editing (document / table / slides) ------------------------------- */
|
|
292
282
|
|
|
293
283
|
.cv-edit-toolbar { display: flex; justify-content: flex-end; margin-bottom: 10px; }
|
|
@@ -480,308 +470,7 @@
|
|
|
480
470
|
.cv-sheet-tools__filter { min-width: 96px; max-width: 160px; }
|
|
481
471
|
.cv-sheet-tools__sort:focus, .cv-sheet-tools__filter:focus { outline: none; border-color: var(--cv-accent); }
|
|
482
472
|
.cv-sheet-tools__hint { margin-left: auto; font-size: 11px; color: var(--cv-muted); }
|
|
483
|
-
|
|
484
|
-
/* --- Excel-style ribbon toolbar ----------------------------------------------- */
|
|
485
|
-
/* The Excel model in the canvas's language: each group is a soft "keycap" tray
|
|
486
|
-
of ghost controls with the group's name set small underneath — organized at a
|
|
487
|
-
glance, quiet until hovered. */
|
|
488
|
-
|
|
489
|
-
.cv-ribbon {
|
|
490
|
-
align-items: flex-start;
|
|
491
|
-
gap: 8px;
|
|
492
|
-
padding: 7px 12px 5px;
|
|
493
|
-
overflow-x: auto;
|
|
494
|
-
scrollbar-width: thin;
|
|
495
|
-
}
|
|
496
|
-
.cv-ribbon__group {
|
|
497
|
-
display: flex;
|
|
498
|
-
flex-direction: column;
|
|
499
|
-
align-items: center;
|
|
500
|
-
gap: 3px;
|
|
501
|
-
}
|
|
502
|
-
.cv-ribbon__items {
|
|
503
|
-
display: flex;
|
|
504
|
-
align-items: center;
|
|
505
|
-
gap: 1px;
|
|
506
|
-
padding: 2px;
|
|
507
|
-
background: var(--cv-surface);
|
|
508
|
-
border: 1px solid var(--cv-border);
|
|
509
|
-
border-radius: 9px;
|
|
510
|
-
}
|
|
511
|
-
.cv-ribbon__label {
|
|
512
|
-
font-size: 10px;
|
|
513
|
-
font-weight: 600;
|
|
514
|
-
letter-spacing: 0.05em;
|
|
515
|
-
color: var(--cv-muted);
|
|
516
|
-
white-space: nowrap;
|
|
517
|
-
user-select: none;
|
|
518
|
-
}
|
|
519
|
-
.cv-ribbon__gap { width: 5px; }
|
|
520
|
-
|
|
521
|
-
/* ghost controls — the tray is the chrome */
|
|
522
|
-
.cv-ribbon .cv-ribbon__btn {
|
|
523
|
-
height: 26px;
|
|
524
|
-
min-width: 26px;
|
|
525
|
-
padding: 0 9px;
|
|
526
|
-
border: none;
|
|
527
|
-
border-radius: 7px;
|
|
528
|
-
background: transparent;
|
|
529
|
-
color: var(--cv-text);
|
|
530
|
-
font-size: 12px;
|
|
531
|
-
font-weight: 600;
|
|
532
|
-
line-height: 1;
|
|
533
|
-
white-space: nowrap;
|
|
534
|
-
cursor: pointer;
|
|
535
|
-
display: inline-flex;
|
|
536
|
-
align-items: center;
|
|
537
|
-
justify-content: center;
|
|
538
|
-
gap: 4px;
|
|
539
|
-
transition: background 0.12s, box-shadow 0.12s;
|
|
540
|
-
}
|
|
541
|
-
.cv-ribbon .cv-ribbon__btn:hover:not(:disabled) {
|
|
542
|
-
background: var(--cv-bg);
|
|
543
|
-
border: none;
|
|
544
|
-
color: var(--cv-text);
|
|
545
|
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
|
|
546
|
-
}
|
|
547
|
-
.cv-ribbon .cv-ribbon__btn:active:not(:disabled) { box-shadow: none; }
|
|
548
|
-
.cv-ribbon .cv-ribbon__btn:disabled { opacity: 0.35; cursor: default; }
|
|
549
|
-
.cv-ribbon .cv-ribbon__btn.is-on {
|
|
550
|
-
background: var(--cv-accent-weak);
|
|
551
|
-
color: var(--cv-accent);
|
|
552
|
-
box-shadow: inset 0 0 0 1px var(--cv-accent);
|
|
553
|
-
}
|
|
554
|
-
.cv-ribbon .cv-ribbon__btn--icon { padding: 0 6px; }
|
|
555
|
-
.cv-ribbon .cv-ribbon__btn--glyph { font-weight: 800; font-size: 13px; width: 26px; padding: 0; }
|
|
556
|
-
|
|
557
|
-
/* Excel-style color swatches: glyph over a live color bar, picker underneath */
|
|
558
|
-
.cv-ribbon__swatch {
|
|
559
|
-
position: relative;
|
|
560
|
-
display: inline-flex;
|
|
561
|
-
flex-direction: column;
|
|
562
|
-
align-items: center;
|
|
563
|
-
justify-content: center;
|
|
564
|
-
gap: 2px;
|
|
565
|
-
width: 26px;
|
|
566
|
-
height: 26px;
|
|
567
|
-
border-radius: 7px;
|
|
568
|
-
cursor: pointer;
|
|
569
|
-
transition: background 0.12s, box-shadow 0.12s;
|
|
570
|
-
}
|
|
571
|
-
.cv-ribbon__swatch:hover:not(.is-disabled) { background: var(--cv-bg); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08); }
|
|
572
|
-
.cv-ribbon__swatch.is-disabled { opacity: 0.35; cursor: default; }
|
|
573
|
-
.cv-ribbon__swatch-glyph { font-size: 12px; font-weight: 800; line-height: 1; display: inline-flex; align-items: center; }
|
|
574
|
-
.cv-ribbon__swatch-bar { width: 15px; height: 3.5px; border-radius: 2px; box-shadow: inset 0 0 0 0.5px rgba(0, 0, 0, 0.12); }
|
|
575
|
-
.cv-ribbon__swatch input[type="color"] {
|
|
576
|
-
position: absolute;
|
|
577
|
-
inset: 0;
|
|
578
|
-
opacity: 0;
|
|
579
|
-
width: 100%;
|
|
580
|
-
height: 100%;
|
|
581
|
-
padding: 0;
|
|
582
|
-
border: none;
|
|
583
|
-
cursor: pointer;
|
|
584
|
-
}
|
|
585
|
-
.cv-ribbon__swatch.is-disabled input { pointer-events: none; }
|
|
586
|
-
|
|
587
|
-
/* selects/inputs live in the tray as quiet controls */
|
|
588
|
-
.cv-ribbon .cv-ribbon__select,
|
|
589
|
-
.cv-ribbon .cv-ribbon__input {
|
|
590
|
-
height: 26px;
|
|
591
|
-
font: inherit;
|
|
592
|
-
font-size: 12px;
|
|
593
|
-
font-weight: 600;
|
|
594
|
-
padding: 0 7px;
|
|
595
|
-
border: none;
|
|
596
|
-
border-radius: 7px;
|
|
597
|
-
background: transparent;
|
|
598
|
-
color: var(--cv-text);
|
|
599
|
-
max-width: 130px;
|
|
600
|
-
transition: background 0.12s;
|
|
601
|
-
}
|
|
602
|
-
.cv-ribbon .cv-ribbon__select:hover:not(:disabled),
|
|
603
|
-
.cv-ribbon .cv-ribbon__input:hover { background: var(--cv-bg); border: none; }
|
|
604
|
-
.cv-ribbon .cv-ribbon__select:focus,
|
|
605
|
-
.cv-ribbon .cv-ribbon__input:focus { outline: none; background: var(--cv-bg); box-shadow: inset 0 0 0 1px var(--cv-accent); }
|
|
606
|
-
.cv-ribbon .cv-ribbon__select:disabled { opacity: 0.35; }
|
|
607
|
-
.cv-ribbon .cv-ribbon__input { width: 88px; font-weight: 500; }
|
|
608
|
-
.cv-ribbon .cv-ribbon__input::placeholder { color: var(--cv-muted); }
|
|
609
|
-
|
|
610
|
-
/* selection formatting cluster — reads as one tight group between separators */
|
|
611
|
-
.cv-sheet-tools__fmt { display: inline-flex; align-items: center; gap: 3px; }
|
|
612
|
-
.cv-sheet-tools__fmt button:disabled,
|
|
613
|
-
.cv-sheet-tools button:disabled { opacity: 0.4; cursor: default; }
|
|
614
|
-
.cv-sheet-tools button:disabled:hover { border-color: var(--cv-border); color: var(--cv-text); }
|
|
615
|
-
.cv-sheet-tools__bold, .cv-sheet-tools__align { width: 28px; padding: 4px 0 !important; text-align: center; }
|
|
616
|
-
.cv-sheet-tools__bold--on,
|
|
617
|
-
.cv-sheet-tools__freeze--on {
|
|
618
|
-
background: var(--cv-accent-weak) !important; border-color: var(--cv-accent) !important;
|
|
619
|
-
color: var(--cv-accent) !important;
|
|
620
|
-
}
|
|
621
|
-
.cv-sheet-tools__color {
|
|
622
|
-
width: 28px; height: 26px; padding: 2px; border: 1px solid var(--cv-border);
|
|
623
|
-
border-radius: 6px; background: var(--cv-bg); cursor: pointer;
|
|
624
|
-
}
|
|
625
|
-
.cv-sheet-tools__color:disabled { opacity: 0.4; cursor: default; }
|
|
626
|
-
.cv-sheet-tools__numfmt, .cv-sheet-tools__fx {
|
|
627
|
-
font: inherit; font-size: 12.5px; padding: 4px 6px; border-radius: 6px;
|
|
628
|
-
border: 1px solid var(--cv-border); background: var(--cv-bg); color: var(--cv-text);
|
|
629
|
-
}
|
|
630
|
-
.cv-sheet-tools__numfmt:disabled, .cv-sheet-tools__fx:disabled { opacity: 0.4; }
|
|
631
|
-
.cv-sheet-tools__numfmt:focus, .cv-sheet-tools__fx:focus { outline: none; border-color: var(--cv-accent); }
|
|
632
|
-
|
|
633
|
-
/* formula bar — a hairline row between the toolbar and the grid */
|
|
634
|
-
.cv-sheet-fxbar {
|
|
635
|
-
display: flex; align-items: center; gap: 8px; padding: 4px 10px;
|
|
636
|
-
border-bottom: 1px solid var(--cv-border); background: var(--cv-bg); flex: 0 0 auto;
|
|
637
|
-
}
|
|
638
|
-
.cv-sheet-fxbar__cell {
|
|
639
|
-
min-width: 44px; text-align: center; font-size: 12px; font-weight: 600;
|
|
640
|
-
color: var(--cv-muted); font-variant-numeric: tabular-nums;
|
|
641
|
-
border-right: 1px solid var(--cv-border); padding-right: 8px;
|
|
642
|
-
}
|
|
643
|
-
.cv-sheet-fxbar__input {
|
|
644
|
-
flex: 1; font-family: var(--cv-mono); font-size: 12.5px; padding: 3px 8px;
|
|
645
|
-
border: 1px solid transparent; border-radius: 6px; background: transparent; color: var(--cv-text);
|
|
646
|
-
}
|
|
647
|
-
.cv-sheet-fxbar__input:focus { outline: none; border-color: var(--cv-accent); background: var(--cv-bg); }
|
|
648
|
-
.cv-sheet-fxbar__input:disabled { opacity: 0.5; }
|
|
649
473
|
.cv-sheet { position: relative; width: 100%; flex: 1; height: auto; min-height: 0; }
|
|
650
|
-
|
|
651
|
-
/* --- Fortune-sheet internals, retuned to the canvas design language ----------- */
|
|
652
|
-
/* Fortune ships its own visual defaults (raw blues, hard corners, UA-grey
|
|
653
|
-
dialogs). Everything user-visible is re-tokenized here so the spreadsheet
|
|
654
|
-
reads as part of the canvas, not an embedded third-party widget. */
|
|
655
|
-
|
|
656
|
-
/* toolbar */
|
|
657
|
-
.cv-sheet .fortune-toolbar {
|
|
658
|
-
background: var(--cv-bg);
|
|
659
|
-
border-bottom: 1px solid var(--cv-border);
|
|
660
|
-
padding: 4px 8px;
|
|
661
|
-
}
|
|
662
|
-
.cv-sheet .fortune-toolbar-button,
|
|
663
|
-
.cv-sheet .fortune-toolbar-item {
|
|
664
|
-
border-radius: 6px;
|
|
665
|
-
transition: background 0.12s;
|
|
666
|
-
}
|
|
667
|
-
.cv-sheet .fortune-toolbar-button:hover,
|
|
668
|
-
.cv-sheet .fortune-toolbar-item:hover,
|
|
669
|
-
.cv-sheet .fortune-toolbar-combo-button:hover {
|
|
670
|
-
background: var(--cv-surface);
|
|
671
|
-
}
|
|
672
|
-
.cv-sheet .fortune-toolbar-divider { border-color: var(--cv-border); }
|
|
673
|
-
.cv-sheet .fortune-toolbar-combo { border-radius: 6px; }
|
|
674
|
-
|
|
675
|
-
/* Fortune's own formula row duplicates the canvas formula bar above it — hide it
|
|
676
|
-
(the name box A1 + fx input live in .cv-sheet-fxbar). */
|
|
677
|
-
.cv-sheet .fortune-fx-editor { display: none !important; }
|
|
678
|
-
|
|
679
|
-
/* dialogs (conditional format, insert link, …) */
|
|
680
|
-
.luckysheet-modal-dialog {
|
|
681
|
-
border: 1px solid var(--cv-border) !important;
|
|
682
|
-
border-radius: 12px !important;
|
|
683
|
-
box-shadow: 0 18px 50px rgba(0, 0, 0, 0.22) !important;
|
|
684
|
-
background: var(--cv-bg) !important;
|
|
685
|
-
color: var(--cv-text) !important;
|
|
686
|
-
font-family: var(--cv-font) !important;
|
|
687
|
-
padding: 18px 20px !important;
|
|
688
|
-
}
|
|
689
|
-
.luckysheet-modal-dialog-border { border: none !important; }
|
|
690
|
-
.luckysheet-modal-dialog input[type="text"],
|
|
691
|
-
.luckysheet-modal-dialog input[type="number"],
|
|
692
|
-
.luckysheet-modal-dialog select,
|
|
693
|
-
.luckysheet-modal-dialog textarea {
|
|
694
|
-
font: inherit;
|
|
695
|
-
padding: 6px 10px;
|
|
696
|
-
border: 1px solid var(--cv-border);
|
|
697
|
-
border-radius: 8px;
|
|
698
|
-
background: var(--cv-bg);
|
|
699
|
-
color: var(--cv-text);
|
|
700
|
-
}
|
|
701
|
-
.luckysheet-modal-dialog input:focus,
|
|
702
|
-
.luckysheet-modal-dialog select:focus,
|
|
703
|
-
.luckysheet-modal-dialog textarea:focus { outline: none; border-color: var(--cv-accent); }
|
|
704
|
-
.luckysheet-modal-dialog button {
|
|
705
|
-
font: 600 13px/1.2 var(--cv-font);
|
|
706
|
-
padding: 7px 16px;
|
|
707
|
-
border: 1px solid var(--cv-border);
|
|
708
|
-
border-radius: 8px;
|
|
709
|
-
background: var(--cv-bg);
|
|
710
|
-
color: var(--cv-text);
|
|
711
|
-
cursor: pointer;
|
|
712
|
-
}
|
|
713
|
-
.luckysheet-modal-dialog button:hover { background: var(--cv-surface); }
|
|
714
|
-
/* Fortune marks its confirm buttons with a solid blue — remap to the accent. */
|
|
715
|
-
.luckysheet-modal-dialog button[style*="rgb(26, 115, 232)"],
|
|
716
|
-
.luckysheet-modal-dialog .fortune-message-box-button-primary,
|
|
717
|
-
.luckysheet-modal-dialog button.primary {
|
|
718
|
-
background: var(--cv-accent) !important;
|
|
719
|
-
border-color: var(--cv-accent) !important;
|
|
720
|
-
color: #fff !important;
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
/* context menus (right-click, header menus) */
|
|
724
|
-
.fortune-context-menu,
|
|
725
|
-
.luckysheet-cols-menu {
|
|
726
|
-
border: 1px solid var(--cv-border) !important;
|
|
727
|
-
border-radius: 10px !important;
|
|
728
|
-
box-shadow: 0 8px 28px rgba(0, 0, 0, 0.16) !important;
|
|
729
|
-
background: var(--cv-bg) !important;
|
|
730
|
-
color: var(--cv-text) !important;
|
|
731
|
-
font-family: var(--cv-font) !important;
|
|
732
|
-
padding: 6px !important;
|
|
733
|
-
overflow: hidden;
|
|
734
|
-
}
|
|
735
|
-
.fortune-context-menu > div,
|
|
736
|
-
.luckysheet-cols-menuitem {
|
|
737
|
-
border-radius: 7px;
|
|
738
|
-
font-size: 13px;
|
|
739
|
-
}
|
|
740
|
-
.fortune-context-menu > div:hover,
|
|
741
|
-
.luckysheet-cols-menuitem:hover { background: var(--cv-surface) !important; }
|
|
742
|
-
.fortune-context-menu-divider { border-color: var(--cv-border) !important; }
|
|
743
|
-
|
|
744
|
-
/* sheet tabs + status bar */
|
|
745
|
-
.cv-sheet .fortune-sheettab-container {
|
|
746
|
-
background: var(--cv-bg);
|
|
747
|
-
border-top: 1px solid var(--cv-border);
|
|
748
|
-
font-family: var(--cv-font);
|
|
749
|
-
}
|
|
750
|
-
.cv-sheet .luckysheet-sheets-item {
|
|
751
|
-
border-radius: 7px 7px 0 0;
|
|
752
|
-
color: var(--cv-muted);
|
|
753
|
-
}
|
|
754
|
-
.cv-sheet .luckysheet-sheets-item-active {
|
|
755
|
-
color: var(--cv-accent);
|
|
756
|
-
background: var(--cv-accent-weak);
|
|
757
|
-
font-weight: 600;
|
|
758
|
-
}
|
|
759
|
-
.cv-sheet .fortune-sheettab-button { border-radius: 6px; }
|
|
760
|
-
.cv-sheet .fortune-sheettab-button:hover { background: var(--cv-surface); }
|
|
761
|
-
.cv-sheet .fortune-stat-area,
|
|
762
|
-
.cv-sheet .fortune-zoom-container { font-family: var(--cv-font); color: var(--cv-muted); }
|
|
763
|
-
.cv-sheet .fortune-zoom-button { border-radius: 6px; }
|
|
764
|
-
.cv-sheet .fortune-zoom-button:hover { background: var(--cv-surface); }
|
|
765
|
-
|
|
766
|
-
/* tooltips + scrollbars */
|
|
767
|
-
.fortune-tooltip {
|
|
768
|
-
border-radius: 7px !important;
|
|
769
|
-
font-family: var(--cv-font) !important;
|
|
770
|
-
font-size: 12px !important;
|
|
771
|
-
}
|
|
772
|
-
.cv-sheet .luckysheet-scrollbar-x::-webkit-scrollbar,
|
|
773
|
-
.cv-sheet .luckysheet-scrollbar-y::-webkit-scrollbar { width: 8px; height: 8px; }
|
|
774
|
-
.cv-sheet .luckysheet-scrollbar-x::-webkit-scrollbar-thumb,
|
|
775
|
-
.cv-sheet .luckysheet-scrollbar-y::-webkit-scrollbar-thumb {
|
|
776
|
-
background: var(--cv-border);
|
|
777
|
-
border-radius: 999px;
|
|
778
|
-
}
|
|
779
|
-
.cv-sheet .luckysheet-scrollbar-x::-webkit-scrollbar-thumb:hover,
|
|
780
|
-
.cv-sheet .luckysheet-scrollbar-y::-webkit-scrollbar-thumb:hover { background: var(--cv-muted); }
|
|
781
|
-
|
|
782
|
-
/* in-cell editor */
|
|
783
|
-
.cv-sheet .luckysheet-cell-input,
|
|
784
|
-
.cv-sheet .luckysheet-input-box-inner { font-family: var(--cv-font); }
|
|
785
474
|
.cv-sheet .fortune-container { height: 100% !important; width: 100% !important; }
|
|
786
475
|
.cv-sheet--empty { display: grid; place-items: center; height: 200px; color: var(--cv-muted); font-size: 14px; }
|
|
787
476
|
|
|
@@ -822,7 +511,6 @@
|
|
|
822
511
|
border: 1px solid var(--cv-border);
|
|
823
512
|
border-radius: 5px;
|
|
824
513
|
overflow: hidden;
|
|
825
|
-
container-type: inline-size;
|
|
826
514
|
}
|
|
827
515
|
.cv-deck__thumb.is-active .cv-deck__thumb-slide { border-color: var(--cv-accent); box-shadow: 0 0 0 1px var(--cv-accent); }
|
|
828
516
|
.cv-deck__thumb-slide b { display: block; margin-bottom: 3px; font-size: 9px; line-height: 1.2; }
|
|
@@ -950,19 +638,14 @@
|
|
|
950
638
|
|
|
951
639
|
/* blank / free-canvas layout */
|
|
952
640
|
.cv-slide { position: relative; }
|
|
953
|
-
.cv-slide--blank { display: block; padding: 0;
|
|
954
|
-
/* Text on a free slide is sized in cqw (1cqw = 1% of the slide's width), so type
|
|
955
|
-
scales with the slide exactly like the percent geometry does — the editor,
|
|
956
|
-
thumbnails, and present mode all show the same proportions at any width. */
|
|
641
|
+
.cv-slide--blank { display: block; padding: 0; }
|
|
957
642
|
.cv-free { position: absolute; inset: 0; }
|
|
958
643
|
.cv-free__el { position: absolute; box-sizing: border-box; cursor: move; }
|
|
959
644
|
.cv-free__guide { position: absolute; z-index: 6; background: #f43f5e; pointer-events: none; }
|
|
960
645
|
.cv-free__guide--v { top: 0; bottom: 0; width: 1px; }
|
|
961
646
|
.cv-free__guide--h { left: 0; right: 0; height: 1px; }
|
|
962
647
|
.cv-free__el.is-selected { outline: 1.5px solid var(--cv-accent); outline-offset: 1px; }
|
|
963
|
-
|
|
964
|
-
runs long paints past the box instead of vanishing mid-word. */
|
|
965
|
-
.cv-free__text { width: 100%; min-height: 100%; outline: none; overflow: visible; line-height: 1.2; }
|
|
648
|
+
.cv-free__text { width: 100%; height: 100%; outline: none; overflow: hidden; line-height: 1.3; }
|
|
966
649
|
.cv-free__img { width: 100%; height: 100%; object-fit: contain; pointer-events: none; }
|
|
967
650
|
.cv-free__resize {
|
|
968
651
|
position: absolute; right: -5px; bottom: -5px; width: 12px; height: 12px;
|
|
@@ -996,42 +679,6 @@
|
|
|
996
679
|
.cv-free__fmt input[type="number"] { width: 46px; height: 24px; border: 1px solid var(--cv-border); border-radius: 5px; background: var(--cv-bg); color: var(--cv-text); font-size: 12px; padding: 0 4px; }
|
|
997
680
|
.cv-free__fmt input[type="color"] { width: 26px; height: 24px; padding: 0; border: 1px solid var(--cv-border); border-radius: 5px; background: none; cursor: pointer; }
|
|
998
681
|
|
|
999
|
-
/* multi-select: marquee, selection state, floating action bar */
|
|
1000
|
-
.cv-free { outline: none; } /* the canvas is focusable for keyboard nudge/shortcuts */
|
|
1001
|
-
.cv-free:focus-visible { outline: 2px solid var(--cv-accent); outline-offset: -2px; border-radius: 4px; }
|
|
1002
|
-
.cv-free__marquee {
|
|
1003
|
-
position: absolute; z-index: 7; pointer-events: none;
|
|
1004
|
-
border: 1px solid var(--cv-accent);
|
|
1005
|
-
background: color-mix(in srgb, var(--cv-accent) 10%, transparent);
|
|
1006
|
-
border-radius: 2px;
|
|
1007
|
-
}
|
|
1008
|
-
.cv-free__el--selected { outline: 1.5px solid var(--cv-accent); outline-offset: 1px; }
|
|
1009
|
-
.cv-free__multibar {
|
|
1010
|
-
position: absolute; z-index: 8; transform: translate(-50%, calc(-100% - 8px));
|
|
1011
|
-
display: flex; align-items: center; gap: 2px;
|
|
1012
|
-
padding: 3px; background: var(--cv-bg); border: 1px solid var(--cv-border);
|
|
1013
|
-
border-radius: 8px; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); cursor: default;
|
|
1014
|
-
}
|
|
1015
|
-
.cv-free__multibar--below { transform: translate(-50%, 8px); }
|
|
1016
|
-
.cv-free__multibar button {
|
|
1017
|
-
min-width: 24px; height: 24px; padding: 0 6px; border: none; border-radius: 5px;
|
|
1018
|
-
background: transparent; color: var(--cv-text); cursor: pointer; font-size: 12px; white-space: nowrap;
|
|
1019
|
-
}
|
|
1020
|
-
.cv-free__multibar button:hover { background: var(--cv-surface); }
|
|
1021
|
-
.cv-free__multibar button:disabled { opacity: 0.4; cursor: default; background: transparent; }
|
|
1022
|
-
.cv-free__multibar-del:hover { background: #fee2e2 !important; color: #dc2626; }
|
|
1023
|
-
|
|
1024
|
-
/* per-element control-bar inputs: rotation + corner radius */
|
|
1025
|
-
.cv-free__ctl-rot, .cv-free__ctl-radius {
|
|
1026
|
-
width: 44px; height: 22px; font: inherit; font-size: 11.5px; padding: 0 4px;
|
|
1027
|
-
border: 1px solid var(--cv-border); border-radius: 5px; background: var(--cv-bg); color: var(--cv-text);
|
|
1028
|
-
}
|
|
1029
|
-
.cv-free__ctl-rot:focus, .cv-free__ctl-radius:focus { outline: none; border-color: var(--cv-accent); }
|
|
1030
|
-
|
|
1031
|
-
/* slide reorder: insertion indicator while dragging a thumbnail */
|
|
1032
|
-
.cv-deck__thumb-wrap--drop-before { box-shadow: 0 -2px 0 0 var(--cv-accent); }
|
|
1033
|
-
.cv-deck__thumb-wrap--drop-after { box-shadow: 0 2px 0 0 var(--cv-accent); }
|
|
1034
|
-
|
|
1035
682
|
/* toolbar: background swatch + present button */
|
|
1036
683
|
.cv-deck__bg input[type="color"] {
|
|
1037
684
|
width: 30px; height: 30px; padding: 0;
|
|
@@ -1075,22 +722,6 @@
|
|
|
1075
722
|
background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.08);
|
|
1076
723
|
border-radius: 10px; padding: 12px 16px; cursor: default; white-space: pre-wrap;
|
|
1077
724
|
}
|
|
1078
|
-
/* Deck progress: a hairline track pinned to the bottom edge, plus a counter chip. */
|
|
1079
|
-
.cv-present__progress {
|
|
1080
|
-
position: absolute; left: 0; right: 0; bottom: 0; height: 3px;
|
|
1081
|
-
background: rgba(255, 255, 255, 0.08);
|
|
1082
|
-
}
|
|
1083
|
-
.cv-present__progress-fill {
|
|
1084
|
-
height: 100%; background: var(--cv-accent);
|
|
1085
|
-
transition: width 0.28s ease;
|
|
1086
|
-
}
|
|
1087
|
-
@media (prefers-reduced-motion: reduce) { .cv-present__progress-fill { transition: none; } }
|
|
1088
|
-
.cv-present__count {
|
|
1089
|
-
position: absolute; top: 16px; right: 20px;
|
|
1090
|
-
color: #9aa4b2; font-size: 13px; font-variant-numeric: tabular-nums;
|
|
1091
|
-
background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.08);
|
|
1092
|
-
border-radius: 999px; padding: 3px 10px; cursor: default;
|
|
1093
|
-
}
|
|
1094
725
|
|
|
1095
726
|
/* in-place editing cues */
|
|
1096
727
|
.cv-word .cv-doc { cursor: text; }
|
|
@@ -1352,14 +983,6 @@
|
|
|
1352
983
|
transition: width 0.2s ease;
|
|
1353
984
|
}
|
|
1354
985
|
|
|
1355
|
-
/* document-mode chip on the html toolbar (imported .hwp/.hwpx etc.) */
|
|
1356
|
-
.cv-html-doc-chip {
|
|
1357
|
-
display: inline-flex; align-items: center; gap: 4px;
|
|
1358
|
-
font-size: 11.5px; font-weight: 700; color: var(--cv-accent);
|
|
1359
|
-
background: var(--cv-accent-weak); border: 1px solid var(--cv-border);
|
|
1360
|
-
border-radius: 999px; padding: 3px 10px; white-space: nowrap;
|
|
1361
|
-
}
|
|
1362
|
-
|
|
1363
986
|
/* --- selection quick-edit bar ------------------------------------------------- */
|
|
1364
987
|
|
|
1365
988
|
.cv-selection {
|
|
@@ -1529,36 +1152,6 @@
|
|
|
1529
1152
|
color: var(--cv-muted);
|
|
1530
1153
|
}
|
|
1531
1154
|
|
|
1532
|
-
/* --- PDF viewer ---------------------------------------------------------------- */
|
|
1533
|
-
|
|
1534
|
-
/* Fills the flush body outright — `flex: 1` alone collapsed the iframe to its
|
|
1535
|
-
content height (a thin strip of page) because `.cv-body` is a block, not a
|
|
1536
|
-
flex container. */
|
|
1537
|
-
.cv-pdf-panel { display: flex; flex-direction: column; height: 100%; min-height: 480px; }
|
|
1538
|
-
.cv-pdf-tools {
|
|
1539
|
-
display: flex; align-items: center; gap: 6px; padding: 6px 10px;
|
|
1540
|
-
border-bottom: 1px solid var(--cv-border); background: var(--cv-bg); flex: 0 0 auto;
|
|
1541
|
-
}
|
|
1542
|
-
.cv-pdf-tools button {
|
|
1543
|
-
font-size: 12px; font-weight: 600; padding: 4px 10px; border: 1px solid var(--cv-border);
|
|
1544
|
-
border-radius: 6px; background: var(--cv-bg); color: var(--cv-text); cursor: pointer;
|
|
1545
|
-
}
|
|
1546
|
-
.cv-pdf-tools button:hover { border-color: var(--cv-accent); color: var(--cv-accent); }
|
|
1547
|
-
.cv-pdf-tools__name {
|
|
1548
|
-
font-size: 12px; font-weight: 600; color: var(--cv-muted);
|
|
1549
|
-
overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 55%;
|
|
1550
|
-
}
|
|
1551
|
-
.cv-pdf-tools__spacer { flex: 1; }
|
|
1552
|
-
.cv-pdf-tools__sep { width: 1px; height: 18px; background: var(--cv-border); margin: 0 2px; }
|
|
1553
|
-
.cv-pdf-tools__zoom { display: inline-flex; align-items: center; gap: 3px; }
|
|
1554
|
-
.cv-pdf-tools__zoom button { min-width: 26px; }
|
|
1555
|
-
.cv-pdf-tools__zoom-label {
|
|
1556
|
-
min-width: 52px; font-variant-numeric: tabular-nums; color: var(--cv-muted);
|
|
1557
|
-
}
|
|
1558
|
-
.cv-pdf { position: relative; flex: 1; min-height: 0; background: var(--cv-surface); }
|
|
1559
|
-
.cv-pdf__frame { display: block; width: 100%; height: 100%; border: 0; }
|
|
1560
|
-
.cv-pdf--empty { display: grid; place-items: center; min-height: 200px; color: var(--cv-muted); }
|
|
1561
|
-
|
|
1562
1155
|
/* --- inline artifact card (for the transcript) -------------------------------- */
|
|
1563
1156
|
|
|
1564
1157
|
.cv-card {
|
|
@@ -1618,6 +1211,63 @@
|
|
|
1618
1211
|
|
|
1619
1212
|
/* --- responsive --------------------------------------------------------------- */
|
|
1620
1213
|
|
|
1214
|
+
/* --- file artifact (uploads shown as themselves) ------------------------------ */
|
|
1215
|
+
|
|
1216
|
+
.cv-file {
|
|
1217
|
+
display: flex;
|
|
1218
|
+
flex-direction: column;
|
|
1219
|
+
align-items: center;
|
|
1220
|
+
gap: 14px;
|
|
1221
|
+
max-width: 640px;
|
|
1222
|
+
margin: 0 auto;
|
|
1223
|
+
}
|
|
1224
|
+
.cv-file__image,
|
|
1225
|
+
.cv-file__cover {
|
|
1226
|
+
max-width: 100%;
|
|
1227
|
+
max-height: 60vh;
|
|
1228
|
+
border: 1px solid var(--cv-border);
|
|
1229
|
+
border-radius: 12px;
|
|
1230
|
+
background: #fff;
|
|
1231
|
+
}
|
|
1232
|
+
.cv-file__excerpt {
|
|
1233
|
+
width: 100%;
|
|
1234
|
+
max-height: 40vh;
|
|
1235
|
+
overflow: auto;
|
|
1236
|
+
margin: 0;
|
|
1237
|
+
padding: 14px 16px;
|
|
1238
|
+
border: 1px solid var(--cv-border);
|
|
1239
|
+
border-radius: 12px;
|
|
1240
|
+
background: var(--cv-bg);
|
|
1241
|
+
font: 12px/1.6 ui-monospace, Menlo, Consolas, monospace;
|
|
1242
|
+
white-space: pre-wrap;
|
|
1243
|
+
word-break: break-word;
|
|
1244
|
+
color: var(--cv-text);
|
|
1245
|
+
}
|
|
1246
|
+
.cv-file__card {
|
|
1247
|
+
display: flex;
|
|
1248
|
+
align-items: center;
|
|
1249
|
+
gap: 10px;
|
|
1250
|
+
width: 100%;
|
|
1251
|
+
padding: 10px 14px;
|
|
1252
|
+
border: 1px solid var(--cv-border);
|
|
1253
|
+
border-radius: 12px;
|
|
1254
|
+
background: var(--cv-bg);
|
|
1255
|
+
}
|
|
1256
|
+
.cv-file__icon { font-size: 24px; line-height: 1; }
|
|
1257
|
+
.cv-file__meta { display: flex; flex-direction: column; min-width: 0; flex: 1; }
|
|
1258
|
+
.cv-file__meta b { font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
1259
|
+
.cv-file__facts { font-size: 11px; color: var(--cv-muted); }
|
|
1260
|
+
.cv-file__download {
|
|
1261
|
+
flex: 0 0 auto;
|
|
1262
|
+
padding: 6px 12px;
|
|
1263
|
+
border: 1px solid var(--cv-border);
|
|
1264
|
+
border-radius: 8px;
|
|
1265
|
+
font-size: 12px;
|
|
1266
|
+
color: var(--cv-text);
|
|
1267
|
+
text-decoration: none;
|
|
1268
|
+
}
|
|
1269
|
+
.cv-file__download:hover { border-color: var(--cv-accent); }
|
|
1270
|
+
|
|
1621
1271
|
/* Tablet / narrow desktop: tighten paddings, let toolbars wrap. */
|
|
1622
1272
|
@media (max-width: 900px) {
|
|
1623
1273
|
.cv-body { padding: 16px; }
|