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 +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +36 -13
- package/dist/index.mjs +33 -12
- package/package.json +1 -1
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
|
-
|
|
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
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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
|
};
|