- Non-Markdown strings are imported as fenced code blocks so the resulting document stays readable in Writer.
-
-
+
+
+
+
+
+
+
+
+ Non-Markdown strings are imported as fenced code blocks so the resulting document stays readable in Writer.
+
+
+
+
);
diff --git a/src/components/ContextMenu/ContextMenu.tsx b/src/components/ContextMenu/ContextMenu.tsx
index 58f9f17..84a5891 100644
--- a/src/components/ContextMenu/ContextMenu.tsx
+++ b/src/components/ContextMenu/ContextMenu.tsx
@@ -4,7 +4,7 @@ import { useSkipAnimation } from "$hooks/useMotion";
import { useViewportTier } from "$hooks/useViewportTier";
import { cn } from "$utils/tw";
import { AnimatePresence, motion } from "motion/react";
-import { type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from "react";
+import { type ReactNode, type RefObject, useCallback, useEffect, useMemo, useRef, useState } from "react";
const CONTEXT_MENU_INITIAL = { opacity: 0, scale: 0.96 };
const CONTEXT_MENU_ANIMATE = { opacity: 1, scale: 1 };
@@ -32,6 +32,7 @@ export type ContextMenuProps = {
position: { x: number; y: number };
onClose: () => void;
items: MenuItem[];
+ anchorRef?: RefObject
;
};
function ContextMenuItem_({ item, onClose }: { item: ContextMenuItem; onClose: () => void }) {
@@ -120,13 +121,15 @@ function ContextMenuContent(
);
}
-export function ContextMenu({ isOpen, position, onClose, items }: ContextMenuProps) {
+export function ContextMenu({ isOpen, position, onClose, items, anchorRef }: ContextMenuProps) {
useEffect(() => {
if (!isOpen) return;
const handleClickOutside = (e: MouseEvent | TouchEvent) => {
const target = e.target;
+ if (!(target instanceof Node)) return;
if (target instanceof HTMLElement && target.closest("[role=\"menu\"]")) return;
+ if (anchorRef?.current?.contains(target)) return;
onClose();
};
@@ -137,7 +140,7 @@ export function ContextMenu({ isOpen, position, onClose, items }: ContextMenuPro
document.removeEventListener("click", handleClickOutside);
document.removeEventListener("contextmenu", handleClickOutside);
};
- }, [isOpen, onClose]);
+ }, [anchorRef, isOpen, onClose]);
return (
diff --git a/src/components/Toolbar/Toolbar.tsx b/src/components/Toolbar/Toolbar.tsx
index d56bfc9..9950ff5 100644
--- a/src/components/Toolbar/Toolbar.tsx
+++ b/src/components/Toolbar/Toolbar.tsx
@@ -2,11 +2,12 @@ import { useViewportTier } from "$hooks/useViewportTier";
import type { IconSize } from "$icons";
import {
AtSignIcon,
+ CheckIcon,
DocumentIcon,
EyeIcon,
- FileTextIcon,
FocusIcon,
IconProps,
+ PenIcon,
PlusIcon,
RefreshIcon,
SaveIcon,
@@ -19,6 +20,7 @@ import { formatShortcut } from "$utils/shortcuts";
import { useCallback, useMemo } from "react";
import { SaveStatusIndicator } from "./SaveStatusIndicator";
import { ToolbarButton } from "./ToolbarButton";
+import { ToolbarDropdown } from "./ToolbarDropdown";
export type ToolbarProps = {
saveStatus: SaveStatus;
@@ -34,17 +36,7 @@ export type ToolbarProps = {
onRefresh?: () => void;
};
-function SettingsToolbarButton(
- { icon, iconOnly }: { icon: { Component: React.ComponentType; size: IconSize }; iconOnly: boolean },
-) {
- const { setOpen } = useLayoutSettingsUiState();
-
- const handleOpenSettings = useCallback(() => {
- setOpen(true);
- }, [setOpen]);
-
- return ;
-}
+const CHECK_ICON = ;
export function Toolbar(
{
@@ -70,13 +62,15 @@ export function Toolbar(
toggleFocusMode,
togglePreviewVisible,
} = useToolbarState();
+ const { setOpen: openSettings } = useLayoutSettingsUiState();
const { viewportWidth, isCompact, isNarrow } = useViewportTier();
+
const icons: Record; size: IconSize }> = useMemo(
() => ({
save: { Component: SaveIcon, size: "sm" },
newDoc: { Component: PlusIcon, size: "sm" },
refresh: { Component: RefreshIcon, size: "sm" },
- editor: { Component: FileTextIcon, size: "sm" },
+ editor: { Component: PenIcon, size: "sm" },
splitView: { Component: SplitViewIcon, size: "sm" },
eye: { Component: EyeIcon, size: "sm" },
focus: { Component: FocusIcon, size: "sm" },
@@ -91,6 +85,54 @@ export function Toolbar(
const compactStatus = useMemo(() => viewportWidth < 960, [viewportWidth]);
const isEditorOnly = useMemo(() => !isSplitView && !isPreviewVisible, [isSplitView, isPreviewVisible]);
+ const currentViewIcon = useMemo(() => {
+ if (isFocusMode) return icons.focus;
+ if (isSplitView) return icons.splitView;
+ if (isPreviewVisible) return icons.eye;
+ return icons.editor;
+ }, [isFocusMode, isSplitView, isPreviewVisible, icons]);
+
+ const handleOpenSettings = useCallback(() => openSettings(true), [openSettings]);
+
+ const viewModeItems = useMemo(
+ () => [
+ { label: "Editor", onClick: setEditorOnlyMode, icon: isEditorOnly && !isFocusMode ? CHECK_ICON : undefined },
+ { label: "Split", onClick: toggleSplitView, icon: isSplitView ? CHECK_ICON : undefined },
+ { label: "Preview", onClick: togglePreviewVisible, icon: isPreviewVisible ? CHECK_ICON : undefined },
+ { divider: true as const },
+ { label: "Focus", onClick: toggleFocusMode, icon: isFocusMode ? CHECK_ICON : undefined },
+ ],
+ [
+ isEditorOnly,
+ isFocusMode,
+ isSplitView,
+ isPreviewVisible,
+ setEditorOnlyMode,
+ toggleSplitView,
+ togglePreviewVisible,
+ toggleFocusMode,
+ ],
+ );
+
+ const toolsItems = useMemo(() => {
+ const items: Parameters[0]["items"] = [{
+ label: atProtoSession ? atProtoSession.handle : "Login to AT Proto",
+ onClick: onAtProtoAuth,
+ icon: ,
+ }];
+ if (onExportPdf) {
+ items.push({
+ label: isExportingPdf ? "Exporting..." : "Export PDF",
+ onClick: onExportPdf ?? (() => {}),
+ disabled: isExportingPdf || isPdfExportDisabled,
+ icon: ,
+ });
+ }
+ items.push({ divider: true as const });
+ items.push({ label: "Settings", onClick: handleOpenSettings, icon: });
+ return items;
+ }, [atProtoSession, onAtProtoAuth, onExportPdf, isExportingPdf, isPdfExportDisabled, handleOpenSettings]);
+
return (
@@ -117,52 +159,8 @@ export function Toolbar(
-
-
-
-
-
-
-
-
-
-
-
- {onExportPdf && (
-
- )}
-
+
+
);
diff --git a/src/components/Toolbar/ToolbarDropdown.tsx b/src/components/Toolbar/ToolbarDropdown.tsx
new file mode 100644
index 0000000..77da454
--- /dev/null
+++ b/src/components/Toolbar/ToolbarDropdown.tsx
@@ -0,0 +1,47 @@
+import { Button } from "$components/Button";
+import { ContextMenu, type ContextMenuDivider, type ContextMenuItem } from "$components/ContextMenu/ContextMenu";
+import type { IconProps, IconSize } from "$icons";
+import { useCallback, useRef, useState } from "react";
+
+type MenuItem = ContextMenuItem | ContextMenuDivider;
+
+export function ToolbarDropdown(
+ { icon, label, items, iconOnly = false }: {
+ icon: { Component: React.ComponentType; size: IconSize };
+ label: string;
+ items: MenuItem[];
+ iconOnly?: boolean;
+ },
+) {
+ const wrapperRef = useRef(null);
+ const [isOpen, setIsOpen] = useState(false);
+ const [position, setPosition] = useState({ x: 0, y: 0 });
+
+ const handleClick = useCallback(() => {
+ if (!wrapperRef.current) return;
+ const rect = wrapperRef.current.getBoundingClientRect();
+ setPosition({ x: rect.left, y: rect.bottom + 4 });
+ setIsOpen((prev) => !prev);
+ }, []);
+
+ const handleClose = useCallback(() => setIsOpen(false), []);
+
+ return (
+
+
+
+
+ );
+}
diff --git a/src/components/file-icon.tsx b/src/components/file-icon.tsx
index f711377..64ad76f 100644
--- a/src/components/file-icon.tsx
+++ b/src/components/file-icon.tsx
@@ -5,9 +5,7 @@ export function getRecordIconClass(filename: string): string {
switch (extension) {
case "py":
return "i-fluent-document-py-16-filled";
- case "md":
- case "markdown":
- return "i-fluent-document-text-16-filled";
+
case "js":
return "i-fluent-document-javascript-16-filled";
case "ts":
@@ -27,6 +25,33 @@ export function getRecordIconClass(filename: string): string {
return "i-fluent-document-fs-16-filled";
case "cs":
return "i-fluent-document-cs-16-filled";
+ case "md":
+ case "markdown":
+ return "i-bi-filetype-md";
+ case "rb":
+ return "i-bi-filetype-rb";
+ case "sh":
+ return "i-bi-filetype-sh";
+ case "tsx":
+ return "i-bi-filetype-tsx";
+ case "jsx":
+ return "i-bi-filetype-jsx";
+ case "txt":
+ return "i-bi-filetype-txt";
+ case "php":
+ return "i-bi-filetype-php";
+ case "mdx":
+ return "i-bi-filetype-mdx";
+ case "html":
+ return "i-bi-filetype-html";
+ case "sql":
+ return "i-bi-filetype-sql";
+ case "json":
+ return "i-bi-filetype-json";
+ case "xml":
+ return "i-bi-filetype-xml";
+ case "svg":
+ return "i-bi-filetype-svg";
default:
return "i-fluent-document-16-filled";
}
diff --git a/www/src/static/images/tangled-import.png b/www/src/static/images/tangled-import.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f4897f0e1c7a64514228cac2e33e62e9674c190
GIT binary patch
literal 911345
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