@braincrew-lab/langchain-canvas 0.2.0 → 0.3.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.ko.md +23 -11
- package/README.md +23 -11
- package/dist/{ChartRenderer-AAWVGKV5.js → ChartRenderer-ABRQ5YFN.js} +49 -31
- package/dist/{DocumentRenderer-NBRBPYU6.js → DocumentRenderer-YTEMC3Z4.js} +17 -12
- package/dist/{PdfRenderer-DPQT4E7O.js → PdfRenderer-GDA67MES.js} +11 -10
- package/dist/{SlidesRenderer-6ZGHXTQX.js → SlidesRenderer-JNPXNTNJ.js} +152 -65
- package/dist/TableRenderer-BJQE2HMO.js +636 -0
- package/dist/{chunk-UL5F66PN.js → chunk-FSFOURG5.js} +1 -1
- package/dist/chunk-QMOJEGRH.js +207 -0
- package/dist/{chunk-S54GJDSJ.js → chunk-ZLXAWRUP.js} +16 -0
- package/dist/index.d.ts +753 -5
- package/dist/index.js +1897 -195
- package/dist/styles.css +379 -4
- package/package.json +26 -2
- package/dist/TableRenderer-VKDD3CB6.js +0 -419
package/dist/index.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ interface ChartOptions {
|
|
|
52
52
|
colors?: string[];
|
|
53
53
|
}
|
|
54
54
|
interface ChartData {
|
|
55
|
-
chart: "line" | "bar" | "area" | "pie";
|
|
55
|
+
chart: "line" | "bar" | "area" | "pie" | "scatter" | "donut";
|
|
56
56
|
/** Tidy/long-form rows, consumed directly by the charting library. */
|
|
57
57
|
rows: Array<Record<string, string | number>>;
|
|
58
58
|
/** Category / x-axis field. */
|
|
@@ -110,6 +110,14 @@ interface SlideElement {
|
|
|
110
110
|
shape?: "rect" | "ellipse" | "line";
|
|
111
111
|
/** Fill (rect/ellipse) or stroke (line) color for a shape. */
|
|
112
112
|
fill?: string;
|
|
113
|
+
/** Rotation in degrees, clockwise, about the element's center. Purely visual:
|
|
114
|
+
* `x`/`y`/`w`/`h` always describe the unrotated box. */
|
|
115
|
+
rotate?: number;
|
|
116
|
+
/** How an image fills its box — "contain" (default, letterboxed) or "cover"
|
|
117
|
+
* (fill and crop). */
|
|
118
|
+
fit?: "contain" | "cover";
|
|
119
|
+
/** Corner radius in px (0–32) for images and rect shapes. */
|
|
120
|
+
radius?: number;
|
|
113
121
|
/** Editor-only grouping: elements sharing a `group` id select and move as
|
|
114
122
|
* one. Purely additive — exporters and the presenter ignore it. */
|
|
115
123
|
group?: string;
|
|
@@ -229,6 +237,16 @@ interface CanvasStatus {
|
|
|
229
237
|
id: string;
|
|
230
238
|
status: ArtifactStatus;
|
|
231
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Promote the artifact's current state to a described version snapshot.
|
|
242
|
+
* `revision` is the opaque store revision when a CanvasStore backs the canvas.
|
|
243
|
+
*/
|
|
244
|
+
interface CanvasCommit {
|
|
245
|
+
type: "canvas.commit";
|
|
246
|
+
id: string;
|
|
247
|
+
description: string;
|
|
248
|
+
revision?: string;
|
|
249
|
+
}
|
|
232
250
|
interface CanvasClose {
|
|
233
251
|
type: "canvas.close";
|
|
234
252
|
id: string;
|
|
@@ -241,7 +259,7 @@ interface DoneEvent {
|
|
|
241
259
|
type: "done";
|
|
242
260
|
}
|
|
243
261
|
type ChatEvent = MessageDelta | MessageEnd | ToolStart | ToolEnd;
|
|
244
|
-
type CanvasEvent = CanvasCreate | CanvasAppend | CanvasPatch | CanvasNodePatch | CanvasReplace | CanvasStatus | CanvasClose;
|
|
262
|
+
type CanvasEvent = CanvasCreate | CanvasAppend | CanvasPatch | CanvasNodePatch | CanvasReplace | CanvasStatus | CanvasCommit | CanvasClose;
|
|
245
263
|
type StreamEvent = ChatEvent | CanvasEvent | ErrorEvent | DoneEvent;
|
|
246
264
|
/** Narrow a `StreamEvent` to the canvas family. */
|
|
247
265
|
declare function isCanvasEvent(event: StreamEvent): event is CanvasEvent;
|
|
@@ -508,6 +526,34 @@ declare function useCanvasReplay(): {
|
|
|
508
526
|
*/
|
|
509
527
|
declare function useArtifactPatch(id: string): (patch: Record<string, unknown>) => void;
|
|
510
528
|
|
|
529
|
+
/**
|
|
530
|
+
* `useCanvasSave` — debounced whole-artifact persistence for user edits.
|
|
531
|
+
*
|
|
532
|
+
* The store's `onUserEdit` handler fires per committed user edit (never for
|
|
533
|
+
* agent streaming). This hook turns an `onSave` handler into a debounced
|
|
534
|
+
* per-edit callback for that signal: after `debounceMs` of quiet it hands the
|
|
535
|
+
* latest reconciled artifact to `onSave`. The host decides where it goes — a
|
|
536
|
+
* `CanvasStore`-backed endpoint, local storage, anywhere.
|
|
537
|
+
*
|
|
538
|
+
* `<Canvas onSave={...}>` wires this automatically (composed with the host's
|
|
539
|
+
* own `onUserEdit`, both sharing the store's single user-edit slot). Headless
|
|
540
|
+
* hosts can call the hook themselves and register the returned callback via
|
|
541
|
+
* `setOnUserEdit`.
|
|
542
|
+
*
|
|
543
|
+
* `baseRevision` is the artifact's last known store revision (stamped into
|
|
544
|
+
* `meta.revision` by `canvas.commit` events); hosts pass it to their save
|
|
545
|
+
* endpoint so a stale write can be rejected instead of overwriting.
|
|
546
|
+
*/
|
|
547
|
+
|
|
548
|
+
interface CanvasSavePayload {
|
|
549
|
+
artifactId: string;
|
|
550
|
+
artifact: Artifact;
|
|
551
|
+
/** Store revision the user's edit is based on, when known. */
|
|
552
|
+
baseRevision: string | null;
|
|
553
|
+
}
|
|
554
|
+
type CanvasSaveHandler = (payload: CanvasSavePayload) => void | Promise<void>;
|
|
555
|
+
declare function useCanvasSave(onSave: CanvasSaveHandler | undefined, debounceMs?: number): ((artifact: Artifact) => void) | null;
|
|
556
|
+
|
|
511
557
|
/**
|
|
512
558
|
* Schema fixtures — scripted wire-event sequences that render the canvas with no
|
|
513
559
|
* backend. Feed one to `useCanvasReplay().play(scenario.events)`.
|
|
@@ -525,6 +571,699 @@ interface Scenario {
|
|
|
525
571
|
}
|
|
526
572
|
declare const scenarios: Scenario[];
|
|
527
573
|
|
|
574
|
+
type CanvasLocale = "en" | "ko";
|
|
575
|
+
declare const MESSAGES: {
|
|
576
|
+
undo: {
|
|
577
|
+
en: string;
|
|
578
|
+
ko: string;
|
|
579
|
+
};
|
|
580
|
+
redo: {
|
|
581
|
+
en: string;
|
|
582
|
+
ko: string;
|
|
583
|
+
};
|
|
584
|
+
export: {
|
|
585
|
+
en: string;
|
|
586
|
+
ko: string;
|
|
587
|
+
};
|
|
588
|
+
openInTab: {
|
|
589
|
+
en: string;
|
|
590
|
+
ko: string;
|
|
591
|
+
};
|
|
592
|
+
copyHtml: {
|
|
593
|
+
en: string;
|
|
594
|
+
ko: string;
|
|
595
|
+
};
|
|
596
|
+
copied: {
|
|
597
|
+
en: string;
|
|
598
|
+
ko: string;
|
|
599
|
+
};
|
|
600
|
+
versionHistory: {
|
|
601
|
+
en: string;
|
|
602
|
+
ko: string;
|
|
603
|
+
};
|
|
604
|
+
prevVersion: {
|
|
605
|
+
en: string;
|
|
606
|
+
ko: string;
|
|
607
|
+
};
|
|
608
|
+
nextVersion: {
|
|
609
|
+
en: string;
|
|
610
|
+
ko: string;
|
|
611
|
+
};
|
|
612
|
+
backToLatest: {
|
|
613
|
+
en: string;
|
|
614
|
+
ko: string;
|
|
615
|
+
};
|
|
616
|
+
historyNote: {
|
|
617
|
+
en: string;
|
|
618
|
+
ko: string;
|
|
619
|
+
};
|
|
620
|
+
loading: {
|
|
621
|
+
en: string;
|
|
622
|
+
ko: string;
|
|
623
|
+
};
|
|
624
|
+
noRenderer: {
|
|
625
|
+
en: string;
|
|
626
|
+
ko: string;
|
|
627
|
+
};
|
|
628
|
+
writing: {
|
|
629
|
+
en: string;
|
|
630
|
+
ko: string;
|
|
631
|
+
};
|
|
632
|
+
open: {
|
|
633
|
+
en: string;
|
|
634
|
+
ko: string;
|
|
635
|
+
};
|
|
636
|
+
kindWeb: {
|
|
637
|
+
en: string;
|
|
638
|
+
ko: string;
|
|
639
|
+
};
|
|
640
|
+
kindDocument: {
|
|
641
|
+
en: string;
|
|
642
|
+
ko: string;
|
|
643
|
+
};
|
|
644
|
+
kindChart: {
|
|
645
|
+
en: string;
|
|
646
|
+
ko: string;
|
|
647
|
+
};
|
|
648
|
+
kindTable: {
|
|
649
|
+
en: string;
|
|
650
|
+
ko: string;
|
|
651
|
+
};
|
|
652
|
+
kindSlides: {
|
|
653
|
+
en: string;
|
|
654
|
+
ko: string;
|
|
655
|
+
};
|
|
656
|
+
kindPdf: {
|
|
657
|
+
en: string;
|
|
658
|
+
ko: string;
|
|
659
|
+
};
|
|
660
|
+
design: {
|
|
661
|
+
en: string;
|
|
662
|
+
ko: string;
|
|
663
|
+
};
|
|
664
|
+
code: {
|
|
665
|
+
en: string;
|
|
666
|
+
ko: string;
|
|
667
|
+
};
|
|
668
|
+
add: {
|
|
669
|
+
en: string;
|
|
670
|
+
ko: string;
|
|
671
|
+
};
|
|
672
|
+
heading: {
|
|
673
|
+
en: string;
|
|
674
|
+
ko: string;
|
|
675
|
+
};
|
|
676
|
+
text: {
|
|
677
|
+
en: string;
|
|
678
|
+
ko: string;
|
|
679
|
+
};
|
|
680
|
+
button: {
|
|
681
|
+
en: string;
|
|
682
|
+
ko: string;
|
|
683
|
+
};
|
|
684
|
+
image: {
|
|
685
|
+
en: string;
|
|
686
|
+
ko: string;
|
|
687
|
+
};
|
|
688
|
+
divider: {
|
|
689
|
+
en: string;
|
|
690
|
+
ko: string;
|
|
691
|
+
};
|
|
692
|
+
pageMenu: {
|
|
693
|
+
en: string;
|
|
694
|
+
ko: string;
|
|
695
|
+
};
|
|
696
|
+
sectionMenu: {
|
|
697
|
+
en: string;
|
|
698
|
+
ko: string;
|
|
699
|
+
};
|
|
700
|
+
outlineMenu: {
|
|
701
|
+
en: string;
|
|
702
|
+
ko: string;
|
|
703
|
+
};
|
|
704
|
+
layoutMenu: {
|
|
705
|
+
en: string;
|
|
706
|
+
ko: string;
|
|
707
|
+
};
|
|
708
|
+
themeMenu: {
|
|
709
|
+
en: string;
|
|
710
|
+
ko: string;
|
|
711
|
+
};
|
|
712
|
+
fontMenu: {
|
|
713
|
+
en: string;
|
|
714
|
+
ko: string;
|
|
715
|
+
};
|
|
716
|
+
shapeMenu: {
|
|
717
|
+
en: string;
|
|
718
|
+
ko: string;
|
|
719
|
+
};
|
|
720
|
+
a11yCheck: {
|
|
721
|
+
en: string;
|
|
722
|
+
ko: string;
|
|
723
|
+
};
|
|
724
|
+
a11yTitle: {
|
|
725
|
+
en: string;
|
|
726
|
+
ko: string;
|
|
727
|
+
};
|
|
728
|
+
a11yClean: {
|
|
729
|
+
en: string;
|
|
730
|
+
ko: string;
|
|
731
|
+
};
|
|
732
|
+
bgImage: {
|
|
733
|
+
en: string;
|
|
734
|
+
ko: string;
|
|
735
|
+
};
|
|
736
|
+
present: {
|
|
737
|
+
en: string;
|
|
738
|
+
ko: string;
|
|
739
|
+
};
|
|
740
|
+
bold: {
|
|
741
|
+
en: string;
|
|
742
|
+
ko: string;
|
|
743
|
+
};
|
|
744
|
+
italic: {
|
|
745
|
+
en: string;
|
|
746
|
+
ko: string;
|
|
747
|
+
};
|
|
748
|
+
inlineCode: {
|
|
749
|
+
en: string;
|
|
750
|
+
ko: string;
|
|
751
|
+
};
|
|
752
|
+
bulletList: {
|
|
753
|
+
en: string;
|
|
754
|
+
ko: string;
|
|
755
|
+
};
|
|
756
|
+
numberedList: {
|
|
757
|
+
en: string;
|
|
758
|
+
ko: string;
|
|
759
|
+
};
|
|
760
|
+
quote: {
|
|
761
|
+
en: string;
|
|
762
|
+
ko: string;
|
|
763
|
+
};
|
|
764
|
+
link: {
|
|
765
|
+
en: string;
|
|
766
|
+
ko: string;
|
|
767
|
+
};
|
|
768
|
+
words: {
|
|
769
|
+
en: string;
|
|
770
|
+
ko: string;
|
|
771
|
+
};
|
|
772
|
+
minRead: {
|
|
773
|
+
en: string;
|
|
774
|
+
ko: string;
|
|
775
|
+
};
|
|
776
|
+
addColumn: {
|
|
777
|
+
en: string;
|
|
778
|
+
ko: string;
|
|
779
|
+
};
|
|
780
|
+
addRow: {
|
|
781
|
+
en: string;
|
|
782
|
+
ko: string;
|
|
783
|
+
};
|
|
784
|
+
sortBy: {
|
|
785
|
+
en: string;
|
|
786
|
+
ko: string;
|
|
787
|
+
};
|
|
788
|
+
filterRows: {
|
|
789
|
+
en: string;
|
|
790
|
+
ko: string;
|
|
791
|
+
};
|
|
792
|
+
cleanStyling: {
|
|
793
|
+
en: string;
|
|
794
|
+
ko: string;
|
|
795
|
+
};
|
|
796
|
+
freezeHeader: {
|
|
797
|
+
en: string;
|
|
798
|
+
ko: string;
|
|
799
|
+
};
|
|
800
|
+
fillColor: {
|
|
801
|
+
en: string;
|
|
802
|
+
ko: string;
|
|
803
|
+
};
|
|
804
|
+
textColor: {
|
|
805
|
+
en: string;
|
|
806
|
+
ko: string;
|
|
807
|
+
};
|
|
808
|
+
alignLeft: {
|
|
809
|
+
en: string;
|
|
810
|
+
ko: string;
|
|
811
|
+
};
|
|
812
|
+
alignCenter: {
|
|
813
|
+
en: string;
|
|
814
|
+
ko: string;
|
|
815
|
+
};
|
|
816
|
+
alignRight: {
|
|
817
|
+
en: string;
|
|
818
|
+
ko: string;
|
|
819
|
+
};
|
|
820
|
+
numberFormat: {
|
|
821
|
+
en: string;
|
|
822
|
+
ko: string;
|
|
823
|
+
};
|
|
824
|
+
mergeCells: {
|
|
825
|
+
en: string;
|
|
826
|
+
ko: string;
|
|
827
|
+
};
|
|
828
|
+
unmergeCells: {
|
|
829
|
+
en: string;
|
|
830
|
+
ko: string;
|
|
831
|
+
};
|
|
832
|
+
sheetHint: {
|
|
833
|
+
en: string;
|
|
834
|
+
ko: string;
|
|
835
|
+
};
|
|
836
|
+
quickFunction: {
|
|
837
|
+
en: string;
|
|
838
|
+
ko: string;
|
|
839
|
+
};
|
|
840
|
+
quickFunctionTip: {
|
|
841
|
+
en: string;
|
|
842
|
+
ko: string;
|
|
843
|
+
};
|
|
844
|
+
mergeTip: {
|
|
845
|
+
en: string;
|
|
846
|
+
ko: string;
|
|
847
|
+
};
|
|
848
|
+
unmergeTip: {
|
|
849
|
+
en: string;
|
|
850
|
+
ko: string;
|
|
851
|
+
};
|
|
852
|
+
cleanStylingTip: {
|
|
853
|
+
en: string;
|
|
854
|
+
ko: string;
|
|
855
|
+
};
|
|
856
|
+
freezeOnTip: {
|
|
857
|
+
en: string;
|
|
858
|
+
ko: string;
|
|
859
|
+
};
|
|
860
|
+
freezeOffTip: {
|
|
861
|
+
en: string;
|
|
862
|
+
ko: string;
|
|
863
|
+
};
|
|
864
|
+
numberFormatTip: {
|
|
865
|
+
en: string;
|
|
866
|
+
ko: string;
|
|
867
|
+
};
|
|
868
|
+
sortByColumn: {
|
|
869
|
+
en: string;
|
|
870
|
+
ko: string;
|
|
871
|
+
};
|
|
872
|
+
ascending: {
|
|
873
|
+
en: string;
|
|
874
|
+
ko: string;
|
|
875
|
+
};
|
|
876
|
+
descending: {
|
|
877
|
+
en: string;
|
|
878
|
+
ko: string;
|
|
879
|
+
};
|
|
880
|
+
filterTip: {
|
|
881
|
+
en: string;
|
|
882
|
+
ko: string;
|
|
883
|
+
};
|
|
884
|
+
fxPlaceholder: {
|
|
885
|
+
en: string;
|
|
886
|
+
ko: string;
|
|
887
|
+
};
|
|
888
|
+
groupInsert: {
|
|
889
|
+
en: string;
|
|
890
|
+
ko: string;
|
|
891
|
+
};
|
|
892
|
+
groupFont: {
|
|
893
|
+
en: string;
|
|
894
|
+
ko: string;
|
|
895
|
+
};
|
|
896
|
+
groupAlign: {
|
|
897
|
+
en: string;
|
|
898
|
+
ko: string;
|
|
899
|
+
};
|
|
900
|
+
groupNumber: {
|
|
901
|
+
en: string;
|
|
902
|
+
ko: string;
|
|
903
|
+
};
|
|
904
|
+
groupEdit: {
|
|
905
|
+
en: string;
|
|
906
|
+
ko: string;
|
|
907
|
+
};
|
|
908
|
+
groupView: {
|
|
909
|
+
en: string;
|
|
910
|
+
ko: string;
|
|
911
|
+
};
|
|
912
|
+
boldGlyph: {
|
|
913
|
+
en: string;
|
|
914
|
+
ko: string;
|
|
915
|
+
};
|
|
916
|
+
textGlyph: {
|
|
917
|
+
en: string;
|
|
918
|
+
ko: string;
|
|
919
|
+
};
|
|
920
|
+
autoSum: {
|
|
921
|
+
en: string;
|
|
922
|
+
ko: string;
|
|
923
|
+
};
|
|
924
|
+
fmtGeneral: {
|
|
925
|
+
en: string;
|
|
926
|
+
ko: string;
|
|
927
|
+
};
|
|
928
|
+
fmtCurrency: {
|
|
929
|
+
en: string;
|
|
930
|
+
ko: string;
|
|
931
|
+
};
|
|
932
|
+
fmtPercent: {
|
|
933
|
+
en: string;
|
|
934
|
+
ko: string;
|
|
935
|
+
};
|
|
936
|
+
fmtThousands: {
|
|
937
|
+
en: string;
|
|
938
|
+
ko: string;
|
|
939
|
+
};
|
|
940
|
+
fmtDecimal: {
|
|
941
|
+
en: string;
|
|
942
|
+
ko: string;
|
|
943
|
+
};
|
|
944
|
+
fmtDate: {
|
|
945
|
+
en: string;
|
|
946
|
+
ko: string;
|
|
947
|
+
};
|
|
948
|
+
chartTitle: {
|
|
949
|
+
en: string;
|
|
950
|
+
ko: string;
|
|
951
|
+
};
|
|
952
|
+
editData: {
|
|
953
|
+
en: string;
|
|
954
|
+
ko: string;
|
|
955
|
+
};
|
|
956
|
+
doneEditing: {
|
|
957
|
+
en: string;
|
|
958
|
+
ko: string;
|
|
959
|
+
};
|
|
960
|
+
addRowBtn: {
|
|
961
|
+
en: string;
|
|
962
|
+
ko: string;
|
|
963
|
+
};
|
|
964
|
+
downloadPng: {
|
|
965
|
+
en: string;
|
|
966
|
+
ko: string;
|
|
967
|
+
};
|
|
968
|
+
stacked: {
|
|
969
|
+
en: string;
|
|
970
|
+
ko: string;
|
|
971
|
+
};
|
|
972
|
+
seriesColor: {
|
|
973
|
+
en: string;
|
|
974
|
+
ko: string;
|
|
975
|
+
};
|
|
976
|
+
seriesName: {
|
|
977
|
+
en: string;
|
|
978
|
+
ko: string;
|
|
979
|
+
};
|
|
980
|
+
removeRow: {
|
|
981
|
+
en: string;
|
|
982
|
+
ko: string;
|
|
983
|
+
};
|
|
984
|
+
addText: {
|
|
985
|
+
en: string;
|
|
986
|
+
ko: string;
|
|
987
|
+
};
|
|
988
|
+
addImage: {
|
|
989
|
+
en: string;
|
|
990
|
+
ko: string;
|
|
991
|
+
};
|
|
992
|
+
addShape: {
|
|
993
|
+
en: string;
|
|
994
|
+
ko: string;
|
|
995
|
+
};
|
|
996
|
+
arrangeMenu: {
|
|
997
|
+
en: string;
|
|
998
|
+
ko: string;
|
|
999
|
+
};
|
|
1000
|
+
padding: {
|
|
1001
|
+
en: string;
|
|
1002
|
+
ko: string;
|
|
1003
|
+
};
|
|
1004
|
+
duplicate: {
|
|
1005
|
+
en: string;
|
|
1006
|
+
ko: string;
|
|
1007
|
+
};
|
|
1008
|
+
delete: {
|
|
1009
|
+
en: string;
|
|
1010
|
+
ko: string;
|
|
1011
|
+
};
|
|
1012
|
+
group: {
|
|
1013
|
+
en: string;
|
|
1014
|
+
ko: string;
|
|
1015
|
+
};
|
|
1016
|
+
ungroup: {
|
|
1017
|
+
en: string;
|
|
1018
|
+
ko: string;
|
|
1019
|
+
};
|
|
1020
|
+
bringToFront: {
|
|
1021
|
+
en: string;
|
|
1022
|
+
ko: string;
|
|
1023
|
+
};
|
|
1024
|
+
sendToBack: {
|
|
1025
|
+
en: string;
|
|
1026
|
+
ko: string;
|
|
1027
|
+
};
|
|
1028
|
+
fontSize: {
|
|
1029
|
+
en: string;
|
|
1030
|
+
ko: string;
|
|
1031
|
+
};
|
|
1032
|
+
resizeTip: {
|
|
1033
|
+
en: string;
|
|
1034
|
+
ko: string;
|
|
1035
|
+
};
|
|
1036
|
+
fitToggle: {
|
|
1037
|
+
en: string;
|
|
1038
|
+
ko: string;
|
|
1039
|
+
};
|
|
1040
|
+
cornerRadius: {
|
|
1041
|
+
en: string;
|
|
1042
|
+
ko: string;
|
|
1043
|
+
};
|
|
1044
|
+
rotateStep: {
|
|
1045
|
+
en: string;
|
|
1046
|
+
ko: string;
|
|
1047
|
+
};
|
|
1048
|
+
rotationDeg: {
|
|
1049
|
+
en: string;
|
|
1050
|
+
ko: string;
|
|
1051
|
+
};
|
|
1052
|
+
duplicateShort: {
|
|
1053
|
+
en: string;
|
|
1054
|
+
ko: string;
|
|
1055
|
+
};
|
|
1056
|
+
bringForward: {
|
|
1057
|
+
en: string;
|
|
1058
|
+
ko: string;
|
|
1059
|
+
};
|
|
1060
|
+
sendBackward: {
|
|
1061
|
+
en: string;
|
|
1062
|
+
ko: string;
|
|
1063
|
+
};
|
|
1064
|
+
groupShort: {
|
|
1065
|
+
en: string;
|
|
1066
|
+
ko: string;
|
|
1067
|
+
};
|
|
1068
|
+
ungroupShort: {
|
|
1069
|
+
en: string;
|
|
1070
|
+
ko: string;
|
|
1071
|
+
};
|
|
1072
|
+
alignLeftEdges: {
|
|
1073
|
+
en: string;
|
|
1074
|
+
ko: string;
|
|
1075
|
+
};
|
|
1076
|
+
alignHCenters: {
|
|
1077
|
+
en: string;
|
|
1078
|
+
ko: string;
|
|
1079
|
+
};
|
|
1080
|
+
alignRightEdges: {
|
|
1081
|
+
en: string;
|
|
1082
|
+
ko: string;
|
|
1083
|
+
};
|
|
1084
|
+
alignTopEdges: {
|
|
1085
|
+
en: string;
|
|
1086
|
+
ko: string;
|
|
1087
|
+
};
|
|
1088
|
+
alignVCenters: {
|
|
1089
|
+
en: string;
|
|
1090
|
+
ko: string;
|
|
1091
|
+
};
|
|
1092
|
+
alignBottomEdges: {
|
|
1093
|
+
en: string;
|
|
1094
|
+
ko: string;
|
|
1095
|
+
};
|
|
1096
|
+
deleteSelection: {
|
|
1097
|
+
en: string;
|
|
1098
|
+
ko: string;
|
|
1099
|
+
};
|
|
1100
|
+
presentHint: {
|
|
1101
|
+
en: string;
|
|
1102
|
+
ko: string;
|
|
1103
|
+
};
|
|
1104
|
+
speakerNotes: {
|
|
1105
|
+
en: string;
|
|
1106
|
+
ko: string;
|
|
1107
|
+
};
|
|
1108
|
+
download: {
|
|
1109
|
+
en: string;
|
|
1110
|
+
ko: string;
|
|
1111
|
+
};
|
|
1112
|
+
openBtn: {
|
|
1113
|
+
en: string;
|
|
1114
|
+
ko: string;
|
|
1115
|
+
};
|
|
1116
|
+
fitWidth: {
|
|
1117
|
+
en: string;
|
|
1118
|
+
ko: string;
|
|
1119
|
+
};
|
|
1120
|
+
zoomIn: {
|
|
1121
|
+
en: string;
|
|
1122
|
+
ko: string;
|
|
1123
|
+
};
|
|
1124
|
+
zoomOut: {
|
|
1125
|
+
en: string;
|
|
1126
|
+
ko: string;
|
|
1127
|
+
};
|
|
1128
|
+
waitingPdf: {
|
|
1129
|
+
en: string;
|
|
1130
|
+
ko: string;
|
|
1131
|
+
};
|
|
1132
|
+
addTextBox: {
|
|
1133
|
+
en: string;
|
|
1134
|
+
ko: string;
|
|
1135
|
+
};
|
|
1136
|
+
addImageTip: {
|
|
1137
|
+
en: string;
|
|
1138
|
+
ko: string;
|
|
1139
|
+
};
|
|
1140
|
+
addShapeTip: {
|
|
1141
|
+
en: string;
|
|
1142
|
+
ko: string;
|
|
1143
|
+
};
|
|
1144
|
+
applyLayout: {
|
|
1145
|
+
en: string;
|
|
1146
|
+
ko: string;
|
|
1147
|
+
};
|
|
1148
|
+
autoLayoutTip: {
|
|
1149
|
+
en: string;
|
|
1150
|
+
ko: string;
|
|
1151
|
+
};
|
|
1152
|
+
bgColor: {
|
|
1153
|
+
en: string;
|
|
1154
|
+
ko: string;
|
|
1155
|
+
};
|
|
1156
|
+
bgImageTip: {
|
|
1157
|
+
en: string;
|
|
1158
|
+
ko: string;
|
|
1159
|
+
};
|
|
1160
|
+
padTip: {
|
|
1161
|
+
en: string;
|
|
1162
|
+
ko: string;
|
|
1163
|
+
};
|
|
1164
|
+
presentTip: {
|
|
1165
|
+
en: string;
|
|
1166
|
+
ko: string;
|
|
1167
|
+
};
|
|
1168
|
+
duplicateSlide: {
|
|
1169
|
+
en: string;
|
|
1170
|
+
ko: string;
|
|
1171
|
+
};
|
|
1172
|
+
deleteSlide: {
|
|
1173
|
+
en: string;
|
|
1174
|
+
ko: string;
|
|
1175
|
+
};
|
|
1176
|
+
theme: {
|
|
1177
|
+
en: string;
|
|
1178
|
+
ko: string;
|
|
1179
|
+
};
|
|
1180
|
+
desktop: {
|
|
1181
|
+
en: string;
|
|
1182
|
+
ko: string;
|
|
1183
|
+
};
|
|
1184
|
+
tablet: {
|
|
1185
|
+
en: string;
|
|
1186
|
+
ko: string;
|
|
1187
|
+
};
|
|
1188
|
+
mobile: {
|
|
1189
|
+
en: string;
|
|
1190
|
+
ko: string;
|
|
1191
|
+
};
|
|
1192
|
+
a11yIssues: {
|
|
1193
|
+
en: string;
|
|
1194
|
+
ko: string;
|
|
1195
|
+
};
|
|
1196
|
+
a11yNone: {
|
|
1197
|
+
en: string;
|
|
1198
|
+
ko: string;
|
|
1199
|
+
};
|
|
1200
|
+
pageTemplateTitle: {
|
|
1201
|
+
en: string;
|
|
1202
|
+
ko: string;
|
|
1203
|
+
};
|
|
1204
|
+
sectionTemplateTitle: {
|
|
1205
|
+
en: string;
|
|
1206
|
+
ko: string;
|
|
1207
|
+
};
|
|
1208
|
+
jumpToHeading: {
|
|
1209
|
+
en: string;
|
|
1210
|
+
ko: string;
|
|
1211
|
+
};
|
|
1212
|
+
insertSlideLayout: {
|
|
1213
|
+
en: string;
|
|
1214
|
+
ko: string;
|
|
1215
|
+
};
|
|
1216
|
+
applySlideTheme: {
|
|
1217
|
+
en: string;
|
|
1218
|
+
ko: string;
|
|
1219
|
+
};
|
|
1220
|
+
insertShape: {
|
|
1221
|
+
en: string;
|
|
1222
|
+
ko: string;
|
|
1223
|
+
};
|
|
1224
|
+
slideFont: {
|
|
1225
|
+
en: string;
|
|
1226
|
+
ko: string;
|
|
1227
|
+
};
|
|
1228
|
+
slideBgImage: {
|
|
1229
|
+
en: string;
|
|
1230
|
+
ko: string;
|
|
1231
|
+
};
|
|
1232
|
+
moveUp: {
|
|
1233
|
+
en: string;
|
|
1234
|
+
ko: string;
|
|
1235
|
+
};
|
|
1236
|
+
moveDown: {
|
|
1237
|
+
en: string;
|
|
1238
|
+
ko: string;
|
|
1239
|
+
};
|
|
1240
|
+
waitingData: {
|
|
1241
|
+
en: string;
|
|
1242
|
+
ko: string;
|
|
1243
|
+
};
|
|
1244
|
+
calculating: {
|
|
1245
|
+
en: string;
|
|
1246
|
+
ko: string;
|
|
1247
|
+
};
|
|
1248
|
+
loadingSheet: {
|
|
1249
|
+
en: string;
|
|
1250
|
+
ko: string;
|
|
1251
|
+
};
|
|
1252
|
+
dropToOpen: {
|
|
1253
|
+
en: string;
|
|
1254
|
+
ko: string;
|
|
1255
|
+
};
|
|
1256
|
+
};
|
|
1257
|
+
type MessageKey = keyof typeof MESSAGES;
|
|
1258
|
+
interface CanvasLocaleProviderProps {
|
|
1259
|
+
locale?: CanvasLocale;
|
|
1260
|
+
children: ReactNode;
|
|
1261
|
+
}
|
|
1262
|
+
declare function CanvasLocaleProvider({ locale, children }: CanvasLocaleProviderProps): react.JSX.Element;
|
|
1263
|
+
declare function useLocale(): CanvasLocale;
|
|
1264
|
+
/** `const t = useT(); t("sortBy")` → the label in the canvas's locale. */
|
|
1265
|
+
declare function useT(): (key: MessageKey) => string;
|
|
1266
|
+
|
|
528
1267
|
interface RendererProps<TData = unknown> {
|
|
529
1268
|
artifact: Artifact<TData>;
|
|
530
1269
|
}
|
|
@@ -543,6 +1282,8 @@ declare function mergeRegistries(...registries: ArtifactRegistry[]): ArtifactReg
|
|
|
543
1282
|
interface CanvasProps {
|
|
544
1283
|
/** Renderer map. Defaults to the built-in html/document/chart/table renderers. */
|
|
545
1284
|
registry?: ArtifactRegistry;
|
|
1285
|
+
/** UI language for the canvas chrome (toolbars, menus, states). Default "en". */
|
|
1286
|
+
locale?: CanvasLocale;
|
|
546
1287
|
/** Rendered when no artifact has been opened yet. */
|
|
547
1288
|
emptyState?: ReactNode;
|
|
548
1289
|
/**
|
|
@@ -559,8 +1300,15 @@ interface CanvasProps {
|
|
|
559
1300
|
* debounce further on the host before hitting the network.
|
|
560
1301
|
*/
|
|
561
1302
|
onUserEdit?: (artifact: Artifact) => void;
|
|
1303
|
+
/**
|
|
1304
|
+
* Persist user edits: the debounced companion to `onUserEdit` (see
|
|
1305
|
+
* `useCanvasSave`). Called after edits go quiet, with the artifact and the
|
|
1306
|
+
* `baseRevision` to hand a store-backed save endpoint. When omitted, edits
|
|
1307
|
+
* stay in-memory exactly as before.
|
|
1308
|
+
*/
|
|
1309
|
+
onSave?: CanvasSaveHandler;
|
|
562
1310
|
}
|
|
563
|
-
declare function Canvas({ registry, emptyState, onEditElement, onUserEdit }: CanvasProps): react.JSX.Element;
|
|
1311
|
+
declare function Canvas({ registry, locale, emptyState, onEditElement, onUserEdit, onSave }: CanvasProps): react.JSX.Element;
|
|
564
1312
|
|
|
565
1313
|
interface ExportMenuProps {
|
|
566
1314
|
artifact: Artifact;
|
|
@@ -695,7 +1443,7 @@ declare function printToPdf(html: string): void;
|
|
|
695
1443
|
*/
|
|
696
1444
|
|
|
697
1445
|
/** Extensions we can turn into an artifact, for `accept="…"` and drop filtering. */
|
|
698
|
-
declare const IMPORTABLE_EXTENSIONS: readonly [".csv", ".md", ".markdown", ".txt", ".html", ".htm", ".json", ".xlsx", ".pdf", ".hwpx", ".hwp"];
|
|
1446
|
+
declare const IMPORTABLE_EXTENSIONS: readonly [".csv", ".md", ".markdown", ".txt", ".html", ".htm", ".json", ".xlsx", ".pdf", ".hwpx", ".hwp", ".docx", ".pptx"];
|
|
699
1447
|
/** True when the file has an extension we know how to import. */
|
|
700
1448
|
declare const canImport: (file: File) => boolean;
|
|
701
1449
|
/**
|
|
@@ -720,4 +1468,4 @@ declare function useCanvasImport(): {
|
|
|
720
1468
|
canImport: (file: File) => boolean;
|
|
721
1469
|
};
|
|
722
1470
|
|
|
723
|
-
export { type Artifact, ArtifactCard, type ArtifactRegistry, type ArtifactRenderer, type ArtifactStatus, Canvas, type CanvasAppend, type CanvasClose, type CanvasCreate, type CanvasEvent, type CanvasNodePatch, type CanvasPatch, type CanvasProps, CanvasProvider, type CanvasProviderProps, CanvasRegistryProvider, type CanvasReplace, type CanvasState, type CanvasStatus, type CanvasStore, type ChartArtifact, type ChartData, type ChartOptions, ChartRenderer, type ChartSeries, type ChatEvent, type ChatMessage, type ChatRequest, type DocumentArtifact, type DocumentData, DocumentRenderer, type DoneEvent, type ElementSelection, type ErrorEvent, ExportMenu, type FileExport, type HtmlArtifact, type HtmlData, HtmlRenderer, IMPORTABLE_EXTENSIONS, INSPECTOR_MARK, type IframeCommand, type KnownArtifact, type MessageDelta, type MessageEnd, type MockStreamOptions, type PdfArtifact, type PdfData, PdfRenderer, type RendererProps, STYLE_PROPS, type Scenario, SelectionBar, type Slide, type SlideElement, type SlidesArtifact, type SlidesData, SlidesRenderer, type StreamEvent, type StreamOptions, StylePanel, type TableArtifact, type TableColumn, type TableData, TableRenderer, type ToolEnd, type ToolStart, type UseCanvasStreamOptions, type UserEditHandler, builtinRenderers, canImport, createCanvasStore, dataExporters, downloadBlob, emptyCanvasState, importFile, isCanvasEvent, isChatEvent, mergePatch, mergeRegistries, mockStream, parseCsv, parseSSE, printToPdf, reduceCanvas, scenarios, slidesToPrintHtml, slugify, streamChat, toStandaloneHtml, useArtifactPatch, useCanvasImport, useCanvasReplay, useCanvasStore, useCanvasStoreApi, useCanvasStream, useRenderer, withInspector };
|
|
1471
|
+
export { type Artifact, ArtifactCard, type ArtifactRegistry, type ArtifactRenderer, type ArtifactStatus, Canvas, type CanvasAppend, type CanvasClose, type CanvasCommit, type CanvasCreate, type CanvasEvent, type CanvasLocale, CanvasLocaleProvider, type CanvasNodePatch, type CanvasPatch, type CanvasProps, CanvasProvider, type CanvasProviderProps, CanvasRegistryProvider, type CanvasReplace, type CanvasSaveHandler, type CanvasSavePayload, type CanvasState, type CanvasStatus, type CanvasStore, type ChartArtifact, type ChartData, type ChartOptions, ChartRenderer, type ChartSeries, type ChatEvent, type ChatMessage, type ChatRequest, type DocumentArtifact, type DocumentData, DocumentRenderer, type DoneEvent, type ElementSelection, type ErrorEvent, ExportMenu, type FileExport, type HtmlArtifact, type HtmlData, HtmlRenderer, IMPORTABLE_EXTENSIONS, INSPECTOR_MARK, type IframeCommand, type KnownArtifact, type MessageDelta, type MessageEnd, type MessageKey, type MockStreamOptions, type PdfArtifact, type PdfData, PdfRenderer, type RendererProps, STYLE_PROPS, type Scenario, SelectionBar, type Slide, type SlideElement, type SlidesArtifact, type SlidesData, SlidesRenderer, type StreamEvent, type StreamOptions, StylePanel, type TableArtifact, type TableColumn, type TableData, TableRenderer, type ToolEnd, type ToolStart, type UseCanvasStreamOptions, type UserEditHandler, builtinRenderers, canImport, createCanvasStore, dataExporters, downloadBlob, emptyCanvasState, importFile, isCanvasEvent, isChatEvent, mergePatch, mergeRegistries, mockStream, parseCsv, parseSSE, printToPdf, reduceCanvas, scenarios, slidesToPrintHtml, slugify, streamChat, toStandaloneHtml, useArtifactPatch, useCanvasImport, useCanvasReplay, useCanvasSave, useCanvasStore, useCanvasStoreApi, useCanvasStream, useLocale, useRenderer, useT, withInspector };
|