Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -141,3 +141,6 @@ services/comfyui/

# Windows Zone.Identifier metadata files
*:Zone.Identifier

# Remotion build output
apps/api/services/remotion/out/
13 changes: 12 additions & 1 deletion apps/api/routes/share/shareController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,18 @@ router.get(
});
}

const allShares = await service.getUserShares(userId, 'image');
let allShares;
try {
allShares = await service.getUserShares(userId, 'image');
} catch (queryError) {
log.warn('Failed to query user shares, returning empty result:', queryError);
return res.json({
success: true,
shares: [],
count: 0,
limit,
});
}
const recentShares = allShares.slice(0, limit);

res.json({
Expand Down
8 changes: 5 additions & 3 deletions apps/docs/server.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import express from 'express';
import { createServer } from 'http';
import path from 'path';
import { fileURLToPath } from 'url';

import compression from 'compression';
import helmet from 'helmet';
import { createServer } from 'http';
import dotenv from 'dotenv';
import express from 'express';
import helmet from 'helmet';

import { startHocuspocusServer } from '../api/services/hocuspocus/hocuspocusServer.js';

// Load environment variables
Expand Down
5 changes: 3 additions & 2 deletions apps/docs/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { BrowserRouter, Routes, Route } from 'react-router-dom';

import { ProtectedRoute } from './components/auth/ProtectedRoute';
import { HomePage } from './pages/HomePage';
import { EditorPage } from './pages/EditorPage';
import { HomePage } from './pages/HomePage';
import { LoginPage } from './pages/LoginPage';

// Initialize API client
Expand Down
1 change: 1 addition & 0 deletions apps/docs/src/components/auth/ProtectedRoute.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Navigate, useLocation } from 'react-router-dom';

import { useAuth } from '../../hooks/useAuth';

interface ProtectedRouteProps {
Expand Down
4 changes: 2 additions & 2 deletions apps/docs/src/components/common/ActionSheet.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useEffect, useCallback, ReactNode, ComponentType } from 'react';
import { IconBaseProps } from 'react-icons';
import { useEffect, useCallback, type ReactNode, type ComponentType } from 'react';
import { type IconBaseProps } from 'react-icons';
import './ActionSheet.css';

interface ActionSheetItemProps {
Expand Down
1 change: 1 addition & 0 deletions apps/docs/src/components/document/DocumentList.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { useEffect } from 'react';
import { useNavigate } from 'react-router-dom';

import { useDocumentStore } from '../../stores/documentStore';
import './DocumentList.css';

Expand Down
43 changes: 22 additions & 21 deletions apps/docs/src/components/editor/CollaborativeEditor.tsx
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
import { useEffect, useRef, useState } from 'react';
import { EditorContent, EditorContext, useEditor } from '@tiptap/react';
import * as Y from 'yjs';
import { HocuspocusProvider } from '@hocuspocus/provider';
import { type HocuspocusProvider } from '@hocuspocus/provider';

// --- Tiptap Core Extensions ---
import StarterKit from '@tiptap/starter-kit';
import Collaboration from '@tiptap/extension-collaboration';
import CollaborationCursor from '@tiptap/extension-collaboration-cursor';
import Highlight from '@tiptap/extension-highlight';
import Image from '@tiptap/extension-image';
import TaskList from '@tiptap/extension-task-list';
import Link from '@tiptap/extension-link';
import Placeholder from '@tiptap/extension-placeholder';
import Subscript from '@tiptap/extension-subscript';
import Superscript from '@tiptap/extension-superscript';
import TaskItem from '@tiptap/extension-task-item';
import TaskList from '@tiptap/extension-task-list';
import TextAlign from '@tiptap/extension-text-align';
import Typography from '@tiptap/extension-typography';
import Highlight from '@tiptap/extension-highlight';
import Subscript from '@tiptap/extension-subscript';
import Superscript from '@tiptap/extension-superscript';
import Underline from '@tiptap/extension-underline';
import Link from '@tiptap/extension-link';
import Collaboration from '@tiptap/extension-collaboration';
import CollaborationCursor from '@tiptap/extension-collaboration-cursor';
import Placeholder from '@tiptap/extension-placeholder';
import { EditorContent, EditorContext, useEditor } from '@tiptap/react';
import StarterKit from '@tiptap/starter-kit';
import { useEffect, useRef, useState } from 'react';

import type * as Y from 'yjs';

// --- UI Primitives ---
import { Spacer } from '@/components/tiptap-ui-primitive/spacer';
import { Toolbar, ToolbarGroup, ToolbarSeparator } from '@/components/tiptap-ui-primitive/toolbar';

// --- Tiptap Node ---
import { ImageUploadNode } from '@/components/tiptap-node/image-upload-node/image-upload-node-extension';
import { HorizontalRule } from '@/components/tiptap-node/horizontal-rule-node/horizontal-rule-node-extension';
import { ImageUploadNode } from '@/components/tiptap-node/image-upload-node/image-upload-node-extension';
import '@/components/tiptap-node/blockquote-node/blockquote-node.scss';
import '@/components/tiptap-node/code-block-node/code-block-node.scss';
import '@/components/tiptap-node/horizontal-rule-node/horizontal-rule-node.scss';
Expand All @@ -35,28 +36,28 @@ import '@/components/tiptap-node/heading-node/heading-node.scss';
import '@/components/tiptap-node/paragraph-node/paragraph-node.scss';

// --- Tiptap UI ---
import { HeadingDropdownMenu } from '@/components/tiptap-ui/heading-dropdown-menu';
import { ImageUploadButton } from '@/components/tiptap-ui/image-upload-button';
import { ListDropdownMenu } from '@/components/tiptap-ui/list-dropdown-menu';
import { AiEditorPopover } from '@/components/tiptap-ui/ai-editor-popover';
import { AiHistoryDropdown } from '@/components/tiptap-ui/ai-history-dropdown';
import { BlockquoteButton } from '@/components/tiptap-ui/blockquote-button';
import { CodeBlockButton } from '@/components/tiptap-ui/code-block-button';
import { HeadingDropdownMenu } from '@/components/tiptap-ui/heading-dropdown-menu';
import { ImageUploadButton } from '@/components/tiptap-ui/image-upload-button';
import { LinkPopover, LinkContent, LinkButton } from '@/components/tiptap-ui/link-popover';
import { ListDropdownMenu } from '@/components/tiptap-ui/list-dropdown-menu';
import { MarkButton } from '@/components/tiptap-ui/mark-button';
import { TextAlignButton } from '@/components/tiptap-ui/text-align-button';
import { UndoRedoButton } from '@/components/tiptap-ui/undo-redo-button';
import { AiEditorPopover } from '@/components/tiptap-ui/ai-editor-popover';
import { AiHistoryDropdown } from '@/components/tiptap-ui/ai-history-dropdown';

// --- Hooks ---
import { useCursorVisibility } from '@/hooks/use-cursor-visibility';
import { useIsBreakpoint } from '@/hooks/use-is-breakpoint';
import { useWindowSize } from '@/hooks/use-window-size';
import { useCursorVisibility } from '@/hooks/use-cursor-visibility';

// --- Stores ---
import { useEditorStore } from '@/stores/editorStore';

// --- Lib ---
import { handleImageUpload, MAX_FILE_SIZE } from '@/lib/tiptap-utils';
import { useEditorStore } from '@/stores/editorStore';

// --- Styles ---
import '@/components/tiptap-templates/simple/simple-editor.scss';
Expand Down
3 changes: 2 additions & 1 deletion apps/docs/src/components/editor/PresenceAvatars.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { HocuspocusProvider } from '@hocuspocus/provider';
import { type HocuspocusProvider } from '@hocuspocus/provider';

import { useCollaborators } from '../../hooks/useCollaboration';
import './PresenceAvatars.css';

Expand Down
1 change: 1 addition & 0 deletions apps/docs/src/components/permissions/ShareModal.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useState, useEffect } from 'react';

import { apiClient } from '../../lib/apiClient';
import './ShareModal.css';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import type { NodeWithPos } from '@tiptap/core';
import { Extension } from '@tiptap/core';

import type { NodeWithPos } from '@tiptap/core';
import type { EditorState, Transaction } from '@tiptap/pm/state';
import { getSelectedNodesOfType } from '@/lib/tiptap-utils';
import { updateNodesAttr } from '@/lib/tiptap-utils';

import { getSelectedNodesOfType, updateNodesAttr } from '@/lib/tiptap-utils';

declare module '@tiptap/core' {
interface Commands<ReturnType> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { mergeAttributes } from '@tiptap/react';
import TiptapHorizontalRule from '@tiptap/extension-horizontal-rule';
import { mergeAttributes } from '@tiptap/react';

export const HorizontalRule = TiptapHorizontalRule.extend({
renderHTML() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { mergeAttributes, Node } from '@tiptap/react';
import { ReactNodeViewRenderer } from '@tiptap/react';
import { ImageUploadNode as ImageUploadNodeComponent } from '@/components/tiptap-node/image-upload-node/image-upload-node';
import { mergeAttributes, Node, ReactNodeViewRenderer } from '@tiptap/react';

import type { NodeType } from '@tiptap/pm/model';

import { ImageUploadNode as ImageUploadNodeComponent } from '@/components/tiptap-node/image-upload-node/image-upload-node';

export type UploadFunction = (
file: File,
onProgress?: (event: { progress: number }) => void,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
'use client';

import { NodeViewWrapper } from '@tiptap/react';
import { useRef, useState } from 'react';

import type { NodeViewProps } from '@tiptap/react';
import { NodeViewWrapper } from '@tiptap/react';
import { Button } from '@/components/tiptap-ui-primitive/button';

import { CloseIcon } from '@/components/tiptap-icons/close-icon';
import { Button } from '@/components/tiptap-ui-primitive/button';
import '@/components/tiptap-node/image-upload-node/image-upload-node.scss';
import { focusNextNode, isValidPosition } from '@/lib/tiptap-utils';

Expand Down
22 changes: 11 additions & 11 deletions apps/docs/src/components/tiptap-templates/simple/simple-editor.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
'use client';

import { useEffect, useRef, useState } from 'react';
import { EditorContent, EditorContext, useEditor } from '@tiptap/react';

// --- Tiptap Core Extensions ---
import { StarterKit } from '@tiptap/starter-kit';
import { Highlight } from '@tiptap/extension-highlight';
import { Image } from '@tiptap/extension-image';
import { TaskItem, TaskList } from '@tiptap/extension-list';
import { TextAlign } from '@tiptap/extension-text-align';
import { Typography } from '@tiptap/extension-typography';
import { Highlight } from '@tiptap/extension-highlight';
import { Subscript } from '@tiptap/extension-subscript';
import { Superscript } from '@tiptap/extension-superscript';
import { TextAlign } from '@tiptap/extension-text-align';
import { Typography } from '@tiptap/extension-typography';
import { Selection } from '@tiptap/extensions';
import { EditorContent, EditorContext, useEditor } from '@tiptap/react';

// --- Tiptap Core Extensions ---
import { StarterKit } from '@tiptap/starter-kit';
import { useEffect, useRef, useState } from 'react';

// --- UI Primitives ---
import { HorizontalRule } from '@/components/tiptap-node/horizontal-rule-node/horizontal-rule-node-extension';
import { ImageUploadNode } from '@/components/tiptap-node/image-upload-node/image-upload-node-extension';
import { Button } from '@/components/tiptap-ui-primitive/button';
import { Spacer } from '@/components/tiptap-ui-primitive/spacer';
import { Toolbar, ToolbarGroup, ToolbarSeparator } from '@/components/tiptap-ui-primitive/toolbar';

// --- Tiptap Node ---
import { ImageUploadNode } from '@/components/tiptap-node/image-upload-node/image-upload-node-extension';
import { HorizontalRule } from '@/components/tiptap-node/horizontal-rule-node/horizontal-rule-node-extension';
import '@/components/tiptap-node/blockquote-node/blockquote-node.scss';
import '@/components/tiptap-node/code-block-node/code-block-node.scss';
import '@/components/tiptap-node/horizontal-rule-node/horizontal-rule-node.scss';
Expand Down Expand Up @@ -52,9 +52,9 @@ import { HighlighterIcon } from '@/components/tiptap-icons/highlighter-icon';
import { LinkIcon } from '@/components/tiptap-icons/link-icon';

// --- Hooks ---
import { useCursorVisibility } from '@/hooks/use-cursor-visibility';
import { useIsBreakpoint } from '@/hooks/use-is-breakpoint';
import { useWindowSize } from '@/hooks/use-window-size';
import { useCursorVisibility } from '@/hooks/use-cursor-visibility';

// --- Components ---
import { ThemeToggle } from '@/components/tiptap-templates/simple/theme-toggle';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Button } from '@/components/tiptap-ui-primitive/button';
import { useEffect, useState } from 'react';

// --- Icons ---
import { MoonStarIcon } from '@/components/tiptap-icons/moon-star-icon';
import { SunIcon } from '@/components/tiptap-icons/sun-icon';
import { useEffect, useState } from 'react';
import { Button } from '@/components/tiptap-ui-primitive/button';

// --- Icons ---

export function ThemeToggle() {
const [isDarkMode, setIsDarkMode] = useState<boolean>(false);
Expand Down
1 change: 1 addition & 0 deletions apps/docs/src/components/tiptap-ui-primitive/card/card.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use client';

import { forwardRef } from 'react';

import { cn } from '@/lib/tiptap-utils';
import '@/components/tiptap-ui-primitive/card/card.scss';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { forwardRef } from 'react';
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
import { forwardRef } from 'react';

import { cn } from '@/lib/tiptap-utils';
import '@/components/tiptap-ui-primitive/dropdown-menu/dropdown-menu.scss';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as PopoverPrimitive from '@radix-ui/react-popover';

import { cn } from '@/lib/tiptap-utils';
import '@/components/tiptap-ui-primitive/popover/popover.scss';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { forwardRef } from 'react';

import '@/components/tiptap-ui-primitive/separator/separator.scss';
import { cn } from '@/lib/tiptap-utils';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';

import { Separator } from '@/components/tiptap-ui-primitive/separator';
import '@/components/tiptap-ui-primitive/toolbar/toolbar.scss';
import { cn } from '@/lib/tiptap-utils';
import { useMenuNavigation } from '@/hooks/use-menu-navigation';
import { useComposedRef } from '@/hooks/use-composed-ref';
import { useMenuNavigation } from '@/hooks/use-menu-navigation';
import { cn } from '@/lib/tiptap-utils';

type BaseProps = React.HTMLAttributes<HTMLDivElement>;

Expand Down
20 changes: 10 additions & 10 deletions apps/docs/src/components/tiptap-ui-primitive/tooltip/tooltip.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
'use client';

import {
cloneElement,
createContext,
forwardRef,
isValidElement,
useContext,
useMemo,
useState,
version,
} from 'react';
import {
useFloating,
autoUpdate,
Expand All @@ -28,6 +18,16 @@ import {
type ReferenceType,
FloatingDelayGroup,
} from '@floating-ui/react';
import {
cloneElement,
createContext,
forwardRef,
isValidElement,
useContext,
useMemo,
useState,
version,
} from 'react';
import '@/components/tiptap-ui-primitive/tooltip/tooltip.scss';

interface TooltipProviderProps {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
'use client';

import { forwardRef } from 'react';
import { Button } from '@/components/tiptap-ui-primitive/button';

import type { ButtonProps } from '@/components/tiptap-ui-primitive/button';

import { SparklesIcon } from '@/components/tiptap-icons/sparkles-icon';
import { Button } from '@/components/tiptap-ui-primitive/button';
import { useAiEditStore } from '@/stores/aiEditStore';
import { useEditorStore } from '@/stores/editorStore';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
'use client';

import { useState, type FormEvent } from 'react';
import { useAiEdit } from '@/hooks/useAiEdit';
import { useAiEditStore } from '@/stores/aiEditStore';
import { useEditorStore } from '@/stores/editorStore';

import { AiEditorButton } from '@/components/tiptap-ui/ai-editor-button';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/tiptap-ui-primitive/popover';
import { Button, ButtonGroup } from '@/components/tiptap-ui-primitive/button';
import { Input, InputGroup } from '@/components/tiptap-ui-primitive/input';
import { Card, CardBody, CardItemGroup } from '@/components/tiptap-ui-primitive/card';
import { Input, InputGroup } from '@/components/tiptap-ui-primitive/input';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/tiptap-ui-primitive/popover';
import { useAiEdit } from '@/hooks/useAiEdit';
import { useAiEditStore } from '@/stores/aiEditStore';
import { useEditorStore } from '@/stores/editorStore';

export interface AiEditorPopoverProps {
documentId: string;
Expand Down
Loading
Loading