@elabs-ai/components-editor 4.0.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.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/chunk-LBC5VJBD.js +3748 -0
  4. package/dist/chunk-LBC5VJBD.js.map +1 -0
  5. package/dist/index.css +233 -0
  6. package/dist/index.css.map +1 -0
  7. package/dist/index.d.ts +199 -0
  8. package/dist/index.js +362 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/monaco-environment.d.ts +2 -0
  11. package/dist/lib/monaco-environment.js +44 -0
  12. package/dist/lib/monaco-environment.js.map +1 -0
  13. package/dist/markdown/frontmatter.d.ts +11 -0
  14. package/dist/markdown/frontmatter.js +33 -0
  15. package/dist/markdown/frontmatter.js.map +1 -0
  16. package/dist/markdown/index.css +233 -0
  17. package/dist/markdown/index.css.map +1 -0
  18. package/dist/markdown/index.d.ts +1486 -0
  19. package/dist/markdown/index.js +4882 -0
  20. package/dist/markdown/index.js.map +1 -0
  21. package/dist/markdown/parse.d.ts +25 -0
  22. package/dist/markdown/parse.js +14 -0
  23. package/dist/markdown/parse.js.map +1 -0
  24. package/dist/markdown-editor-DfBZibAn.d.ts +702 -0
  25. package/package.json +101 -0
  26. package/src/ai-objects/ai-objects-integration.test.tsx +128 -0
  27. package/src/ai-objects/ai-objects.stories.tsx +233 -0
  28. package/src/ai-objects/ai-objects.test.tsx +205 -0
  29. package/src/ai-objects/decision-card.tsx +178 -0
  30. package/src/ai-objects/directives.ts +136 -0
  31. package/src/ai-objects/entity.tsx +181 -0
  32. package/src/ai-objects/index.ts +34 -0
  33. package/src/ai-objects/knowledge-card.tsx +143 -0
  34. package/src/calc-block/calc-block.stories.tsx +297 -0
  35. package/src/calc-block/calc-block.test.tsx +164 -0
  36. package/src/calc-block/calc-block.tsx +398 -0
  37. package/src/calc-block/calc-editor-monaco.ts +214 -0
  38. package/src/calc-block/calc-editor-prose.ts +128 -0
  39. package/src/calc-block/calc-editor.css +80 -0
  40. package/src/calc-block/calc-editor.stories.tsx +272 -0
  41. package/src/calc-block/calc-editor.test.ts +228 -0
  42. package/src/calc-block/calc-editor.ts +270 -0
  43. package/src/calc-block/calc-inline.stories.tsx +44 -0
  44. package/src/calc-block/calc-inline.test.tsx +44 -0
  45. package/src/calc-block/calc-inline.tsx +75 -0
  46. package/src/calc-block/index.ts +20 -0
  47. package/src/calc-block/types.ts +164 -0
  48. package/src/code-editor/code-editor.stories.tsx +218 -0
  49. package/src/code-editor/code-editor.test.tsx +134 -0
  50. package/src/code-editor/code-editor.tsx +250 -0
  51. package/src/code-editor/index.ts +6 -0
  52. package/src/code-workspace/code-workspace.stories.tsx +51 -0
  53. package/src/code-workspace/code-workspace.test.tsx +146 -0
  54. package/src/code-workspace/code-workspace.tsx +253 -0
  55. package/src/code-workspace/index.ts +6 -0
  56. package/src/copy-button/copy-button.tsx +51 -0
  57. package/src/copy-button/index.ts +1 -0
  58. package/src/css.d.ts +3 -0
  59. package/src/diff-editor/diff-editor.stories.tsx +44 -0
  60. package/src/diff-editor/diff-editor.test.tsx +68 -0
  61. package/src/diff-editor/diff-editor.tsx +151 -0
  62. package/src/diff-editor/index.ts +1 -0
  63. package/src/editor-context-menu/editor-context-menu.tsx +120 -0
  64. package/src/editor-context-menu/index.ts +1 -0
  65. package/src/editor-toolbar/editor-toolbar.tsx +83 -0
  66. package/src/editor-toolbar/index.ts +1 -0
  67. package/src/index.ts +48 -0
  68. package/src/lib/editor-completions-monaco.test.ts +206 -0
  69. package/src/lib/editor-completions-monaco.ts +127 -0
  70. package/src/lib/editor-completions.test.ts +156 -0
  71. package/src/lib/editor-completions.ts +153 -0
  72. package/src/lib/editor-content-access-prose.test.ts +411 -0
  73. package/src/lib/editor-content-access-prose.ts +172 -0
  74. package/src/lib/editor-content-access.test.ts +182 -0
  75. package/src/lib/editor-content-access.ts +109 -0
  76. package/src/lib/languages.ts +32 -0
  77. package/src/lib/markdown/diff.test.ts +80 -0
  78. package/src/lib/markdown/diff.ts +194 -0
  79. package/src/lib/markdown/directives.ts +342 -0
  80. package/src/lib/markdown/frontmatter.ts +50 -0
  81. package/src/lib/markdown/markdown-scale.test.ts +65 -0
  82. package/src/lib/markdown/markdown-scale.ts +62 -0
  83. package/src/lib/markdown/merge.test.ts +64 -0
  84. package/src/lib/markdown/merge.ts +158 -0
  85. package/src/lib/markdown/slugify.test.ts +156 -0
  86. package/src/lib/markdown/slugify.ts +47 -0
  87. package/src/lib/monaco-environment.ts +103 -0
  88. package/src/lib/monaco-theme-bridge.ts +293 -0
  89. package/src/lib/use-data-theme.ts +61 -0
  90. package/src/markdown/frontmatter.ts +14 -0
  91. package/src/markdown/index.ts +323 -0
  92. package/src/markdown/parse.test.ts +60 -0
  93. package/src/markdown/parse.ts +38 -0
  94. package/src/markdown-academic/citations.test.ts +77 -0
  95. package/src/markdown-academic/citations.tsx +442 -0
  96. package/src/markdown-academic/footnotes.tsx +235 -0
  97. package/src/markdown-academic/index.ts +32 -0
  98. package/src/markdown-academic/math.tsx +163 -0
  99. package/src/markdown-academic/toc.tsx +88 -0
  100. package/src/markdown-editor/completions/completions-menu.tsx +96 -0
  101. package/src/markdown-editor/completions/completions-prose.test.ts +356 -0
  102. package/src/markdown-editor/completions/completions-prose.ts +313 -0
  103. package/src/markdown-editor/completions/completions-widget.tsx +75 -0
  104. package/src/markdown-editor/completions/index.ts +37 -0
  105. package/src/markdown-editor/directive-nodes.ts +151 -0
  106. package/src/markdown-editor/directive-views.test.tsx +189 -0
  107. package/src/markdown-editor/directive-views.tsx +795 -0
  108. package/src/markdown-editor/exit-keymap.test.ts +88 -0
  109. package/src/markdown-editor/exit-keymap.ts +87 -0
  110. package/src/markdown-editor/index.ts +6 -0
  111. package/src/markdown-editor/markdown-editor.css +250 -0
  112. package/src/markdown-editor/markdown-editor.directives.test.tsx +105 -0
  113. package/src/markdown-editor/markdown-editor.fill.test.ts +34 -0
  114. package/src/markdown-editor/markdown-editor.paste-embed.test.tsx +297 -0
  115. package/src/markdown-editor/markdown-editor.stories.tsx +560 -0
  116. package/src/markdown-editor/markdown-editor.strictmode.test.tsx +38 -0
  117. package/src/markdown-editor/markdown-editor.table.test.tsx +287 -0
  118. package/src/markdown-editor/markdown-editor.tsx +560 -0
  119. package/src/markdown-editor/milkdown-react/editor.tsx +33 -0
  120. package/src/markdown-editor/milkdown-react/index.ts +8 -0
  121. package/src/markdown-editor/milkdown-react/types.ts +27 -0
  122. package/src/markdown-editor/milkdown-react/use-editor.ts +27 -0
  123. package/src/markdown-editor/milkdown-react/use-get-editor.ts +56 -0
  124. package/src/markdown-editor/milkdown-react/use-instance.ts +23 -0
  125. package/src/markdown-editor/paste-embed.ts +355 -0
  126. package/src/markdown-editor/slash/brand-slash-commands.test.ts +194 -0
  127. package/src/markdown-editor/slash/brand-slash-commands.ts +324 -0
  128. package/src/markdown-editor/slash/brand-slash-plugin.test.ts +254 -0
  129. package/src/markdown-editor/slash/brand-slash-plugin.ts +385 -0
  130. package/src/markdown-editor/slash/index.ts +107 -0
  131. package/src/markdown-editor/slash/insert-directive.test.ts +263 -0
  132. package/src/markdown-editor/slash/insert-directive.ts +345 -0
  133. package/src/markdown-editor/slash/monaco-slash-menu.test.tsx +198 -0
  134. package/src/markdown-editor/slash/monaco-slash-menu.tsx +356 -0
  135. package/src/markdown-editor/slash/shortcut-monaco.ts +69 -0
  136. package/src/markdown-editor/slash/shortcut.test.ts +157 -0
  137. package/src/markdown-editor/slash/shortcut.ts +57 -0
  138. package/src/markdown-editor/slash/slash-menu.stories.tsx +139 -0
  139. package/src/markdown-editor/slash/slash-menu.tsx +115 -0
  140. package/src/markdown-editor/slash/slash-scroll.test.tsx +52 -0
  141. package/src/markdown-editor/slash/slash-widget.tsx +97 -0
  142. package/src/markdown-editor/slash/source-slash-trigger.test.ts +42 -0
  143. package/src/markdown-editor/slash/source-slash-trigger.ts +46 -0
  144. package/src/markdown-editor/table-view.tsx +249 -0
  145. package/src/markdown-iteration/directive.tsx +92 -0
  146. package/src/markdown-iteration/edit-context.ts +56 -0
  147. package/src/markdown-iteration/index.ts +24 -0
  148. package/src/markdown-iteration/iteration-block.test.tsx +138 -0
  149. package/src/markdown-iteration/iteration-builder-dialog.stories.tsx +293 -0
  150. package/src/markdown-iteration/iteration-builder-dialog.tsx +312 -0
  151. package/src/markdown-iteration/iteration-builder.test.ts +252 -0
  152. package/src/markdown-iteration/iteration-builder.ts +303 -0
  153. package/src/markdown-iteration/iteration.test.ts +56 -0
  154. package/src/markdown-iteration/iteration.tsx +333 -0
  155. package/src/markdown-iteration/template-dialog.stories.tsx +63 -0
  156. package/src/markdown-iteration/template-dialog.test.tsx +104 -0
  157. package/src/markdown-iteration/template-dialog.tsx +116 -0
  158. package/src/markdown-outline/document-outline.stories.tsx +76 -0
  159. package/src/markdown-outline/document-outline.tsx +83 -0
  160. package/src/markdown-outline/index.ts +2 -0
  161. package/src/markdown-outline/markdown-outline.test.ts +49 -0
  162. package/src/markdown-outline/markdown-outline.ts +60 -0
  163. package/src/markdown-preview/code-fence.tsx +193 -0
  164. package/src/markdown-preview/index.ts +8 -0
  165. package/src/markdown-preview/markdown-preview-academic.stories.tsx +203 -0
  166. package/src/markdown-preview/markdown-preview-academic.test.tsx +257 -0
  167. package/src/markdown-preview/markdown-preview-iteration-calc.test.tsx +71 -0
  168. package/src/markdown-preview/markdown-preview-iteration-nested.test.tsx +58 -0
  169. package/src/markdown-preview/markdown-preview-iteration.stories.tsx +187 -0
  170. package/src/markdown-preview/markdown-preview-iteration.test.tsx +90 -0
  171. package/src/markdown-preview/markdown-preview-linking.test.tsx +61 -0
  172. package/src/markdown-preview/markdown-preview-transclusion.test.tsx +33 -0
  173. package/src/markdown-preview/markdown-preview.stories.tsx +108 -0
  174. package/src/markdown-preview/markdown-preview.test.tsx +411 -0
  175. package/src/markdown-preview/markdown-preview.tsx +1541 -0
  176. package/src/markdown-toolbar/index.ts +8 -0
  177. package/src/markdown-toolbar/markdown-commands.test.ts +84 -0
  178. package/src/markdown-toolbar/markdown-commands.ts +104 -0
  179. package/src/markdown-toolbar/markdown-toolbar.stories.tsx +56 -0
  180. package/src/markdown-toolbar/markdown-toolbar.tsx +263 -0
  181. package/src/markdown-workspace/focus-writing.test.ts +52 -0
  182. package/src/markdown-workspace/focus-writing.ts +38 -0
  183. package/src/markdown-workspace/index.ts +6 -0
  184. package/src/markdown-workspace/markdown-workspace.stories.tsx +688 -0
  185. package/src/markdown-workspace/markdown-workspace.test.tsx +326 -0
  186. package/src/markdown-workspace/markdown-workspace.tsx +787 -0
  187. package/src/mermaid-diagram/index.ts +1 -0
  188. package/src/mermaid-diagram/mermaid-diagram.stories.tsx +42 -0
  189. package/src/mermaid-diagram/mermaid-diagram.test.tsx +86 -0
  190. package/src/mermaid-diagram/mermaid-diagram.tsx +318 -0
  191. package/src/mermaid-diagram/mermaid-viewer.test.tsx +89 -0
  192. package/src/mermaid-diagram/mermaid-viewer.tsx +367 -0
  193. package/src/mermaid-diagram/real-parse.test.ts +42 -0
  194. package/src/mermaid-diagram/remediate.test.ts +60 -0
  195. package/src/mermaid-diagram/remediate.ts +124 -0
  196. package/src/mermaid-workspace/index.ts +1 -0
  197. package/src/mermaid-workspace/mermaid-workspace.stories.tsx +28 -0
  198. package/src/mermaid-workspace/mermaid-workspace.tsx +71 -0
  199. package/src/metric-block/index.ts +1 -0
  200. package/src/metric-block/metric-block.stories.tsx +40 -0
  201. package/src/metric-block/metric-block.tsx +14 -0
  202. package/src/monaco-workers.d.ts +10 -0
  203. package/src/prose/index.ts +14 -0
  204. package/src/prose/prose.stories.tsx +44 -0
  205. package/src/prose/prose.test.tsx +44 -0
  206. package/src/prose/prose.tsx +21 -0
  207. package/src/timeline/index.ts +18 -0
@@ -0,0 +1,71 @@
1
+ "use client";
2
+
3
+ /**
4
+ * MermaidWorkspace (#L2) — the source ⇄ diagram editing surface.
5
+ *
6
+ * Same compound pattern as `MarkdownWorkspace`: one mermaid source string,
7
+ * Monaco on the left, the live branded `MermaidDiagram` on the right
8
+ * (debounced so keystrokes don't thrash the engine). Controlled
9
+ * (`value`/`onChange`) or uncontrolled (`defaultValue`).
10
+ */
11
+ import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@elabs-ai/components-ui";
12
+ import { cn } from "@elabs-ai/components-ui/lib/cn";
13
+ import { forwardRef, useEffect, useState, type HTMLAttributes } from "react";
14
+
15
+ import { CodeEditor } from "../code-editor";
16
+ import { MermaidDiagram } from "../mermaid-diagram";
17
+
18
+ export interface MermaidWorkspaceProps extends Omit<
19
+ HTMLAttributes<HTMLDivElement>,
20
+ "onChange" | "defaultValue"
21
+ > {
22
+ value?: string;
23
+ defaultValue?: string;
24
+ onChange?: (source: string) => void;
25
+ /** Debounce (ms) before the diagram re-renders while typing. Default 350. */
26
+ debounceMs?: number;
27
+ }
28
+
29
+ export const MermaidWorkspace = forwardRef<HTMLDivElement, MermaidWorkspaceProps>(
30
+ function MermaidWorkspace(
31
+ { value, defaultValue, onChange, debounceMs = 350, className, ...props },
32
+ ref,
33
+ ) {
34
+ const isControlled = value !== undefined;
35
+ const [internal, setInternal] = useState(value ?? defaultValue ?? "");
36
+ const source = isControlled ? value : internal;
37
+
38
+ const [debounced, setDebounced] = useState(source);
39
+ useEffect(() => {
40
+ const t = setTimeout(() => setDebounced(source), debounceMs);
41
+ return () => clearTimeout(t);
42
+ }, [source, debounceMs]);
43
+
44
+ const setSource = (next: string) => {
45
+ if (!isControlled) setInternal(next);
46
+ onChange?.(next);
47
+ };
48
+
49
+ return (
50
+ <div
51
+ ref={ref}
52
+ data-testid="mermaid-workspace"
53
+ className={cn("h-full min-h-0 overflow-hidden", className)}
54
+ {...props}
55
+ >
56
+ <ResizablePanelGroup direction="horizontal">
57
+ <ResizablePanel defaultSize={45} minSize={25}>
58
+ {/* Monaco has no mermaid grammar — plaintext keeps it honest (no wrong colors). */}
59
+ <CodeEditor language="plaintext" value={source} onChange={setSource} />
60
+ </ResizablePanel>
61
+ <ResizableHandle withHandle />
62
+ <ResizablePanel defaultSize={55} minSize={25}>
63
+ <div className="h-full overflow-auto p-4">
64
+ <MermaidDiagram chart={debounced} label="Diagram preview" />
65
+ </div>
66
+ </ResizablePanel>
67
+ </ResizablePanelGroup>
68
+ </div>
69
+ );
70
+ },
71
+ );
@@ -0,0 +1 @@
1
+ export { MetricBlock, type MetricBlockProps } from "./metric-block";
@@ -0,0 +1,40 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { MetricBlock } from "./metric-block";
3
+
4
+ const meta = {
5
+ title: "Editor/MetricBlock",
6
+ component: MetricBlock,
7
+ tags: ["autodocs"],
8
+ parameters: {
9
+ layout: "padded",
10
+ docs: {
11
+ description: {
12
+ component:
13
+ "Compact KPI tile (label · value · description · optional delta). The branded " +
14
+ "target for the `::metric` directive. Thin alias for `@elabs-ai/components-ui` MetricCard " +
15
+ "(see ADR 0012).",
16
+ },
17
+ },
18
+ },
19
+ } satisfies Meta<typeof MetricBlock>;
20
+
21
+ export default meta;
22
+ type Story = StoryObj<typeof meta>;
23
+
24
+ export const Default: Story = {
25
+ args: {
26
+ label: "Migration scope",
27
+ value: "1,245",
28
+ description: "frozen report candidates",
29
+ delta: "+12%",
30
+ deltaDirection: "up",
31
+ },
32
+ };
33
+
34
+ export const NoDelta: Story = {
35
+ args: {
36
+ label: "Open gaps",
37
+ value: "2",
38
+ description: "in @elabs-ai/components-data + @elabs-ai/components-icons",
39
+ },
40
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MetricBlock — thin alias for the canonical `@elabs-ai/components-ui` MetricCard.
3
+ *
4
+ * Previously a fork that added `description` + avoided an editor→charts sideways
5
+ * dep. Now that MetricCard lives in `@elabs-ai/components-ui` (which @elabs-ai/components-editor already depends
6
+ * on), this wrapper preserves the `MetricBlock` / `MetricBlockProps` public names so
7
+ * `directive-views.tsx` and `markdown/index.ts` keep working unchanged.
8
+ *
9
+ * ADR: docs/ADR/0012-metric-card-canonical-home.md
10
+ */
11
+ import { MetricCard, type MetricCardProps } from "@elabs-ai/components-ui";
12
+
13
+ export type MetricBlockProps = MetricCardProps;
14
+ export const MetricBlock = MetricCard;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Ambient type for Vite's `?worker` import suffix. The Monaco worker entries
3
+ * (`monaco-editor/esm/vs/.../*.worker?worker`) are resolved + bundled by Vite at
4
+ * app build time; this declaration lets `tsc` typecheck the import in
5
+ * `lib/monaco-environment.ts` without resolving the real module.
6
+ */
7
+ declare module "*?worker" {
8
+ const workerConstructor: { new (): Worker };
9
+ export default workerConstructor;
10
+ }
@@ -0,0 +1,14 @@
1
+ export {
2
+ Heading,
3
+ Text,
4
+ Link,
5
+ List,
6
+ ListItem,
7
+ Blockquote,
8
+ InlineCode,
9
+ type HeadingProps,
10
+ type HeadingLevel,
11
+ type TextProps,
12
+ type LinkProps,
13
+ type ListProps,
14
+ } from "./prose";
@@ -0,0 +1,44 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Blockquote, Heading, InlineCode, Link, List, ListItem, Text } from "./prose";
3
+
4
+ const meta = {
5
+ title: "Editor/Prose",
6
+ tags: ["autodocs"],
7
+ parameters: {
8
+ layout: "padded",
9
+ docs: {
10
+ description: {
11
+ component:
12
+ "Token-driven typography primitives the markdown preview maps onto: Heading, " +
13
+ "Text, Link, List, Blockquote, InlineCode. Generic and theme-safe.",
14
+ },
15
+ },
16
+ },
17
+ } satisfies Meta;
18
+
19
+ export default meta;
20
+ type Story = StoryObj;
21
+
22
+ export const All: Story = {
23
+ render: () => (
24
+ <div className="max-w-2xl space-y-3">
25
+ <Heading level={1}>Heading level 1</Heading>
26
+ <Heading level={2}>Heading level 2</Heading>
27
+ <Heading level={3}>Heading level 3</Heading>
28
+ <Text>
29
+ Body text with an <Link href="https://example.com">external link</Link> and some{" "}
30
+ <InlineCode>inline code</InlineCode>.
31
+ </Text>
32
+ <Text variant="muted">Muted helper text.</Text>
33
+ <Blockquote>A blockquote rendered through the branded primitive.</Blockquote>
34
+ <List>
35
+ <ListItem>First bullet</ListItem>
36
+ <ListItem>Second bullet</ListItem>
37
+ </List>
38
+ <List ordered>
39
+ <ListItem>First step</ListItem>
40
+ <ListItem>Second step</ListItem>
41
+ </List>
42
+ </div>
43
+ ),
44
+ };
@@ -0,0 +1,44 @@
1
+ import { cleanup, render, screen } from "@testing-library/react";
2
+ import { afterEach, describe, expect, it } from "vitest";
3
+
4
+ import { Heading, InlineCode, Link, List, ListItem, Text } from "./prose";
5
+
6
+ afterEach(cleanup);
7
+
8
+ describe("prose primitives", () => {
9
+ it("renders the heading element for the given level", () => {
10
+ render(<Heading level={3}>Title</Heading>);
11
+ const h = screen.getByRole("heading", { level: 3, name: "Title" });
12
+ expect(h.tagName).toBe("H3");
13
+ });
14
+
15
+ it("adds safe rel + target for external links", () => {
16
+ render(<Link href="https://example.com">Out</Link>);
17
+ const a = screen.getByRole("link", { name: "Out" });
18
+ expect(a).toHaveAttribute("target", "_blank");
19
+ expect(a).toHaveAttribute("rel", "noopener noreferrer");
20
+ });
21
+
22
+ it("does not externalize relative links", () => {
23
+ render(<Link href="/docs">In</Link>);
24
+ expect(screen.getByRole("link", { name: "In" })).not.toHaveAttribute("target");
25
+ });
26
+
27
+ it("renders an ordered list when asked", () => {
28
+ render(
29
+ <List ordered>
30
+ <ListItem>one</ListItem>
31
+ </List>,
32
+ );
33
+ expect(screen.getByRole("list").tagName).toBe("OL");
34
+ });
35
+
36
+ it("renders inline code + body text", () => {
37
+ render(
38
+ <Text>
39
+ see <InlineCode>cn()</InlineCode>
40
+ </Text>,
41
+ );
42
+ expect(screen.getByText("cn()").tagName).toBe("CODE");
43
+ });
44
+ });
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Prose primitives — re-exported from @elabs-ai/components-ui (#188; ADR-0012 own/re-export
3
+ * model: @elabs-ai/components-ui owns the canonical prose source in
4
+ * `components/typography/prose.tsx`; this package derives). The
5
+ * `@elabs-ai/components-editor/markdown` public surface keeps the original names
6
+ * (Heading, Text, Link, List, ListItem, Blockquote, InlineCode).
7
+ */
8
+ export {
9
+ ProseHeading as Heading,
10
+ ProseText as Text,
11
+ ProseLink as Link,
12
+ ProseList as List,
13
+ ProseListItem as ListItem,
14
+ ProseBlockquote as Blockquote,
15
+ ProseInlineCode as InlineCode,
16
+ type ProseHeadingProps as HeadingProps,
17
+ type ProseHeadingLevel as HeadingLevel,
18
+ type ProseTextProps as TextProps,
19
+ type ProseLinkProps as LinkProps,
20
+ type ProseListProps as ListProps,
21
+ } from "@elabs-ai/components-ui";
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Timeline — MOVED to `@elabs-ai/components-ui` (#190, research 10 §B.2; the ADR-0012
3
+ * own/re-export model). `@elabs-ai/components-ui` owns the canonical rail; this shim keeps
4
+ * the editor-facing surface byte-compatible — `markdown/index.ts` and the
5
+ * `:::timeline` preview keep importing from `../timeline` unchanged.
6
+ *
7
+ * `TimelineItem` here is the ARRAY-item data shape (named `TimelineEntry` in
8
+ * `@elabs-ai/components-ui`, where `TimelineItem` is the compound `<li>` part); the alias
9
+ * preserves the editor's original public type name. `TimelineStatus`
10
+ * (`done|active|pending`) now lives with its `fromTimelineStatus` mapper in
11
+ * status-badge and reaches the `@elabs-ai/components-ui` barrel from there.
12
+ */
13
+ export {
14
+ Timeline,
15
+ type TimelineEntry as TimelineItem,
16
+ type TimelineProps,
17
+ type TimelineStatus,
18
+ } from "@elabs-ai/components-ui";