@veltdev/sdk 4.0.0-beta.1 → 4.0.0-beta.10
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/app/client/snippyly.model.d.ts +5 -0
- package/app/models/data/comment-actions.data.model.d.ts +4 -5
- package/app/models/data/comment-events.data.model.d.ts +7 -10
- package/app/models/data/comment-sidebar-config.model.d.ts +1 -0
- package/app/models/data/config.data.model.d.ts +1 -0
- package/app/models/data/document.data.model.d.ts +8 -0
- package/app/models/data/event-metadata.data.model.d.ts +3 -3
- package/app/models/data/recorder-events.data.model.d.ts +16 -0
- package/app/models/element/comment-element.model.d.ts +48 -28
- package/app/models/element/recorder-element.model.d.ts +11 -0
- package/app/utils/enums.d.ts +4 -0
- package/models.d.ts +2 -0
- package/package.json +1 -1
- package/velt.js +2 -2
|
@@ -26,6 +26,7 @@ import { DocumentMetadata } from "../models/data/document-metadata.model";
|
|
|
26
26
|
import { ReactionElement } from "../models/element/reaction-element.model";
|
|
27
27
|
import { VeltEventMetadata } from "../models/data/event-metadata.data.model";
|
|
28
28
|
import { CoreEventTypesMap } from "../models/data/core-events.data.model";
|
|
29
|
+
import { Document, SetDocumentsRequestOptions } from "../models/data/document.data.model";
|
|
29
30
|
export declare class Snippyly {
|
|
30
31
|
constructor();
|
|
31
32
|
initConfig: (apiKey: string, config?: Config) => void;
|
|
@@ -48,6 +49,10 @@ export declare class Snippyly {
|
|
|
48
49
|
* @param id unique document ID
|
|
49
50
|
*/
|
|
50
51
|
setDocumentId: (id: string) => void;
|
|
52
|
+
/**
|
|
53
|
+
* To set multiple documents
|
|
54
|
+
*/
|
|
55
|
+
setDocuments: (documents: Document[], options?: SetDocumentsRequestOptions) => void;
|
|
51
56
|
/**
|
|
52
57
|
* To unset the document id
|
|
53
58
|
*/
|
|
@@ -59,11 +59,10 @@ export interface DeleteCommentAnnotationRequest {
|
|
|
59
59
|
annotationId: string;
|
|
60
60
|
options?: RequestOptions;
|
|
61
61
|
}
|
|
62
|
-
export interface
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
options?: RequestOptions;
|
|
62
|
+
export interface CommentRequestQuery {
|
|
63
|
+
documentIds?: string[];
|
|
64
|
+
locationIds?: string[];
|
|
65
|
+
statusIds?: string[];
|
|
67
66
|
}
|
|
68
67
|
export interface SubscribeCommentAnnotationRequest {
|
|
69
68
|
annotationId: string;
|
|
@@ -126,18 +126,15 @@ export interface DeleteCommentAnnotationEvent {
|
|
|
126
126
|
commentAnnotation: CommentAnnotation;
|
|
127
127
|
metadata: VeltEventMetadata;
|
|
128
128
|
}
|
|
129
|
-
export interface
|
|
130
|
-
|
|
131
|
-
metadata: VeltEventMetadata;
|
|
132
|
-
}
|
|
133
|
-
export interface GetCommentAnnotationResponse {
|
|
134
|
-
[documentId: string]: CommentAnnotation[];
|
|
129
|
+
export interface GetCommentAnnotationsResponse {
|
|
130
|
+
data: Record<string, CommentAnnotation[]> | null;
|
|
135
131
|
}
|
|
136
132
|
export interface GetCommentAnnotationsCountResponse {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
133
|
+
data: Record<string, CommentAnnotationsCount> | null;
|
|
134
|
+
}
|
|
135
|
+
export interface CommentAnnotationsCount {
|
|
136
|
+
unread: number;
|
|
137
|
+
total: number;
|
|
141
138
|
}
|
|
142
139
|
export interface SubscribeCommentAnnotationEvent {
|
|
143
140
|
annotationId: string;
|
|
@@ -12,6 +12,7 @@ export declare class CommentSidebarFilterConfig {
|
|
|
12
12
|
location?: FilterTypeConfig;
|
|
13
13
|
people?: FilterTypeConfig;
|
|
14
14
|
priority?: FilterTypeConfig;
|
|
15
|
+
status?: FilterTypeConfig;
|
|
15
16
|
category?: FilterTypeConfig;
|
|
16
17
|
commentType?: FilterTypeConfig;
|
|
17
18
|
version?: FilterTypeConfig;
|
|
@@ -2,7 +2,7 @@ import { DocumentMetadata } from "./document-metadata.model";
|
|
|
2
2
|
import { Location } from "./location.model";
|
|
3
3
|
import { OrganizationMetadata } from "./organization-metadata.model";
|
|
4
4
|
export interface VeltEventMetadata {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
organization?: OrganizationMetadata | null;
|
|
6
|
+
documents?: DocumentMetadata[];
|
|
7
|
+
locations?: Location[];
|
|
8
8
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RecorderEventTypes } from "../../utils/enums";
|
|
2
|
+
export interface TranscriptionDoneEvent {
|
|
3
|
+
transcription: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
tag?: string;
|
|
6
|
+
type?: string;
|
|
7
|
+
thumbnailUrl?: string;
|
|
8
|
+
thumbnailWithPlayIconUrl?: string;
|
|
9
|
+
videoUrl?: string;
|
|
10
|
+
audioUrl?: string;
|
|
11
|
+
videoPlayerUrl?: string;
|
|
12
|
+
getThumbnailTag?: (url?: string) => string;
|
|
13
|
+
}
|
|
14
|
+
export type RecorderEventTypesMap = {
|
|
15
|
+
[RecorderEventTypes.TRANSCRIPTION_DONE]: TranscriptionDoneEvent;
|
|
16
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import { Observable } from "rxjs";
|
|
3
3
|
import { CommentAnnotation, CommentOnElementConfig, CommentSelectionChangeData, ManualCommentAnnotationConfig, UpdateContextConfig } from "../data/comment-annotation.data.model";
|
|
4
|
-
import { AcceptCommentAnnotationEvent, AddCommentAnnotationEvent, AddCommentEvent, AddReactionEvent, ApproveCommentAnnotationEvent, CommentAddEventData, CommentEventTypesMap, CommentUpdateEventData, CopyLinkEvent, DeleteAttachmentEvent, DeleteCommentAnnotationEvent, DeleteCommentEvent, DeleteReactionEvent, DeleteRecordingEvent, GetLinkEvent, RejectCommentAnnotationEvent, ToggleReactionEvent, UpdateAccessEvent, UpdateCommentEvent, UpdatePriorityEvent, UpdateStatusEvent } from "../data/comment-events.data.model";
|
|
4
|
+
import { AcceptCommentAnnotationEvent, AddCommentAnnotationEvent, AddCommentEvent, AddReactionEvent, ApproveCommentAnnotationEvent, CommentAddEventData, CommentEventTypesMap, CommentUpdateEventData, CopyLinkEvent, DeleteAttachmentEvent, DeleteCommentAnnotationEvent, DeleteCommentEvent, DeleteReactionEvent, DeleteRecordingEvent, GetLinkEvent, RejectCommentAnnotationEvent, ToggleReactionEvent, UpdateAccessEvent, UpdateCommentEvent, UpdatePriorityEvent, UpdateStatusEvent, GetCommentAnnotationsResponse, GetCommentAnnotationsCountResponse } from "../data/comment-events.data.model";
|
|
5
5
|
import { CustomCategory, CustomPriority, CustomStatus } from "../data/custom-filter.data.model";
|
|
6
6
|
import { CustomAnnotationDropdownData } from "../data/custom-chip-dropdown.data.model";
|
|
7
7
|
import { AutocompleteData } from "../data/autocomplete.data.model";
|
|
8
8
|
import { CommentSidebarCustomActionEventData, CommentSidebarData, CommentSidebarDataOptions } from "../data/comment-sidebar-config.model";
|
|
9
9
|
export { ReactionMap } from '../data/reaction-annotation.data.model';
|
|
10
|
-
import { AcceptCommentAnnotationRequest, AddAttachmentRequest, AddAttachmentResponse, AddCommentAnnotationRequest, AddCommentRequest, AddReactionRequest, ApproveCommentAnnotationRequest, AssignUserRequest, AssignUserEvent, CopyLinkRequest, DeleteAttachmentRequest, DeleteCommentAnnotationRequest, DeleteCommentRequest, DeleteReactionRequest, DeleteRecordingRequest, GetAttachmentRequest, GetCommentRequest, GetLinkRequest, GetRecordingRequest, RejectCommentAnnotationRequest, ResolveCommentAnnotationRequest, SubscribeCommentAnnotationRequest, UnsubscribeCommentAnnotationRequest, ToggleReactionRequest, UpdateAccessRequest, UpdateCommentRequest, UpdatePriorityRequest, UpdateStatusRequest } from "../data/comment-actions.data.model";
|
|
10
|
+
import { AcceptCommentAnnotationRequest, AddAttachmentRequest, AddAttachmentResponse, AddCommentAnnotationRequest, AddCommentRequest, AddReactionRequest, ApproveCommentAnnotationRequest, AssignUserRequest, AssignUserEvent, CopyLinkRequest, DeleteAttachmentRequest, DeleteCommentAnnotationRequest, CommentRequestQuery, CommentRequestQuery, DeleteCommentRequest, DeleteReactionRequest, DeleteRecordingRequest, GetAttachmentRequest, GetCommentRequest, GetLinkRequest, GetRecordingRequest, RejectCommentAnnotationRequest, ResolveCommentAnnotationRequest, SubscribeCommentAnnotationRequest, UnsubscribeCommentAnnotationRequest, ToggleReactionRequest, UpdateAccessRequest, UpdateCommentRequest, UpdatePriorityRequest, UpdateStatusRequest } from "../data/comment-actions.data.model";
|
|
11
11
|
import { UnreadCommentsCount } from "../data/comment-utils.data.model";
|
|
12
12
|
export declare class CommentElement {
|
|
13
13
|
/**
|
|
@@ -921,132 +921,142 @@ export declare class CommentElement {
|
|
|
921
921
|
/**
|
|
922
922
|
* To add comment annotation
|
|
923
923
|
*/
|
|
924
|
-
public addCommentAnnotation: (
|
|
924
|
+
public addCommentAnnotation: (request: AddCommentAnnotationRequest) => Promise<AddCommentAnnotationEvent | null>;
|
|
925
925
|
|
|
926
926
|
/**
|
|
927
927
|
* To approve comment annotation
|
|
928
928
|
*/
|
|
929
|
-
public approveCommentAnnotation: (
|
|
929
|
+
public approveCommentAnnotation: (request: ApproveCommentAnnotationRequest) => Promise<ApproveCommentAnnotationEvent | null>;
|
|
930
930
|
|
|
931
931
|
/**
|
|
932
932
|
* To accept comment annotation
|
|
933
933
|
*/
|
|
934
|
-
public acceptCommentAnnotation: (
|
|
934
|
+
public acceptCommentAnnotation: (request: AcceptCommentAnnotationRequest) => Promise<AcceptCommentAnnotationEvent | null>;
|
|
935
935
|
|
|
936
936
|
/**
|
|
937
937
|
* To reject comment annotation
|
|
938
938
|
*/
|
|
939
|
-
public rejectCommentAnnotation: (
|
|
939
|
+
public rejectCommentAnnotation: (request: RejectCommentAnnotationRequest) => Promise<RejectCommentAnnotationEvent | null>;
|
|
940
940
|
|
|
941
941
|
/**
|
|
942
942
|
* To subscribe comment annotation
|
|
943
943
|
*/
|
|
944
|
-
public subscribeCommentAnnotation: (
|
|
944
|
+
public subscribeCommentAnnotation: (request: SubscribeCommentAnnotationRequest) => Promise<SubscribeCommentAnnotationEvent | null>;
|
|
945
945
|
|
|
946
946
|
/**
|
|
947
947
|
* To unsubscribe comment annotation
|
|
948
948
|
*/
|
|
949
|
-
public unsubscribeCommentAnnotation: (
|
|
949
|
+
public unsubscribeCommentAnnotation: (request: UnsubscribeCommentAnnotationRequest) => Promise<UnsubscribeCommentAnnotationEvent | null>;
|
|
950
950
|
|
|
951
951
|
/**
|
|
952
952
|
* To delete comment annotation
|
|
953
953
|
*/
|
|
954
|
-
public deleteCommentAnnotation: (
|
|
954
|
+
public deleteCommentAnnotation: (request: DeleteCommentAnnotationRequest) => Promise<DeleteCommentAnnotationEvent | null>;
|
|
955
|
+
|
|
956
|
+
/**
|
|
957
|
+
* To get comment annotations
|
|
958
|
+
*/
|
|
959
|
+
public getCommentAnnotations: (query?: CommentRequestQuery) => Observable<GetCommentAnnotationsResponse>;
|
|
960
|
+
|
|
961
|
+
/**
|
|
962
|
+
* To get comment annotations count
|
|
963
|
+
*/
|
|
964
|
+
public getCommentAnnotationsCount: (query?: CommentRequestQuery) => Observable<GetCommentAnnotationsCountResponse>;
|
|
955
965
|
|
|
956
966
|
/**
|
|
957
967
|
* To assign user to comment annotation
|
|
958
968
|
*/
|
|
959
|
-
public assignUser: (
|
|
969
|
+
public assignUser: (request: AssignUserRequest) => Promise<AssignUserEvent | null>;
|
|
960
970
|
|
|
961
971
|
/**
|
|
962
972
|
* To update priority
|
|
963
973
|
*/
|
|
964
|
-
public updatePriority: (
|
|
974
|
+
public updatePriority: (request: UpdatePriorityRequest) => Promise<UpdatePriorityEvent | null>;
|
|
965
975
|
|
|
966
976
|
/**
|
|
967
977
|
* To update status
|
|
968
978
|
*/
|
|
969
|
-
public updateStatus: (
|
|
979
|
+
public updateStatus: (request: UpdateStatusRequest) => Promise<UpdateStatusEvent | null>;
|
|
970
980
|
|
|
971
981
|
/**
|
|
972
982
|
* To update access
|
|
973
983
|
*/
|
|
974
|
-
public updateAccess: (
|
|
984
|
+
public updateAccess: (request: UpdateAccessRequest) => Promise<UpdateAccessEvent | null>;
|
|
975
985
|
|
|
976
986
|
/**
|
|
977
987
|
* To resolve comment annotation
|
|
978
988
|
*/
|
|
979
|
-
public resolveCommentAnnotation: (
|
|
989
|
+
public resolveCommentAnnotation: (request: ResolveCommentAnnotationRequest) => Promise<any>;
|
|
980
990
|
|
|
981
991
|
/**
|
|
982
992
|
* To get link
|
|
983
993
|
*/
|
|
984
|
-
public getLink: (
|
|
994
|
+
public getLink: (request: GetLinkRequest) => Promise<GetLinkEvent | null>;
|
|
985
995
|
|
|
986
996
|
/**
|
|
987
997
|
* To copy link
|
|
988
998
|
*/
|
|
989
|
-
public copyLink: (
|
|
999
|
+
public copyLink: (request: CopyLinkRequest) => Promise<CopyLinkEvent | null>;
|
|
990
1000
|
|
|
991
1001
|
/**
|
|
992
1002
|
* To add comment
|
|
993
1003
|
*/
|
|
994
|
-
public addComment: (
|
|
1004
|
+
public addComment: (request: AddCommentRequest) => Promise<AddCommentEvent | null>;
|
|
995
1005
|
|
|
996
1006
|
/**
|
|
997
1007
|
* To update comment
|
|
998
1008
|
*/
|
|
999
|
-
public updateComment: (
|
|
1009
|
+
public updateComment: (request: UpdateCommentRequest) => Promise<UpdateCommentEvent | null>;
|
|
1000
1010
|
|
|
1001
1011
|
/**
|
|
1002
1012
|
* To delete comment
|
|
1003
1013
|
*/
|
|
1004
|
-
public deleteComment: (
|
|
1014
|
+
public deleteComment: (request: DeleteCommentRequest) => Promise<DeleteCommentEvent | null>;
|
|
1005
1015
|
|
|
1006
1016
|
/**
|
|
1007
1017
|
* To get comment
|
|
1008
1018
|
*/
|
|
1009
|
-
public getComment: (
|
|
1019
|
+
public getComment: (request: GetCommentRequest) => Promise<Comment[]>;
|
|
1010
1020
|
|
|
1011
1021
|
/**
|
|
1012
1022
|
* To add attachment
|
|
1013
1023
|
*/
|
|
1014
|
-
public addAttachment: (
|
|
1024
|
+
public addAttachment: (request: AddAttachmentRequest) => Promise<AddAttachmentResponse[]>;
|
|
1015
1025
|
|
|
1016
1026
|
/**
|
|
1017
1027
|
* To get attachment
|
|
1018
1028
|
*/
|
|
1019
|
-
public getAttachment: (
|
|
1029
|
+
public getAttachment: (request: GetAttachmentRequest) => Promise<Attachment[]>;
|
|
1020
1030
|
|
|
1021
1031
|
/**
|
|
1022
1032
|
* To delete attachment
|
|
1023
1033
|
*/
|
|
1024
|
-
public deleteAttachment: (
|
|
1034
|
+
public deleteAttachment: (request: DeleteAttachmentRequest) => Promise<DeleteAttachmentEvent | null>;
|
|
1025
1035
|
|
|
1026
1036
|
/**
|
|
1027
1037
|
* To get recording
|
|
1028
1038
|
*/
|
|
1029
|
-
public getRecording: (
|
|
1039
|
+
public getRecording: (request: GetRecordingRequest) => Promise<RecordedData[]>;
|
|
1030
1040
|
|
|
1031
1041
|
/**
|
|
1032
1042
|
* To delete recording
|
|
1033
1043
|
*/
|
|
1034
|
-
public deleteRecording: (
|
|
1044
|
+
public deleteRecording: (request: DeleteRecordingRequest) => Promise<DeleteRecordingEvent | null>;
|
|
1035
1045
|
|
|
1036
1046
|
/**
|
|
1037
1047
|
* To add reaction
|
|
1038
1048
|
*/
|
|
1039
|
-
public addReaction: (
|
|
1049
|
+
public addReaction: (request: AddReactionRequest) => Promise<AddReactionEvent | null>;
|
|
1040
1050
|
|
|
1041
1051
|
/**
|
|
1042
1052
|
* To delete reaction
|
|
1043
1053
|
*/
|
|
1044
|
-
public deleteReaction: (
|
|
1054
|
+
public deleteReaction: (request: DeleteReactionRequest) => Promise<DeleteReactionEvent | null>;
|
|
1045
1055
|
|
|
1046
1056
|
/**
|
|
1047
1057
|
* To toggle reaction
|
|
1048
1058
|
*/
|
|
1049
|
-
public toggleReaction: (
|
|
1059
|
+
public toggleReaction: (request: ToggleReactionRequest) => Promise<ToggleReactionEvent | null>;
|
|
1050
1060
|
|
|
1051
1061
|
/**
|
|
1052
1062
|
* Subscribe to comment actions
|
|
@@ -1998,6 +2008,16 @@ export declare class CommentElement {
|
|
|
1998
2008
|
*/
|
|
1999
2009
|
private _deleteCommentAnnotation;
|
|
2000
2010
|
|
|
2011
|
+
/**
|
|
2012
|
+
* To get comment annotations
|
|
2013
|
+
*/
|
|
2014
|
+
private _getCommentAnnotations;
|
|
2015
|
+
|
|
2016
|
+
/**
|
|
2017
|
+
* To get comment annotations count
|
|
2018
|
+
*/
|
|
2019
|
+
private _getCommentAnnotationsCount;
|
|
2020
|
+
|
|
2001
2021
|
/**
|
|
2002
2022
|
* To assign user to comment annotation
|
|
2003
2023
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import { Observable } from "rxjs";
|
|
3
3
|
import { RecorderData } from "../data/recorder-annotation.data.model";
|
|
4
|
+
import { RecorderEventTypesMap } from "../data/recorder-events.data.model";
|
|
4
5
|
|
|
5
6
|
export declare class RecorderElement {
|
|
6
7
|
|
|
@@ -33,6 +34,11 @@ export declare class RecorderElement {
|
|
|
33
34
|
*/
|
|
34
35
|
disableRecordingTranscription: () => void;
|
|
35
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Subscribe to recorder actions
|
|
39
|
+
*/
|
|
40
|
+
public on: <T extends keyof RecorderEventTypesMap>(action: T) => Observable<RecorderEventTypesMap[T]>;
|
|
41
|
+
|
|
36
42
|
constructor();
|
|
37
43
|
|
|
38
44
|
private _initRecording;
|
|
@@ -63,4 +69,9 @@ export declare class RecorderElement {
|
|
|
63
69
|
* To disable recording transcription
|
|
64
70
|
*/
|
|
65
71
|
private _disableRecordingTranscription;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Subscribe to recorder actions
|
|
75
|
+
*/
|
|
76
|
+
private _on;
|
|
66
77
|
}
|
package/app/utils/enums.d.ts
CHANGED
|
@@ -42,10 +42,14 @@ export declare const CommentEventTypes: {
|
|
|
42
42
|
readonly COMMENT_SIDEBAR_DATA_INIT: "commentSidebarDataInit";
|
|
43
43
|
readonly COMMENT_SIDEBAR_DATA_UPDATE: "commentSidebarDataUpdate";
|
|
44
44
|
};
|
|
45
|
+
export declare const RecorderEventTypes: {
|
|
46
|
+
readonly TRANSCRIPTION_DONE: "transcriptionDone";
|
|
47
|
+
};
|
|
45
48
|
export declare const CoreEventTypes: {
|
|
46
49
|
readonly VELT_BUTTON_CLICK: "veltButtonClick";
|
|
47
50
|
};
|
|
48
51
|
export type CommentEventType = typeof CommentEventTypes[keyof typeof CommentEventTypes];
|
|
52
|
+
export type RecorderEventType = typeof RecorderEventTypes[keyof typeof RecorderEventTypes];
|
|
49
53
|
export type CoreEventType = typeof CoreEventTypes[keyof typeof CoreEventTypes];
|
|
50
54
|
export declare enum TagStatus {
|
|
51
55
|
ADDED = "added",
|
package/models.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './app/models/data/cursor-user.data.model';
|
|
|
16
16
|
export * from './app/models/data/custom-css.data.model';
|
|
17
17
|
export * from './app/models/data/custom-chip-dropdown.data.model';
|
|
18
18
|
export * from './app/models/data/device-info.model';
|
|
19
|
+
export * from './app/models/data/document.data.model';
|
|
19
20
|
export * from './app/models/data/document-iam.data.model';
|
|
20
21
|
export * from './app/models/data/document-metadata.model';
|
|
21
22
|
export * from './app/models/data/document-paths.data.model';
|
|
@@ -33,6 +34,7 @@ export * from './app/models/data/permission.data.model';
|
|
|
33
34
|
export * from './app/models/data/presence-user.data.model';
|
|
34
35
|
export * from './app/models/data/recorder.model';
|
|
35
36
|
export * from './app/models/data/recorder-annotation.data.model';
|
|
37
|
+
export * from './app/models/data/recorder-events.data.model';
|
|
36
38
|
export * from './app/models/data/rewriter-annotation.data.model';
|
|
37
39
|
export * from './app/models/data/screen-size.data.model';
|
|
38
40
|
export * from './app/models/data/selection.model';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veltdev/sdk",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.10",
|
|
4
4
|
"description": "Velt is an SDK to add collaborative features to your product within minutes. Example: Comments like Figma, Frame.io, Google docs or sheets, Recording like Loom, Huddles like Slack and much more.",
|
|
5
5
|
"homepage": "https://velt.dev",
|
|
6
6
|
"keywords": [
|