rita-workspace 0.5.18 → 0.5.19

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.d.mts CHANGED
@@ -50,11 +50,16 @@ interface RitaWorkspaceDB extends DBSchema {
50
50
  };
51
51
  }
52
52
  declare function getDB(): Promise<IDBPDatabase<RitaWorkspaceDB>>;
53
+ /** Pre-warm the DB connection so it's ready when first query runs */
54
+ declare function warmDB(): void;
53
55
  declare function closeDB(): Promise<void>;
54
56
 
55
57
  declare function createDrawing(name?: string, elements?: unknown[], appState?: Record<string, unknown>, folderId?: string | null): Promise<Drawing>;
56
58
  declare function getDrawing(id: string): Promise<Drawing | undefined>;
57
59
  declare function getAllDrawings(): Promise<Drawing[]>;
60
+ /** Lightweight metadata-only fetch — skips elements/appState/files for fast listing */
61
+ type DrawingMeta = Pick<Drawing, 'id' | 'name' | 'folderId' | 'createdAt' | 'updatedAt'>;
62
+ declare function getAllDrawingsMeta(): Promise<DrawingMeta[]>;
58
63
  declare function updateDrawing(id: string, updates: Partial<Omit<Drawing, 'id' | 'createdAt'>>): Promise<Drawing | undefined>;
59
64
  declare function deleteDrawing(id: string): Promise<boolean>;
60
65
  declare function duplicateDrawing(id: string, newName?: string): Promise<Drawing | undefined>;
@@ -382,4 +387,4 @@ interface WorkspacePluginProps {
382
387
  */
383
388
  declare function WorkspacePlugin(props: WorkspacePluginProps): react_jsx_runtime.JSX.Element;
384
389
 
385
- export { type Drawing, DrawingList, DrawingListItem, DrawingsDialog, type DrawingsDialogProps, type ExcalidrawImperativeAPI, type Folder, Sidebar, type SupportedLanguage, type Translations, type Workspace, WorkspaceBridge, type WorkspaceBridgeProps, type WorkspaceContextValue, WorkspaceMenuItems, type WorkspaceMenuItemsProps, WorkspacePlugin, WorkspaceProvider, addDrawingToWorkspace, closeDB, createDrawing, createFolder, deleteDrawing, deleteFolder, duplicateDrawing, getAllDrawings, getAllFolders, getDB, getDrawing, getFolder, getOrCreateDefaultWorkspace, getTranslations, getWorkspace, isDrawingOpenedEarlierInOtherTab, isLanguageSupported, moveDrawingToFolder, removeDrawingFromWorkspace, renameFolder, setActiveDrawing, updateDrawing, updateWorkspace, useExcalidrawBridge, useWorkspace, useWorkspaceLang };
390
+ export { type Drawing, DrawingList, DrawingListItem, type DrawingMeta, DrawingsDialog, type DrawingsDialogProps, type ExcalidrawImperativeAPI, type Folder, Sidebar, type SupportedLanguage, type Translations, type Workspace, WorkspaceBridge, type WorkspaceBridgeProps, type WorkspaceContextValue, WorkspaceMenuItems, type WorkspaceMenuItemsProps, WorkspacePlugin, WorkspaceProvider, addDrawingToWorkspace, closeDB, createDrawing, createFolder, deleteDrawing, deleteFolder, duplicateDrawing, getAllDrawings, getAllDrawingsMeta, getAllFolders, getDB, getDrawing, getFolder, getOrCreateDefaultWorkspace, getTranslations, getWorkspace, isDrawingOpenedEarlierInOtherTab, isLanguageSupported, moveDrawingToFolder, removeDrawingFromWorkspace, renameFolder, setActiveDrawing, updateDrawing, updateWorkspace, useExcalidrawBridge, useWorkspace, useWorkspaceLang, warmDB };
package/dist/index.d.ts CHANGED
@@ -50,11 +50,16 @@ interface RitaWorkspaceDB extends DBSchema {
50
50
  };
51
51
  }
52
52
  declare function getDB(): Promise<IDBPDatabase<RitaWorkspaceDB>>;
53
+ /** Pre-warm the DB connection so it's ready when first query runs */
54
+ declare function warmDB(): void;
53
55
  declare function closeDB(): Promise<void>;
54
56
 
55
57
  declare function createDrawing(name?: string, elements?: unknown[], appState?: Record<string, unknown>, folderId?: string | null): Promise<Drawing>;
56
58
  declare function getDrawing(id: string): Promise<Drawing | undefined>;
57
59
  declare function getAllDrawings(): Promise<Drawing[]>;
60
+ /** Lightweight metadata-only fetch — skips elements/appState/files for fast listing */
61
+ type DrawingMeta = Pick<Drawing, 'id' | 'name' | 'folderId' | 'createdAt' | 'updatedAt'>;
62
+ declare function getAllDrawingsMeta(): Promise<DrawingMeta[]>;
58
63
  declare function updateDrawing(id: string, updates: Partial<Omit<Drawing, 'id' | 'createdAt'>>): Promise<Drawing | undefined>;
59
64
  declare function deleteDrawing(id: string): Promise<boolean>;
60
65
  declare function duplicateDrawing(id: string, newName?: string): Promise<Drawing | undefined>;
@@ -382,4 +387,4 @@ interface WorkspacePluginProps {
382
387
  */
383
388
  declare function WorkspacePlugin(props: WorkspacePluginProps): react_jsx_runtime.JSX.Element;
384
389
 
385
- export { type Drawing, DrawingList, DrawingListItem, DrawingsDialog, type DrawingsDialogProps, type ExcalidrawImperativeAPI, type Folder, Sidebar, type SupportedLanguage, type Translations, type Workspace, WorkspaceBridge, type WorkspaceBridgeProps, type WorkspaceContextValue, WorkspaceMenuItems, type WorkspaceMenuItemsProps, WorkspacePlugin, WorkspaceProvider, addDrawingToWorkspace, closeDB, createDrawing, createFolder, deleteDrawing, deleteFolder, duplicateDrawing, getAllDrawings, getAllFolders, getDB, getDrawing, getFolder, getOrCreateDefaultWorkspace, getTranslations, getWorkspace, isDrawingOpenedEarlierInOtherTab, isLanguageSupported, moveDrawingToFolder, removeDrawingFromWorkspace, renameFolder, setActiveDrawing, updateDrawing, updateWorkspace, useExcalidrawBridge, useWorkspace, useWorkspaceLang };
390
+ export { type Drawing, DrawingList, DrawingListItem, type DrawingMeta, DrawingsDialog, type DrawingsDialogProps, type ExcalidrawImperativeAPI, type Folder, Sidebar, type SupportedLanguage, type Translations, type Workspace, WorkspaceBridge, type WorkspaceBridgeProps, type WorkspaceContextValue, WorkspaceMenuItems, type WorkspaceMenuItemsProps, WorkspacePlugin, WorkspaceProvider, addDrawingToWorkspace, closeDB, createDrawing, createFolder, deleteDrawing, deleteFolder, duplicateDrawing, getAllDrawings, getAllDrawingsMeta, getAllFolders, getDB, getDrawing, getFolder, getOrCreateDefaultWorkspace, getTranslations, getWorkspace, isDrawingOpenedEarlierInOtherTab, isLanguageSupported, moveDrawingToFolder, removeDrawingFromWorkspace, renameFolder, setActiveDrawing, updateDrawing, updateWorkspace, useExcalidrawBridge, useWorkspace, useWorkspaceLang, warmDB };
package/dist/index.js CHANGED
@@ -46,6 +46,7 @@ __export(index_exports, {
46
46
  deleteFolder: () => deleteFolder,
47
47
  duplicateDrawing: () => duplicateDrawing,
48
48
  getAllDrawings: () => getAllDrawings,
49
+ getAllDrawingsMeta: () => getAllDrawingsMeta,
49
50
  getAllFolders: () => getAllFolders,
50
51
  getDB: () => getDB,
51
52
  getDrawing: () => getDrawing,
@@ -63,7 +64,8 @@ __export(index_exports, {
63
64
  updateWorkspace: () => updateWorkspace,
64
65
  useExcalidrawBridge: () => useExcalidrawBridge,
65
66
  useWorkspace: () => useWorkspace,
66
- useWorkspaceLang: () => useWorkspaceLang
67
+ useWorkspaceLang: () => useWorkspaceLang,
68
+ warmDB: () => warmDB
67
69
  });
68
70
  module.exports = __toCommonJS(index_exports);
69
71
 
@@ -72,9 +74,11 @@ var import_idb = require("idb");
72
74
  var DB_NAME = "rita-workspace";
73
75
  var DB_VERSION = 2;
74
76
  var dbInstance = null;
77
+ var dbPromise = null;
75
78
  async function getDB() {
76
79
  if (dbInstance) return dbInstance;
77
- dbInstance = await (0, import_idb.openDB)(DB_NAME, DB_VERSION, {
80
+ if (dbPromise) return dbPromise;
81
+ dbPromise = (0, import_idb.openDB)(DB_NAME, DB_VERSION, {
78
82
  upgrade(db, oldVersion) {
79
83
  if (!db.objectStoreNames.contains("workspaces")) {
80
84
  const workspaceStore = db.createObjectStore("workspaces", { keyPath: "id" });
@@ -90,8 +94,13 @@ async function getDB() {
90
94
  }
91
95
  }
92
96
  });
97
+ dbInstance = await dbPromise;
98
+ dbPromise = null;
93
99
  return dbInstance;
94
100
  }
101
+ function warmDB() {
102
+ if (!dbInstance && !dbPromise) getDB();
103
+ }
95
104
  async function closeDB() {
96
105
  if (dbInstance) {
97
106
  dbInstance.close();
@@ -125,6 +134,17 @@ async function getAllDrawings() {
125
134
  const db = await getDB();
126
135
  return db.getAllFromIndex("drawings", "by-updated");
127
136
  }
137
+ async function getAllDrawingsMeta() {
138
+ const db = await getDB();
139
+ const all = await db.getAllFromIndex("drawings", "by-updated");
140
+ return all.map(({ id, name, folderId, createdAt, updatedAt }) => ({
141
+ id,
142
+ name,
143
+ folderId,
144
+ createdAt,
145
+ updatedAt
146
+ }));
147
+ }
128
148
  async function updateDrawing(id, updates) {
129
149
  const db = await getDB();
130
150
  const existing = await db.get("drawings", id);
@@ -395,6 +415,7 @@ function isLanguageSupported(langCode) {
395
415
 
396
416
  // src/state/WorkspaceContext.tsx
397
417
  var import_jsx_runtime = require("react/jsx-runtime");
418
+ warmDB();
398
419
  var WorkspaceContext = (0, import_react.createContext)(null);
399
420
  function useWorkspace() {
400
421
  const context = (0, import_react.useContext)(WorkspaceContext);
@@ -644,21 +665,21 @@ function WorkspaceProvider({ children, lang = "en" }) {
644
665
  setIsLoading(true);
645
666
  const ws = await getOrCreateDefaultWorkspace();
646
667
  setWorkspace(ws);
647
- const allDrawings = await getAllDrawings();
668
+ const lastDrawingId = sessionStorage.getItem("rita-workspace-tab-drawing");
669
+ const activeDrawingPromise = lastDrawingId ? getDrawing(lastDrawingId) : Promise.resolve(void 0);
670
+ const [allDrawings, allFolders, eagarActive] = await Promise.all([
671
+ getAllDrawings(),
672
+ getAllFolders(),
673
+ activeDrawingPromise
674
+ ]);
648
675
  const wsDrawings = allDrawings.filter((d) => ws.drawingIds.includes(d.id));
649
676
  setDrawings(wsDrawings);
650
- const allFolders = await getAllFolders();
651
677
  setFolders(allFolders);
652
- const lastDrawingId = sessionStorage.getItem("rita-workspace-tab-drawing");
653
678
  let active = null;
654
- if (lastDrawingId) {
679
+ if (eagarActive && ws.drawingIds.includes(eagarActive.id)) {
680
+ active = eagarActive;
681
+ } else if (lastDrawingId) {
655
682
  active = wsDrawings.find((d) => d.id === lastDrawingId) || null;
656
- if (!active) {
657
- const fromDb = await getDrawing(lastDrawingId);
658
- if (fromDb && ws.drawingIds.includes(fromDb.id)) {
659
- active = fromDb;
660
- }
661
- }
662
683
  }
663
684
  if (!active && wsDrawings.length > 0) {
664
685
  active = wsDrawings[0];
@@ -2460,6 +2481,7 @@ function WorkspacePlugin(props) {
2460
2481
  deleteFolder,
2461
2482
  duplicateDrawing,
2462
2483
  getAllDrawings,
2484
+ getAllDrawingsMeta,
2463
2485
  getAllFolders,
2464
2486
  getDB,
2465
2487
  getDrawing,
@@ -2477,5 +2499,6 @@ function WorkspacePlugin(props) {
2477
2499
  updateWorkspace,
2478
2500
  useExcalidrawBridge,
2479
2501
  useWorkspace,
2480
- useWorkspaceLang
2502
+ useWorkspaceLang,
2503
+ warmDB
2481
2504
  });
package/dist/index.mjs CHANGED
@@ -3,9 +3,11 @@ import { openDB } from "idb";
3
3
  var DB_NAME = "rita-workspace";
4
4
  var DB_VERSION = 2;
5
5
  var dbInstance = null;
6
+ var dbPromise = null;
6
7
  async function getDB() {
7
8
  if (dbInstance) return dbInstance;
8
- dbInstance = await openDB(DB_NAME, DB_VERSION, {
9
+ if (dbPromise) return dbPromise;
10
+ dbPromise = openDB(DB_NAME, DB_VERSION, {
9
11
  upgrade(db, oldVersion) {
10
12
  if (!db.objectStoreNames.contains("workspaces")) {
11
13
  const workspaceStore = db.createObjectStore("workspaces", { keyPath: "id" });
@@ -21,8 +23,13 @@ async function getDB() {
21
23
  }
22
24
  }
23
25
  });
26
+ dbInstance = await dbPromise;
27
+ dbPromise = null;
24
28
  return dbInstance;
25
29
  }
30
+ function warmDB() {
31
+ if (!dbInstance && !dbPromise) getDB();
32
+ }
26
33
  async function closeDB() {
27
34
  if (dbInstance) {
28
35
  dbInstance.close();
@@ -56,6 +63,17 @@ async function getAllDrawings() {
56
63
  const db = await getDB();
57
64
  return db.getAllFromIndex("drawings", "by-updated");
58
65
  }
66
+ async function getAllDrawingsMeta() {
67
+ const db = await getDB();
68
+ const all = await db.getAllFromIndex("drawings", "by-updated");
69
+ return all.map(({ id, name, folderId, createdAt, updatedAt }) => ({
70
+ id,
71
+ name,
72
+ folderId,
73
+ createdAt,
74
+ updatedAt
75
+ }));
76
+ }
59
77
  async function updateDrawing(id, updates) {
60
78
  const db = await getDB();
61
79
  const existing = await db.get("drawings", id);
@@ -326,6 +344,7 @@ function isLanguageSupported(langCode) {
326
344
 
327
345
  // src/state/WorkspaceContext.tsx
328
346
  import { jsx } from "react/jsx-runtime";
347
+ warmDB();
329
348
  var WorkspaceContext = createContext(null);
330
349
  function useWorkspace() {
331
350
  const context = useContext(WorkspaceContext);
@@ -575,21 +594,21 @@ function WorkspaceProvider({ children, lang = "en" }) {
575
594
  setIsLoading(true);
576
595
  const ws = await getOrCreateDefaultWorkspace();
577
596
  setWorkspace(ws);
578
- const allDrawings = await getAllDrawings();
597
+ const lastDrawingId = sessionStorage.getItem("rita-workspace-tab-drawing");
598
+ const activeDrawingPromise = lastDrawingId ? getDrawing(lastDrawingId) : Promise.resolve(void 0);
599
+ const [allDrawings, allFolders, eagarActive] = await Promise.all([
600
+ getAllDrawings(),
601
+ getAllFolders(),
602
+ activeDrawingPromise
603
+ ]);
579
604
  const wsDrawings = allDrawings.filter((d) => ws.drawingIds.includes(d.id));
580
605
  setDrawings(wsDrawings);
581
- const allFolders = await getAllFolders();
582
606
  setFolders(allFolders);
583
- const lastDrawingId = sessionStorage.getItem("rita-workspace-tab-drawing");
584
607
  let active = null;
585
- if (lastDrawingId) {
608
+ if (eagarActive && ws.drawingIds.includes(eagarActive.id)) {
609
+ active = eagarActive;
610
+ } else if (lastDrawingId) {
586
611
  active = wsDrawings.find((d) => d.id === lastDrawingId) || null;
587
- if (!active) {
588
- const fromDb = await getDrawing(lastDrawingId);
589
- if (fromDb && ws.drawingIds.includes(fromDb.id)) {
590
- active = fromDb;
591
- }
592
- }
593
612
  }
594
613
  if (!active && wsDrawings.length > 0) {
595
614
  active = wsDrawings[0];
@@ -2390,6 +2409,7 @@ export {
2390
2409
  deleteFolder,
2391
2410
  duplicateDrawing,
2392
2411
  getAllDrawings,
2412
+ getAllDrawingsMeta,
2393
2413
  getAllFolders,
2394
2414
  getDB,
2395
2415
  getDrawing,
@@ -2407,5 +2427,6 @@ export {
2407
2427
  updateWorkspace,
2408
2428
  useExcalidrawBridge,
2409
2429
  useWorkspace,
2410
- useWorkspaceLang
2430
+ useWorkspaceLang,
2431
+ warmDB
2411
2432
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rita-workspace",
3
- "version": "0.5.18",
3
+ "version": "0.5.19",
4
4
  "description": "Multi-drawing workspace feature for Rita (Excalidraw fork)",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",