@puckeditor/plugin-ai 0.1.0-canary.f56e596d → 0.1.0-canary.f87c29b6

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.css CHANGED
@@ -234,7 +234,7 @@ p {
234
234
  }
235
235
 
236
236
  /* css-module:/home/runner/work/puck-platform/puck-platform/packages/platform-client/components/Modal/Modal.module.css/#css-module-data */
237
- ._Modal-background_874yi_1 {
237
+ ._Modal-background_1bedq_1 {
238
238
  align-items: center;
239
239
  display: flex;
240
240
  justify-content: center;
@@ -248,24 +248,26 @@ p {
248
248
  opacity: 0;
249
249
  pointer-events: none;
250
250
  }
251
- ._Modal--visible_874yi_16 ._Modal-background_874yi_1 {
251
+ ._Modal--visible_1bedq_16 ._Modal-background_1bedq_1 {
252
252
  opacity: 1;
253
253
  transition: opacity ease 100ms;
254
254
  pointer-events: auto;
255
255
  }
256
- ._Modal-modal_874yi_22 {
256
+ ._Modal-modal_1bedq_22 {
257
257
  background: white;
258
- border-radius: 8px;
258
+ border-radius: 16px;
259
259
  display: block;
260
- overflow: hidden;
260
+ max-height: calc(100vh - 24px);
261
+ margin-inline: 24px;
262
+ overflow: auto;
261
263
  }
262
264
 
263
265
  /* css-module:/home/runner/work/puck-platform/puck-platform/packages/platform-client/components/Button/Button.module.css/#css-module-data */
264
- ._Button_w2ngt_1 {
266
+ ._Button_1fon5_1 {
265
267
  appearance: none;
266
268
  background: none;
267
269
  border: 1px solid transparent;
268
- border-radius: 4px;
270
+ border-radius: 8px;
269
271
  color: var(--puck-color-white);
270
272
  display: inline-flex;
271
273
  align-items: center;
@@ -283,69 +285,80 @@ p {
283
285
  white-space: nowrap;
284
286
  margin: 0;
285
287
  }
286
- ._Button_w2ngt_1:hover,
287
- ._Button_w2ngt_1:active {
288
+ ._Button_1fon5_1:hover,
289
+ ._Button_1fon5_1:active {
288
290
  transition: none;
289
291
  }
290
- ._Button--medium_w2ngt_29 {
292
+ ._Button--medium_1fon5_29 {
291
293
  min-height: 34px;
292
294
  padding-bottom: 7px;
293
295
  padding-left: 19px;
294
296
  padding-right: 19px;
295
297
  padding-top: 7px;
296
298
  }
297
- ._Button--large_w2ngt_37 {
299
+ ._Button--large_1fon5_37 {
298
300
  padding-bottom: 11px;
299
301
  padding-left: 19px;
300
302
  padding-right: 19px;
301
303
  padding-top: 11px;
302
304
  }
303
- ._Button-icon_w2ngt_44 {
305
+ ._Button-icon_1fon5_44 {
304
306
  margin-top: 2px;
305
307
  }
306
- ._Button--primary_w2ngt_48 {
308
+ ._Button--primary_1fon5_48 {
307
309
  background: var(--puck-color-azure-04);
308
310
  }
309
- ._Button_w2ngt_1:focus-visible {
311
+ ._Button_1fon5_1:focus-visible {
310
312
  outline: 2px solid var(--puck-color-azure-05);
311
313
  outline-offset: 2px;
312
314
  }
313
315
  @media (hover: hover) and (pointer: fine) {
314
- ._Button--primary_w2ngt_48:hover {
316
+ ._Button--primary_1fon5_48:hover {
315
317
  background-color: var(--puck-color-azure-03);
316
318
  }
317
319
  }
318
- ._Button--primary_w2ngt_48:active {
320
+ ._Button--primary_1fon5_48:active {
319
321
  background-color: var(--puck-color-azure-02);
320
322
  }
321
- ._Button--secondary_w2ngt_67 {
323
+ ._Button--secondary_1fon5_67 {
322
324
  border: 1px solid currentColor;
323
325
  color: currentColor;
324
326
  }
325
327
  @media (hover: hover) and (pointer: fine) {
326
- ._Button--secondary_w2ngt_67:hover {
328
+ ._Button--secondary_1fon5_67:hover {
327
329
  background-color: var(--puck-color-azure-12);
328
330
  color: var(--puck-color-black);
329
331
  }
330
332
  }
331
- ._Button--secondary_w2ngt_67:active {
333
+ ._Button--secondary_1fon5_67:active {
332
334
  background-color: var(--puck-color-azure-11);
333
335
  color: var(--puck-color-black);
334
336
  }
335
- ._Button--flush_w2ngt_84 {
337
+ ._Button--danger_1fon5_84 {
338
+ background: var(--puck-color-red-04);
339
+ }
340
+ @media (hover: hover) and (pointer: fine) {
341
+ ._Button--danger_1fon5_84:hover {
342
+ background-color: var(--puck-color-red-03);
343
+ }
344
+ }
345
+ ._Button--danger_1fon5_84:active {
346
+ background-color: var(--puck-color-red-02);
347
+ }
348
+ ._Button--flush_1fon5_98 {
336
349
  border-radius: 0;
337
350
  }
338
- ._Button--disabled_w2ngt_88,
339
- ._Button--disabled_w2ngt_88:hover {
351
+ ._Button--disabled_1fon5_102,
352
+ ._Button--disabled_1fon5_102:hover {
340
353
  background-color: var(--puck-color-grey-09);
341
- color: var(--puck-color-grey-03);
354
+ color: var(--puck-color-grey-05);
342
355
  cursor: not-allowed;
343
356
  }
344
- ._Button--fullWidth_w2ngt_95 {
357
+ ._Button--fullWidth_1fon5_109 {
345
358
  justify-content: center;
346
359
  width: 100%;
347
360
  }
348
- ._Button-spinner_w2ngt_100 {
361
+ ._Button-spinner_1fon5_114 {
349
362
  padding-left: 8px;
350
363
  }
351
364
 
@@ -513,6 +526,126 @@ p {
513
526
  color: var(--puck-color-azure-04);
514
527
  }
515
528
 
529
+ /* css-module:/home/runner/work/puck-platform/puck-platform/packages/platform-client/components/Code/Code.module.css/#css-module-data */
530
+ ._Code_d4378_1 {
531
+ border-radius: 8px;
532
+ position: relative;
533
+ overflow: hidden;
534
+ border: 1px solid var(--puck-color-grey-09);
535
+ }
536
+ ._Code-body_d4378_8 pre {
537
+ margin: 0;
538
+ }
539
+ ._Code-body_d4378_8 code {
540
+ display: block;
541
+ font-size: var(--puck-font-size-xs);
542
+ padding-block: 16px;
543
+ overflow-y: auto;
544
+ }
545
+ ._Code--light_d4378_19 {
546
+ background-color: white;
547
+ }
548
+ ._Code-body_d4378_8 code > span {
549
+ padding-left: 16px;
550
+ padding-right: 64px;
551
+ }
552
+ @media (min-width: 768px) {
553
+ ._Code-body_d4378_8 code > span {
554
+ padding-right: 16px;
555
+ }
556
+ }
557
+ ._Code-header_d4378_34 {
558
+ align-items: center;
559
+ background-color: #24292e;
560
+ border-bottom: 1px solid var(--puck-color-grey-03);
561
+ color: white;
562
+ display: flex;
563
+ padding-left: 12px;
564
+ padding-right: 12px;
565
+ overflow-y: auto;
566
+ }
567
+ ._Code--light_d4378_19 ._Code-header_d4378_34 {
568
+ background-color: white;
569
+ border-bottom-color: var(--puck-color-grey-09);
570
+ color: var(--puck-color-grey-03);
571
+ }
572
+ ._Code-corner_d4378_51 {
573
+ background-color: #24292e80;
574
+ border-bottom-left-radius: 4px;
575
+ color: white;
576
+ display: none;
577
+ position: absolute;
578
+ padding: 12px 16px;
579
+ pointer-events: none;
580
+ right: 0;
581
+ }
582
+ ._Code_d4378_1:hover ._Code-corner_d4378_51 {
583
+ display: flex;
584
+ }
585
+ ._Code--light_d4378_19 ._Code-corner_d4378_51 {
586
+ background-color: #ffffff80;
587
+ color: var(--puck-color-grey-03);
588
+ }
589
+ ._Code-actions_d4378_71 {
590
+ margin-left: auto;
591
+ pointer-events: auto;
592
+ }
593
+ ._Code--lineNumbers_d4378_76 ._Code-body_d4378_8 code {
594
+ counter-reset: step;
595
+ counter-increment: step 0;
596
+ }
597
+ ._Code--lineNumbers_d4378_76 ._Code-body_d4378_8 code .line::before {
598
+ content: counter(step);
599
+ counter-increment: step;
600
+ width: 1rem;
601
+ margin-right: 1.5rem;
602
+ display: inline-block;
603
+ text-align: right;
604
+ color: rgba(115, 138, 148, 0.4);
605
+ }
606
+ ._Code-tabs_d4378_91 {
607
+ display: flex;
608
+ list-style: none;
609
+ padding: 0;
610
+ margin: 0;
611
+ padding-right: 8px;
612
+ }
613
+ ._Tab_d4378_99 {
614
+ border-block: 3px solid transparent;
615
+ padding: 4px 2px;
616
+ }
617
+ ._Tab--isActive_d4378_104 {
618
+ border-bottom-color: white;
619
+ }
620
+ ._Tab--light_d4378_108._Tab--isActive_d4378_104 {
621
+ border-bottom-color: var(--puck-color-grey-03);
622
+ }
623
+ ._Tab-button_d4378_112 {
624
+ background-color: transparent;
625
+ border: none;
626
+ border-radius: 8px;
627
+ color: var(--puck-color-grey-08);
628
+ font-size: var(--puck-font-size-xxs);
629
+ padding: 8px;
630
+ cursor: pointer;
631
+ white-space: nowrap;
632
+ }
633
+ ._Tab--light_d4378_108 ._Tab-button_d4378_112 {
634
+ color: var(--puck-color-grey-06);
635
+ }
636
+ ._Tab--isActive_d4378_104 ._Tab-button_d4378_112 {
637
+ color: white;
638
+ }
639
+ ._Tab--light_d4378_108._Tab--isActive_d4378_104 ._Tab-button_d4378_112 {
640
+ color: var(--puck-color-grey-01);
641
+ }
642
+ ._Tab-button_d4378_112:hover {
643
+ background: var(--puck-color-grey-03);
644
+ }
645
+ ._Tab--light_d4378_108 ._Tab-button_d4378_112:hover {
646
+ background: var(--puck-color-grey-11);
647
+ }
648
+
516
649
  /* css-module:/home/runner/work/puck-platform/puck-platform/packages/platform-client/components/IconButton/IconButton.module.css/#css-module-data */
517
650
  ._IconButton_thegm_1 {
518
651
  align-items: center;
@@ -631,13 +764,13 @@ p {
631
764
  }
632
765
 
633
766
  /* css-module:/home/runner/work/puck-platform/puck-platform/packages/platform-client/components/Page/Page.module.css/#css-module-data */
634
- ._Page_1ajs1_1 {
767
+ ._Page_nkzj9_1 {
635
768
  display: flex;
636
769
  flex-direction: column;
637
770
  height: 100%;
638
771
  overflow: hidden;
639
772
  }
640
- ._Page-masthead_1ajs1_8 {
773
+ ._Page-masthead_nkzj9_8 {
641
774
  align-items: center;
642
775
  display: flex;
643
776
  gap: 16px;
@@ -645,47 +778,46 @@ p {
645
778
  box-sizing: border-box;
646
779
  border-bottom: 1px solid var(--puck-color-grey-10);
647
780
  min-height: 64px;
648
- overflow-x: auto;
649
781
  }
650
- ._Page-crumbs_1ajs1_19 {
782
+ ._Page-crumbs_nkzj9_18 {
651
783
  display: flex;
652
784
  gap: 32px;
653
785
  }
654
- ._Page-crumb_1ajs1_19 {
786
+ ._Page-crumb_nkzj9_18 {
655
787
  color: var(--puck-color-grey-05);
656
788
  position: relative;
657
789
  white-space: nowrap;
658
790
  }
659
- ._Page-crumbLink_1ajs1_30 {
791
+ ._Page-crumbLink_nkzj9_29 {
660
792
  color: var(--puck-color-grey-05);
661
793
  text-decoration: none;
662
794
  }
663
- ._Page-crumbLink_1ajs1_30:hover {
795
+ ._Page-crumbLink_nkzj9_29:hover {
664
796
  color: var(--puck-color-azure-04);
665
797
  }
666
- ._Page-crumb_1ajs1_19:last-of-type {
798
+ ._Page-crumb_nkzj9_18:last-of-type {
667
799
  color: var(--puck-color-grey-01);
668
800
  font-weight: 600;
669
801
  }
670
- ._Page-crumb_1ajs1_19::before {
802
+ ._Page-crumb_nkzj9_18::before {
671
803
  position: absolute;
672
804
  content: "/";
673
805
  left: -19px;
674
806
  color: var(--puck-color-grey-09);
675
807
  font-weight: 400;
676
808
  }
677
- ._Page-crumb_1ajs1_19:first-of-type::before {
809
+ ._Page-crumb_nkzj9_18:first-of-type::before {
678
810
  display: none;
679
811
  }
680
- ._Page-crumb_1ajs1_19 {
812
+ ._Page-crumb_nkzj9_18 {
681
813
  color: var(--puck-color-grey-05);
682
814
  position: relative;
683
815
  text-decoration: none;
684
816
  }
685
- ._Page-actions_1ajs1_62 {
817
+ ._Page-actions_nkzj9_61 {
686
818
  margin-left: auto;
687
819
  }
688
- ._Page-footer_1ajs1_66 {
820
+ ._Page-footer_nkzj9_65 {
689
821
  border-top: 1px solid var(--puck-color-grey-10);
690
822
  padding: 16px 24px;
691
823
  }
@@ -800,26 +932,26 @@ p {
800
932
  }
801
933
 
802
934
  /* css-module:/home/runner/work/puck-platform/puck-platform/packages/platform-client/components/Table/Table.module.css/#css-module-data */
803
- ._Table_1w0os_1 {
935
+ ._Table_o345u_1 {
804
936
  color: black;
805
937
  display: flex;
806
938
  flex-direction: column;
807
939
  flex-grow: 1;
808
940
  overflow-y: auto;
809
941
  }
810
- ._Table-filters_1w0os_9 {
942
+ ._Table-filters_o345u_9 {
811
943
  margin: 16px;
812
944
  }
813
- ._Table-inner_1w0os_13 {
945
+ ._Table-inner_o345u_13 {
814
946
  text-align: left;
815
947
  }
816
- ._Table-table_1w0os_17 {
948
+ ._Table-table_o345u_17 {
817
949
  color: var(--puck-color-grey-02);
818
950
  font-size: var(--puck-font-size-xxs);
819
951
  position: relative;
820
952
  width: 100%;
821
953
  }
822
- ._Table_1w0os_1 thead {
954
+ ._Table_o345u_1 thead {
823
955
  background: white;
824
956
  font-size: var(--puck-font-size-xxs);
825
957
  position: sticky;
@@ -827,17 +959,20 @@ p {
827
959
  white-space: nowrap;
828
960
  z-index: 1;
829
961
  }
830
- ._Table_1w0os_1 thead::after {
962
+ ._Table_o345u_1 thead::after {
831
963
  content: "";
832
964
  position: absolute;
833
965
  height: 1px;
834
966
  width: 100%;
835
967
  background-color: var(--puck-color-grey-10);
836
968
  }
837
- ._Table_1w0os_1 tbody tr {
969
+ ._Table--hideHeader_o345u_41 thead {
970
+ display: none;
971
+ }
972
+ ._Table_o345u_1 tbody tr {
838
973
  z-index: 0;
839
974
  }
840
- ._Table_1w0os_1 th {
975
+ ._Table_o345u_1 th {
841
976
  background: var(--puck-color-grey-12);
842
977
  font-weight: 400;
843
978
  padding-left: 24px;
@@ -846,12 +981,12 @@ p {
846
981
  padding-top: 12px;
847
982
  }
848
983
  @media (--standard-viewport) {
849
- ._Table_1w0os_1 th {
984
+ ._Table_o345u_1 th {
850
985
  padding-left: 32px;
851
986
  padding-right: 32px;
852
987
  }
853
988
  }
854
- ._Table_1w0os_1 td {
989
+ ._Table_o345u_1 td {
855
990
  border-bottom: 1px solid var(--puck-color-grey-10);
856
991
  padding-left: 24px;
857
992
  padding-right: 24px;
@@ -859,38 +994,42 @@ p {
859
994
  padding-top: 16px;
860
995
  white-space: nowrap;
861
996
  }
862
- ._Table_1w0os_1 td:not(:first-of-type) {
997
+ ._Table_o345u_1 td:not(:first-of-type) {
863
998
  color: var(--puck-color-grey-05);
864
999
  }
865
- ._Table_1w0os_1 tbody tr:last-of-type td {
1000
+ ._Table_o345u_1 tbody tr:last-of-type td {
866
1001
  border-bottom: none;
867
1002
  }
868
1003
  @media (--standard-viewport) {
869
- ._Table_1w0os_1 td {
1004
+ ._Table_o345u_1 td {
870
1005
  padding-left: 32px;
871
1006
  padding-right: 32px;
872
1007
  }
873
1008
  }
874
- ._Table-footer_1w0os_85 {
1009
+ ._Table-footer_o345u_89 {
875
1010
  border-top: 1px solid var(--puck-color-grey-09);
876
1011
  }
877
- ._Table--clickableRows_1w0os_89 tbody tr:hover {
1012
+ ._Table--clickableRows_o345u_93 tbody tr:hover {
878
1013
  background: var(--puck-color-azure-12);
879
1014
  cursor: pointer;
880
1015
  }
881
- ._Table-placeholder_1w0os_94 {
1016
+ ._Table-placeholder_o345u_98 {
882
1017
  align-items: center;
883
- color: var(--puck-color-grey-06);
1018
+ color: var(--puck-color-grey-04);
884
1019
  justify-content: center;
885
1020
  display: flex;
886
1021
  gap: 8px;
887
1022
  flex-direction: column;
888
1023
  width: 100%;
889
1024
  height: 100%;
1025
+ text-align: center;
890
1026
  }
891
- ._Table-loader_1w0os_105 {
1027
+ ._Table-loader_o345u_110 {
892
1028
  padding: 16px 24px;
893
1029
  }
1030
+ ._TableRow--highlightRow_o345u_114 {
1031
+ background-color: var(--puck-color-grey-12);
1032
+ }
894
1033
 
895
1034
  /* css-module:/home/runner/work/puck-platform/puck-platform/packages/platform-client/components/VerticalSpace/VerticalSpace.module.css/#css-module-data */
896
1035
  ._VerticalSpace_1tjaw_1 {
package/dist/index.d.mts CHANGED
@@ -1,22 +1,115 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { UIMessage, ChatStatus } from 'ai';
3
- import { PuckProviderMetadata, PuckDataParts } from '@puckeditor/platform-types';
4
- import { ReactNode, RefObject } from 'react';
5
2
 
6
- type PuckMessage = UIMessage<PuckProviderMetadata, PuckDataParts>;
3
+ type _JSONSchema = boolean | JSONSchema;
4
+ type JSONSchema = {
5
+ [k: string]: unknown;
6
+ $schema?: "https://json-schema.org/draft/2020-12/schema" | "http://json-schema.org/draft-07/schema#" | "http://json-schema.org/draft-04/schema#";
7
+ $id?: string;
8
+ $anchor?: string;
9
+ $ref?: string;
10
+ $dynamicRef?: string;
11
+ $dynamicAnchor?: string;
12
+ $vocabulary?: Record<string, boolean>;
13
+ $comment?: string;
14
+ $defs?: Record<string, JSONSchema>;
15
+ type?: "object" | "array" | "string" | "number" | "boolean" | "null" | "integer";
16
+ additionalItems?: _JSONSchema;
17
+ unevaluatedItems?: _JSONSchema;
18
+ prefixItems?: _JSONSchema[];
19
+ items?: _JSONSchema | _JSONSchema[];
20
+ contains?: _JSONSchema;
21
+ additionalProperties?: _JSONSchema;
22
+ unevaluatedProperties?: _JSONSchema;
23
+ properties?: Record<string, _JSONSchema>;
24
+ patternProperties?: Record<string, _JSONSchema>;
25
+ dependentSchemas?: Record<string, _JSONSchema>;
26
+ propertyNames?: _JSONSchema;
27
+ if?: _JSONSchema;
28
+ then?: _JSONSchema;
29
+ else?: _JSONSchema;
30
+ allOf?: JSONSchema[];
31
+ anyOf?: JSONSchema[];
32
+ oneOf?: JSONSchema[];
33
+ not?: _JSONSchema;
34
+ multipleOf?: number;
35
+ maximum?: number;
36
+ exclusiveMaximum?: number | boolean;
37
+ minimum?: number;
38
+ exclusiveMinimum?: number | boolean;
39
+ maxLength?: number;
40
+ minLength?: number;
41
+ pattern?: string;
42
+ maxItems?: number;
43
+ minItems?: number;
44
+ uniqueItems?: boolean;
45
+ maxContains?: number;
46
+ minContains?: number;
47
+ maxProperties?: number;
48
+ minProperties?: number;
49
+ required?: string[];
50
+ dependentRequired?: Record<string, string[]>;
51
+ enum?: Array<string | number | boolean | null>;
52
+ const?: string | number | boolean | null;
53
+ id?: string;
54
+ title?: string;
55
+ description?: string;
56
+ default?: unknown;
57
+ deprecated?: boolean;
58
+ readOnly?: boolean;
59
+ writeOnly?: boolean;
60
+ nullable?: boolean;
61
+ examples?: unknown[];
62
+ format?: string;
63
+ contentMediaType?: string;
64
+ contentEncoding?: string;
65
+ contentSchema?: JSONSchema;
66
+ _prefault?: unknown;
67
+ };
68
+
69
+ type ComponentAiParams = {
70
+ instructions?: string;
71
+ schema?: JSONSchema;
72
+ defaultZone?: { allow?: string[]; disallow?: string[]; disabled?: boolean };
73
+ };
74
+
75
+ type FieldAiParams = {
76
+ instructions?: string;
77
+ exclude?: boolean;
78
+ required?: boolean;
79
+ stream?: boolean;
80
+ schema?: JSONSchema;
81
+ };
82
+
83
+ declare module "@measured/puck" {
84
+ export interface ComponentMetadata {
85
+ ai?: ComponentAiParams;
86
+ }
7
87
 
8
- type ChatProps$1 = {
88
+ export interface ComponentConfigExtensions {
89
+ ai?: ComponentAiParams;
90
+ }
91
+
92
+ export interface FieldMetadata {
93
+ ai?: FieldAiParams;
94
+ }
95
+
96
+ export interface BaseField {
97
+ ai?: FieldAiParams;
98
+ }
99
+ }
100
+
101
+ type AiPluginProps = {
9
102
  host?: string;
10
- onSubmit?: (prompt: string) => void;
11
- examplePrompts?: {
12
- href: string;
13
- label: string;
14
- }[];
15
- chatId?: string;
16
- initialMessages?: PuckMessage[];
103
+ chat?: {
104
+ onSubmit?: (prompt: string) => void;
105
+ examplePrompts?: {
106
+ href: string;
107
+ label: string;
108
+ }[];
109
+ };
17
110
  };
18
111
 
19
- declare function createAIPlugin(opts?: ChatProps$1): {
112
+ declare function createAiPlugin(opts?: AiPluginProps): {
20
113
  label: string;
21
114
  name: string;
22
115
  render: () => react_jsx_runtime.JSX.Element;
@@ -24,17 +117,4 @@ declare function createAIPlugin(opts?: ChatProps$1): {
24
117
  mobilePanelHeight: "min-content";
25
118
  };
26
119
 
27
- type ChatProps = {
28
- children?: ReactNode;
29
- examplePrompts?: ReactNode;
30
- handleSubmit?: (prompt: string) => void;
31
- hideInput?: boolean;
32
- inputRef?: RefObject<HTMLTextAreaElement | null>;
33
- status?: ChatStatus;
34
- messages?: PuckMessage[];
35
- error?: string;
36
- handleRetry?: () => void;
37
- };
38
- declare function ChatBody({ children, examplePrompts, handleSubmit, hideInput, inputRef, messages, status, error, handleRetry, }: ChatProps): react_jsx_runtime.JSX.Element;
39
-
40
- export { ChatBody, createAIPlugin as default };
120
+ export { createAiPlugin };