@heyramzi/ui 2.11.1 → 2.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/helpers.js +38 -38
- package/dist/agents/page-state.js +49 -50
- package/dist/agents/vendor/color.js +146 -127
- package/dist/agents/vendor/draw.js +617 -508
- package/dist/agents/vendor/engine.js +698 -599
- package/dist/agents/vendor/mesh.js +653 -683
- package/dist/agents/vendor/plastic.js +3913 -3112
- package/dist/agents/vendor/presets.js +163 -164
- package/dist/agents/vendor/shapes.js +21 -20
- package/dist/agents/vendor/ticker.js +41 -42
- package/dist/agents/vendor/types.js +1 -0
- package/dist/agents/vendor/wear.js +1421 -1448
- package/dist/ai/confirmation/confirmation-context.svelte.js +6 -6
- package/dist/ai/confirmation/index.js +3 -1
- package/dist/ai/index.js +33 -0
- package/dist/ai/prompt-input/index.js +3 -1
- package/dist/ai/reasoning/index.js +3 -1
- package/dist/ai/reasoning/reasoning-context.svelte.js +6 -6
- package/dist/ai/suggestion/index.js +3 -1
- package/dist/ai/typing-dots/index.js +3 -1
- package/dist/animations/text-swap.js +24 -24
- package/dist/brand/index.js +54 -48
- package/dist/canvas/card/resize.js +5 -3
- package/dist/canvas/edges/edge-path.js +255 -242
- package/dist/canvas/editor/context-menu.js +39 -36
- package/dist/canvas/editor/dispatch.svelte.js +154 -151
- package/dist/canvas/editor/editor-context.js +7 -2
- package/dist/canvas/editor/editor-mode.js +1 -0
- package/dist/canvas/editor/frame.js +73 -76
- package/dist/canvas/editor/hand-context.js +5 -2
- package/dist/canvas/editor/history-core.js +163 -191
- package/dist/canvas/editor/keymap.js +95 -169
- package/dist/canvas/editor/layout-actions.js +143 -144
- package/dist/canvas/editor/lock.js +52 -51
- package/dist/canvas/editor/rebase.js +217 -240
- package/dist/canvas/editor/style.js +132 -137
- package/dist/canvas/editor/text-field-context.js +7 -2
- package/dist/canvas/editor/z-order.js +65 -70
- package/dist/canvas/headless/alignment.js +22 -16
- package/dist/canvas/headless/break-apart-find.js +286 -279
- package/dist/canvas/headless/break-apart-pieces.js +62 -58
- package/dist/canvas/headless/break-apart-plan.js +299 -325
- package/dist/canvas/headless/break-apart-style.js +75 -70
- package/dist/canvas/headless/break-apart.js +188 -181
- package/dist/canvas/headless/canvas-cleanup.js +78 -58
- package/dist/canvas/headless/edge-anchors.js +115 -116
- package/dist/canvas/headless/edge-memo.js +24 -22
- package/dist/canvas/headless/edge-serialization.js +17 -27
- package/dist/canvas/headless/figure-geometry.js +232 -264
- package/dist/canvas/headless/fit-viewport.js +84 -67
- package/dist/canvas/headless/grid.js +88 -86
- package/dist/canvas/headless/icon-node.js +44 -36
- package/dist/canvas/headless/index.js +1 -0
- package/dist/canvas/headless/linkify.js +17 -19
- package/dist/canvas/headless/pen-marks.js +101 -95
- package/dist/canvas/headless/sketch.js +231 -209
- package/dist/canvas/headless/snap-guides.js +99 -83
- package/dist/canvas/headless/svg-figure.js +133 -117
- package/dist/canvas/headless/table-layout.js +146 -107
- package/dist/canvas/index.js +2 -0
- package/dist/canvas/lod/lod-mode.svelte.js +20 -18
- package/dist/canvas/lod/render-all.svelte.js +36 -39
- package/dist/canvas/ops/arrange.js +78 -71
- package/dist/canvas/ops/ops.js +260 -255
- package/dist/canvas/pen/colors.js +37 -35
- package/dist/canvas/pen/eraser.js +28 -27
- package/dist/canvas/pen/geometry.js +120 -130
- package/dist/canvas/pen/index.js +1 -0
- package/dist/canvas/pen/ops.js +11 -11
- package/dist/canvas/pen/pen-session.js +150 -159
- package/dist/canvas/pen/plugin.js +107 -104
- package/dist/canvas/pen/shapes.js +73 -68
- package/dist/canvas/pen/stroke-path.js +32 -30
- package/dist/canvas/pen/types.js +21 -21
- package/dist/canvas/pen/ui.js +10 -8
- package/dist/canvas/plugin.js +46 -46
- package/dist/canvas/screen/glyphs.js +12 -11
- package/dist/canvas/screen/labels.js +22 -22
- package/dist/canvas/screen/parts.js +98 -111
- package/dist/canvas/screen/plugin.js +47 -56
- package/dist/canvas/screen/types.js +30 -35
- package/dist/canvas/screen/ui.js +7 -7
- package/dist/canvas/test-utils.js +14 -14
- package/dist/canvas/types.js +1 -0
- package/dist/canvas/ui/forward-wheel.js +24 -25
- package/dist/canvas/ui/icons.js +64 -131
- package/dist/canvas/ui/place-panel.js +58 -49
- package/dist/canvas/ui/shortcut-tip.js +14 -12
- package/dist/canvas/ui/tools.js +300 -385
- package/dist/charts/dashboard/chart.js +4 -0
- package/dist/charts/dashboard/data-table.js +11 -0
- package/dist/charts/dashboard/windows.js +8 -3
- package/dist/charts/edge-fade.js +10 -5
- package/dist/charts/hover-band.js +16 -11
- package/dist/charts/index.js +0 -1
- package/dist/charts/motion.js +11 -7
- package/dist/charts/primitives/chart-utils.js +12 -12
- package/dist/components/copy/clipboard.js +32 -32
- package/dist/components/copy/copied.svelte.js +31 -23
- package/dist/components/data-table/data-table.js +39 -39
- package/dist/components/docs/index.js +4 -0
- package/dist/components/docs/scroll-spy.svelte.js +73 -68
- package/dist/components/list-page/filter-section.js +4 -1
- package/dist/components/list-page/index.js +2 -0
- package/dist/components/list-page/list-table.js +7 -2
- package/dist/components/list-page/queue-rail.js +14 -0
- package/dist/components/list-page/section-host.js +4 -2
- package/dist/components/list-page/step.js +4 -3
- package/dist/components/list-page/types.js +1 -0
- package/dist/components/picker/trigger.js +48 -30
- package/dist/components/picker/types.js +1 -0
- package/dist/components/segmented/collapse.js +38 -27
- package/dist/components/segmented/index.js +8 -0
- package/dist/components/segmented/segmented.js +67 -42
- package/dist/components/star-rating-input/index.js +3 -1
- package/dist/components/table-view/types.js +1 -0
- package/dist/components/tags-input/tags.js +81 -69
- package/dist/components/theme/index.js +4 -0
- package/dist/components/toolbar/index.js +4 -0
- package/dist/components/toolbar/toolbar-trigger.js +14 -1
- package/dist/editor/anchors.js +17 -13
- package/dist/editor/block-id.js +52 -51
- package/dist/editor/block-ops.js +108 -80
- package/dist/editor/doc-blocks.js +155 -166
- package/dist/editor/extensions.js +139 -180
- package/dist/editor/index.js +4 -0
- package/dist/editor/markdown-test-helpers.js +4 -2
- package/dist/editor/markdown.js +420 -408
- package/dist/editor/serializer.js +204 -200
- package/dist/editor/slash-items.js +89 -101
- package/dist/editor/youtube-url.js +25 -20
- package/dist/effects/animated-beam/path-calculator.svelte.js +43 -38
- package/dist/effects/animated-beam/types.js +1 -0
- package/dist/effects/border-beam/css.js +92 -78
- package/dist/effects/border-beam/presets.js +1705 -1720
- package/dist/effects/border-beam/register-properties.js +43 -33
- package/dist/effects/border-beam/types.js +1 -0
- package/dist/effects/image-comparison/compare.js +3 -2
- package/dist/effects/image-reveal/types.js +1 -0
- package/dist/effects/magnetic/magnetic.js +58 -52
- package/dist/effects/reveal/observe.js +50 -40
- package/dist/effects/reveal/types.js +1 -0
- package/dist/effects/shader-gradient/color.js +36 -29
- package/dist/effects/shader-gradient/renderer.js +384 -295
- package/dist/effects/shader-gradient/shaders.js +31 -0
- package/dist/effects/shader-gradient/types.js +1 -0
- package/dist/icons/apple-symbol-exports.js +99 -124
- package/dist/icons/sf-symbols.js +357 -461
- package/dist/icons/trades.js +43 -28
- package/dist/inbox/index.js +1 -0
- package/dist/inbox/logic.js +126 -122
- package/dist/inbox/types.js +43 -43
- package/dist/lib/arrive.js +19 -12
- package/dist/lib/icon-types.js +1 -0
- package/dist/lib/initials.js +16 -10
- package/dist/lib/layout.js +5 -0
- package/dist/lib/panel.js +13 -0
- package/dist/lib/result.js +22 -22
- package/dist/lib/sliding-pill.js +59 -44
- package/dist/lib/theme-transition.js +43 -43
- package/dist/lib/tone.js +31 -24
- package/dist/lib/utils.js +3 -1
- package/dist/onboarding/define-tours.js +24 -23
- package/dist/onboarding/onboarding.svelte.js +16 -12
- package/dist/onboarding/pick.js +10 -6
- package/dist/onboarding/stores.js +40 -41
- package/dist/onboarding/wait.js +24 -23
- package/dist/panel/side-panel-types.js +1 -0
- package/dist/record/demo-data.js +459 -486
- package/dist/record/fields.js +129 -131
- package/dist/record/format.js +70 -82
- package/dist/record/gutter.js +1 -0
- package/dist/record/kinds.js +95 -105
- package/dist/record/logic.js +238 -219
- package/dist/record/types.js +49 -48
- package/dist/shadcn/accordion/index.js +3 -1
- package/dist/shadcn/alert/index.js +3 -1
- package/dist/shadcn/alert-dialog/index.js +3 -1
- package/dist/shadcn/attachment/index.js +3 -1
- package/dist/shadcn/avatar/index.js +3 -1
- package/dist/shadcn/breadcrumb/index.js +3 -1
- package/dist/shadcn/bubble/index.js +3 -1
- package/dist/shadcn/button/index.js +3 -1
- package/dist/shadcn/calendar/index.js +3 -1
- package/dist/shadcn/card/index.js +3 -1
- package/dist/shadcn/checkbox/index.js +3 -1
- package/dist/shadcn/code-block/index.js +3 -1
- package/dist/shadcn/collapsible/index.js +3 -1
- package/dist/shadcn/command/index.js +4 -1
- package/dist/shadcn/context-menu/index.js +3 -1
- package/dist/shadcn/dialog/index.js +3 -1
- package/dist/shadcn/dropdown-menu/menu-item.js +40 -20
- package/dist/shadcn/empty/index.js +3 -1
- package/dist/shadcn/field/index.js +3 -1
- package/dist/shadcn/hooks/highlighter.js +77 -75
- package/dist/shadcn/hooks/is-mobile.svelte.js +3 -3
- package/dist/shadcn/hooks/use-highlighted-code.svelte.js +62 -62
- package/dist/shadcn/input/index.js +3 -1
- package/dist/shadcn/kbd/index.js +3 -1
- package/dist/shadcn/label/index.js +3 -1
- package/dist/shadcn/marker/index.js +3 -1
- package/dist/shadcn/message/index.js +3 -1
- package/dist/shadcn/message-scroller/index.js +3 -1
- package/dist/shadcn/popover/index.js +3 -1
- package/dist/shadcn/progress/index.js +3 -1
- package/dist/shadcn/progress/tone.js +8 -7
- package/dist/shadcn/radio-group/index.js +3 -1
- package/dist/shadcn/scroll-area/index.js +3 -1
- package/dist/shadcn/select/index.js +3 -1
- package/dist/shadcn/separator/index.js +3 -1
- package/dist/shadcn/sheet/index.js +3 -1
- package/dist/shadcn/sidebar/context.svelte.js +42 -28
- package/dist/shadcn/sidebar/index.js +3 -1
- package/dist/shadcn/skeleton/index.js +3 -1
- package/dist/shadcn/slider/index.js +3 -1
- package/dist/shadcn/switch/index.js +3 -1
- package/dist/shadcn/table/index.js +3 -1
- package/dist/shadcn/tabs/index.js +3 -1
- package/dist/shadcn/textarea/index.js +3 -1
- package/dist/shadcn/toggle/index.js +3 -1
- package/dist/shadcn/toggle-group/index.js +3 -1
- package/dist/shadcn/tooltip/context.js +7 -2
- package/dist/shadcn/tooltip/index.js +3 -1
- package/dist/shadcn/trace/index.js +3 -1
- package/dist/slides/bridges.js +65 -59
- package/dist/slides/deck-controller.svelte.js +210 -207
- package/dist/slides/export/capture.js +66 -71
- package/dist/slides/export/ffmpeg.js +76 -72
- package/dist/slides/export/index.js +3 -0
- package/dist/slides/export/launch.js +9 -6
- package/dist/slides/export/pdf.js +60 -54
- package/dist/slides/export/types.js +1 -0
- package/dist/slides/labels.js +24 -24
- package/dist/slides/layout.js +39 -41
- package/dist/slides/model.js +9 -7
- package/dist/slides/navigation.js +78 -73
- package/dist/slides/types.js +2 -2
- package/dist/status/define-statuses.js +18 -14
- package/dist/status/status-types.js +1 -0
- package/dist/test-setup.js +24 -20
- package/dist/thread/logic.js +73 -77
- package/dist/thread/types.js +21 -21
- package/dist/work/board-order.js +94 -90
- package/dist/work/dates.js +16 -9
- package/dist/work/detail/detail-types.js +18 -18
- package/dist/work/docs/edited.js +32 -29
- package/dist/work/docs/index.js +4 -0
- package/dist/work/docs/labels.js +34 -34
- package/dist/work/docs/menu.js +113 -106
- package/dist/work/docs/outline.js +39 -29
- package/dist/work/gantt/logic.js +211 -235
- package/dist/work/inbox/inbox-logic.js +71 -75
- package/dist/work/inbox/inbox-statuses.js +75 -72
- package/dist/work/inbox/inbox-types.js +1 -0
- package/dist/work/kanban-drag.js +27 -22
- package/dist/work/kanban-types.js +1 -0
- package/dist/work/presets/sales.js +36 -32
- package/dist/work/reorder.js +9 -8
- package/dist/work/task-types.js +1 -0
- package/dist/work/time/duration.js +51 -46
- package/dist/work/time/time-types.js +23 -23
- package/dist/work/use-kanban-dnd.svelte.js +126 -125
- package/package.json +3 -1
- package/src/components/list-page/master-detail.svelte +3 -1
- package/src/components/list-page/rail-row.svelte +4 -4
- package/src/editor/markdown.ts +30 -35
package/dist/editor/block-id.js
CHANGED
|
@@ -1,62 +1,63 @@
|
|
|
1
1
|
import { Extension } from "@tiptap/core";
|
|
2
2
|
import { Plugin, PluginKey } from "@tiptap/pm/state";
|
|
3
|
+
// WHY: Top-level block types that need stable IDs for agentic read/write ops.
|
|
4
|
+
// Inline nodes (text, hardBreak) and list items are not top-level in ProseMirror
|
|
5
|
+
// doc structure, so they are excluded.
|
|
3
6
|
const TOP_LEVEL_BLOCK_TYPES = new Set([
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
"paragraph",
|
|
8
|
+
"heading",
|
|
9
|
+
"bulletList",
|
|
10
|
+
"orderedList",
|
|
11
|
+
"blockquote",
|
|
12
|
+
"codeBlock",
|
|
13
|
+
"horizontalRule"
|
|
11
14
|
]);
|
|
15
|
+
/** Generate a stable unique ID for a block. Uses crypto.randomUUID() which is
|
|
16
|
+
* available in Cloudflare Workers, Node 24+, and all modern browsers. */
|
|
12
17
|
export function generateBlockId() {
|
|
13
|
-
|
|
18
|
+
return crypto.randomUUID();
|
|
14
19
|
}
|
|
15
20
|
function isTopLevelBlock(node) {
|
|
16
|
-
|
|
21
|
+
return TOP_LEVEL_BLOCK_TYPES.has(node.type.name);
|
|
17
22
|
}
|
|
18
23
|
const blockIdPluginKey = new PluginKey("blockId");
|
|
24
|
+
/**
|
|
25
|
+
* TipTap extension that stamps a stable unique `id` on every top-level block,
|
|
26
|
+
* set on creation and kept on update. Opt in via the `blockIds` prop.
|
|
27
|
+
*/
|
|
19
28
|
export const BlockIdExtension = Extension.create({
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
});
|
|
55
|
-
changed = true;
|
|
56
|
-
});
|
|
57
|
-
return changed ? tr : null;
|
|
58
|
-
}
|
|
59
|
-
})
|
|
60
|
-
];
|
|
61
|
-
}
|
|
29
|
+
name: "blockId",
|
|
30
|
+
addGlobalAttributes() {
|
|
31
|
+
return [{
|
|
32
|
+
types: Array.from(TOP_LEVEL_BLOCK_TYPES),
|
|
33
|
+
attributes: { id: {
|
|
34
|
+
default: null,
|
|
35
|
+
parseHTML: (element) => element.getAttribute("data-block-id") || null,
|
|
36
|
+
renderHTML: (attributes) => {
|
|
37
|
+
if (!attributes.id) return {};
|
|
38
|
+
return { "data-block-id": attributes.id };
|
|
39
|
+
}
|
|
40
|
+
} }
|
|
41
|
+
}];
|
|
42
|
+
},
|
|
43
|
+
addProseMirrorPlugins() {
|
|
44
|
+
return [new Plugin({
|
|
45
|
+
key: blockIdPluginKey,
|
|
46
|
+
appendTransaction(_transactions, _oldState, newState) {
|
|
47
|
+
const { tr, doc } = newState;
|
|
48
|
+
let changed = false;
|
|
49
|
+
doc.forEach((node, offset) => {
|
|
50
|
+
if (!isTopLevelBlock(node)) return;
|
|
51
|
+
if (node.attrs.id) return;
|
|
52
|
+
const id = generateBlockId();
|
|
53
|
+
tr.setNodeMarkup(offset, undefined, {
|
|
54
|
+
...node.attrs,
|
|
55
|
+
id
|
|
56
|
+
});
|
|
57
|
+
changed = true;
|
|
58
|
+
});
|
|
59
|
+
return changed ? tr : null;
|
|
60
|
+
}
|
|
61
|
+
})];
|
|
62
|
+
}
|
|
62
63
|
});
|
package/dist/editor/block-ops.js
CHANGED
|
@@ -1,105 +1,133 @@
|
|
|
1
|
+
// WHY: pure, server-safe block edits. No DB, HTTP or DOM, and every op returns
|
|
2
|
+
// a new doc without touching the input.
|
|
3
|
+
// Top-level blocks must carry `id` attrs. An unknown id throws.
|
|
1
4
|
import { markdownToTiptap } from "./markdown.js";
|
|
5
|
+
// =========================
|
|
6
|
+
// HELPERS
|
|
7
|
+
// =========================
|
|
2
8
|
function extractText(nodes) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
if (!nodes?.length) return "";
|
|
10
|
+
return nodes.map((n) => {
|
|
11
|
+
if (n.type === "text") return n.text ?? "";
|
|
12
|
+
if (n.type === "hardBreak") return " ";
|
|
13
|
+
return extractText(n.content);
|
|
14
|
+
}).join("");
|
|
9
15
|
}
|
|
10
16
|
function blockText(node) {
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
// For list nodes, join item texts separated by spaces.
|
|
18
|
+
const raw = extractText(node.content).trim();
|
|
19
|
+
// Truncate for preview.
|
|
20
|
+
return raw.length > 120 ? raw.slice(0, 117) + "..." : raw;
|
|
13
21
|
}
|
|
14
22
|
function getId(node) {
|
|
15
|
-
|
|
16
|
-
|
|
23
|
+
const id = node.attrs?.id;
|
|
24
|
+
return typeof id === "string" && id.length > 0 ? id : null;
|
|
17
25
|
}
|
|
18
26
|
function requireDoc(doc) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
const d = doc;
|
|
28
|
+
if (!d || d.type !== "doc" || !Array.isArray(d.content)) {
|
|
29
|
+
throw new Error("Invalid doc: expected { type: 'doc', content: [...] }");
|
|
30
|
+
}
|
|
31
|
+
return d;
|
|
24
32
|
}
|
|
25
33
|
function requireBlockById(doc, id) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
const idx = doc.content.findIndex((n) => getId(n) === id);
|
|
35
|
+
if (idx === -1) {
|
|
36
|
+
throw new Error(`Block id "${id}" not found in doc`);
|
|
37
|
+
}
|
|
38
|
+
return idx;
|
|
31
39
|
}
|
|
32
40
|
function newBlocksFromMd(markdown) {
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
const parsed = markdownToTiptap(markdown);
|
|
42
|
+
return parsed.content;
|
|
35
43
|
}
|
|
44
|
+
// =========================
|
|
45
|
+
// PUBLIC OPS
|
|
46
|
+
// =========================
|
|
47
|
+
/**
|
|
48
|
+
* Return a flat list of top-level blocks with id, type, and plain-text preview.
|
|
49
|
+
*/
|
|
36
50
|
export function listBlocks(doc) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
51
|
+
const d = requireDoc(doc);
|
|
52
|
+
return d.content.map((node) => ({
|
|
53
|
+
id: getId(node) ?? "",
|
|
54
|
+
type: node.type,
|
|
55
|
+
text: blockText(node)
|
|
56
|
+
}));
|
|
43
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Append blocks parsed from `markdown` after the last block.
|
|
60
|
+
* Returns a new doc.
|
|
61
|
+
*/
|
|
44
62
|
export function appendBlocks(doc, markdown) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
...added
|
|
52
|
-
]
|
|
53
|
-
};
|
|
63
|
+
const d = requireDoc(doc);
|
|
64
|
+
const added = newBlocksFromMd(markdown);
|
|
65
|
+
return {
|
|
66
|
+
type: "doc",
|
|
67
|
+
content: [...d.content, ...added]
|
|
68
|
+
};
|
|
54
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Prepend blocks parsed from `markdown` before the first block.
|
|
72
|
+
* Returns a new doc.
|
|
73
|
+
*/
|
|
55
74
|
export function prependBlocks(doc, markdown) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
...d.content
|
|
63
|
-
]
|
|
64
|
-
};
|
|
75
|
+
const d = requireDoc(doc);
|
|
76
|
+
const added = newBlocksFromMd(markdown);
|
|
77
|
+
return {
|
|
78
|
+
type: "doc",
|
|
79
|
+
content: [...added, ...d.content]
|
|
80
|
+
};
|
|
65
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Insert blocks parsed from `markdown` immediately after the block with `afterId`.
|
|
84
|
+
* Throws if `afterId` does not exist.
|
|
85
|
+
* Returns a new doc.
|
|
86
|
+
*/
|
|
66
87
|
export function insertBlocksAfter(doc, afterId, markdown) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
88
|
+
const d = requireDoc(doc);
|
|
89
|
+
const idx = requireBlockById(d, afterId);
|
|
90
|
+
const added = newBlocksFromMd(markdown);
|
|
91
|
+
const content = [
|
|
92
|
+
...d.content.slice(0, idx + 1),
|
|
93
|
+
...added,
|
|
94
|
+
...d.content.slice(idx + 1)
|
|
95
|
+
];
|
|
96
|
+
return {
|
|
97
|
+
type: "doc",
|
|
98
|
+
content
|
|
99
|
+
};
|
|
79
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Replace the block with `id` with blocks parsed from `markdown`.
|
|
103
|
+
* Throws if `id` does not exist.
|
|
104
|
+
* Returns a new doc.
|
|
105
|
+
*/
|
|
80
106
|
export function replaceBlock(doc, id, markdown) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
107
|
+
const d = requireDoc(doc);
|
|
108
|
+
const idx = requireBlockById(d, id);
|
|
109
|
+
const added = newBlocksFromMd(markdown);
|
|
110
|
+
const content = [
|
|
111
|
+
...d.content.slice(0, idx),
|
|
112
|
+
...added,
|
|
113
|
+
...d.content.slice(idx + 1)
|
|
114
|
+
];
|
|
115
|
+
return {
|
|
116
|
+
type: "doc",
|
|
117
|
+
content
|
|
118
|
+
};
|
|
93
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Delete the block with `id`.
|
|
122
|
+
* Throws if `id` does not exist.
|
|
123
|
+
* Returns a new doc.
|
|
124
|
+
*/
|
|
94
125
|
export function deleteBlock(doc, id) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
type: "doc",
|
|
103
|
-
content
|
|
104
|
-
};
|
|
126
|
+
const d = requireDoc(doc);
|
|
127
|
+
const idx = requireBlockById(d, id);
|
|
128
|
+
const content = [...d.content.slice(0, idx), ...d.content.slice(idx + 1)];
|
|
129
|
+
return {
|
|
130
|
+
type: "doc",
|
|
131
|
+
content
|
|
132
|
+
};
|
|
105
133
|
}
|