rita-workspace 0.5.22 → 0.5.24

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.js CHANGED
@@ -431,7 +431,20 @@ function useWorkspaceLang() {
431
431
  }
432
432
  return { lang: context.lang, t: context.t };
433
433
  }
434
- var TAB_ID = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
434
+ var TAB_ID_KEY = "rita-workspace-tab-id";
435
+ var TAB_ID = (() => {
436
+ try {
437
+ const existing = sessionStorage.getItem(TAB_ID_KEY);
438
+ if (existing) return existing;
439
+ } catch {
440
+ }
441
+ const fresh = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
442
+ try {
443
+ sessionStorage.setItem(TAB_ID_KEY, fresh);
444
+ } catch {
445
+ }
446
+ return fresh;
447
+ })();
435
448
  var TABS_KEY = "rita-workspace-tabs";
436
449
  var TAB_CHANNEL = "rita-workspace-tabs";
437
450
  function broadcastWorkspaceChange() {
@@ -464,16 +477,34 @@ function getTabsMap() {
464
477
  return {};
465
478
  }
466
479
  }
480
+ var TAB_ENTRY_KEY = "rita-workspace-tab-entry";
467
481
  function setTabDrawing(drawingId) {
468
482
  const tabs = getTabsMap();
469
483
  if (drawingId) {
470
484
  const existing = tabs[TAB_ID];
485
+ let openedAt;
471
486
  if (existing && existing.drawingId === drawingId) {
487
+ openedAt = existing.openedAt;
472
488
  } else {
473
- tabs[TAB_ID] = { drawingId, openedAt: Date.now() };
489
+ let sessionEntry = null;
490
+ try {
491
+ const raw = sessionStorage.getItem(TAB_ENTRY_KEY);
492
+ if (raw) sessionEntry = JSON.parse(raw);
493
+ } catch {
494
+ }
495
+ openedAt = sessionEntry && sessionEntry.drawingId === drawingId ? sessionEntry.openedAt : Date.now();
496
+ }
497
+ tabs[TAB_ID] = { drawingId, openedAt };
498
+ try {
499
+ sessionStorage.setItem(TAB_ENTRY_KEY, JSON.stringify(tabs[TAB_ID]));
500
+ } catch {
474
501
  }
475
502
  } else {
476
503
  delete tabs[TAB_ID];
504
+ try {
505
+ sessionStorage.removeItem(TAB_ENTRY_KEY);
506
+ } catch {
507
+ }
477
508
  }
478
509
  const json = JSON.stringify(tabs);
479
510
  localStorage.setItem(TABS_KEY, json);
@@ -717,7 +748,14 @@ function WorkspaceProvider({ children, lang = "en" }) {
717
748
  const drawingIds = freshWorkspace?.drawingIds || workspace.drawingIds;
718
749
  const wsDrawings = allDrawings.filter((d) => drawingIds.includes(d.id));
719
750
  if (freshWorkspace) {
720
- setWorkspace((prev) => prev ? { ...freshWorkspace, activeDrawingId: prev.activeDrawingId } : freshWorkspace);
751
+ setWorkspace((prev) => {
752
+ if (!prev) return freshWorkspace;
753
+ const idsEqual = prev.drawingIds.length === freshWorkspace.drawingIds.length && prev.drawingIds.every((id, i) => id === freshWorkspace.drawingIds[i]);
754
+ if (idsEqual && prev.name === freshWorkspace.name) {
755
+ return prev;
756
+ }
757
+ return { ...freshWorkspace, activeDrawingId: prev.activeDrawingId };
758
+ });
721
759
  }
722
760
  setDrawings(wsDrawings);
723
761
  setFolders(allFolders);
package/dist/index.mjs CHANGED
@@ -360,7 +360,20 @@ function useWorkspaceLang() {
360
360
  }
361
361
  return { lang: context.lang, t: context.t };
362
362
  }
363
- var TAB_ID = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
363
+ var TAB_ID_KEY = "rita-workspace-tab-id";
364
+ var TAB_ID = (() => {
365
+ try {
366
+ const existing = sessionStorage.getItem(TAB_ID_KEY);
367
+ if (existing) return existing;
368
+ } catch {
369
+ }
370
+ const fresh = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
371
+ try {
372
+ sessionStorage.setItem(TAB_ID_KEY, fresh);
373
+ } catch {
374
+ }
375
+ return fresh;
376
+ })();
364
377
  var TABS_KEY = "rita-workspace-tabs";
365
378
  var TAB_CHANNEL = "rita-workspace-tabs";
366
379
  function broadcastWorkspaceChange() {
@@ -393,16 +406,34 @@ function getTabsMap() {
393
406
  return {};
394
407
  }
395
408
  }
409
+ var TAB_ENTRY_KEY = "rita-workspace-tab-entry";
396
410
  function setTabDrawing(drawingId) {
397
411
  const tabs = getTabsMap();
398
412
  if (drawingId) {
399
413
  const existing = tabs[TAB_ID];
414
+ let openedAt;
400
415
  if (existing && existing.drawingId === drawingId) {
416
+ openedAt = existing.openedAt;
401
417
  } else {
402
- tabs[TAB_ID] = { drawingId, openedAt: Date.now() };
418
+ let sessionEntry = null;
419
+ try {
420
+ const raw = sessionStorage.getItem(TAB_ENTRY_KEY);
421
+ if (raw) sessionEntry = JSON.parse(raw);
422
+ } catch {
423
+ }
424
+ openedAt = sessionEntry && sessionEntry.drawingId === drawingId ? sessionEntry.openedAt : Date.now();
425
+ }
426
+ tabs[TAB_ID] = { drawingId, openedAt };
427
+ try {
428
+ sessionStorage.setItem(TAB_ENTRY_KEY, JSON.stringify(tabs[TAB_ID]));
429
+ } catch {
403
430
  }
404
431
  } else {
405
432
  delete tabs[TAB_ID];
433
+ try {
434
+ sessionStorage.removeItem(TAB_ENTRY_KEY);
435
+ } catch {
436
+ }
406
437
  }
407
438
  const json = JSON.stringify(tabs);
408
439
  localStorage.setItem(TABS_KEY, json);
@@ -646,7 +677,14 @@ function WorkspaceProvider({ children, lang = "en" }) {
646
677
  const drawingIds = freshWorkspace?.drawingIds || workspace.drawingIds;
647
678
  const wsDrawings = allDrawings.filter((d) => drawingIds.includes(d.id));
648
679
  if (freshWorkspace) {
649
- setWorkspace((prev) => prev ? { ...freshWorkspace, activeDrawingId: prev.activeDrawingId } : freshWorkspace);
680
+ setWorkspace((prev) => {
681
+ if (!prev) return freshWorkspace;
682
+ const idsEqual = prev.drawingIds.length === freshWorkspace.drawingIds.length && prev.drawingIds.every((id, i) => id === freshWorkspace.drawingIds[i]);
683
+ if (idsEqual && prev.name === freshWorkspace.name) {
684
+ return prev;
685
+ }
686
+ return { ...freshWorkspace, activeDrawingId: prev.activeDrawingId };
687
+ });
650
688
  }
651
689
  setDrawings(wsDrawings);
652
690
  setFolders(allFolders);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rita-workspace",
3
- "version": "0.5.22",
3
+ "version": "0.5.24",
4
4
  "description": "Multi-drawing workspace feature for Rita (Excalidraw fork)",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",