@connextar/house 0.20.0 → 0.21.0
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/README.md +12 -0
- package/dist/editor/block-handle.d.ts +15 -7
- package/dist/editor/block-handle.d.ts.map +1 -1
- package/dist/editor/block-handle.js +83 -10
- package/dist/editor/block-handle.js.map +1 -1
- package/dist/editor/bubble-toolbar.d.ts.map +1 -1
- package/dist/editor/bubble-toolbar.js +8 -1
- package/dist/editor/bubble-toolbar.js.map +1 -1
- package/dist/editor/collapsible.d.ts +31 -0
- package/dist/editor/collapsible.d.ts.map +1 -0
- package/dist/editor/collapsible.js +123 -0
- package/dist/editor/collapsible.js.map +1 -0
- package/dist/editor/content.d.ts +3 -1
- package/dist/editor/content.d.ts.map +1 -1
- package/dist/editor/content.js +15 -2
- package/dist/editor/content.js.map +1 -1
- package/dist/editor/editor.d.ts +15 -2
- package/dist/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +57 -1
- package/dist/editor/editor.js.map +1 -1
- package/dist/editor/sections.d.ts +37 -0
- package/dist/editor/sections.d.ts.map +1 -0
- package/dist/editor/sections.js +85 -0
- package/dist/editor/sections.js.map +1 -0
- package/dist/editor/ui.d.ts +3 -1
- package/dist/editor/ui.d.ts.map +1 -1
- package/dist/editor/ui.js +2 -2
- package/dist/editor/ui.js.map +1 -1
- package/dist/house.css +52 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1646,6 +1646,18 @@ app knows what its people, records and tags are. **Storage is plain Markdown wit
|
|
|
1646
1646
|
no new node types** — a reference is `[@Ann Lee](/people/1)` — so every existing
|
|
1647
1647
|
text column keeps working and a server can read mentions with a regex.
|
|
1648
1648
|
|
|
1649
|
+
**Sections** (0.21.0). A heading carries everything under it — up to the next heading of its level or higher, a
|
|
1650
|
+
divider or an empty block (`sections.ts`). Dragging a heading by its grip, or **Move section up / down**, moves the
|
|
1651
|
+
whole section, past whole sections; the chevron beside a heading (or **Collapse section** in its menu) folds the
|
|
1652
|
+
section away behind a "Show N more" pill. Folding is a view, never stored, and a caret that lands inside a folded part
|
|
1653
|
+
opens it again. The grip is the drag source only: its menu opens on click from an anchor beside it, because a menu
|
|
1654
|
+
trigger cancels the pointer-down a drag needs.
|
|
1655
|
+
|
|
1656
|
+
**Images** (0.21.0). Pass `onImageFiles(files)` and images can be pasted or dropped in: the app stores each file and
|
|
1657
|
+
answers where it is shown, and the editor writes ``. Only same-site paths are ever drawn — in the editor
|
|
1658
|
+
and in `RichTextContent` (`imageSrc`) — so text can't load an outside address and tell its owner who read it, and
|
|
1659
|
+
when. Without `onImageFiles`, pasted images are ignored as before.
|
|
1660
|
+
|
|
1649
1661
|
`RichTextContent` (from `/editor/content`) is the read-only side: Markdown to
|
|
1650
1662
|
React with no HTML, an allow-list of link schemes, and bounded patterns, safe for
|
|
1651
1663
|
text a stranger wrote. `EmojiPicker` and the curated set of ~360 emoji are in
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Editor } from "@tiptap/react";
|
|
2
2
|
/**
|
|
3
3
|
* The gutter beside whichever block the pointer is over: a `+` that starts a new
|
|
4
|
-
* block underneath (with the `/` menu already open, as Notion does)
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* block underneath (with the `/` menu already open, as Notion does), a grip that
|
|
5
|
+
* drags the block to reorder it or, clicked, opens the block menu — turn into,
|
|
6
|
+
* duplicate, move up, move down, delete — and, beside a heading, a chevron that
|
|
7
|
+
* collapses or expands its section.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* A heading carries its section: dragging it, or moving it up or down, takes
|
|
10
|
+
* everything under it along (sections.ts). Everything works on the block's
|
|
11
|
+
* document position rather than the caret, so a block can be acted on without
|
|
12
|
+
* ever being clicked into. The drag itself is the extension's: it understands
|
|
13
|
+
* nested lists and shows the drop cursor.
|
|
14
|
+
*
|
|
15
|
+
* The grip is the drag source, so it must not be the menu's trigger: a menu
|
|
16
|
+
* trigger opens on pointer-down and cancels it, and a cancelled pointer-down
|
|
17
|
+
* never starts a drag. The menu opens on click instead, anchored to a still
|
|
18
|
+
* element beside the grip.
|
|
11
19
|
*/
|
|
12
20
|
export declare function BlockHandle({ editor }: {
|
|
13
21
|
editor: Editor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-handle.d.ts","sourceRoot":"","sources":["../../src/editor/block-handle.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"block-handle.d.ts","sourceRoot":"","sources":["../../src/editor/block-handle.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,eAAe,CAAC;AAqC5D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,+BA2PzD"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { DragHandle } from "@tiptap/extension-drag-handle-react";
|
|
4
|
-
import {
|
|
4
|
+
import { TextSelection } from "@tiptap/pm/state";
|
|
5
|
+
import { useEditorState } from "@tiptap/react";
|
|
6
|
+
import { ArrowDown, ArrowUp, Check, ChevronDown, ChevronRight, Copy, GripVertical, Plus, Trash2 } from "lucide-react";
|
|
5
7
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
6
8
|
import { BLOCK_TYPES } from "./blocks.js";
|
|
9
|
+
import { collapseKey } from "./collapsible.js";
|
|
10
|
+
import { childIndexAt, neighbourUnit, positionOfChild, sectionEnd, sectionRange } from "./sections.js";
|
|
7
11
|
import { ghostButtonClass, Menu, MenuContent, MenuItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, } from "./ui.js";
|
|
8
12
|
/**
|
|
9
13
|
* Stable on purpose: the DragHandle wrapper re-registers its plugin when this
|
|
@@ -12,23 +16,38 @@ import { ghostButtonClass, Menu, MenuContent, MenuItem, MenuSeparator, MenuSub,
|
|
|
12
16
|
*/
|
|
13
17
|
const HANDLE_POSITION = { placement: "left-start" };
|
|
14
18
|
const handleButtonClass = `${ghostButtonClass} size-6 p-0 text-muted-foreground hover:text-foreground`;
|
|
19
|
+
/** A top-level heading: the start of a section (sections.ts). */
|
|
20
|
+
const isSectionHeading = (editor, block) => block.node.type.name === "heading" && childIndexAt(editor.state.doc, block.pos) !== null;
|
|
15
21
|
/**
|
|
16
22
|
* The gutter beside whichever block the pointer is over: a `+` that starts a new
|
|
17
|
-
* block underneath (with the `/` menu already open, as Notion does)
|
|
18
|
-
*
|
|
19
|
-
*
|
|
23
|
+
* block underneath (with the `/` menu already open, as Notion does), a grip that
|
|
24
|
+
* drags the block to reorder it or, clicked, opens the block menu — turn into,
|
|
25
|
+
* duplicate, move up, move down, delete — and, beside a heading, a chevron that
|
|
26
|
+
* collapses or expands its section.
|
|
20
27
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
28
|
+
* A heading carries its section: dragging it, or moving it up or down, takes
|
|
29
|
+
* everything under it along (sections.ts). Everything works on the block's
|
|
30
|
+
* document position rather than the caret, so a block can be acted on without
|
|
31
|
+
* ever being clicked into. The drag itself is the extension's: it understands
|
|
32
|
+
* nested lists and shows the drop cursor.
|
|
33
|
+
*
|
|
34
|
+
* The grip is the drag source, so it must not be the menu's trigger: a menu
|
|
35
|
+
* trigger opens on pointer-down and cancels it, and a cancelled pointer-down
|
|
36
|
+
* never starts a drag. The menu opens on click instead, anchored to a still
|
|
37
|
+
* element beside the grip.
|
|
24
38
|
*/
|
|
25
39
|
export function BlockHandle({ editor }) {
|
|
26
40
|
const [hovered, setHovered] = useState(null);
|
|
27
41
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
28
42
|
const menuOpenRef = useRef(false);
|
|
43
|
+
const hoveredRef = useRef(null);
|
|
44
|
+
const gripRef = useRef(null);
|
|
29
45
|
useEffect(() => {
|
|
30
46
|
menuOpenRef.current = menuOpen;
|
|
31
47
|
}, [menuOpen]);
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
hoveredRef.current = hovered;
|
|
50
|
+
}, [hovered]);
|
|
32
51
|
// Leave the last block in place while its menu is open, so the menu still
|
|
33
52
|
// knows what it belongs to after the pointer wanders. Stable identity for the
|
|
34
53
|
// same reason as HANDLE_POSITION.
|
|
@@ -37,6 +56,18 @@ export function BlockHandle({ editor }) {
|
|
|
37
56
|
return;
|
|
38
57
|
setHovered(node ? { node, pos } : null);
|
|
39
58
|
}, []);
|
|
59
|
+
// A heading's drag takes its section: select the whole section first, and the
|
|
60
|
+
// extension drags a selection that covers the grip's block as one piece.
|
|
61
|
+
const onElementDragStart = useCallback(() => {
|
|
62
|
+
const block = hoveredRef.current;
|
|
63
|
+
if (!block || block.node.type.name !== "heading")
|
|
64
|
+
return;
|
|
65
|
+
const range = sectionRange(editor.state.doc, block.pos);
|
|
66
|
+
if (!range || range.blocks < 2)
|
|
67
|
+
return;
|
|
68
|
+
const { doc, tr } = editor.state;
|
|
69
|
+
editor.view.dispatch(tr.setSelection(TextSelection.between(doc.resolve(range.from + 1), doc.resolve(range.to - 1))));
|
|
70
|
+
}, [editor]);
|
|
40
71
|
const range = (block) => ({ from: block.pos, to: block.pos + block.node.nodeSize });
|
|
41
72
|
/** Turn the whole block into another type, without moving the caret by hand. */
|
|
42
73
|
const turnInto = (block, typeId) => {
|
|
@@ -57,9 +88,38 @@ export function BlockHandle({ editor }) {
|
|
|
57
88
|
const remove = (block) => {
|
|
58
89
|
editor.chain().focus().deleteRange(range(block)).run();
|
|
59
90
|
};
|
|
60
|
-
/**
|
|
91
|
+
/**
|
|
92
|
+
* Move the block up (-1) or down (+1) past its neighbour. At the top of the
|
|
93
|
+
* document a heading moves with its section, past whole sections; inside a
|
|
94
|
+
* list or quote, a block swaps with its sibling.
|
|
95
|
+
*/
|
|
61
96
|
const move = (block, direction) => {
|
|
62
|
-
const
|
|
97
|
+
const { doc } = editor.state;
|
|
98
|
+
const index = childIndexAt(doc, block.pos);
|
|
99
|
+
if (index !== null) {
|
|
100
|
+
const end = sectionEnd(doc, index);
|
|
101
|
+
const other = neighbourUnit(doc, index, end, direction);
|
|
102
|
+
if (!other)
|
|
103
|
+
return;
|
|
104
|
+
const [first, last] = direction === 1 ? [[index, end], other] : [other, [index, end]];
|
|
105
|
+
const from = positionOfChild(doc, first[0]);
|
|
106
|
+
const middle = positionOfChild(doc, last[0]);
|
|
107
|
+
const to = positionOfChild(doc, last[1]);
|
|
108
|
+
const upper = doc.slice(from, middle);
|
|
109
|
+
const lower = doc.slice(middle, to);
|
|
110
|
+
editor
|
|
111
|
+
.chain()
|
|
112
|
+
.focus()
|
|
113
|
+
.command(({ tr }) => {
|
|
114
|
+
// Swap the two runs of blocks: [first][last] becomes [last][first].
|
|
115
|
+
tr.replaceRange(from, to, lower);
|
|
116
|
+
tr.insert(from + lower.size, upper.content);
|
|
117
|
+
return true;
|
|
118
|
+
})
|
|
119
|
+
.run();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const $pos = doc.resolve(block.pos);
|
|
63
123
|
const parent = $pos.parent;
|
|
64
124
|
const siblingIndex = $pos.index() + direction;
|
|
65
125
|
if (siblingIndex < 0 || siblingIndex >= parent.childCount)
|
|
@@ -77,6 +137,7 @@ export function BlockHandle({ editor }) {
|
|
|
77
137
|
})
|
|
78
138
|
.run();
|
|
79
139
|
};
|
|
140
|
+
const toggleSection = (block) => editor.chain().focus().toggleSection(block.pos).run();
|
|
80
141
|
/**
|
|
81
142
|
* The `+`: a fresh paragraph under this block with the `/` menu open — or, if
|
|
82
143
|
* this block is already an empty paragraph, just the menu, right here.
|
|
@@ -101,6 +162,18 @@ export function BlockHandle({ editor }) {
|
|
|
101
162
|
.insertContent("/")
|
|
102
163
|
.run();
|
|
103
164
|
};
|
|
104
|
-
|
|
165
|
+
// Re-render when a section folds or opens, wherever that happened (the pill, the menu, a caret).
|
|
166
|
+
const collapsedAt = useEditorState({
|
|
167
|
+
editor,
|
|
168
|
+
selector: ({ editor: current }) => collapseKey.getState(current.state)?.collapsed.join(",") ?? "",
|
|
169
|
+
}) ?? "";
|
|
170
|
+
const heading = hovered && isSectionHeading(editor, hovered) ? hovered : null;
|
|
171
|
+
const collapsed = heading ? collapsedAt.split(",").includes(String(heading.pos)) : false;
|
|
172
|
+
const canCollapse = heading ? (sectionRange(editor.state.doc, heading.pos)?.blocks ?? 1) > 1 || collapsed : false;
|
|
173
|
+
return (_jsxs(DragHandle, { editor: editor, nested: true, className: "house-block-handle", computePositionConfig: HANDLE_POSITION, onNodeChange: onNodeChange, onElementDragStart: onElementDragStart, children: [heading && canCollapse ? (_jsx("button", { type: "button", className: handleButtonClass, "aria-label": collapsed ? "Expand section" : "Collapse section", "aria-expanded": !collapsed, title: collapsed ? "Expand section" : "Collapse section", onClick: () => toggleSection(heading), children: collapsed ? _jsx(ChevronRight, { className: "size-4", "aria-hidden": true }) : _jsx(ChevronDown, { className: "size-4", "aria-hidden": true }) })) : (_jsx("span", { className: "inline-block size-6", "aria-hidden": true })), _jsx("button", { type: "button", className: handleButtonClass, "aria-label": "Add a block below", title: "Add a block below", onClick: () => hovered && insertBelow(hovered), children: _jsx(Plus, { className: "size-4", "aria-hidden": true }) }), _jsxs(Menu, { open: menuOpen, onOpenChange: setMenuOpen, children: [_jsxs("span", { className: "relative inline-flex", children: [_jsx("button", { ref: gripRef, type: "button", className: `${handleButtonClass} cursor-grab active:cursor-grabbing`, "aria-label": heading ? "Section options — drag to move the section" : "Block options — drag to move", "aria-haspopup": "menu", "aria-expanded": menuOpen, title: heading ? "Drag to move the section, click for options" : "Drag to move, click for options", onClick: () => setMenuOpen(true), children: _jsx(GripVertical, { className: "size-4", "aria-hidden": true }) }), _jsx(MenuTrigger, { asChild: true, children: _jsx("span", { "aria-hidden": true, className: "pointer-events-none absolute inset-0", tabIndex: -1 }) })] }), _jsxs(MenuContent, { className: "w-52", onCloseAutoFocus: (event) => {
|
|
174
|
+
// Back to the grip, not the invisible anchor.
|
|
175
|
+
event.preventDefault();
|
|
176
|
+
gripRef.current?.focus();
|
|
177
|
+
}, children: [_jsxs(MenuSub, { children: [_jsx(MenuSubTrigger, { children: "Turn into" }), _jsx(MenuSubContent, { className: "w-48", children: BLOCK_TYPES.map((type) => (_jsxs(MenuItem, { onSelect: () => hovered && turnInto(hovered, type.id), children: [_jsx(type.icon, { className: "size-4", "aria-hidden": true }), _jsx("span", { className: "flex-1", children: type.label }), hovered && type.matchesNode(hovered.node) ? (_jsx(Check, { className: "size-4 text-primary", "aria-hidden": true })) : null] }, type.id))) })] }), heading && canCollapse ? (_jsxs(MenuItem, { onSelect: () => toggleSection(heading), children: [collapsed ? (_jsx(ChevronRight, { className: "size-4", "aria-hidden": true })) : (_jsx(ChevronDown, { className: "size-4", "aria-hidden": true })), collapsed ? "Expand section" : "Collapse section"] })) : null, _jsxs(MenuItem, { onSelect: () => hovered && duplicate(hovered), children: [_jsx(Copy, { className: "size-4", "aria-hidden": true }), "Duplicate"] }), _jsxs(MenuItem, { onSelect: () => hovered && move(hovered, -1), children: [_jsx(ArrowUp, { className: "size-4", "aria-hidden": true }), heading ? "Move section up" : "Move up"] }), _jsxs(MenuItem, { onSelect: () => hovered && move(hovered, 1), children: [_jsx(ArrowDown, { className: "size-4", "aria-hidden": true }), heading ? "Move section down" : "Move down"] }), _jsx(MenuSeparator, {}), _jsxs(MenuItem, { className: "text-destructive focus:text-destructive", onSelect: () => hovered && remove(hovered), children: [_jsx(Trash2, { className: "size-4", "aria-hidden": true }), "Delete"] })] })] })] }));
|
|
105
178
|
}
|
|
106
179
|
//# sourceMappingURL=block-handle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-handle.js","sourceRoot":"","sources":["../../src/editor/block-handle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"block-handle.js","sourceRoot":"","sources":["../../src/editor/block-handle.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubble-toolbar.d.ts","sourceRoot":"","sources":["../../src/editor/bubble-toolbar.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAyC5D;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"bubble-toolbar.d.ts","sourceRoot":"","sources":["../../src/editor/bubble-toolbar.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAyC5D;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,sCA0E3D"}
|
|
@@ -50,7 +50,14 @@ export function BubbleToolbar({ editor }) {
|
|
|
50
50
|
return null;
|
|
51
51
|
const chain = () => editor.chain().focus();
|
|
52
52
|
const BlockIcon = state.block.icon;
|
|
53
|
-
return (_jsxs(BubbleMenu, { editor: editor, pluginKey: "houseFormattingBubble", updateDelay: 120, options: BUBBLE_OPTIONS, shouldShow: shouldShowBubble, className: "house-bubble-menu flex items-center gap-0.5 rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md", children: [_jsxs(Menu, { children: [_jsx(MenuTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: `${ghostButtonClass} h-8 px-2 text-xs`,
|
|
53
|
+
return (_jsxs(BubbleMenu, { editor: editor, pluginKey: "houseFormattingBubble", updateDelay: 120, options: BUBBLE_OPTIONS, shouldShow: shouldShowBubble, className: "house-bubble-menu flex items-center gap-0.5 rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md", children: [_jsxs(Menu, { children: [_jsx(MenuTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: `${ghostButtonClass} h-8 px-2 text-xs`,
|
|
54
|
+
// The bubble hides itself when the editor loses focus — unless the press was on the bubble, which it learns
|
|
55
|
+
// from a mousedown. The menu opens on pointer-down and cancels that mousedown, then takes focus; the bubble
|
|
56
|
+
// hid, taking the trigger out of the page, and the menu lost its anchor and opened at the top-left of the
|
|
57
|
+
// screen. So the press is reported to the bubble here, before the menu takes focus.
|
|
58
|
+
onPointerDown: (event) => {
|
|
59
|
+
event.currentTarget.dispatchEvent(new MouseEvent("mousedown", { bubbles: true }));
|
|
60
|
+
}, children: [_jsx(BlockIcon, { className: "size-4", "aria-hidden": true }), state.block.label, _jsx(ChevronDown, { className: "size-3.5 opacity-60", "aria-hidden": true })] }) }), _jsxs(MenuContent, { className: "w-52", children: [_jsx(MenuLabel, { children: "Turn into" }), BLOCK_TYPES.map((type) => (_jsxs(MenuItem, { onSelect: () => void type.apply(chain()).run(), children: [_jsx(type.icon, { className: "size-4", "aria-hidden": true }), _jsx("span", { className: "flex-1", children: type.label }), type.id === state.block.id ? _jsx(Check, { className: "size-4 text-primary", "aria-hidden": true }) : null] }, type.id)))] })] }), _jsx(VerticalSeparator, {}), _jsx(MarkToggle, { label: "Bold", pressed: state.bold, onToggle: () => chain().toggleBold().run(), children: _jsx(Bold, { className: "size-4" }) }), _jsx(MarkToggle, { label: "Italic", pressed: state.italic, onToggle: () => chain().toggleItalic().run(), children: _jsx(Italic, { className: "size-4" }) }), _jsx(MarkToggle, { label: "Strikethrough", pressed: state.strike, onToggle: () => chain().toggleStrike().run(), children: _jsx(Strikethrough, { className: "size-4" }) }), _jsx(MarkToggle, { label: "Inline code", pressed: state.code, onToggle: () => chain().toggleCode().run(), children: _jsx(Code, { className: "size-4" }) }), _jsx(LinkControl, { editor: editor, active: state.link, href: state.linkHref })] }));
|
|
54
61
|
}
|
|
55
62
|
function MarkToggle({ label, pressed, onToggle, children, }) {
|
|
56
63
|
return (_jsx(IconButton, { "aria-label": label, title: label, pressed: pressed, onClick: onToggle, children: children }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubble-toolbar.js","sourceRoot":"","sources":["../../src/editor/bubble-toolbar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAe,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAwB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,SAAS,EACT,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,EAAE,SAAS,EAAE,KAAc,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAEhE;iFACiF;AACjF,MAAM,gBAAgB,GAA+C,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;IAC/G,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC,CAAC,SAAS,YAAY,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,EAAsB;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,MAAM;QACN,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAClC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9B,QAAQ,EAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAA2B,IAAI,EAAE;YAC1E,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;SAChC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAEnC,OAAO,CACL,MAAC,UAAU,IACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAC,uBAAuB,EACjC,WAAW,EAAE,GAAG,EAChB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAC,8HAA8H,aAExI,MAAC,IAAI,eACH,KAAC,WAAW,IAAC,OAAO,kBAClB,
|
|
1
|
+
{"version":3,"file":"bubble-toolbar.js","sourceRoot":"","sources":["../../src/editor/bubble-toolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Extension } from "@tiptap/core";
|
|
2
|
+
import type { EditorState } from "@tiptap/pm/state";
|
|
3
|
+
import { PluginKey } from "@tiptap/pm/state";
|
|
4
|
+
/**
|
|
5
|
+
* Collapsing a heading folds its section away (sections.ts): what's under it is
|
|
6
|
+
* hidden, and a "Show N more" pill at the end of the heading says how much. It
|
|
7
|
+
* is a view of the document, never part of it — nothing is written to the
|
|
8
|
+
* stored Markdown, and a fresh editor opens with everything showing.
|
|
9
|
+
*
|
|
10
|
+
* A caret that lands inside a hidden part (a search, an undo, Enter at the end
|
|
11
|
+
* of a collapsed heading) opens that section again, so nothing is ever typed
|
|
12
|
+
* where it can't be seen.
|
|
13
|
+
*/
|
|
14
|
+
interface CollapseState {
|
|
15
|
+
/** Positions of collapsed headings, kept current as the document changes. */
|
|
16
|
+
collapsed: number[];
|
|
17
|
+
}
|
|
18
|
+
export declare const collapseKey: PluginKey<CollapseState>;
|
|
19
|
+
declare module "@tiptap/core" {
|
|
20
|
+
interface Commands<ReturnType> {
|
|
21
|
+
houseCollapsible: {
|
|
22
|
+
/** Collapse the section of the heading at `pos`, or expand it if it is collapsed. */
|
|
23
|
+
toggleSection: (pos: number) => ReturnType;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Whether the heading at `pos` is collapsed. */
|
|
28
|
+
export declare function isSectionCollapsed(state: EditorState, pos: number): boolean;
|
|
29
|
+
export declare const Collapsible: Extension<any, any>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=collapsible.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../src/editor/collapsible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAU,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAKpE;;;;;;;;;GASG;AAEH,UAAU,aAAa;IACrB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,eAAO,MAAM,WAAW,0BAAyD,CAAC;AAElF,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,gBAAgB,EAAE;YAChB,qFAAqF;YACrF,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,CAAC;SAC5C,CAAC;KACH;CACF;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3E;AAiCD,eAAO,MAAM,WAAW,qBAsFtB,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Extension } from "@tiptap/core";
|
|
2
|
+
import { Plugin, PluginKey, TextSelection } from "@tiptap/pm/state";
|
|
3
|
+
import { Decoration, DecorationSet } from "@tiptap/pm/view";
|
|
4
|
+
import { childIndexAt, sectionRange } from "./sections.js";
|
|
5
|
+
export const collapseKey = new PluginKey("houseCollapsedSections");
|
|
6
|
+
/** Whether the heading at `pos` is collapsed. */
|
|
7
|
+
export function isSectionCollapsed(state, pos) {
|
|
8
|
+
return collapseKey.getState(state)?.collapsed.includes(pos) ?? false;
|
|
9
|
+
}
|
|
10
|
+
/** The hidden part of each collapsed section: [from, to) positions, keyed by the heading's position. */
|
|
11
|
+
function hiddenRanges(state) {
|
|
12
|
+
const out = [];
|
|
13
|
+
for (const pos of collapseKey.getState(state)?.collapsed ?? []) {
|
|
14
|
+
const range = sectionRange(state.doc, pos);
|
|
15
|
+
const heading = state.doc.nodeAt(pos);
|
|
16
|
+
if (!range || !heading || range.blocks < 2)
|
|
17
|
+
continue;
|
|
18
|
+
out.push({ heading: pos, from: pos + heading.nodeSize, to: range.to });
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
function pill(view, getPos, hidden) {
|
|
23
|
+
const button = document.createElement("button");
|
|
24
|
+
button.type = "button";
|
|
25
|
+
button.className = "house-section-more";
|
|
26
|
+
button.contentEditable = "false";
|
|
27
|
+
button.textContent = `Show ${hidden} more`;
|
|
28
|
+
button.setAttribute("aria-label", `Expand the section: ${hidden} hidden ${hidden === 1 ? "block" : "blocks"}`);
|
|
29
|
+
// Keep the caret where it is; the click does the work.
|
|
30
|
+
button.addEventListener("mousedown", (event) => event.preventDefault());
|
|
31
|
+
button.addEventListener("click", (event) => {
|
|
32
|
+
event.preventDefault();
|
|
33
|
+
const at = getPos();
|
|
34
|
+
if (at === undefined)
|
|
35
|
+
return;
|
|
36
|
+
const heading = view.state.doc.resolve(at).before(1);
|
|
37
|
+
view.dispatch(view.state.tr.setMeta(collapseKey, { expand: heading }));
|
|
38
|
+
});
|
|
39
|
+
return button;
|
|
40
|
+
}
|
|
41
|
+
export const Collapsible = Extension.create({
|
|
42
|
+
name: "houseCollapsible",
|
|
43
|
+
addCommands() {
|
|
44
|
+
return {
|
|
45
|
+
toggleSection: (pos) => ({ tr, state, dispatch }) => {
|
|
46
|
+
const heading = tr.doc.nodeAt(pos);
|
|
47
|
+
if (childIndexAt(tr.doc, pos) === null || heading?.type.name !== "heading")
|
|
48
|
+
return false;
|
|
49
|
+
if (dispatch) {
|
|
50
|
+
tr.setMeta(collapseKey, { toggle: pos });
|
|
51
|
+
// Folding away the part the caret is in would open it again at once: the caret goes to the heading.
|
|
52
|
+
const range = sectionRange(tr.doc, pos);
|
|
53
|
+
const head = tr.selection.head;
|
|
54
|
+
if (!isSectionCollapsed(state, pos) && range && head > pos + heading.nodeSize && head < range.to) {
|
|
55
|
+
tr.setSelection(TextSelection.create(tr.doc, pos + heading.nodeSize - 1));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
addProseMirrorPlugins() {
|
|
63
|
+
return [
|
|
64
|
+
new Plugin({
|
|
65
|
+
key: collapseKey,
|
|
66
|
+
state: {
|
|
67
|
+
init: () => ({ collapsed: [] }),
|
|
68
|
+
apply(tr, value, _old, next) {
|
|
69
|
+
let collapsed = value.collapsed
|
|
70
|
+
.map((pos) => tr.mapping.mapResult(pos))
|
|
71
|
+
.filter((result) => !result.deleted)
|
|
72
|
+
.map((result) => result.pos)
|
|
73
|
+
.filter((pos) => childIndexAt(next.doc, pos) !== null && next.doc.nodeAt(pos)?.type.name === "heading");
|
|
74
|
+
const meta = tr.getMeta(collapseKey);
|
|
75
|
+
if (meta && "toggle" in meta) {
|
|
76
|
+
collapsed = collapsed.includes(meta.toggle)
|
|
77
|
+
? collapsed.filter((pos) => pos !== meta.toggle)
|
|
78
|
+
: [...collapsed, meta.toggle];
|
|
79
|
+
}
|
|
80
|
+
else if (meta && "expand" in meta) {
|
|
81
|
+
collapsed = collapsed.filter((pos) => pos !== meta.expand);
|
|
82
|
+
}
|
|
83
|
+
return { collapsed: [...new Set(collapsed)] };
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
// Whatever moved the caret into a hidden part opens it again.
|
|
87
|
+
appendTransaction(_trs, _old, next) {
|
|
88
|
+
const head = next.selection.head;
|
|
89
|
+
const opened = hiddenRanges(next).find((range) => head > range.from && head < range.to);
|
|
90
|
+
return opened ? next.tr.setMeta(collapseKey, { expand: opened.heading }) : null;
|
|
91
|
+
},
|
|
92
|
+
props: {
|
|
93
|
+
decorations(state) {
|
|
94
|
+
const decorations = [];
|
|
95
|
+
for (const range of hiddenRanges(state)) {
|
|
96
|
+
const heading = state.doc.nodeAt(range.heading);
|
|
97
|
+
decorations.push(Decoration.node(range.heading, range.heading + heading.nodeSize, {
|
|
98
|
+
class: "house-section-collapsed",
|
|
99
|
+
"aria-expanded": "false",
|
|
100
|
+
}));
|
|
101
|
+
let hidden = 0;
|
|
102
|
+
state.doc.nodesBetween(range.from, range.to, (node, pos) => {
|
|
103
|
+
if (pos < range.from)
|
|
104
|
+
return false;
|
|
105
|
+
decorations.push(Decoration.node(pos, pos + node.nodeSize, { class: "house-section-hidden" }));
|
|
106
|
+
hidden += 1;
|
|
107
|
+
return false;
|
|
108
|
+
});
|
|
109
|
+
const count = hidden;
|
|
110
|
+
decorations.push(Decoration.widget(range.heading + heading.nodeSize - 1, (view, getPos) => pill(view, getPos, count), {
|
|
111
|
+
side: 1,
|
|
112
|
+
ignoreSelection: true,
|
|
113
|
+
key: `more-${range.heading}-${count}`,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
return DecorationSet.create(state.doc, decorations);
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
];
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=collapsible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.js","sourceRoot":"","sources":["../../src/editor/collapsible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAmB,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAoB3D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,SAAS,CAAgB,wBAAwB,CAAC,CAAC;AAWlF,iDAAiD;AACjD,MAAM,UAAU,kBAAkB,CAAC,KAAkB,EAAE,GAAW;IAChE,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;AACvE,CAAC;AAED,wGAAwG;AACxG,SAAS,YAAY,CAAC,KAAkB;IACtC,MAAM,GAAG,GAAoD,EAAE,CAAC;IAChE,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QACrD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CAAC,IAAgB,EAAE,MAAgC,EAAE,MAAc;IAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC;IACxC,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,MAAM,CAAC,WAAW,GAAG,QAAQ,MAAM,OAAO,CAAC;IAC3C,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,uBAAuB,MAAM,WAAW,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/G,uDAAuD;IACvD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAyB,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,kBAAkB;IAExB,WAAW;QACT,OAAO;YACL,aAAa,EACX,CAAC,GAAW,EAAE,EAAE,CAChB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;gBACzF,IAAI,QAAQ,EAAE,CAAC;oBACb,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAyB,CAAC,CAAC;oBAChE,oGAAoG;oBACpG,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACxC,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC/B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;wBACjG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,IAAI,MAAM,CAAgB;gBACxB,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;oBAC/B,KAAK,CAAC,EAAe,EAAE,KAAoB,EAAE,IAAiB,EAAE,IAAiB;wBAC/E,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS;6BAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;6BACvC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;6BACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;6BAC3B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;wBAC1G,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAA6B,CAAC;wBACjE,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;4BAC7B,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gCACzC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC;gCAChD,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;wBAClC,CAAC;6BAAM,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;4BACpC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC7D,CAAC;wBACD,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;oBAChD,CAAC;iBACF;gBACD,8DAA8D;gBAC9D,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;oBAChC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBACjC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;oBACxF,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzG,CAAC;gBACD,KAAK,EAAE;oBACL,WAAW,CAAC,KAAK;wBACf,MAAM,WAAW,GAAiB,EAAE,CAAC;wBACrC,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;4BACxC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;4BACjD,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE;gCAC/D,KAAK,EAAE,yBAAyB;gCAChC,eAAe,EAAE,OAAO;6BACzB,CAAC,CACH,CAAC;4BACF,IAAI,MAAM,GAAG,CAAC,CAAC;4BACf,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gCACzD,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI;oCAAE,OAAO,KAAK,CAAC;gCACnC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;gCAC/F,MAAM,IAAI,CAAC,CAAC;gCACZ,OAAO,KAAK,CAAC;4BACf,CAAC,CAAC,CAAC;4BACH,MAAM,KAAK,GAAG,MAAM,CAAC;4BACrB,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gCACnG,IAAI,EAAE,CAAC;gCACP,eAAe,EAAE,IAAI;gCACrB,GAAG,EAAE,QAAQ,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE;6BACtC,CAAC,CACH,CAAC;wBACJ,CAAC;wBACD,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;oBACtD,CAAC;iBACF;aACF,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
package/dist/editor/content.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Read-only display for what `RichTextEditor` writes — the Markdown dialect the
|
|
3
3
|
* editor produces (headings, lists incl. task lists, quotes, code fences,
|
|
4
|
-
* bold/italic/strike/inline code, links, `@`-references, `#hashtags
|
|
4
|
+
* bold/italic/strike/inline code, links, `@`-references, `#hashtags`, images from this site), with a
|
|
5
5
|
* bare newline shown as a line break so legacy plain-text values in the same
|
|
6
6
|
* columns read exactly as they always did.
|
|
7
7
|
*
|
|
@@ -22,6 +22,8 @@ export declare function RichTextContent({ content, className }: {
|
|
|
22
22
|
}): import("react").JSX.Element;
|
|
23
23
|
/** Only hrefs safe to hand a browser; anything else renders as plain text. */
|
|
24
24
|
export declare function safeHref(href: string): string | null;
|
|
25
|
+
/** An image address that may be shown: a path on this site, never another origin. */
|
|
26
|
+
export declare function imageSrc(src: string): string | null;
|
|
25
27
|
/**
|
|
26
28
|
* A plain-text preview of a Markdown body — for list cards and search rows.
|
|
27
29
|
* Strips block and inline syntax rather than rendering it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/editor/content.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE9F;AAiBD,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBpD;
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/editor/content.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE9F;AAiBD,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBpD;AAED,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnD;AAkQD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAclE"}
|
package/dist/editor/content.js
CHANGED
|
@@ -4,7 +4,7 @@ import { cx } from "../internal/cx.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Read-only display for what `RichTextEditor` writes — the Markdown dialect the
|
|
6
6
|
* editor produces (headings, lists incl. task lists, quotes, code fences,
|
|
7
|
-
* bold/italic/strike/inline code, links, `@`-references, `#hashtags
|
|
7
|
+
* bold/italic/strike/inline code, links, `@`-references, `#hashtags`, images from this site), with a
|
|
8
8
|
* bare newline shown as a line break so legacy plain-text values in the same
|
|
9
9
|
* columns read exactly as they always did.
|
|
10
10
|
*
|
|
@@ -26,7 +26,7 @@ export function RichTextContent({ content, className }) {
|
|
|
26
26
|
// Link labels exclude `[` and both halves are bounded: `[^\]]+` let every `[`
|
|
27
27
|
// of a long run swallow the rest and backtrack, so a 100 KB run of `[` stalled
|
|
28
28
|
// a server for seconds (AltEd security round 8, 8.1).
|
|
29
|
-
const INLINE = /(`([^`\n]+)`)|(\[([^[\]\n]{1,500})\]\(([^)\s]{1,2048})\))|(\*\*([^*]+)\*\*)|(~~([^~]+)~~)|(\*([^*\n]+)\*)|(\b_([^_\n]+)_\b)|((?:^|(?<=[\s(]))#([a-z0-9][a-z0-9_-]{0,47})\b)/gim;
|
|
29
|
+
const INLINE = /(`([^`\n]+)`)|(\[([^[\]\n]{1,500})\]\(([^)\s]{1,2048})\))|(\*\*([^*]+)\*\*)|(~~([^~]+)~~)|(\*([^*\n]+)\*)|(\b_([^_\n]+)_\b)|((?:^|(?<=[\s(]))#([a-z0-9][a-z0-9_-]{0,47})\b)|(!\[([^[\]\n]{0,500})\]\(([^)\s]{1,2048})\))/gim;
|
|
30
30
|
const ESCAPED = /\\([\\`*_{}[\]()#+\-.!>~|])/g;
|
|
31
31
|
/** The editor's serialiser backslash-escapes Markdown punctuation in literal text (`\#`, `\*`). */
|
|
32
32
|
function unescapeMarkdown(text) {
|
|
@@ -53,6 +53,11 @@ export function safeHref(href) {
|
|
|
53
53
|
return null;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
+
/** An image address that may be shown: a path on this site, never another origin. */
|
|
57
|
+
export function imageSrc(src) {
|
|
58
|
+
const safe = safeHref(src);
|
|
59
|
+
return safe?.startsWith("/") ? safe : null;
|
|
60
|
+
}
|
|
56
61
|
function renderInline(text, keyPrefix) {
|
|
57
62
|
const nodes = [];
|
|
58
63
|
let last = 0;
|
|
@@ -98,6 +103,14 @@ function renderInline(text, keyPrefix) {
|
|
|
98
103
|
else if (match[14]) {
|
|
99
104
|
nodes.push(_jsxs("span", { className: "house-hashtag", children: ["#", match[15]] }, key));
|
|
100
105
|
}
|
|
106
|
+
else if (match[16]) {
|
|
107
|
+
// Images only from this site: an outside address would tell its owner who read the note, and when.
|
|
108
|
+
const src = imageSrc(match[18] ?? "");
|
|
109
|
+
const alt = unescapeMarkdown(match[17] ?? "");
|
|
110
|
+
nodes.push(src ? (
|
|
111
|
+
// The app's own, access-checked image route: a plain <img>, not a framework image optimiser.
|
|
112
|
+
_jsx("img", { src: src, alt: alt, loading: "lazy", className: "house-image" }, key)) : (_jsx("span", { children: alt ? `[image: ${alt}]` : "[image]" }, key)));
|
|
113
|
+
}
|
|
101
114
|
last = index + match[0].length;
|
|
102
115
|
}
|
|
103
116
|
if (last < text.length)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/editor/content.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/editor/content.tsx"],"names":[],"mappings":"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"}
|
package/dist/editor/editor.d.ts
CHANGED
|
@@ -7,7 +7,11 @@ import { type SuggestionSources } from "./suggestions.js";
|
|
|
7
7
|
* appears as a bubble over a text selection (with Turn into); new blocks come
|
|
8
8
|
* from typing `/` — a filterable menu — or from the `+` beside any block; every
|
|
9
9
|
* block has a grip to drag it elsewhere or open its menu (turn into, duplicate,
|
|
10
|
-
* move up, move down, delete);
|
|
10
|
+
* move up, move down, delete); a heading carries everything under it when it is
|
|
11
|
+
* dragged or moved, and folds it away with the chevron beside it (sections.ts,
|
|
12
|
+
* collapsible.ts); `:` completes an emoji shortcode. Images can be pasted or
|
|
13
|
+
* dropped in when the app passes `onImageFiles`, which stores them and says
|
|
14
|
+
* where each is shown — only addresses on the app's own site are ever drawn. `@` references
|
|
11
15
|
* and `#` tags work when the app passes `sources`. Markdown shortcuts still work
|
|
12
16
|
* while typing (`# `, `- `, `1. `, `[] `, `> `, `**bold**`, "```").
|
|
13
17
|
*
|
|
@@ -31,6 +35,15 @@ export interface RichTextEditorProps {
|
|
|
31
35
|
autoFocus?: boolean;
|
|
32
36
|
/** Where `@` and `#` get their rows. Omit either and that trigger stays inert. */
|
|
33
37
|
sources?: SuggestionSources;
|
|
38
|
+
/**
|
|
39
|
+
* Pasted or dropped image files: store them, and say where each is shown — a path on this site
|
|
40
|
+
* (`/api/…/image`). Omit it and images can't be pasted. Resolve to fewer entries (or none) for files
|
|
41
|
+
* that couldn't be kept; the app tells the person why.
|
|
42
|
+
*/
|
|
43
|
+
onImageFiles?: (files: File[]) => Promise<{
|
|
44
|
+
src: string;
|
|
45
|
+
alt: string;
|
|
46
|
+
}[]>;
|
|
34
47
|
/**
|
|
35
48
|
* How a link in the text is followed. "click": an `@`-reference opens on a
|
|
36
49
|
* plain click, as in Notion — for a page that autosaves. "modifier" (the
|
|
@@ -48,5 +61,5 @@ export interface RichTextEditorProps {
|
|
|
48
61
|
"aria-describedby"?: string;
|
|
49
62
|
"aria-label"?: string;
|
|
50
63
|
}
|
|
51
|
-
export declare function RichTextEditor({ value, onChange, onBlur, placeholder, variant, disabled, autoFocus, sources, followLinks, isReference, formatDate, id, className, ...aria }: RichTextEditorProps): import("react").JSX.Element;
|
|
64
|
+
export declare function RichTextEditor({ value, onChange, onBlur, placeholder, variant, disabled, autoFocus, sources, onImageFiles, followLinks, isReference, formatDate, id, className, ...aria }: RichTextEditorProps): import("react").JSX.Element;
|
|
52
65
|
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/editor/editor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/editor/editor.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAML,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAa1B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IAC1E;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACnC,oGAAoG;IACpG,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtD,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC;IACpC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,WAAgC,EAChC,OAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,OAAO,EACP,YAAY,EACZ,WAAwB,EACxB,WAAgC,EAChC,UAAU,EACV,EAAE,EACF,SAAS,EACT,GAAG,IAAI,EACR,EAAE,mBAAmB,+BAiNrB"}
|
package/dist/editor/editor.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Image } from "@tiptap/extension-image";
|
|
3
4
|
import { TaskItem } from "@tiptap/extension-task-item";
|
|
4
5
|
import { TaskList } from "@tiptap/extension-task-list";
|
|
5
6
|
import { Placeholder } from "@tiptap/extensions";
|
|
@@ -12,10 +13,22 @@ import { cx } from "../internal/cx.js";
|
|
|
12
13
|
import { carryTrail } from "../trail/trail.js";
|
|
13
14
|
import { BlockHandle } from "./block-handle.js";
|
|
14
15
|
import { BubbleToolbar } from "./bubble-toolbar.js";
|
|
16
|
+
import { Collapsible } from "./collapsible.js";
|
|
17
|
+
import { imageSrc } from "./content.js";
|
|
15
18
|
import { SuggestionPopup } from "./suggestion-popup.js";
|
|
16
19
|
import { createSuggestions, DEFAULT_SUGGESTION_OPTIONS, } from "./suggestions.js";
|
|
20
|
+
/** An image block that draws only addresses on this site; anything else shows as its description. */
|
|
21
|
+
const SameSiteImage = Image.extend({
|
|
22
|
+
renderHTML({ HTMLAttributes }) {
|
|
23
|
+
const src = imageSrc(String(HTMLAttributes.src ?? ""));
|
|
24
|
+
const alt = String(HTMLAttributes.alt ?? "");
|
|
25
|
+
return src
|
|
26
|
+
? ["img", { src, alt, class: "house-image", loading: "lazy", draggable: "false" }]
|
|
27
|
+
: ["span", { class: "house-image-blocked" }, alt ? `[image: ${alt}]` : "[image]"];
|
|
28
|
+
},
|
|
29
|
+
});
|
|
17
30
|
const defaultIsReference = (_href, text) => text.startsWith("@");
|
|
18
|
-
export function RichTextEditor({ value, onChange, onBlur, placeholder = "Write something…", variant = "field", disabled = false, autoFocus = false, sources, followLinks = "modifier", isReference = defaultIsReference, formatDate, id, className, ...aria }) {
|
|
31
|
+
export function RichTextEditor({ value, onChange, onBlur, placeholder = "Write something…", variant = "field", disabled = false, autoFocus = false, sources, onImageFiles, followLinks = "modifier", isReference = defaultIsReference, formatDate, id, className, ...aria }) {
|
|
19
32
|
const router = useRouter();
|
|
20
33
|
// The last Markdown this editor emitted (or accepted). Guards the external
|
|
21
34
|
// value sync below from re-parsing the document on every keystroke echo.
|
|
@@ -31,7 +44,9 @@ export function RichTextEditor({ value, onChange, onBlur, placeholder = "Write s
|
|
|
31
44
|
...(formatDate ? { formatDate } : {}),
|
|
32
45
|
});
|
|
33
46
|
const placeholderRef = useRef(placeholder);
|
|
47
|
+
const imageFilesRef = useRef(onImageFiles);
|
|
34
48
|
useEffect(() => {
|
|
49
|
+
imageFilesRef.current = onImageFiles;
|
|
35
50
|
sourcesRef.current = sources ?? {};
|
|
36
51
|
optionsRef.current = { ...DEFAULT_SUGGESTION_OPTIONS, ...(formatDate ? { formatDate } : {}) };
|
|
37
52
|
placeholderRef.current = placeholder;
|
|
@@ -99,9 +114,40 @@ export function RichTextEditor({ value, onChange, onBlur, placeholder = "Write s
|
|
|
99
114
|
transformPastedText: true,
|
|
100
115
|
}),
|
|
101
116
|
createSuggestions(uiRef, sourcesRef, optionsRef),
|
|
117
|
+
Collapsible,
|
|
118
|
+
SameSiteImage.configure({ inline: false, allowBase64: false }),
|
|
102
119
|
],
|
|
103
120
|
// The extension set is per mount; everything that changes is read through a ref.
|
|
104
121
|
[]);
|
|
122
|
+
/** Hand image files to the app; once stored, put an image block for each where they were pasted or dropped. */
|
|
123
|
+
const takeImages = (view, files, at) => {
|
|
124
|
+
const store = imageFilesRef.current;
|
|
125
|
+
const images = files.filter((file) => file.type.startsWith("image/"));
|
|
126
|
+
if (!store || images.length === 0)
|
|
127
|
+
return false;
|
|
128
|
+
const mark = at ?? view.state.selection.to;
|
|
129
|
+
const startDoc = view.state.doc;
|
|
130
|
+
void store(images).then((stored) => {
|
|
131
|
+
if (view.isDestroyed)
|
|
132
|
+
return;
|
|
133
|
+
const type = view.state.schema.nodes.image;
|
|
134
|
+
if (!type)
|
|
135
|
+
return;
|
|
136
|
+
// Wherever that spot has moved to while the files were being stored.
|
|
137
|
+
let tr = view.state.tr;
|
|
138
|
+
let pos = view.state.doc === startDoc ? mark : Math.min(mark, view.state.doc.content.size);
|
|
139
|
+
for (const image of stored) {
|
|
140
|
+
const src = imageSrc(image.src);
|
|
141
|
+
if (!src)
|
|
142
|
+
continue;
|
|
143
|
+
tr = tr.replaceRangeWith(pos, pos, type.create({ src, alt: image.alt }));
|
|
144
|
+
pos = tr.mapping.map(pos);
|
|
145
|
+
}
|
|
146
|
+
if (tr.docChanged)
|
|
147
|
+
view.dispatch(tr);
|
|
148
|
+
});
|
|
149
|
+
return true;
|
|
150
|
+
};
|
|
105
151
|
const editor = useEditor({
|
|
106
152
|
extensions,
|
|
107
153
|
content: value,
|
|
@@ -109,6 +155,16 @@ export function RichTextEditor({ value, onChange, onBlur, placeholder = "Write s
|
|
|
109
155
|
autofocus: autoFocus ? "end" : false,
|
|
110
156
|
// The editor renders client-side only; the server markup comes from the page.
|
|
111
157
|
immediatelyRender: false,
|
|
158
|
+
editorProps: {
|
|
159
|
+
// Image files pasted or dropped in go to the app, which stores them; anything else is handled as usual.
|
|
160
|
+
handlePaste: (view, event) => takeImages(view, Array.from(event.clipboardData?.files ?? [])),
|
|
161
|
+
handleDrop: (view, event, _slice, moved) => {
|
|
162
|
+
if (moved)
|
|
163
|
+
return false;
|
|
164
|
+
const at = view.posAtCoords({ left: event.clientX, top: event.clientY })?.pos;
|
|
165
|
+
return takeImages(view, Array.from(event.dataTransfer?.files ?? []), at);
|
|
166
|
+
},
|
|
167
|
+
},
|
|
112
168
|
onUpdate: ({ editor: current }) => {
|
|
113
169
|
// tiptap-markdown registers no Storage augmentation, hence the cast.
|
|
114
170
|
const markdown = current.storage.markdown.getMarkdown();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/editor/editor.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/editor/editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Node } from "@tiptap/pm/model";
|
|
2
|
+
/**
|
|
3
|
+
* Sections: a heading and everything under it. Moving, dragging or collapsing a
|
|
4
|
+
* heading acts on its whole section, the way an outline does.
|
|
5
|
+
*
|
|
6
|
+
* A heading's section runs from the heading to the block before the next
|
|
7
|
+
* *break*: a heading of the same or a higher level (a smaller number), a divider,
|
|
8
|
+
* or an empty paragraph. Any other block is a section of one. Only blocks at the
|
|
9
|
+
* top of the document form sections — inside a list or a quote, a block moves on
|
|
10
|
+
* its own.
|
|
11
|
+
*
|
|
12
|
+
* Pure: these read a document and return child indexes or positions; the editor
|
|
13
|
+
* decides what to do with them.
|
|
14
|
+
*/
|
|
15
|
+
/** The heading level of a top-level block, or null if it isn't a heading. */
|
|
16
|
+
export declare function headingLevel(node: Node): number | null;
|
|
17
|
+
/** The child index just past the section that starts at `index` (`index + 1` for a block that isn't a heading). */
|
|
18
|
+
export declare function sectionEnd(doc: Node, index: number): number;
|
|
19
|
+
/** The position before the top-level child at `index` (or the document's end). */
|
|
20
|
+
export declare function positionOfChild(doc: Node, index: number): number;
|
|
21
|
+
/** The top-level child index of the block that starts at `pos`, or null if none does. */
|
|
22
|
+
export declare function childIndexAt(doc: Node, pos: number): number | null;
|
|
23
|
+
/** The section starting at the top-level block at `pos`, as document positions; null for a nested block. */
|
|
24
|
+
export declare function sectionRange(doc: Node, pos: number): {
|
|
25
|
+
from: number;
|
|
26
|
+
to: number;
|
|
27
|
+
blocks: number;
|
|
28
|
+
} | null;
|
|
29
|
+
/**
|
|
30
|
+
* What a section at `[start, end)` swaps with when moved up (-1) or down (+1): the
|
|
31
|
+
* neighbouring unit, as child indexes. Moving down passes the next block, or the
|
|
32
|
+
* whole next section if it starts with a heading; moving up passes the nearest
|
|
33
|
+
* earlier section of the same or a higher level that ends exactly here, or else
|
|
34
|
+
* the block just before. Null at either end of the document.
|
|
35
|
+
*/
|
|
36
|
+
export declare function neighbourUnit(doc: Node, start: number, end: number, direction: -1 | 1): [number, number] | null;
|
|
37
|
+
//# sourceMappingURL=sections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/editor/sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;;;;GAYG;AAEH,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAEtD;AASD,mHAAmH;AACnH,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,4GAA4G;AAC5G,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKxG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAY/G"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sections: a heading and everything under it. Moving, dragging or collapsing a
|
|
3
|
+
* heading acts on its whole section, the way an outline does.
|
|
4
|
+
*
|
|
5
|
+
* A heading's section runs from the heading to the block before the next
|
|
6
|
+
* *break*: a heading of the same or a higher level (a smaller number), a divider,
|
|
7
|
+
* or an empty paragraph. Any other block is a section of one. Only blocks at the
|
|
8
|
+
* top of the document form sections — inside a list or a quote, a block moves on
|
|
9
|
+
* its own.
|
|
10
|
+
*
|
|
11
|
+
* Pure: these read a document and return child indexes or positions; the editor
|
|
12
|
+
* decides what to do with them.
|
|
13
|
+
*/
|
|
14
|
+
/** The heading level of a top-level block, or null if it isn't a heading. */
|
|
15
|
+
export function headingLevel(node) {
|
|
16
|
+
return node.type.name === "heading" ? Number(node.attrs.level ?? 1) : null;
|
|
17
|
+
}
|
|
18
|
+
function isBreak(node, level) {
|
|
19
|
+
const own = headingLevel(node);
|
|
20
|
+
if (own !== null)
|
|
21
|
+
return own <= level;
|
|
22
|
+
if (node.type.name === "horizontalRule")
|
|
23
|
+
return true;
|
|
24
|
+
return node.type.name === "paragraph" && node.content.size === 0;
|
|
25
|
+
}
|
|
26
|
+
/** The child index just past the section that starts at `index` (`index + 1` for a block that isn't a heading). */
|
|
27
|
+
export function sectionEnd(doc, index) {
|
|
28
|
+
const start = doc.maybeChild(index);
|
|
29
|
+
const level = start ? headingLevel(start) : null;
|
|
30
|
+
if (level === null)
|
|
31
|
+
return index + 1;
|
|
32
|
+
let end = index + 1;
|
|
33
|
+
while (end < doc.childCount && !isBreak(doc.child(end), level))
|
|
34
|
+
end += 1;
|
|
35
|
+
return end;
|
|
36
|
+
}
|
|
37
|
+
/** The position before the top-level child at `index` (or the document's end). */
|
|
38
|
+
export function positionOfChild(doc, index) {
|
|
39
|
+
let pos = 0;
|
|
40
|
+
for (let i = 0; i < index && i < doc.childCount; i += 1)
|
|
41
|
+
pos += doc.child(i).nodeSize;
|
|
42
|
+
return pos;
|
|
43
|
+
}
|
|
44
|
+
/** The top-level child index of the block that starts at `pos`, or null if none does. */
|
|
45
|
+
export function childIndexAt(doc, pos) {
|
|
46
|
+
let at = 0;
|
|
47
|
+
for (let i = 0; i < doc.childCount; i += 1) {
|
|
48
|
+
if (at === pos)
|
|
49
|
+
return i;
|
|
50
|
+
at += doc.child(i).nodeSize;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
/** The section starting at the top-level block at `pos`, as document positions; null for a nested block. */
|
|
55
|
+
export function sectionRange(doc, pos) {
|
|
56
|
+
const index = childIndexAt(doc, pos);
|
|
57
|
+
if (index === null)
|
|
58
|
+
return null;
|
|
59
|
+
const end = sectionEnd(doc, index);
|
|
60
|
+
return { from: pos, to: positionOfChild(doc, end), blocks: end - index };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* What a section at `[start, end)` swaps with when moved up (-1) or down (+1): the
|
|
64
|
+
* neighbouring unit, as child indexes. Moving down passes the next block, or the
|
|
65
|
+
* whole next section if it starts with a heading; moving up passes the nearest
|
|
66
|
+
* earlier section of the same or a higher level that ends exactly here, or else
|
|
67
|
+
* the block just before. Null at either end of the document.
|
|
68
|
+
*/
|
|
69
|
+
export function neighbourUnit(doc, start, end, direction) {
|
|
70
|
+
if (direction === 1) {
|
|
71
|
+
if (end >= doc.childCount)
|
|
72
|
+
return null;
|
|
73
|
+
return [end, sectionEnd(doc, end)];
|
|
74
|
+
}
|
|
75
|
+
if (start <= 0)
|
|
76
|
+
return null;
|
|
77
|
+
const level = headingLevel(doc.child(start)) ?? Number.POSITIVE_INFINITY;
|
|
78
|
+
for (let j = start - 1; j >= 0; j -= 1) {
|
|
79
|
+
const own = headingLevel(doc.child(j));
|
|
80
|
+
if (own !== null && own <= level && sectionEnd(doc, j) === start)
|
|
81
|
+
return [j, start];
|
|
82
|
+
}
|
|
83
|
+
return [start - 1, start];
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=sections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/editor/sections.ts"],"names":[],"mappings":"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"}
|
package/dist/editor/ui.d.ts
CHANGED
|
@@ -23,10 +23,12 @@ export declare function VerticalSeparator(): import("react").JSX.Element;
|
|
|
23
23
|
export declare const Menu: import("react").FC<DropdownMenu.DropdownMenuProps>;
|
|
24
24
|
export declare const MenuTrigger: import("react").ForwardRefExoticComponent<DropdownMenu.DropdownMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
25
25
|
export declare const MenuSub: import("react").FC<DropdownMenu.DropdownMenuSubProps>;
|
|
26
|
-
export declare function MenuContent({ children, className, align, }: {
|
|
26
|
+
export declare function MenuContent({ children, className, align, onCloseAutoFocus, }: {
|
|
27
27
|
children: ReactNode;
|
|
28
28
|
className?: string;
|
|
29
29
|
align?: "start" | "center" | "end";
|
|
30
|
+
/** Radix's: `preventDefault()` and move focus yourself, when the trigger isn't where focus should go back to. */
|
|
31
|
+
onCloseAutoFocus?: (event: Event) => void;
|
|
30
32
|
}): import("react").JSX.Element;
|
|
31
33
|
export declare function MenuItem({ children, onSelect, className, }: {
|
|
32
34
|
children: ReactNode;
|
package/dist/editor/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/editor/ui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIxG;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,WAAW,2OACkN,CAAC;AAE3O,eAAO,MAAM,gBAAgB,QAAkF,CAAC;AAEhH,eAAO,MAAM,kBAAkB,QAAqF,CAAC;AAQrH,eAAO,MAAM,UAAU;cAEiC,OAAO;qDAW7D,CAAC;AAEH,eAAO,MAAM,SAAS,oIAcpB,CAAC;AAEH,wBAAgB,iBAAiB,gCAEhC;AAED,eAAO,MAAM,IAAI,oDAAoB,CAAC;AACtC,eAAO,MAAM,WAAW,qIAAuB,CAAC;AAChD,eAAO,MAAM,OAAO,uDAAmB,CAAC;AAExC,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,KAAe,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/editor/ui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIxG;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,WAAW,2OACkN,CAAC;AAE3O,eAAO,MAAM,gBAAgB,QAAkF,CAAC;AAEhH,eAAO,MAAM,kBAAkB,QAAqF,CAAC;AAQrH,eAAO,MAAM,UAAU;cAEiC,OAAO;qDAW7D,CAAC;AAEH,eAAO,MAAM,SAAS,oIAcpB,CAAC;AAEH,wBAAgB,iBAAiB,gCAEhC;AAED,eAAO,MAAM,IAAI,oDAAoB,CAAC;AACtC,eAAO,MAAM,WAAW,qIAAuB,CAAC;AAChD,eAAO,MAAM,OAAO,uDAAmB,CAAC;AAExC,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,KAAe,EACf,gBAAgB,GACjB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,iHAAiH;IACjH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC3C,+BAaA;AAED,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAMA;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAM9D;AAED,wBAAgB,aAAa,gCAE5B;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAMnE;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAQlG;AAED,eAAO,MAAM,WAAW,0CAAe,CAAC;AACxC,eAAO,MAAM,cAAc,2HAAkB,CAAC;AAE9C,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,SAAS,EACT,KAAe,GAChB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACpC,+BAeA"}
|
package/dist/editor/ui.js
CHANGED
|
@@ -32,8 +32,8 @@ export function VerticalSeparator() {
|
|
|
32
32
|
export const Menu = DropdownMenu.Root;
|
|
33
33
|
export const MenuTrigger = DropdownMenu.Trigger;
|
|
34
34
|
export const MenuSub = DropdownMenu.Sub;
|
|
35
|
-
export function MenuContent({ children, className, align = "start", }) {
|
|
36
|
-
return (_jsx(DropdownMenu.Portal, { children: _jsx(DropdownMenu.Content, { align: align, sideOffset: 4, className: cx(menuSurfaceClass, className), children: children }) }));
|
|
35
|
+
export function MenuContent({ children, className, align = "start", onCloseAutoFocus, }) {
|
|
36
|
+
return (_jsx(DropdownMenu.Portal, { children: _jsx(DropdownMenu.Content, { align: align, sideOffset: 4, className: cx(menuSurfaceClass, className), onCloseAutoFocus: onCloseAutoFocus, children: children }) }));
|
|
37
37
|
}
|
|
38
38
|
export function MenuItem({ children, onSelect, className, }) {
|
|
39
39
|
return (_jsx(DropdownMenu.Item, { onSelect: onSelect, className: cx(menuItemClass, className), children: children }));
|
package/dist/editor/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/editor/ui.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAuE,MAAM,OAAO,CAAC;AAExG,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,WAAW,GACtB,wOAAwO,CAAC;AAE3O,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,WAAW,EAAE,8DAA8D,CAAC,CAAC;AAEhH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC,WAAW,EAAE,iEAAiE,CAAC,CAAC;AAErH,MAAM,gBAAgB,GACpB,qHAAqH,CAAC;AAExH,MAAM,aAAa,GACjB,qNAAqN,CAAC;AAExN,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAGlC,SAAS,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC1E,OAAO,CACL,iBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,kBACI,OAAO,EACrB,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,IAAI,kCAAkC,EAAE,SAAS,CAAC,KACnG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAA0D,SAAS,SAAS,CAC7G,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EACvB,GAAG;IAEH,OAAO,CACL,gBACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,sMAAsM,EACtM,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAM,IAAI,EAAC,WAAW,sBAAkB,UAAU,EAAC,SAAS,EAAC,2BAA2B,GAAG,CAAC;AACrG,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC;AAChD,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC;AAExC,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,KAAK,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/editor/ui.tsx"],"names":[],"mappings":"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"}
|
package/dist/house.css
CHANGED
|
@@ -22,6 +22,26 @@
|
|
|
22
22
|
@layer components {
|
|
23
23
|
/* ── Rich text — the editor while writing, and RichTextContent while reading ── */
|
|
24
24
|
|
|
25
|
+
/* Images in a note: the app's own, re-encoded copies; never wider than the text. */
|
|
26
|
+
.house-prose img.house-image,
|
|
27
|
+
.house-rich-text .tiptap img.house-image {
|
|
28
|
+
display: block;
|
|
29
|
+
max-width: 100%;
|
|
30
|
+
height: auto;
|
|
31
|
+
margin: 0.75rem 0;
|
|
32
|
+
border-radius: 0.5rem;
|
|
33
|
+
border: 1px solid var(--house-border, var(--border));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.house-rich-text .tiptap img.house-image.ProseMirror-selectednode {
|
|
37
|
+
outline: 2px solid var(--house-primary, var(--primary));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.house-image-blocked {
|
|
41
|
+
color: var(--house-muted-foreground, var(--muted-foreground));
|
|
42
|
+
font-style: italic;
|
|
43
|
+
}
|
|
44
|
+
|
|
25
45
|
.house-prose {
|
|
26
46
|
color: var(--house-foreground, var(--foreground));
|
|
27
47
|
line-height: 1.65;
|
|
@@ -185,8 +205,9 @@
|
|
|
185
205
|
--rich-text-min-height: 20rem;
|
|
186
206
|
}
|
|
187
207
|
|
|
208
|
+
/* The left gutter holds the block handle: collapse, add, grip. */
|
|
188
209
|
.house-rich-text--document .tiptap {
|
|
189
|
-
padding: 0.5rem 1rem 6rem
|
|
210
|
+
padding: 0.5rem 1rem 6rem 4.75rem;
|
|
190
211
|
}
|
|
191
212
|
|
|
192
213
|
/* The empty document's prompt, and "Type / for blocks" on an empty block. */
|
|
@@ -204,6 +225,8 @@
|
|
|
204
225
|
display: flex;
|
|
205
226
|
align-items: center;
|
|
206
227
|
gap: 1px;
|
|
228
|
+
/* Its positioned parent is narrow: without this the handle shrinks and its buttons spill onto the text. */
|
|
229
|
+
width: max-content;
|
|
207
230
|
margin-right: 0.25rem;
|
|
208
231
|
opacity: 0;
|
|
209
232
|
transition: opacity 120ms ease;
|
|
@@ -228,6 +251,34 @@
|
|
|
228
251
|
cursor: grabbing;
|
|
229
252
|
}
|
|
230
253
|
|
|
254
|
+
/* A collapsed heading's section: folded away, with a pill at the end of the heading that says how much. */
|
|
255
|
+
.house-rich-text .tiptap .house-section-hidden {
|
|
256
|
+
display: none;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.house-rich-text .house-section-more {
|
|
260
|
+
margin-inline-start: 0.5rem;
|
|
261
|
+
padding: 0.05rem 0.5rem;
|
|
262
|
+
border-radius: 9999px;
|
|
263
|
+
border: 1px solid var(--house-border, var(--border));
|
|
264
|
+
background: var(--house-muted, var(--muted));
|
|
265
|
+
color: var(--house-muted-foreground, var(--muted-foreground));
|
|
266
|
+
font-family: inherit;
|
|
267
|
+
font-size: 0.75rem;
|
|
268
|
+
font-weight: 500;
|
|
269
|
+
line-height: 1.4;
|
|
270
|
+
vertical-align: middle;
|
|
271
|
+
cursor: pointer;
|
|
272
|
+
user-select: none;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.house-rich-text .house-section-more:hover,
|
|
276
|
+
.house-rich-text .house-section-more:focus-visible {
|
|
277
|
+
color: var(--house-foreground, var(--foreground));
|
|
278
|
+
outline: none;
|
|
279
|
+
box-shadow: 0 0 0 2px var(--house-primary, var(--primary));
|
|
280
|
+
}
|
|
281
|
+
|
|
231
282
|
/* The in-flight text of a lookup, before it resolves. */
|
|
232
283
|
.house-rich-text .house-suggestion {
|
|
233
284
|
color: var(--house-primary, var(--primary));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@connextar/house",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "The pieces every app we build needs and none of them should own a copy of.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -232,6 +232,7 @@
|
|
|
232
232
|
"@tiptap/core": "^3.31.3",
|
|
233
233
|
"@tiptap/extension-drag-handle": "^3.31.3",
|
|
234
234
|
"@tiptap/extension-drag-handle-react": "^3.31.3",
|
|
235
|
+
"@tiptap/extension-image": "^3.31.3",
|
|
235
236
|
"@tiptap/extension-node-range": "^3.31.3",
|
|
236
237
|
"@tiptap/extension-task-item": "^3.31.3",
|
|
237
238
|
"@tiptap/extension-task-list": "^3.31.3",
|