@braincrew-lab/langchain-canvas 0.1.14 → 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-FX6ZN4NC.js → ChartRenderer-ABRQ5YFN.js} +67 -39
- package/dist/{DocumentRenderer-KJ6FTGKH.js → DocumentRenderer-YTEMC3Z4.js} +17 -12
- package/dist/PdfRenderer-GDA67MES.js +98 -0
- package/dist/SlidesRenderer-JNPXNTNJ.js +964 -0
- package/dist/TableRenderer-BJQE2HMO.js +636 -0
- package/dist/{chunk-TERWLUW3.js → chunk-FSFOURG5.js} +1 -1
- package/dist/chunk-QMOJEGRH.js +207 -0
- package/dist/{chunk-KKLWKR5G.js → chunk-ZLXAWRUP.js} +52 -20
- package/dist/index.d.ts +779 -6
- package/dist/index.js +2623 -183
- package/dist/styles.css +477 -4
- package/package.json +26 -2
- package/dist/SlidesRenderer-SK5VQDIL.js +0 -492
- package/dist/TableRenderer-Y4JFRSLU.js +0 -301
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. */
|
|
@@ -82,6 +82,16 @@ interface TableData {
|
|
|
82
82
|
*/
|
|
83
83
|
sheet?: Array<Record<string, unknown>>;
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* A PDF shown in the browser's native viewer. `src` is a `data:application/pdf`
|
|
87
|
+
* URL (self-contained, the common case for agent/file-sourced PDFs), a `blob:`
|
|
88
|
+
* URL, or an `https:` URL the host is allowed to frame.
|
|
89
|
+
*/
|
|
90
|
+
interface PdfData {
|
|
91
|
+
src: string;
|
|
92
|
+
/** Optional original filename, used for the download attribute. */
|
|
93
|
+
filename?: string;
|
|
94
|
+
}
|
|
85
95
|
/** A freely-positioned element on a "blank" slide (percent geometry, 0–100). */
|
|
86
96
|
interface SlideElement {
|
|
87
97
|
id: string;
|
|
@@ -100,6 +110,17 @@ interface SlideElement {
|
|
|
100
110
|
shape?: "rect" | "ellipse" | "line";
|
|
101
111
|
/** Fill (rect/ellipse) or stroke (line) color for a shape. */
|
|
102
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;
|
|
121
|
+
/** Editor-only grouping: elements sharing a `group` id select and move as
|
|
122
|
+
* one. Purely additive — exporters and the presenter ignore it. */
|
|
123
|
+
group?: string;
|
|
103
124
|
}
|
|
104
125
|
interface Slide {
|
|
105
126
|
/** title · content (bullets) · section · image · two-column · blank (free canvas). */
|
|
@@ -117,6 +138,12 @@ interface Slide {
|
|
|
117
138
|
background?: string;
|
|
118
139
|
/** Slide text color (hex). */
|
|
119
140
|
textColor?: string;
|
|
141
|
+
/** Theme accent color (hex) — used by quick layouts and new shapes for rules,
|
|
142
|
+
* section numbers, and stats. Set by the theme presets. */
|
|
143
|
+
accent?: string;
|
|
144
|
+
/** Font stack for the slide's text (system fonts only, no external loads).
|
|
145
|
+
* Set by the theme presets; cascades to every element. */
|
|
146
|
+
fontFamily?: string;
|
|
120
147
|
/** Speaker notes (not shown on the slide; exported to the .pptx notes pane). */
|
|
121
148
|
notes?: string;
|
|
122
149
|
/** Content padding as a percent of the slide width (a safe margin around the
|
|
@@ -141,7 +168,10 @@ type TableArtifact = Artifact<TableData> & {
|
|
|
141
168
|
type SlidesArtifact = Artifact<SlidesData> & {
|
|
142
169
|
type: "slides";
|
|
143
170
|
};
|
|
144
|
-
type
|
|
171
|
+
type PdfArtifact = Artifact<PdfData> & {
|
|
172
|
+
type: "pdf";
|
|
173
|
+
};
|
|
174
|
+
type KnownArtifact = HtmlArtifact | DocumentArtifact | ChartArtifact | TableArtifact | SlidesArtifact | PdfArtifact;
|
|
145
175
|
|
|
146
176
|
/**
|
|
147
177
|
* Canvas Wire Protocol v1 — event envelopes. Mirror of
|
|
@@ -207,6 +237,16 @@ interface CanvasStatus {
|
|
|
207
237
|
id: string;
|
|
208
238
|
status: ArtifactStatus;
|
|
209
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
|
+
}
|
|
210
250
|
interface CanvasClose {
|
|
211
251
|
type: "canvas.close";
|
|
212
252
|
id: string;
|
|
@@ -219,7 +259,7 @@ interface DoneEvent {
|
|
|
219
259
|
type: "done";
|
|
220
260
|
}
|
|
221
261
|
type ChatEvent = MessageDelta | MessageEnd | ToolStart | ToolEnd;
|
|
222
|
-
type CanvasEvent = CanvasCreate | CanvasAppend | CanvasPatch | CanvasNodePatch | CanvasReplace | CanvasStatus | CanvasClose;
|
|
262
|
+
type CanvasEvent = CanvasCreate | CanvasAppend | CanvasPatch | CanvasNodePatch | CanvasReplace | CanvasStatus | CanvasCommit | CanvasClose;
|
|
223
263
|
type StreamEvent = ChatEvent | CanvasEvent | ErrorEvent | DoneEvent;
|
|
224
264
|
/** Narrow a `StreamEvent` to the canvas family. */
|
|
225
265
|
declare function isCanvasEvent(event: StreamEvent): event is CanvasEvent;
|
|
@@ -486,6 +526,34 @@ declare function useCanvasReplay(): {
|
|
|
486
526
|
*/
|
|
487
527
|
declare function useArtifactPatch(id: string): (patch: Record<string, unknown>) => void;
|
|
488
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
|
+
|
|
489
557
|
/**
|
|
490
558
|
* Schema fixtures — scripted wire-event sequences that render the canvas with no
|
|
491
559
|
* backend. Feed one to `useCanvasReplay().play(scenario.events)`.
|
|
@@ -503,6 +571,699 @@ interface Scenario {
|
|
|
503
571
|
}
|
|
504
572
|
declare const scenarios: Scenario[];
|
|
505
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
|
+
|
|
506
1267
|
interface RendererProps<TData = unknown> {
|
|
507
1268
|
artifact: Artifact<TData>;
|
|
508
1269
|
}
|
|
@@ -521,6 +1282,8 @@ declare function mergeRegistries(...registries: ArtifactRegistry[]): ArtifactReg
|
|
|
521
1282
|
interface CanvasProps {
|
|
522
1283
|
/** Renderer map. Defaults to the built-in html/document/chart/table renderers. */
|
|
523
1284
|
registry?: ArtifactRegistry;
|
|
1285
|
+
/** UI language for the canvas chrome (toolbars, menus, states). Default "en". */
|
|
1286
|
+
locale?: CanvasLocale;
|
|
524
1287
|
/** Rendered when no artifact has been opened yet. */
|
|
525
1288
|
emptyState?: ReactNode;
|
|
526
1289
|
/**
|
|
@@ -537,8 +1300,15 @@ interface CanvasProps {
|
|
|
537
1300
|
* debounce further on the host before hitting the network.
|
|
538
1301
|
*/
|
|
539
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;
|
|
540
1310
|
}
|
|
541
|
-
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;
|
|
542
1312
|
|
|
543
1313
|
interface ExportMenuProps {
|
|
544
1314
|
artifact: Artifact;
|
|
@@ -569,6 +1339,8 @@ declare function ArtifactCard({ artifactId }: {
|
|
|
569
1339
|
artifactId: string;
|
|
570
1340
|
}): react.JSX.Element | null;
|
|
571
1341
|
|
|
1342
|
+
declare function PdfRenderer$1({ artifact }: RendererProps<PdfData>): react.JSX.Element;
|
|
1343
|
+
|
|
572
1344
|
declare function SlidesRenderer$1({ artifact }: RendererProps<SlidesData>): react.JSX.Element;
|
|
573
1345
|
|
|
574
1346
|
declare function TableRenderer$1({ artifact }: RendererProps<TableData>): react.JSX.Element;
|
|
@@ -583,6 +1355,7 @@ declare const ChartRenderer: react.LazyExoticComponent<typeof ChartRenderer$1>;
|
|
|
583
1355
|
declare const DocumentRenderer: react.LazyExoticComponent<typeof DocumentRenderer$1>;
|
|
584
1356
|
declare const TableRenderer: react.LazyExoticComponent<typeof TableRenderer$1>;
|
|
585
1357
|
declare const SlidesRenderer: react.LazyExoticComponent<typeof SlidesRenderer$1>;
|
|
1358
|
+
declare const PdfRenderer: react.LazyExoticComponent<typeof PdfRenderer$1>;
|
|
586
1359
|
|
|
587
1360
|
/**
|
|
588
1361
|
* The batteries-included renderers. `html` is the base substrate (sandboxed
|
|
@@ -670,7 +1443,7 @@ declare function printToPdf(html: string): void;
|
|
|
670
1443
|
*/
|
|
671
1444
|
|
|
672
1445
|
/** Extensions we can turn into an artifact, for `accept="…"` and drop filtering. */
|
|
673
|
-
declare const IMPORTABLE_EXTENSIONS: readonly [".csv", ".md", ".markdown", ".txt", ".html", ".htm", ".json", ".xlsx"];
|
|
1446
|
+
declare const IMPORTABLE_EXTENSIONS: readonly [".csv", ".md", ".markdown", ".txt", ".html", ".htm", ".json", ".xlsx", ".pdf", ".hwpx", ".hwp", ".docx", ".pptx"];
|
|
674
1447
|
/** True when the file has an extension we know how to import. */
|
|
675
1448
|
declare const canImport: (file: File) => boolean;
|
|
676
1449
|
/**
|
|
@@ -695,4 +1468,4 @@ declare function useCanvasImport(): {
|
|
|
695
1468
|
canImport: (file: File) => boolean;
|
|
696
1469
|
};
|
|
697
1470
|
|
|
698
|
-
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 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 };
|