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/node.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
|
|
@@ -14452,6 +14456,11 @@ class Events {
|
|
|
14452
14456
|
getOpKey(op) {
|
|
14453
14457
|
return op.method;
|
|
14454
14458
|
}
|
|
14459
|
+
refreshIdentity() {
|
|
14460
|
+
const sessionId = this.getSessionId();
|
|
14461
|
+
const authorUserId = this.getAuthorUserId();
|
|
14462
|
+
this.log.refreshUnconfirmedIdentity(sessionId, authorUserId);
|
|
14463
|
+
}
|
|
14455
14464
|
getSessionId() {
|
|
14456
14465
|
return getConnectionSessionId(this.connection);
|
|
14457
14466
|
}
|
|
@@ -31962,7 +31971,32 @@ var init_setLink = __esm(() => {
|
|
|
31962
31971
|
|
|
31963
31972
|
// src/Items/RichText/editorHelpers/common/getSelectionMarks.ts
|
|
31964
31973
|
function getSelectionMarks(editor) {
|
|
31965
|
-
|
|
31974
|
+
const marks = import_slate41.Editor.marks(editor);
|
|
31975
|
+
if (!editor.selection) {
|
|
31976
|
+
return marks;
|
|
31977
|
+
}
|
|
31978
|
+
if (!import_slate41.Range.isExpanded(editor.selection) || marks && Object.keys(marks).length > 0) {
|
|
31979
|
+
return marks;
|
|
31980
|
+
}
|
|
31981
|
+
const textEntries = Array.from(import_slate41.Editor.nodes(editor, {
|
|
31982
|
+
at: editor.selection,
|
|
31983
|
+
match: (node) => import_slate41.Text.isText(node)
|
|
31984
|
+
}));
|
|
31985
|
+
const [firstEntry, ...restEntries] = textEntries;
|
|
31986
|
+
if (!firstEntry) {
|
|
31987
|
+
return marks;
|
|
31988
|
+
}
|
|
31989
|
+
const { text: _firstText, ...firstMarks } = firstEntry[0];
|
|
31990
|
+
const commonMarks = { ...firstMarks };
|
|
31991
|
+
for (const [node] of restEntries) {
|
|
31992
|
+
const { text: _text, ...nodeMarks } = node;
|
|
31993
|
+
for (const key of Object.keys(commonMarks)) {
|
|
31994
|
+
if (commonMarks[key] !== nodeMarks[key]) {
|
|
31995
|
+
delete commonMarks[key];
|
|
31996
|
+
}
|
|
31997
|
+
}
|
|
31998
|
+
}
|
|
31999
|
+
return commonMarks;
|
|
31966
32000
|
}
|
|
31967
32001
|
var import_slate41;
|
|
31968
32002
|
var init_getSelectionMarks = __esm(() => {
|
|
@@ -41914,7 +41948,14 @@ function setSelectionFontSize(editor, isAutosize, fontSize, selectionContext) {
|
|
|
41914
41948
|
shouldUpdateElement = true;
|
|
41915
41949
|
}
|
|
41916
41950
|
} else {
|
|
41917
|
-
import_slate52.
|
|
41951
|
+
if (editor.selection && import_slate52.Range.isExpanded(editor.selection)) {
|
|
41952
|
+
import_slate52.Transforms.setNodes(editor, { fontSize: size }, {
|
|
41953
|
+
match: (n) => import_slate52.Text.isText(n),
|
|
41954
|
+
split: true
|
|
41955
|
+
});
|
|
41956
|
+
} else {
|
|
41957
|
+
import_slate52.Editor.addMark(editor, "fontSize", size);
|
|
41958
|
+
}
|
|
41918
41959
|
}
|
|
41919
41960
|
}
|
|
41920
41961
|
if (selectionContext === "EditTextUnderPointer") {
|
|
@@ -41994,7 +42035,14 @@ function setSelectionFontColor(editor, format, selectionContext) {
|
|
|
41994
42035
|
return;
|
|
41995
42036
|
}
|
|
41996
42037
|
if (marks.fontColor !== format) {
|
|
41997
|
-
import_slate54.
|
|
42038
|
+
if (editor.selection && import_slate54.Range.isExpanded(editor.selection)) {
|
|
42039
|
+
import_slate54.Transforms.setNodes(editor, { fontColor: format }, {
|
|
42040
|
+
match: (n) => import_slate54.Text.isText(n),
|
|
42041
|
+
split: true
|
|
42042
|
+
});
|
|
42043
|
+
} else {
|
|
42044
|
+
import_slate54.Editor.addMark(editor, "fontColor", format);
|
|
42045
|
+
}
|
|
41998
42046
|
}
|
|
41999
42047
|
if (selectionContext === "EditTextUnderPointer") {
|
|
42000
42048
|
try {
|
|
@@ -42545,7 +42593,14 @@ function applySelectionFontColor(editor, fontColor) {
|
|
|
42545
42593
|
if (!marks) {
|
|
42546
42594
|
return;
|
|
42547
42595
|
}
|
|
42548
|
-
import_slate56.
|
|
42596
|
+
if (editor.selection && import_slate56.Range.isExpanded(editor.selection)) {
|
|
42597
|
+
import_slate56.Transforms.setNodes(editor, { fontColor }, {
|
|
42598
|
+
match: (n) => import_slate56.Text.isText(n),
|
|
42599
|
+
split: true
|
|
42600
|
+
});
|
|
42601
|
+
} else {
|
|
42602
|
+
import_slate56.Editor.addMark(editor, "fontColor", fontColor);
|
|
42603
|
+
}
|
|
42549
42604
|
}
|
|
42550
42605
|
var import_slate56;
|
|
42551
42606
|
var init_applySelectionFontColor = __esm(() => {
|
|
@@ -42573,7 +42628,14 @@ function applySelectionFontSize(editor, fontSize, selectionContext) {
|
|
|
42573
42628
|
focus: import_slate57.Editor.end(editor, [])
|
|
42574
42629
|
});
|
|
42575
42630
|
}
|
|
42576
|
-
import_slate57.
|
|
42631
|
+
if (editor.selection && import_slate57.Range.isExpanded(editor.selection)) {
|
|
42632
|
+
import_slate57.Transforms.setNodes(editor, { fontSize: size }, {
|
|
42633
|
+
match: (n) => import_slate57.Text.isText(n),
|
|
42634
|
+
split: true
|
|
42635
|
+
});
|
|
42636
|
+
} else {
|
|
42637
|
+
import_slate57.Editor.addMark(editor, "fontSize", size);
|
|
42638
|
+
}
|
|
42577
42639
|
if (selectionContext === "EditTextUnderPointer") {}
|
|
42578
42640
|
}
|
|
42579
42641
|
var import_slate57;
|
|
@@ -44241,6 +44303,35 @@ var init_Audio = __esm(() => {
|
|
|
44241
44303
|
};
|
|
44242
44304
|
});
|
|
44243
44305
|
|
|
44306
|
+
// src/api/AuthRequest.ts
|
|
44307
|
+
async function authenticatedFetch(url2, init2 = {}, boardId) {
|
|
44308
|
+
const getAuthInit = (originalInit) => {
|
|
44309
|
+
const token = conf.getAccessToken();
|
|
44310
|
+
if (!token) {
|
|
44311
|
+
return originalInit;
|
|
44312
|
+
}
|
|
44313
|
+
const headers = new Headers(originalInit.headers);
|
|
44314
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
44315
|
+
return { ...originalInit, headers };
|
|
44316
|
+
};
|
|
44317
|
+
let response = await fetch(url2, getAuthInit(init2));
|
|
44318
|
+
if (response.status === 401) {
|
|
44319
|
+
const body = await response.clone().json().catch(() => ({}));
|
|
44320
|
+
if (body.code === "AUTH_INVALID_ACCESS_TOKEN") {
|
|
44321
|
+
const refreshed = await conf.onAuthInvalid(boardId);
|
|
44322
|
+
if (refreshed) {
|
|
44323
|
+
response = await fetch(url2, getAuthInit(init2));
|
|
44324
|
+
} else {
|
|
44325
|
+
conf.onAuthTerminalFailure(boardId, body.code);
|
|
44326
|
+
}
|
|
44327
|
+
}
|
|
44328
|
+
}
|
|
44329
|
+
return response;
|
|
44330
|
+
}
|
|
44331
|
+
var init_AuthRequest = __esm(() => {
|
|
44332
|
+
init_Settings();
|
|
44333
|
+
});
|
|
44334
|
+
|
|
44244
44335
|
// src/api/MediaHelpers.ts
|
|
44245
44336
|
function getAccessTypeFromUrl(url2) {
|
|
44246
44337
|
try {
|
|
@@ -44258,15 +44349,14 @@ function getAccessTypeFromUrl(url2) {
|
|
|
44258
44349
|
}
|
|
44259
44350
|
return null;
|
|
44260
44351
|
}
|
|
44261
|
-
var uploadSvgDirectly = async (blob,
|
|
44262
|
-
const response = await
|
|
44352
|
+
var uploadSvgDirectly = async (blob, boardId, baseUrl) => {
|
|
44353
|
+
const response = await authenticatedFetch(`${baseUrl || ""}/svg/${boardId}`, {
|
|
44263
44354
|
method: "POST",
|
|
44264
44355
|
headers: {
|
|
44265
|
-
"Content-Type": "image/svg+xml"
|
|
44266
|
-
Authorization: `Bearer ${accessToken}`
|
|
44356
|
+
"Content-Type": "image/svg+xml"
|
|
44267
44357
|
},
|
|
44268
44358
|
body: blob
|
|
44269
|
-
});
|
|
44359
|
+
}, boardId);
|
|
44270
44360
|
if (!response.ok) {
|
|
44271
44361
|
conf.hooks.onUploadMediaError(response, "image");
|
|
44272
44362
|
throw new Error(`Failed to upload SVG. Status: ${response.status}`);
|
|
@@ -44276,19 +44366,18 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
44276
44366
|
throw new Error("Server did not provide a key for the uploaded SVG.");
|
|
44277
44367
|
}
|
|
44278
44368
|
return data.url;
|
|
44279
|
-
}, uploadWithPresignedUrl = async (blob,
|
|
44280
|
-
const generateUrlResponse = await
|
|
44369
|
+
}, uploadWithPresignedUrl = async (blob, boardId, type, baseUrl) => {
|
|
44370
|
+
const generateUrlResponse = await authenticatedFetch(`${baseUrl || ""}/media/upload`, {
|
|
44281
44371
|
method: "POST",
|
|
44282
44372
|
headers: {
|
|
44283
|
-
"Content-Type": "application/json"
|
|
44284
|
-
Authorization: `Bearer ${accessToken}`
|
|
44373
|
+
"Content-Type": "application/json"
|
|
44285
44374
|
},
|
|
44286
44375
|
body: JSON.stringify({
|
|
44287
44376
|
fileSize: blob.size,
|
|
44288
44377
|
fileType: blob.type,
|
|
44289
44378
|
boardId
|
|
44290
44379
|
})
|
|
44291
|
-
});
|
|
44380
|
+
}, boardId);
|
|
44292
44381
|
if (!generateUrlResponse.ok) {
|
|
44293
44382
|
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
44294
44383
|
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
@@ -44310,18 +44399,18 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
44310
44399
|
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
44311
44400
|
}
|
|
44312
44401
|
return url2;
|
|
44313
|
-
}, uploadMediaToStorage = async (blob,
|
|
44402
|
+
}, uploadMediaToStorage = async (blob, boardId, type, baseUrl) => {
|
|
44314
44403
|
try {
|
|
44315
44404
|
if (blob.type === "image/svg+xml") {
|
|
44316
|
-
return await uploadSvgDirectly(blob,
|
|
44405
|
+
return await uploadSvgDirectly(blob, boardId, baseUrl);
|
|
44317
44406
|
} else {
|
|
44318
|
-
return await uploadWithPresignedUrl(blob,
|
|
44407
|
+
return await uploadWithPresignedUrl(blob, boardId, type, baseUrl);
|
|
44319
44408
|
}
|
|
44320
44409
|
} catch (error48) {
|
|
44321
44410
|
console.error("Media upload process error:", error48);
|
|
44322
44411
|
throw error48;
|
|
44323
44412
|
}
|
|
44324
|
-
}, getMediaSignedUrl = async (url2
|
|
44413
|
+
}, getMediaSignedUrl = async (url2) => {
|
|
44325
44414
|
const accessType = getAccessTypeFromUrl(url2);
|
|
44326
44415
|
if (!accessType) {
|
|
44327
44416
|
return null;
|
|
@@ -44329,15 +44418,9 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
44329
44418
|
if (accessType === "anonymous") {
|
|
44330
44419
|
return url2;
|
|
44331
44420
|
}
|
|
44332
|
-
if (!accessToken) {
|
|
44333
|
-
return null;
|
|
44334
|
-
}
|
|
44335
44421
|
try {
|
|
44336
|
-
const response = await
|
|
44337
|
-
method: "GET"
|
|
44338
|
-
headers: {
|
|
44339
|
-
Authorization: `Bearer ${accessToken}`
|
|
44340
|
-
}
|
|
44422
|
+
const response = await authenticatedFetch(url2, {
|
|
44423
|
+
method: "GET"
|
|
44341
44424
|
});
|
|
44342
44425
|
if (!response.ok) {
|
|
44343
44426
|
console.error("Failed to get media signed url:", response.status, response.statusText);
|
|
@@ -44352,15 +44435,16 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
|
|
|
44352
44435
|
};
|
|
44353
44436
|
var init_MediaHelpers = __esm(() => {
|
|
44354
44437
|
init_Settings();
|
|
44438
|
+
init_AuthRequest();
|
|
44355
44439
|
});
|
|
44356
44440
|
|
|
44357
44441
|
// src/Items/Audio/AudioHelpers.ts
|
|
44358
|
-
var prepareAudio = (file2,
|
|
44442
|
+
var prepareAudio = (file2, boardId, baseUrl) => {
|
|
44359
44443
|
return new Promise((resolve, reject) => {
|
|
44360
44444
|
const audio = document.createElement("audio");
|
|
44361
44445
|
audio.src = URL.createObjectURL(file2);
|
|
44362
44446
|
audio.onloadedmetadata = () => {
|
|
44363
|
-
uploadMediaToStorage(file2,
|
|
44447
|
+
uploadMediaToStorage(file2, boardId, "audio", baseUrl).then((url2) => {
|
|
44364
44448
|
resolve(url2);
|
|
44365
44449
|
}).catch(reject);
|
|
44366
44450
|
};
|
|
@@ -62887,7 +62971,7 @@ var init_Video = __esm(() => {
|
|
|
62887
62971
|
async setPreviewUrl(url2) {
|
|
62888
62972
|
if (this.isStorageUrl) {
|
|
62889
62973
|
try {
|
|
62890
|
-
this.preview.src = await getMediaSignedUrl(url2
|
|
62974
|
+
this.preview.src = await getMediaSignedUrl(url2) || "";
|
|
62891
62975
|
} catch (err) {
|
|
62892
62976
|
console.error(err);
|
|
62893
62977
|
this.onError();
|
|
@@ -63247,9 +63331,9 @@ var getBlobFromDataURL = (dataURL) => {
|
|
|
63247
63331
|
};
|
|
63248
63332
|
}
|
|
63249
63333
|
});
|
|
63250
|
-
}, prepareImage = (inp,
|
|
63334
|
+
}, prepareImage = (inp, boardId, baseUrl) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash: hash2 }) => {
|
|
63251
63335
|
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
63252
|
-
return uploadMediaToStorage(blob,
|
|
63336
|
+
return uploadMediaToStorage(blob, boardId, "image", baseUrl).then((src) => {
|
|
63253
63337
|
return {
|
|
63254
63338
|
imageDimension: { width: width2, height: height2 },
|
|
63255
63339
|
base64: dataURL,
|
|
@@ -63290,15 +63374,15 @@ var getVideoMetadata = (file2) => {
|
|
|
63290
63374
|
board.selection.add(boardVideo);
|
|
63291
63375
|
onLoadCb(boardVideo);
|
|
63292
63376
|
});
|
|
63293
|
-
}, prepareVideo = (file2,
|
|
63377
|
+
}, prepareVideo = (file2, boardId, baseUrl) => {
|
|
63294
63378
|
return new Promise((resolve2, reject) => {
|
|
63295
63379
|
const video = document.createElement("video");
|
|
63296
63380
|
video.src = URL.createObjectURL(file2);
|
|
63297
63381
|
video.onloadedmetadata = () => {
|
|
63298
63382
|
video.onseeked = () => {
|
|
63299
63383
|
video.onseeked = null;
|
|
63300
|
-
prepareImage(captureFrame(0.1, video)?.src,
|
|
63301
|
-
uploadMediaToStorage(file2,
|
|
63384
|
+
prepareImage(captureFrame(0.1, video)?.src, boardId, baseUrl).then((imageData) => {
|
|
63385
|
+
uploadMediaToStorage(file2, boardId, "video", baseUrl).then((url2) => {
|
|
63302
63386
|
resolve2({
|
|
63303
63387
|
url: url2,
|
|
63304
63388
|
previewUrl: imageData.storageLink
|
|
@@ -69286,8 +69370,8 @@ var init_Card = __esm(() => {
|
|
|
69286
69370
|
async createImages() {
|
|
69287
69371
|
this.face = conf.documentFactory.createElement("img");
|
|
69288
69372
|
this.backside = conf.documentFactory.createElement("img");
|
|
69289
|
-
this.face.src = await getMediaSignedUrl(this.faceUrl
|
|
69290
|
-
this.backside.src = await getMediaSignedUrl(this.backsideUrl
|
|
69373
|
+
this.face.src = await getMediaSignedUrl(this.faceUrl) || "";
|
|
69374
|
+
this.backside.src = await getMediaSignedUrl(this.backsideUrl) || "";
|
|
69291
69375
|
this.face.onload = () => {
|
|
69292
69376
|
this.subject.publish(this);
|
|
69293
69377
|
};
|
|
@@ -69988,7 +70072,7 @@ var init_Dice = __esm(() => {
|
|
|
69988
70072
|
this.renderValues[index2] = value;
|
|
69989
70073
|
} else {
|
|
69990
70074
|
const image2 = conf.documentFactory.createElement("img");
|
|
69991
|
-
image2.src = await getMediaSignedUrl(value
|
|
70075
|
+
image2.src = await getMediaSignedUrl(value) || "";
|
|
69992
70076
|
this.renderValues[index2] = image2;
|
|
69993
70077
|
image2.onload = () => {
|
|
69994
70078
|
this.subject.publish(this);
|
|
@@ -70443,7 +70527,7 @@ var init_Screen = __esm(() => {
|
|
|
70443
70527
|
this.backgroundUrl = url2 || "";
|
|
70444
70528
|
if (url2) {
|
|
70445
70529
|
this.backgroundImage = conf.documentFactory.createElement("img");
|
|
70446
|
-
this.backgroundImage.src = await getMediaSignedUrl(url2
|
|
70530
|
+
this.backgroundImage.src = await getMediaSignedUrl(url2) || "";
|
|
70447
70531
|
this.applyBackgroundColor("none");
|
|
70448
70532
|
this.backgroundImage.onload = () => {
|
|
70449
70533
|
this.subject.publish(this);
|
|
@@ -72305,7 +72389,7 @@ var init_Image = __esm(() => {
|
|
|
72305
72389
|
}
|
|
72306
72390
|
async setStorageLink(link2) {
|
|
72307
72391
|
this.storageLink = link2;
|
|
72308
|
-
this.signedUrl = await getMediaSignedUrl(link2
|
|
72392
|
+
this.signedUrl = await getMediaSignedUrl(link2) || "";
|
|
72309
72393
|
if (!this.signedUrl) {
|
|
72310
72394
|
const canvas = conf.documentFactory.createElement("canvas");
|
|
72311
72395
|
canvas.width = 100;
|
|
@@ -72726,7 +72810,7 @@ function handleAudioGenerate(response, board) {
|
|
|
72726
72810
|
}
|
|
72727
72811
|
function handleImageGenerate(response, board) {
|
|
72728
72812
|
if (response.status === "completed" && response.base64) {
|
|
72729
|
-
prepareImage(response.base64,
|
|
72813
|
+
prepareImage(response.base64, board.getBoardId()).then((imageData) => {
|
|
72730
72814
|
const placeholderId = board.aiImagePlaceholder?.getId();
|
|
72731
72815
|
if (placeholderId) {
|
|
72732
72816
|
const placeholderNode = board.items.getById(placeholderId);
|