@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.
Files changed (266) hide show
  1. package/dist/agents/helpers.js +38 -38
  2. package/dist/agents/page-state.js +49 -50
  3. package/dist/agents/vendor/color.js +146 -127
  4. package/dist/agents/vendor/draw.js +617 -508
  5. package/dist/agents/vendor/engine.js +698 -599
  6. package/dist/agents/vendor/mesh.js +653 -683
  7. package/dist/agents/vendor/plastic.js +3913 -3112
  8. package/dist/agents/vendor/presets.js +163 -164
  9. package/dist/agents/vendor/shapes.js +21 -20
  10. package/dist/agents/vendor/ticker.js +41 -42
  11. package/dist/agents/vendor/types.js +1 -0
  12. package/dist/agents/vendor/wear.js +1421 -1448
  13. package/dist/ai/confirmation/confirmation-context.svelte.js +6 -6
  14. package/dist/ai/confirmation/index.js +3 -1
  15. package/dist/ai/index.js +33 -0
  16. package/dist/ai/prompt-input/index.js +3 -1
  17. package/dist/ai/reasoning/index.js +3 -1
  18. package/dist/ai/reasoning/reasoning-context.svelte.js +6 -6
  19. package/dist/ai/suggestion/index.js +3 -1
  20. package/dist/ai/typing-dots/index.js +3 -1
  21. package/dist/animations/text-swap.js +24 -24
  22. package/dist/brand/index.js +54 -48
  23. package/dist/canvas/card/resize.js +5 -3
  24. package/dist/canvas/edges/edge-path.js +255 -242
  25. package/dist/canvas/editor/context-menu.js +39 -36
  26. package/dist/canvas/editor/dispatch.svelte.js +154 -151
  27. package/dist/canvas/editor/editor-context.js +7 -2
  28. package/dist/canvas/editor/editor-mode.js +1 -0
  29. package/dist/canvas/editor/frame.js +73 -76
  30. package/dist/canvas/editor/hand-context.js +5 -2
  31. package/dist/canvas/editor/history-core.js +163 -191
  32. package/dist/canvas/editor/keymap.js +95 -169
  33. package/dist/canvas/editor/layout-actions.js +143 -144
  34. package/dist/canvas/editor/lock.js +52 -51
  35. package/dist/canvas/editor/rebase.js +217 -240
  36. package/dist/canvas/editor/style.js +132 -137
  37. package/dist/canvas/editor/text-field-context.js +7 -2
  38. package/dist/canvas/editor/z-order.js +65 -70
  39. package/dist/canvas/headless/alignment.js +22 -16
  40. package/dist/canvas/headless/break-apart-find.js +286 -279
  41. package/dist/canvas/headless/break-apart-pieces.js +62 -58
  42. package/dist/canvas/headless/break-apart-plan.js +299 -325
  43. package/dist/canvas/headless/break-apart-style.js +75 -70
  44. package/dist/canvas/headless/break-apart.js +188 -181
  45. package/dist/canvas/headless/canvas-cleanup.js +78 -58
  46. package/dist/canvas/headless/edge-anchors.js +115 -116
  47. package/dist/canvas/headless/edge-memo.js +24 -22
  48. package/dist/canvas/headless/edge-serialization.js +17 -27
  49. package/dist/canvas/headless/figure-geometry.js +232 -264
  50. package/dist/canvas/headless/fit-viewport.js +84 -67
  51. package/dist/canvas/headless/grid.js +88 -86
  52. package/dist/canvas/headless/icon-node.js +44 -36
  53. package/dist/canvas/headless/index.js +1 -0
  54. package/dist/canvas/headless/linkify.js +17 -19
  55. package/dist/canvas/headless/pen-marks.js +101 -95
  56. package/dist/canvas/headless/sketch.js +231 -209
  57. package/dist/canvas/headless/snap-guides.js +99 -83
  58. package/dist/canvas/headless/svg-figure.js +133 -117
  59. package/dist/canvas/headless/table-layout.js +146 -107
  60. package/dist/canvas/index.js +2 -0
  61. package/dist/canvas/lod/lod-mode.svelte.js +20 -18
  62. package/dist/canvas/lod/render-all.svelte.js +36 -39
  63. package/dist/canvas/ops/arrange.js +78 -71
  64. package/dist/canvas/ops/ops.js +260 -255
  65. package/dist/canvas/pen/colors.js +37 -35
  66. package/dist/canvas/pen/eraser.js +28 -27
  67. package/dist/canvas/pen/geometry.js +120 -130
  68. package/dist/canvas/pen/index.js +1 -0
  69. package/dist/canvas/pen/ops.js +11 -11
  70. package/dist/canvas/pen/pen-session.js +150 -159
  71. package/dist/canvas/pen/plugin.js +107 -104
  72. package/dist/canvas/pen/shapes.js +73 -68
  73. package/dist/canvas/pen/stroke-path.js +32 -30
  74. package/dist/canvas/pen/types.js +21 -21
  75. package/dist/canvas/pen/ui.js +10 -8
  76. package/dist/canvas/plugin.js +46 -46
  77. package/dist/canvas/screen/glyphs.js +12 -11
  78. package/dist/canvas/screen/labels.js +22 -22
  79. package/dist/canvas/screen/parts.js +98 -111
  80. package/dist/canvas/screen/plugin.js +47 -56
  81. package/dist/canvas/screen/types.js +30 -35
  82. package/dist/canvas/screen/ui.js +7 -7
  83. package/dist/canvas/test-utils.js +14 -14
  84. package/dist/canvas/types.js +1 -0
  85. package/dist/canvas/ui/forward-wheel.js +24 -25
  86. package/dist/canvas/ui/icons.js +64 -131
  87. package/dist/canvas/ui/place-panel.js +58 -49
  88. package/dist/canvas/ui/shortcut-tip.js +14 -12
  89. package/dist/canvas/ui/tools.js +300 -385
  90. package/dist/charts/dashboard/chart.js +4 -0
  91. package/dist/charts/dashboard/data-table.js +11 -0
  92. package/dist/charts/dashboard/windows.js +8 -3
  93. package/dist/charts/edge-fade.js +10 -5
  94. package/dist/charts/hover-band.js +16 -11
  95. package/dist/charts/index.js +0 -1
  96. package/dist/charts/motion.js +11 -7
  97. package/dist/charts/primitives/chart-utils.js +12 -12
  98. package/dist/components/copy/clipboard.js +32 -32
  99. package/dist/components/copy/copied.svelte.js +31 -23
  100. package/dist/components/data-table/data-table.js +39 -39
  101. package/dist/components/docs/index.js +4 -0
  102. package/dist/components/docs/scroll-spy.svelte.js +73 -68
  103. package/dist/components/list-page/filter-section.js +4 -1
  104. package/dist/components/list-page/index.js +2 -0
  105. package/dist/components/list-page/list-table.js +7 -2
  106. package/dist/components/list-page/queue-rail.js +14 -0
  107. package/dist/components/list-page/section-host.js +4 -2
  108. package/dist/components/list-page/step.js +4 -3
  109. package/dist/components/list-page/types.js +1 -0
  110. package/dist/components/picker/trigger.js +48 -30
  111. package/dist/components/picker/types.js +1 -0
  112. package/dist/components/segmented/collapse.js +38 -27
  113. package/dist/components/segmented/index.js +8 -0
  114. package/dist/components/segmented/segmented.js +67 -42
  115. package/dist/components/star-rating-input/index.js +3 -1
  116. package/dist/components/table-view/types.js +1 -0
  117. package/dist/components/tags-input/tags.js +81 -69
  118. package/dist/components/theme/index.js +4 -0
  119. package/dist/components/toolbar/index.js +4 -0
  120. package/dist/components/toolbar/toolbar-trigger.js +14 -1
  121. package/dist/editor/anchors.js +17 -13
  122. package/dist/editor/block-id.js +52 -51
  123. package/dist/editor/block-ops.js +108 -80
  124. package/dist/editor/doc-blocks.js +155 -166
  125. package/dist/editor/extensions.js +139 -180
  126. package/dist/editor/index.js +4 -0
  127. package/dist/editor/markdown-test-helpers.js +4 -2
  128. package/dist/editor/markdown.js +420 -408
  129. package/dist/editor/serializer.js +204 -200
  130. package/dist/editor/slash-items.js +89 -101
  131. package/dist/editor/youtube-url.js +25 -20
  132. package/dist/effects/animated-beam/path-calculator.svelte.js +43 -38
  133. package/dist/effects/animated-beam/types.js +1 -0
  134. package/dist/effects/border-beam/css.js +92 -78
  135. package/dist/effects/border-beam/presets.js +1705 -1720
  136. package/dist/effects/border-beam/register-properties.js +43 -33
  137. package/dist/effects/border-beam/types.js +1 -0
  138. package/dist/effects/image-comparison/compare.js +3 -2
  139. package/dist/effects/image-reveal/types.js +1 -0
  140. package/dist/effects/magnetic/magnetic.js +58 -52
  141. package/dist/effects/reveal/observe.js +50 -40
  142. package/dist/effects/reveal/types.js +1 -0
  143. package/dist/effects/shader-gradient/color.js +36 -29
  144. package/dist/effects/shader-gradient/renderer.js +384 -295
  145. package/dist/effects/shader-gradient/shaders.js +31 -0
  146. package/dist/effects/shader-gradient/types.js +1 -0
  147. package/dist/icons/apple-symbol-exports.js +99 -124
  148. package/dist/icons/sf-symbols.js +357 -461
  149. package/dist/icons/trades.js +43 -28
  150. package/dist/inbox/index.js +1 -0
  151. package/dist/inbox/logic.js +126 -122
  152. package/dist/inbox/types.js +43 -43
  153. package/dist/lib/arrive.js +19 -12
  154. package/dist/lib/icon-types.js +1 -0
  155. package/dist/lib/initials.js +16 -10
  156. package/dist/lib/layout.js +5 -0
  157. package/dist/lib/panel.js +13 -0
  158. package/dist/lib/result.js +22 -22
  159. package/dist/lib/sliding-pill.js +59 -44
  160. package/dist/lib/theme-transition.js +43 -43
  161. package/dist/lib/tone.js +31 -24
  162. package/dist/lib/utils.js +3 -1
  163. package/dist/onboarding/define-tours.js +24 -23
  164. package/dist/onboarding/onboarding.svelte.js +16 -12
  165. package/dist/onboarding/pick.js +10 -6
  166. package/dist/onboarding/stores.js +40 -41
  167. package/dist/onboarding/wait.js +24 -23
  168. package/dist/panel/side-panel-types.js +1 -0
  169. package/dist/record/demo-data.js +459 -486
  170. package/dist/record/fields.js +129 -131
  171. package/dist/record/format.js +70 -82
  172. package/dist/record/gutter.js +1 -0
  173. package/dist/record/kinds.js +95 -105
  174. package/dist/record/logic.js +238 -219
  175. package/dist/record/types.js +49 -48
  176. package/dist/shadcn/accordion/index.js +3 -1
  177. package/dist/shadcn/alert/index.js +3 -1
  178. package/dist/shadcn/alert-dialog/index.js +3 -1
  179. package/dist/shadcn/attachment/index.js +3 -1
  180. package/dist/shadcn/avatar/index.js +3 -1
  181. package/dist/shadcn/breadcrumb/index.js +3 -1
  182. package/dist/shadcn/bubble/index.js +3 -1
  183. package/dist/shadcn/button/index.js +3 -1
  184. package/dist/shadcn/calendar/index.js +3 -1
  185. package/dist/shadcn/card/index.js +3 -1
  186. package/dist/shadcn/checkbox/index.js +3 -1
  187. package/dist/shadcn/code-block/index.js +3 -1
  188. package/dist/shadcn/collapsible/index.js +3 -1
  189. package/dist/shadcn/command/index.js +4 -1
  190. package/dist/shadcn/context-menu/index.js +3 -1
  191. package/dist/shadcn/dialog/index.js +3 -1
  192. package/dist/shadcn/dropdown-menu/menu-item.js +40 -20
  193. package/dist/shadcn/empty/index.js +3 -1
  194. package/dist/shadcn/field/index.js +3 -1
  195. package/dist/shadcn/hooks/highlighter.js +77 -75
  196. package/dist/shadcn/hooks/is-mobile.svelte.js +3 -3
  197. package/dist/shadcn/hooks/use-highlighted-code.svelte.js +62 -62
  198. package/dist/shadcn/input/index.js +3 -1
  199. package/dist/shadcn/kbd/index.js +3 -1
  200. package/dist/shadcn/label/index.js +3 -1
  201. package/dist/shadcn/marker/index.js +3 -1
  202. package/dist/shadcn/message/index.js +3 -1
  203. package/dist/shadcn/message-scroller/index.js +3 -1
  204. package/dist/shadcn/popover/index.js +3 -1
  205. package/dist/shadcn/progress/index.js +3 -1
  206. package/dist/shadcn/progress/tone.js +8 -7
  207. package/dist/shadcn/radio-group/index.js +3 -1
  208. package/dist/shadcn/scroll-area/index.js +3 -1
  209. package/dist/shadcn/select/index.js +3 -1
  210. package/dist/shadcn/separator/index.js +3 -1
  211. package/dist/shadcn/sheet/index.js +3 -1
  212. package/dist/shadcn/sidebar/context.svelte.js +42 -28
  213. package/dist/shadcn/sidebar/index.js +3 -1
  214. package/dist/shadcn/skeleton/index.js +3 -1
  215. package/dist/shadcn/slider/index.js +3 -1
  216. package/dist/shadcn/switch/index.js +3 -1
  217. package/dist/shadcn/table/index.js +3 -1
  218. package/dist/shadcn/tabs/index.js +3 -1
  219. package/dist/shadcn/textarea/index.js +3 -1
  220. package/dist/shadcn/toggle/index.js +3 -1
  221. package/dist/shadcn/toggle-group/index.js +3 -1
  222. package/dist/shadcn/tooltip/context.js +7 -2
  223. package/dist/shadcn/tooltip/index.js +3 -1
  224. package/dist/shadcn/trace/index.js +3 -1
  225. package/dist/slides/bridges.js +65 -59
  226. package/dist/slides/deck-controller.svelte.js +210 -207
  227. package/dist/slides/export/capture.js +66 -71
  228. package/dist/slides/export/ffmpeg.js +76 -72
  229. package/dist/slides/export/index.js +3 -0
  230. package/dist/slides/export/launch.js +9 -6
  231. package/dist/slides/export/pdf.js +60 -54
  232. package/dist/slides/export/types.js +1 -0
  233. package/dist/slides/labels.js +24 -24
  234. package/dist/slides/layout.js +39 -41
  235. package/dist/slides/model.js +9 -7
  236. package/dist/slides/navigation.js +78 -73
  237. package/dist/slides/types.js +2 -2
  238. package/dist/status/define-statuses.js +18 -14
  239. package/dist/status/status-types.js +1 -0
  240. package/dist/test-setup.js +24 -20
  241. package/dist/thread/logic.js +73 -77
  242. package/dist/thread/types.js +21 -21
  243. package/dist/work/board-order.js +94 -90
  244. package/dist/work/dates.js +16 -9
  245. package/dist/work/detail/detail-types.js +18 -18
  246. package/dist/work/docs/edited.js +32 -29
  247. package/dist/work/docs/index.js +4 -0
  248. package/dist/work/docs/labels.js +34 -34
  249. package/dist/work/docs/menu.js +113 -106
  250. package/dist/work/docs/outline.js +39 -29
  251. package/dist/work/gantt/logic.js +211 -235
  252. package/dist/work/inbox/inbox-logic.js +71 -75
  253. package/dist/work/inbox/inbox-statuses.js +75 -72
  254. package/dist/work/inbox/inbox-types.js +1 -0
  255. package/dist/work/kanban-drag.js +27 -22
  256. package/dist/work/kanban-types.js +1 -0
  257. package/dist/work/presets/sales.js +36 -32
  258. package/dist/work/reorder.js +9 -8
  259. package/dist/work/task-types.js +1 -0
  260. package/dist/work/time/duration.js +51 -46
  261. package/dist/work/time/time-types.js +23 -23
  262. package/dist/work/use-kanban-dnd.svelte.js +126 -125
  263. package/package.json +3 -1
  264. package/src/components/list-page/master-detail.svelte +3 -1
  265. package/src/components/list-page/rail-row.svelte +4 -4
  266. package/src/editor/markdown.ts +30 -35
@@ -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
- "paragraph",
5
- "heading",
6
- "bulletList",
7
- "orderedList",
8
- "blockquote",
9
- "codeBlock",
10
- "horizontalRule"
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
- return crypto.randomUUID();
18
+ return crypto.randomUUID();
14
19
  }
15
20
  function isTopLevelBlock(node) {
16
- return TOP_LEVEL_BLOCK_TYPES.has(node.type.name);
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
- name: "blockId",
21
- addGlobalAttributes () {
22
- return [
23
- {
24
- types: Array.from(TOP_LEVEL_BLOCK_TYPES),
25
- attributes: {
26
- id: {
27
- default: null,
28
- parseHTML: (element)=>element.getAttribute("data-block-id") || null,
29
- renderHTML: (attributes)=>{
30
- if (!attributes.id) return {};
31
- return {
32
- "data-block-id": attributes.id
33
- };
34
- }
35
- }
36
- }
37
- }
38
- ];
39
- },
40
- addProseMirrorPlugins () {
41
- return [
42
- new Plugin({
43
- key: blockIdPluginKey,
44
- appendTransaction (_transactions, _oldState, newState) {
45
- const { tr, doc } = newState;
46
- let changed = false;
47
- doc.forEach((node, offset)=>{
48
- if (!isTopLevelBlock(node)) return;
49
- if (node.attrs.id) return;
50
- const id = generateBlockId();
51
- tr.setNodeMarkup(offset, undefined, {
52
- ...node.attrs,
53
- id
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
  });
@@ -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
- if (!nodes?.length) return "";
4
- return nodes.map((n)=>{
5
- if (n.type === "text") return n.text ?? "";
6
- if (n.type === "hardBreak") return " ";
7
- return extractText(n.content);
8
- }).join("");
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
- const raw = extractText(node.content).trim();
12
- return raw.length > 120 ? raw.slice(0, 117) + "..." : raw;
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
- const id = node.attrs?.id;
16
- return typeof id === "string" && id.length > 0 ? id : null;
23
+ const id = node.attrs?.id;
24
+ return typeof id === "string" && id.length > 0 ? id : null;
17
25
  }
18
26
  function requireDoc(doc) {
19
- const d = doc;
20
- if (!d || d.type !== "doc" || !Array.isArray(d.content)) {
21
- throw new Error("Invalid doc: expected { type: 'doc', content: [...] }");
22
- }
23
- return d;
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
- const idx = doc.content.findIndex((n)=>getId(n) === id);
27
- if (idx === -1) {
28
- throw new Error(`Block id "${id}" not found in doc`);
29
- }
30
- return idx;
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
- const parsed = markdownToTiptap(markdown);
34
- return parsed.content;
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
- const d = requireDoc(doc);
38
- return d.content.map((node)=>({
39
- id: getId(node) ?? "",
40
- type: node.type,
41
- text: blockText(node)
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
- const d = requireDoc(doc);
46
- const added = newBlocksFromMd(markdown);
47
- return {
48
- type: "doc",
49
- content: [
50
- ...d.content,
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
- const d = requireDoc(doc);
57
- const added = newBlocksFromMd(markdown);
58
- return {
59
- type: "doc",
60
- content: [
61
- ...added,
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
- const d = requireDoc(doc);
68
- const idx = requireBlockById(d, afterId);
69
- const added = newBlocksFromMd(markdown);
70
- const content = [
71
- ...d.content.slice(0, idx + 1),
72
- ...added,
73
- ...d.content.slice(idx + 1)
74
- ];
75
- return {
76
- type: "doc",
77
- content
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
- const d = requireDoc(doc);
82
- const idx = requireBlockById(d, id);
83
- const added = newBlocksFromMd(markdown);
84
- const content = [
85
- ...d.content.slice(0, idx),
86
- ...added,
87
- ...d.content.slice(idx + 1)
88
- ];
89
- return {
90
- type: "doc",
91
- content
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
- const d = requireDoc(doc);
96
- const idx = requireBlockById(d, id);
97
- const content = [
98
- ...d.content.slice(0, idx),
99
- ...d.content.slice(idx + 1)
100
- ];
101
- return {
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
  }