rita-workspace 0.5.12 → 0.5.14

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
@@ -517,8 +517,11 @@ function WorkspaceProvider({ children, lang = "en" }) {
517
517
  const id = activeDrawingIdRef.current;
518
518
  if (id) {
519
519
  getDrawing(id).then((fresh) => {
520
- if (fresh && activeDrawingIdRef.current === id) {
521
- setActiveDrawing2(fresh);
520
+ if (fresh && activeDrawingIdRef.current === id && !prevConflictRef.current) {
521
+ setActiveDrawing2((prev) => {
522
+ if (!prev || prev.id !== id) return prev;
523
+ return { ...prev, name: fresh.name, folderId: fresh.folderId };
524
+ });
522
525
  }
523
526
  });
524
527
  }
@@ -664,10 +667,12 @@ function WorkspaceProvider({ children, lang = "en" }) {
664
667
  const refreshDrawings = (0, import_react.useCallback)(async () => {
665
668
  if (!workspace) return;
666
669
  try {
667
- const allDrawings = await getAllDrawings();
670
+ const [allDrawings, allFolders] = await Promise.all([
671
+ getAllDrawings(),
672
+ getAllFolders()
673
+ ]);
668
674
  const wsDrawings = allDrawings.filter((d) => workspace.drawingIds.includes(d.id));
669
675
  setDrawings(wsDrawings);
670
- const allFolders = await getAllFolders();
671
676
  setFolders(allFolders);
672
677
  } catch (err) {
673
678
  }
@@ -1547,10 +1552,11 @@ var DrawingsDialog = ({
1547
1552
  const { rootDrawings, drawingsByFolder, filteredFolders } = (0, import_react5.useMemo)(() => {
1548
1553
  const query = searchQuery.toLowerCase().trim();
1549
1554
  const filtered = query ? drawings.filter((d) => d.name.toLowerCase().includes(query)) : drawings;
1550
- const root = filtered.filter((d) => !d.folderId);
1555
+ const sorted = [...filtered].sort((a, b) => a.createdAt - b.createdAt);
1556
+ const root = sorted.filter((d) => !d.folderId);
1551
1557
  const byFolder = {};
1552
1558
  for (const folder of folders) {
1553
- byFolder[folder.id] = filtered.filter((d) => d.folderId === folder.id);
1559
+ byFolder[folder.id] = sorted.filter((d) => d.folderId === folder.id);
1554
1560
  }
1555
1561
  const foldersFiltered = query ? folders.filter((f) => f.name.toLowerCase().includes(query) || (byFolder[f.id] || []).length > 0) : folders;
1556
1562
  return { rootDrawings: root, drawingsByFolder: byFolder, filteredFolders: foldersFiltered };
@@ -1592,16 +1598,6 @@ var DrawingsDialog = ({
1592
1598
  const renderDrawingRow = (drawing) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1593
1599
  "div",
1594
1600
  {
1595
- draggable: !editingId && !confirmDeleteId,
1596
- onDragStart: (e) => {
1597
- setDraggingDrawingId(drawing.id);
1598
- e.dataTransfer.effectAllowed = "move";
1599
- e.dataTransfer.setData("text/plain", drawing.id);
1600
- },
1601
- onDragEnd: () => {
1602
- setDraggingDrawingId(null);
1603
- setDropTargetFolderId(null);
1604
- },
1605
1601
  onMouseEnter: () => setHoveredId(drawing.id),
1606
1602
  onMouseLeave: () => setHoveredId(null),
1607
1603
  onClick: (e) => {
@@ -1616,13 +1612,40 @@ var DrawingsDialog = ({
1616
1612
  gap: "12px",
1617
1613
  borderRadius: "8px",
1618
1614
  marginBottom: "4px",
1619
- cursor: draggingDrawingId ? "grabbing" : "pointer",
1615
+ cursor: "pointer",
1620
1616
  backgroundColor: activeDrawing?.id === drawing.id ? "var(--color-primary-light, rgba(108, 99, 255, 0.1))" : selectedId === drawing.id ? "var(--color-primary-light, rgba(108, 99, 255, 0.06))" : "transparent",
1621
1617
  border: selectedId === drawing.id && activeDrawing?.id !== drawing.id ? "1px solid var(--color-primary, #6c63ff)" : "1px solid transparent",
1622
1618
  transition: "background-color 0.15s, border-color 0.15s",
1623
1619
  opacity: draggingDrawingId === drawing.id ? 0.4 : switchingId && switchingId !== drawing.id ? 0.5 : 1
1624
1620
  },
1625
1621
  children: [
1622
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1623
+ "span",
1624
+ {
1625
+ draggable: !editingId && !confirmDeleteId,
1626
+ onDragStart: (e) => {
1627
+ setDraggingDrawingId(drawing.id);
1628
+ e.dataTransfer.effectAllowed = "move";
1629
+ e.dataTransfer.setData("text/plain", drawing.id);
1630
+ },
1631
+ onDragEnd: () => {
1632
+ setDraggingDrawingId(null);
1633
+ setDropTargetFolderId(null);
1634
+ },
1635
+ onClick: (e) => e.stopPropagation(),
1636
+ style: {
1637
+ cursor: "grab",
1638
+ fontSize: "14px",
1639
+ color: "var(--text-secondary-color, #aaa)",
1640
+ flexShrink: 0,
1641
+ userSelect: "none",
1642
+ padding: "4px 2px",
1643
+ visibility: hoveredId === drawing.id || selectedId === drawing.id || draggingDrawingId === drawing.id ? "visible" : "hidden"
1644
+ },
1645
+ title: t.moveToFolder,
1646
+ children: "\u283F"
1647
+ }
1648
+ ),
1626
1649
  renderThumbnail && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: {
1627
1650
  width: "64px",
1628
1651
  height: "48px",
package/dist/index.mjs CHANGED
@@ -449,8 +449,11 @@ function WorkspaceProvider({ children, lang = "en" }) {
449
449
  const id = activeDrawingIdRef.current;
450
450
  if (id) {
451
451
  getDrawing(id).then((fresh) => {
452
- if (fresh && activeDrawingIdRef.current === id) {
453
- setActiveDrawing2(fresh);
452
+ if (fresh && activeDrawingIdRef.current === id && !prevConflictRef.current) {
453
+ setActiveDrawing2((prev) => {
454
+ if (!prev || prev.id !== id) return prev;
455
+ return { ...prev, name: fresh.name, folderId: fresh.folderId };
456
+ });
454
457
  }
455
458
  });
456
459
  }
@@ -596,10 +599,12 @@ function WorkspaceProvider({ children, lang = "en" }) {
596
599
  const refreshDrawings = useCallback(async () => {
597
600
  if (!workspace) return;
598
601
  try {
599
- const allDrawings = await getAllDrawings();
602
+ const [allDrawings, allFolders] = await Promise.all([
603
+ getAllDrawings(),
604
+ getAllFolders()
605
+ ]);
600
606
  const wsDrawings = allDrawings.filter((d) => workspace.drawingIds.includes(d.id));
601
607
  setDrawings(wsDrawings);
602
- const allFolders = await getAllFolders();
603
608
  setFolders(allFolders);
604
609
  } catch (err) {
605
610
  }
@@ -1479,10 +1484,11 @@ var DrawingsDialog = ({
1479
1484
  const { rootDrawings, drawingsByFolder, filteredFolders } = useMemo(() => {
1480
1485
  const query = searchQuery.toLowerCase().trim();
1481
1486
  const filtered = query ? drawings.filter((d) => d.name.toLowerCase().includes(query)) : drawings;
1482
- const root = filtered.filter((d) => !d.folderId);
1487
+ const sorted = [...filtered].sort((a, b) => a.createdAt - b.createdAt);
1488
+ const root = sorted.filter((d) => !d.folderId);
1483
1489
  const byFolder = {};
1484
1490
  for (const folder of folders) {
1485
- byFolder[folder.id] = filtered.filter((d) => d.folderId === folder.id);
1491
+ byFolder[folder.id] = sorted.filter((d) => d.folderId === folder.id);
1486
1492
  }
1487
1493
  const foldersFiltered = query ? folders.filter((f) => f.name.toLowerCase().includes(query) || (byFolder[f.id] || []).length > 0) : folders;
1488
1494
  return { rootDrawings: root, drawingsByFolder: byFolder, filteredFolders: foldersFiltered };
@@ -1524,16 +1530,6 @@ var DrawingsDialog = ({
1524
1530
  const renderDrawingRow = (drawing) => /* @__PURE__ */ jsxs4(
1525
1531
  "div",
1526
1532
  {
1527
- draggable: !editingId && !confirmDeleteId,
1528
- onDragStart: (e) => {
1529
- setDraggingDrawingId(drawing.id);
1530
- e.dataTransfer.effectAllowed = "move";
1531
- e.dataTransfer.setData("text/plain", drawing.id);
1532
- },
1533
- onDragEnd: () => {
1534
- setDraggingDrawingId(null);
1535
- setDropTargetFolderId(null);
1536
- },
1537
1533
  onMouseEnter: () => setHoveredId(drawing.id),
1538
1534
  onMouseLeave: () => setHoveredId(null),
1539
1535
  onClick: (e) => {
@@ -1548,13 +1544,40 @@ var DrawingsDialog = ({
1548
1544
  gap: "12px",
1549
1545
  borderRadius: "8px",
1550
1546
  marginBottom: "4px",
1551
- cursor: draggingDrawingId ? "grabbing" : "pointer",
1547
+ cursor: "pointer",
1552
1548
  backgroundColor: activeDrawing?.id === drawing.id ? "var(--color-primary-light, rgba(108, 99, 255, 0.1))" : selectedId === drawing.id ? "var(--color-primary-light, rgba(108, 99, 255, 0.06))" : "transparent",
1553
1549
  border: selectedId === drawing.id && activeDrawing?.id !== drawing.id ? "1px solid var(--color-primary, #6c63ff)" : "1px solid transparent",
1554
1550
  transition: "background-color 0.15s, border-color 0.15s",
1555
1551
  opacity: draggingDrawingId === drawing.id ? 0.4 : switchingId && switchingId !== drawing.id ? 0.5 : 1
1556
1552
  },
1557
1553
  children: [
1554
+ /* @__PURE__ */ jsx6(
1555
+ "span",
1556
+ {
1557
+ draggable: !editingId && !confirmDeleteId,
1558
+ onDragStart: (e) => {
1559
+ setDraggingDrawingId(drawing.id);
1560
+ e.dataTransfer.effectAllowed = "move";
1561
+ e.dataTransfer.setData("text/plain", drawing.id);
1562
+ },
1563
+ onDragEnd: () => {
1564
+ setDraggingDrawingId(null);
1565
+ setDropTargetFolderId(null);
1566
+ },
1567
+ onClick: (e) => e.stopPropagation(),
1568
+ style: {
1569
+ cursor: "grab",
1570
+ fontSize: "14px",
1571
+ color: "var(--text-secondary-color, #aaa)",
1572
+ flexShrink: 0,
1573
+ userSelect: "none",
1574
+ padding: "4px 2px",
1575
+ visibility: hoveredId === drawing.id || selectedId === drawing.id || draggingDrawingId === drawing.id ? "visible" : "hidden"
1576
+ },
1577
+ title: t.moveToFolder,
1578
+ children: "\u283F"
1579
+ }
1580
+ ),
1558
1581
  renderThumbnail && /* @__PURE__ */ jsx6("div", { style: {
1559
1582
  width: "64px",
1560
1583
  height: "48px",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rita-workspace",
3
- "version": "0.5.12",
3
+ "version": "0.5.14",
4
4
  "description": "Multi-drawing workspace feature for Rita (Excalidraw fork)",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",