microboard-temp 0.13.79 → 0.13.81
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/cjs/browser.js +126 -42
- package/dist/cjs/index.js +126 -42
- package/dist/cjs/node.js +126 -42
- package/dist/esm/browser.js +146 -62
- package/dist/esm/index.js +146 -62
- package/dist/esm/node.js +146 -62
- package/dist/types/Events/Events.d.ts +6 -0
- package/dist/types/Events/Log/getSnapshotFromList.d.ts +1 -1
- package/dist/types/Items/Audio/AudioHelpers.d.ts +1 -1
- package/dist/types/Items/Image/ImageHelpers.d.ts +1 -1
- package/dist/types/Items/Video/VideoHelpers.d.ts +1 -1
- package/dist/types/Settings.d.ts +8 -0
- package/dist/types/api/AuthRequest.d.ts +6 -0
- package/dist/types/api/MediaHelpers.d.ts +2 -2
- package/package.json +1 -1
package/dist/cjs/browser.js
CHANGED
|
@@ -3638,6 +3638,8 @@ var init_Settings = __esm(() => {
|
|
|
3638
3638
|
getDPI: () => 1,
|
|
3639
3639
|
reactEditorFocus: () => {},
|
|
3640
3640
|
reactEditorToSlatePoint: () => null,
|
|
3641
|
+
onAuthInvalid: async () => false,
|
|
3642
|
+
onAuthTerminalFailure: () => {},
|
|
3641
3643
|
planNames: {
|
|
3642
3644
|
basic: "Basic",
|
|
3643
3645
|
plus: "Plus",
|
|
@@ -6183,11 +6185,12 @@ function getSnapshotFromList(list, board) {
|
|
|
6183
6185
|
const snapshot = {
|
|
6184
6186
|
events: list.getConfirmedRecords().map((record) => record.event),
|
|
6185
6187
|
items: board.serialize(),
|
|
6186
|
-
lastIndex: list
|
|
6188
|
+
lastIndex: getLastIndexFromList(list)
|
|
6187
6189
|
};
|
|
6188
6190
|
list.applyUnconfirmed();
|
|
6189
6191
|
return snapshot;
|
|
6190
6192
|
}
|
|
6193
|
+
var init_getSnapshotFromList = () => {};
|
|
6191
6194
|
|
|
6192
6195
|
// src/Events/Log/EventsLog.ts
|
|
6193
6196
|
class EventsLog {
|
|
@@ -6276,6 +6279,7 @@ var init_EventsLog = __esm(() => {
|
|
|
6276
6279
|
init_getUndoRecordFromList();
|
|
6277
6280
|
init_getUnpublishedEventFromList();
|
|
6278
6281
|
init_insertEventsFromOtherConnectionsIntoList();
|
|
6282
|
+
init_getSnapshotFromList();
|
|
6279
6283
|
});
|
|
6280
6284
|
|
|
6281
6285
|
// src/Events/Log/index.ts
|
|
@@ -14432,6 +14436,11 @@ class Events {
|
|
|
14432
14436
|
getOpKey(op) {
|
|
14433
14437
|
return op.method;
|
|
14434
14438
|
}
|
|
14439
|
+
refreshIdentity() {
|
|
14440
|
+
const sessionId = this.getSessionId();
|
|
14441
|
+
const authorUserId = this.getAuthorUserId();
|
|
14442
|
+
this.log.refreshUnconfirmedIdentity(sessionId, authorUserId);
|
|
14443
|
+
}
|
|
14435
14444
|
getSessionId() {
|
|
14436
14445
|
return getConnectionSessionId(this.connection);
|
|
14437
14446
|
}
|
|
@@ -31871,7 +31880,32 @@ var init_setLink = __esm(() => {
|
|
|
31871
31880
|
|
|
31872
31881
|
// src/Items/RichText/editorHelpers/common/getSelectionMarks.ts
|
|
31873
31882
|
function getSelectionMarks(editor) {
|
|
31874
|
-
|
|
31883
|
+
const marks = import_slate42.Editor.marks(editor);
|
|
31884
|
+
if (!editor.selection) {
|
|
31885
|
+
return marks;
|
|
31886
|
+
}
|
|
31887
|
+
if (!import_slate42.Range.isExpanded(editor.selection) || marks && Object.keys(marks).length > 0) {
|
|
31888
|
+
return marks;
|
|
31889
|
+
}
|
|
31890
|
+
const textEntries = Array.from(import_slate42.Editor.nodes(editor, {
|
|
31891
|
+
at: editor.selection,
|
|
31892
|
+
match: (node) => import_slate42.Text.isText(node)
|
|
31893
|
+
}));
|
|
31894
|
+
const [firstEntry, ...restEntries] = textEntries;
|
|
31895
|
+
if (!firstEntry) {
|
|
31896
|
+
return marks;
|
|
31897
|
+
}
|
|
31898
|
+
const { text: _firstText, ...firstMarks } = firstEntry[0];
|
|
31899
|
+
const commonMarks = { ...firstMarks };
|
|
31900
|
+
for (const [node] of restEntries) {
|
|
31901
|
+
const { text: _text, ...nodeMarks } = node;
|
|
31902
|
+
for (const key of Object.keys(commonMarks)) {
|
|
31903
|
+
if (commonMarks[key] !== nodeMarks[key]) {
|
|
31904
|
+
delete commonMarks[key];
|
|
31905
|
+
}
|
|
31906
|
+
}
|
|
31907
|
+
}
|
|
31908
|
+
return commonMarks;
|
|
31875
31909
|
}
|
|
31876
31910
|
var import_slate42;
|
|
31877
31911
|
var init_getSelectionMarks = __esm(() => {
|
|
@@ -39494,7 +39528,14 @@ function setSelectionFontSize(editor, isAutosize, fontSize, selectionContext) {
|
|
|
39494
39528
|
shouldUpdateElement = true;
|
|
39495
39529
|
}
|
|
39496
39530
|
} else {
|
|
39497
|
-
import_slate53.
|
|
39531
|
+
if (editor.selection && import_slate53.Range.isExpanded(editor.selection)) {
|
|
39532
|
+
import_slate53.Transforms.setNodes(editor, { fontSize: size }, {
|
|
39533
|
+
match: (n) => import_slate53.Text.isText(n),
|
|
39534
|
+
split: true
|
|
39535
|
+
});
|
|
39536
|
+
} else {
|
|
39537
|
+
import_slate53.Editor.addMark(editor, "fontSize", size);
|
|
39538
|
+
}
|
|
39498
39539
|
}
|
|
39499
39540
|
}
|
|
39500
39541
|
if (selectionContext === "EditTextUnderPointer") {
|
|
@@ -39574,7 +39615,14 @@ function setSelectionFontColor(editor, format, selectionContext) {
|
|
|
39574
39615
|
return;
|
|
39575
39616
|
}
|
|
39576
39617
|
if (marks.fontColor !== format) {
|
|
39577
|
-
import_slate55.
|
|
39618
|
+
if (editor.selection && import_slate55.Range.isExpanded(editor.selection)) {
|
|
39619
|
+
import_slate55.Transforms.setNodes(editor, { fontColor: format }, {
|
|
39620
|
+
match: (n) => import_slate55.Text.isText(n),
|
|
39621
|
+
split: true
|
|
39622
|
+
});
|
|
39623
|
+
} else {
|
|
39624
|
+
import_slate55.Editor.addMark(editor, "fontColor", format);
|
|
39625
|
+
}
|
|
39578
39626
|
}
|
|
39579
39627
|
if (selectionContext === "EditTextUnderPointer") {
|
|
39580
39628
|
try {
|
|
@@ -40125,7 +40173,14 @@ function applySelectionFontColor(editor, fontColor) {
|
|
|
40125
40173
|
if (!marks) {
|
|
40126
40174
|
return;
|
|
40127
40175
|
}
|
|
40128
|
-
import_slate57.
|
|
40176
|
+
if (editor.selection && import_slate57.Range.isExpanded(editor.selection)) {
|
|
40177
|
+
import_slate57.Transforms.setNodes(editor, { fontColor }, {
|
|
40178
|
+
match: (n) => import_slate57.Text.isText(n),
|
|
40179
|
+
split: true
|
|
40180
|
+
});
|
|
40181
|
+
} else {
|
|
40182
|
+
import_slate57.Editor.addMark(editor, "fontColor", fontColor);
|
|
40183
|
+
}
|
|
40129
40184
|
}
|
|
40130
40185
|
var import_slate57;
|
|
40131
40186
|
var init_applySelectionFontColor = __esm(() => {
|
|
@@ -40153,7 +40208,14 @@ function applySelectionFontSize(editor, fontSize, selectionContext) {
|
|
|
40153
40208
|
focus: import_slate58.Editor.end(editor, [])
|
|
40154
40209
|
});
|
|
40155
40210
|
}
|
|
40156
|
-
import_slate58.
|
|
40211
|
+
if (editor.selection && import_slate58.Range.isExpanded(editor.selection)) {
|
|
40212
|
+
import_slate58.Transforms.setNodes(editor, { fontSize: size }, {
|
|
40213
|
+
match: (n) => import_slate58.Text.isText(n),
|
|
40214
|
+
split: true
|
|
40215
|
+
});
|
|
40216
|
+
} else {
|
|
40217
|
+
import_slate58.Editor.addMark(editor, "fontSize", size);
|
|
40218
|
+
}
|
|
40157
40219
|
if (selectionContext === "EditTextUnderPointer") {}
|
|
40158
40220
|
}
|
|
40159
40221
|
var import_slate58;
|
|
@@ -41821,6 +41883,35 @@ var init_Audio = __esm(() => {
|
|
|
41821
41883
|
};
|
|
41822
41884
|
});
|
|
41823
41885
|
|
|
41886
|
+
// src/api/AuthRequest.ts
|
|
41887
|
+
async function authenticatedFetch(url2, init2 = {}, boardId) {
|
|
41888
|
+
const getAuthInit = (originalInit) => {
|
|
41889
|
+
const token = conf.getAccessToken();
|
|
41890
|
+
if (!token) {
|
|
41891
|
+
return originalInit;
|
|
41892
|
+
}
|
|
41893
|
+
const headers = new Headers(originalInit.headers);
|
|
41894
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
41895
|
+
return { ...originalInit, headers };
|
|
41896
|
+
};
|
|
41897
|
+
let response = await fetch(url2, getAuthInit(init2));
|
|
41898
|
+
if (response.status === 401) {
|
|
41899
|
+
const body = await response.clone().json().catch(() => ({}));
|
|
41900
|
+
if (body.code === "AUTH_INVALID_ACCESS_TOKEN") {
|
|
41901
|
+
const refreshed = await conf.onAuthInvalid(boardId);
|
|
41902
|
+
if (refreshed) {
|
|
41903
|
+
response = await fetch(url2, getAuthInit(init2));
|
|
41904
|
+
} else {
|
|
41905
|
+
conf.onAuthTerminalFailure(boardId, body.code);
|
|
41906
|
+
}
|
|
41907
|
+
}
|
|
41908
|
+
}
|
|
41909
|
+
return response;
|
|
41910
|
+
}
|
|
41911
|
+
var init_AuthRequest = __esm(() => {
|
|
41912
|
+
init_Settings();
|
|
41913
|
+
});
|
|
41914
|
+
|
|
41824
41915
|
// src/api/MediaHelpers.ts
|
|
41825
41916
|
function getAccessTypeFromUrl(url2) {
|
|
41826
41917
|
try {
|
|
@@ -41838,15 +41929,14 @@ function getAccessTypeFromUrl(url2) {
|
|
|
41838
41929
|
}
|
|
41839
41930
|
return null;
|
|
41840
41931
|
}
|
|
41841
|
-
var uploadSvgDirectly = async (blob,
|
|
41842
|
-
const response = await
|
|
41932
|
+
var uploadSvgDirectly = async (blob, boardId, baseUrl) => {
|
|
41933
|
+
const response = await authenticatedFetch(`${baseUrl || ""}/svg/${boardId}`, {
|
|
41843
41934
|
method: "POST",
|
|
41844
41935
|
headers: {
|
|
41845
|
-
"Content-Type": "image/svg+xml"
|
|
41846
|
-
Authorization: `Bearer ${accessToken}`
|
|
41936
|
+
"Content-Type": "image/svg+xml"
|
|
41847
41937
|
},
|
|
41848
41938
|
body: blob
|
|
41849
|
-
});
|
|
41939
|
+
}, boardId);
|
|
41850
41940
|
if (!response.ok) {
|
|
41851
41941
|
conf.hooks.onUploadMediaError(response, "image");
|
|
41852
41942
|
throw new Error(`Failed to upload SVG. Status: ${response.status}`);
|
|
@@ -41856,19 +41946,18 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
41856
41946
|
throw new Error("Server did not provide a key for the uploaded SVG.");
|
|
41857
41947
|
}
|
|
41858
41948
|
return data.url;
|
|
41859
|
-
}, uploadWithPresignedUrl = async (blob,
|
|
41860
|
-
const generateUrlResponse = await
|
|
41949
|
+
}, uploadWithPresignedUrl = async (blob, boardId, type, baseUrl) => {
|
|
41950
|
+
const generateUrlResponse = await authenticatedFetch(`${baseUrl || ""}/media/upload`, {
|
|
41861
41951
|
method: "POST",
|
|
41862
41952
|
headers: {
|
|
41863
|
-
"Content-Type": "application/json"
|
|
41864
|
-
Authorization: `Bearer ${accessToken}`
|
|
41953
|
+
"Content-Type": "application/json"
|
|
41865
41954
|
},
|
|
41866
41955
|
body: JSON.stringify({
|
|
41867
41956
|
fileSize: blob.size,
|
|
41868
41957
|
fileType: blob.type,
|
|
41869
41958
|
boardId
|
|
41870
41959
|
})
|
|
41871
|
-
});
|
|
41960
|
+
}, boardId);
|
|
41872
41961
|
if (!generateUrlResponse.ok) {
|
|
41873
41962
|
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
41874
41963
|
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
@@ -41890,18 +41979,18 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
41890
41979
|
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
41891
41980
|
}
|
|
41892
41981
|
return url2;
|
|
41893
|
-
}, uploadMediaToStorage = async (blob,
|
|
41982
|
+
}, uploadMediaToStorage = async (blob, boardId, type, baseUrl) => {
|
|
41894
41983
|
try {
|
|
41895
41984
|
if (blob.type === "image/svg+xml") {
|
|
41896
|
-
return await uploadSvgDirectly(blob,
|
|
41985
|
+
return await uploadSvgDirectly(blob, boardId, baseUrl);
|
|
41897
41986
|
} else {
|
|
41898
|
-
return await uploadWithPresignedUrl(blob,
|
|
41987
|
+
return await uploadWithPresignedUrl(blob, boardId, type, baseUrl);
|
|
41899
41988
|
}
|
|
41900
41989
|
} catch (error48) {
|
|
41901
41990
|
console.error("Media upload process error:", error48);
|
|
41902
41991
|
throw error48;
|
|
41903
41992
|
}
|
|
41904
|
-
}, getMediaSignedUrl = async (url2
|
|
41993
|
+
}, getMediaSignedUrl = async (url2) => {
|
|
41905
41994
|
const accessType = getAccessTypeFromUrl(url2);
|
|
41906
41995
|
if (!accessType) {
|
|
41907
41996
|
return null;
|
|
@@ -41909,15 +41998,9 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
41909
41998
|
if (accessType === "anonymous") {
|
|
41910
41999
|
return url2;
|
|
41911
42000
|
}
|
|
41912
|
-
if (!accessToken) {
|
|
41913
|
-
return null;
|
|
41914
|
-
}
|
|
41915
42001
|
try {
|
|
41916
|
-
const response = await
|
|
41917
|
-
method: "GET"
|
|
41918
|
-
headers: {
|
|
41919
|
-
Authorization: `Bearer ${accessToken}`
|
|
41920
|
-
}
|
|
42002
|
+
const response = await authenticatedFetch(url2, {
|
|
42003
|
+
method: "GET"
|
|
41921
42004
|
});
|
|
41922
42005
|
if (!response.ok) {
|
|
41923
42006
|
console.error("Failed to get media signed url:", response.status, response.statusText);
|
|
@@ -41932,15 +42015,16 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
41932
42015
|
};
|
|
41933
42016
|
var init_MediaHelpers = __esm(() => {
|
|
41934
42017
|
init_Settings();
|
|
42018
|
+
init_AuthRequest();
|
|
41935
42019
|
});
|
|
41936
42020
|
|
|
41937
42021
|
// src/Items/Audio/AudioHelpers.ts
|
|
41938
|
-
var prepareAudio = (file2,
|
|
42022
|
+
var prepareAudio = (file2, boardId, baseUrl) => {
|
|
41939
42023
|
return new Promise((resolve, reject) => {
|
|
41940
42024
|
const audio = document.createElement("audio");
|
|
41941
42025
|
audio.src = URL.createObjectURL(file2);
|
|
41942
42026
|
audio.onloadedmetadata = () => {
|
|
41943
|
-
uploadMediaToStorage(file2,
|
|
42027
|
+
uploadMediaToStorage(file2, boardId, "audio", baseUrl).then((url2) => {
|
|
41944
42028
|
resolve(url2);
|
|
41945
42029
|
}).catch(reject);
|
|
41946
42030
|
};
|
|
@@ -60467,7 +60551,7 @@ var init_Video = __esm(() => {
|
|
|
60467
60551
|
async setPreviewUrl(url2) {
|
|
60468
60552
|
if (this.isStorageUrl) {
|
|
60469
60553
|
try {
|
|
60470
|
-
this.preview.src = await getMediaSignedUrl(url2
|
|
60554
|
+
this.preview.src = await getMediaSignedUrl(url2) || "";
|
|
60471
60555
|
} catch (err) {
|
|
60472
60556
|
console.error(err);
|
|
60473
60557
|
this.onError();
|
|
@@ -60827,9 +60911,9 @@ var getBlobFromDataURL = (dataURL) => {
|
|
|
60827
60911
|
};
|
|
60828
60912
|
}
|
|
60829
60913
|
});
|
|
60830
|
-
}, prepareImage = (inp,
|
|
60914
|
+
}, prepareImage = (inp, boardId, baseUrl) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash: hash2 }) => {
|
|
60831
60915
|
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
60832
|
-
return uploadMediaToStorage(blob,
|
|
60916
|
+
return uploadMediaToStorage(blob, boardId, "image", baseUrl).then((src) => {
|
|
60833
60917
|
return {
|
|
60834
60918
|
imageDimension: { width: width2, height: height2 },
|
|
60835
60919
|
base64: dataURL,
|
|
@@ -60870,15 +60954,15 @@ var getVideoMetadata = (file2) => {
|
|
|
60870
60954
|
board.selection.add(boardVideo);
|
|
60871
60955
|
onLoadCb(boardVideo);
|
|
60872
60956
|
});
|
|
60873
|
-
}, prepareVideo = (file2,
|
|
60957
|
+
}, prepareVideo = (file2, boardId, baseUrl) => {
|
|
60874
60958
|
return new Promise((resolve2, reject) => {
|
|
60875
60959
|
const video = document.createElement("video");
|
|
60876
60960
|
video.src = URL.createObjectURL(file2);
|
|
60877
60961
|
video.onloadedmetadata = () => {
|
|
60878
60962
|
video.onseeked = () => {
|
|
60879
60963
|
video.onseeked = null;
|
|
60880
|
-
prepareImage(captureFrame(0.1, video)?.src,
|
|
60881
|
-
uploadMediaToStorage(file2,
|
|
60964
|
+
prepareImage(captureFrame(0.1, video)?.src, boardId, baseUrl).then((imageData) => {
|
|
60965
|
+
uploadMediaToStorage(file2, boardId, "video", baseUrl).then((url2) => {
|
|
60882
60966
|
resolve2({
|
|
60883
60967
|
url: url2,
|
|
60884
60968
|
previewUrl: imageData.storageLink
|
|
@@ -66866,8 +66950,8 @@ var init_Card = __esm(() => {
|
|
|
66866
66950
|
async createImages() {
|
|
66867
66951
|
this.face = conf.documentFactory.createElement("img");
|
|
66868
66952
|
this.backside = conf.documentFactory.createElement("img");
|
|
66869
|
-
this.face.src = await getMediaSignedUrl(this.faceUrl
|
|
66870
|
-
this.backside.src = await getMediaSignedUrl(this.backsideUrl
|
|
66953
|
+
this.face.src = await getMediaSignedUrl(this.faceUrl) || "";
|
|
66954
|
+
this.backside.src = await getMediaSignedUrl(this.backsideUrl) || "";
|
|
66871
66955
|
this.face.onload = () => {
|
|
66872
66956
|
this.subject.publish(this);
|
|
66873
66957
|
};
|
|
@@ -67568,7 +67652,7 @@ var init_Dice = __esm(() => {
|
|
|
67568
67652
|
this.renderValues[index2] = value;
|
|
67569
67653
|
} else {
|
|
67570
67654
|
const image2 = conf.documentFactory.createElement("img");
|
|
67571
|
-
image2.src = await getMediaSignedUrl(value
|
|
67655
|
+
image2.src = await getMediaSignedUrl(value) || "";
|
|
67572
67656
|
this.renderValues[index2] = image2;
|
|
67573
67657
|
image2.onload = () => {
|
|
67574
67658
|
this.subject.publish(this);
|
|
@@ -68023,7 +68107,7 @@ var init_Screen = __esm(() => {
|
|
|
68023
68107
|
this.backgroundUrl = url2 || "";
|
|
68024
68108
|
if (url2) {
|
|
68025
68109
|
this.backgroundImage = conf.documentFactory.createElement("img");
|
|
68026
|
-
this.backgroundImage.src = await getMediaSignedUrl(url2
|
|
68110
|
+
this.backgroundImage.src = await getMediaSignedUrl(url2) || "";
|
|
68027
68111
|
this.applyBackgroundColor("none");
|
|
68028
68112
|
this.backgroundImage.onload = () => {
|
|
68029
68113
|
this.subject.publish(this);
|
|
@@ -69885,7 +69969,7 @@ var init_Image = __esm(() => {
|
|
|
69885
69969
|
}
|
|
69886
69970
|
async setStorageLink(link2) {
|
|
69887
69971
|
this.storageLink = link2;
|
|
69888
|
-
this.signedUrl = await getMediaSignedUrl(link2
|
|
69972
|
+
this.signedUrl = await getMediaSignedUrl(link2) || "";
|
|
69889
69973
|
if (!this.signedUrl) {
|
|
69890
69974
|
const canvas = conf.documentFactory.createElement("canvas");
|
|
69891
69975
|
canvas.width = 100;
|
|
@@ -70306,7 +70390,7 @@ function handleAudioGenerate(response, board) {
|
|
|
70306
70390
|
}
|
|
70307
70391
|
function handleImageGenerate(response, board) {
|
|
70308
70392
|
if (response.status === "completed" && response.base64) {
|
|
70309
|
-
prepareImage(response.base64,
|
|
70393
|
+
prepareImage(response.base64, board.getBoardId()).then((imageData) => {
|
|
70310
70394
|
const placeholderId = board.aiImagePlaceholder?.getId();
|
|
70311
70395
|
if (placeholderId) {
|
|
70312
70396
|
const placeholderNode = board.items.getById(placeholderId);
|