@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/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 };