@bitbaum/chatkit 0.8.1 → 0.9.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 CHANGED
@@ -15,7 +15,7 @@ interface that calls them.)
15
15
  ## Install
16
16
 
17
17
  ```sh
18
- pnpm add @bitbaum/chatkit@^0.8.0
18
+ pnpm add @bitbaum/chatkit@^0.9.0
19
19
  ```
20
20
 
21
21
  **Install releases from npm, never a commit or a branch.** A semver range is
@@ -200,6 +200,27 @@ Every reason a file did not attach is a label — `labels={{ attachNotes: {
200
200
  imageTooLarge: (name, mb) => … } }}` — so it reaches the reader in their
201
201
  language.
202
202
 
203
+ ### The look of an answer
204
+
205
+ `Markdown` renders what a model writes, never as HTML: paragraphs, headings
206
+ with their level, bullet, numbered, nested and task lists, tables (they scroll
207
+ sideways on a phone instead of breaking the page), rules, bold, italic, code,
208
+ links, web images and `[F1]` citation handles. Three things make an answer
209
+ read like the ChatGPT app's rather than a wall of text, and a model does all
210
+ three unprompted:
211
+
212
+ - **A list of named things becomes cards.** `1. **Option.** why` — every item
213
+ opening with a bold lead — renders as a badge (the number, or the emoji the
214
+ lead opens with: `**🤖 Robot.** …`), the name, and the body under it.
215
+ - **A table is a table**, with the header row kept.
216
+ - **Sources are listed once**, as chips under the answer, from the handles the
217
+ text cites and the `citations` map you pass (`{ F1: { label, detail, href? }
218
+ }`). `renderCitation` replaces the in-text superscript with your own
219
+ (a sheet, a dialog); `renderSources` replaces the chip row with your own;
220
+ `sources={false}` drops it.
221
+
222
+ `demo/screen.html` shows all of it.
223
+
203
224
  ### Look
204
225
 
205
226
  Every colour, radius and face is a `--ck-*` variable. They default to
@@ -5,22 +5,32 @@
5
5
  *
6
6
  * From loki's `MarkdownText`, the one renderer in the fleet that four repos
7
7
  * did NOT have: those rendered model output with the literal `**` still in it.
8
- * Supports what answers use — paragraphs, bullet and numbered lists, headings,
9
- * **bold**, *italic*, `code`, fenced code, [links](url) and `[F1]` citation
10
- * handles — and deliberately nothing else.
8
+ * Supports what answers use — paragraphs, bullet, numbered, nested and task
9
+ * lists, headings with their level, tables, rules, **bold**, *italic*, `code`,
10
+ * fenced code, [links](url), ![images](url) and `[F1]` citation handles — and
11
+ * deliberately nothing else.
11
12
  */
13
+ export type ListItem = {
14
+ text: string;
15
+ /** `- [ ]` / `- [x]`: a task, and whether it is done. */
16
+ task?: boolean;
17
+ /** One level of nesting: the items indented under this one. */
18
+ children?: ListItem[];
19
+ };
12
20
  export type MarkdownBlock = {
13
21
  kind: "p";
14
22
  text: string;
15
23
  } | {
16
24
  kind: "h";
17
25
  text: string;
26
+ level: 1 | 2 | 3;
18
27
  } | {
19
28
  kind: "ul";
20
- items: string[];
29
+ items: ListItem[];
21
30
  } | {
22
31
  kind: "ol";
23
- items: string[];
32
+ items: ListItem[];
33
+ start: number;
24
34
  } | {
25
35
  kind: "code";
26
36
  lang: string;
@@ -28,8 +38,26 @@ export type MarkdownBlock = {
28
38
  } | {
29
39
  kind: "quote";
30
40
  text: string;
41
+ } | {
42
+ kind: "table";
43
+ head: string[];
44
+ rows: string[][];
45
+ } | {
46
+ kind: "hr";
31
47
  };
32
48
  export declare function parseBlocks(text: string): MarkdownBlock[];
49
+ /**
50
+ * A list where every item opens with a bold lead — `**Title.** body` — is a
51
+ * list of named things, and reads as cards: a numbered or bulleted badge, the
52
+ * name, the body under it. That is how the ChatGPT app lays out "three
53
+ * options" or "two levels"; a model writes it that way unprompted.
54
+ */
55
+ export declare function listLead(text: string): {
56
+ lead: string;
57
+ rest: string;
58
+ icon?: string;
59
+ } | null;
60
+ export declare function isCardList(items: ListItem[]): boolean;
33
61
  export type InlineSpan = {
34
62
  kind: "text";
35
63
  text: string;
@@ -48,11 +76,17 @@ export type InlineSpan = {
48
76
  kind: "link";
49
77
  text: string;
50
78
  href: string;
79
+ } | {
80
+ kind: "image";
81
+ alt: string;
82
+ src: string;
51
83
  } | {
52
84
  kind: "cite";
53
85
  ids: string[];
54
86
  };
55
87
  export declare function parseInline(text: string): InlineSpan[];
88
+ /** Every citation handle an answer uses, in order of first use. */
89
+ export declare function citedIds(text: string): string[];
56
90
  /**
57
91
  * Only http(s), mailto and same-site paths become links. A `javascript:` URL in
58
92
  * model output is text, never a link — the answer is written by a model that
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAkDzD;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAI9B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAKpC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CA2BtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYpD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAmBnB,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CA2FzD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS3F;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAErD;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAI9B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAKpC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAmCtD;AAED,mEAAmE;AACnE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/C;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYpD;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
package/dist/markdown.js CHANGED
@@ -5,10 +5,26 @@
5
5
  *
6
6
  * From loki's `MarkdownText`, the one renderer in the fleet that four repos
7
7
  * did NOT have: those rendered model output with the literal `**` still in it.
8
- * Supports what answers use — paragraphs, bullet and numbered lists, headings,
9
- * **bold**, *italic*, `code`, fenced code, [links](url) and `[F1]` citation
10
- * handles — and deliberately nothing else.
8
+ * Supports what answers use — paragraphs, bullet, numbered, nested and task
9
+ * lists, headings with their level, tables, rules, **bold**, *italic*, `code`,
10
+ * fenced code, [links](url), ![images](url) and `[F1]` citation handles — and
11
+ * deliberately nothing else.
11
12
  */
13
+ const BULLET_RE = /^([-*•])\s+(.*)$/;
14
+ const NUMBERED_RE = /^(\d+)[.)]\s+(.*)$/;
15
+ const TASK_RE = /^\[([ xX])\]\s+(.*)$/;
16
+ function listItem(text) {
17
+ const task = TASK_RE.exec(text);
18
+ if (task)
19
+ return { text: task[2] ?? "", task: task[1] !== " " };
20
+ return { text };
21
+ }
22
+ /** `| a | b |` → ["a", "b"]; a row may omit its outer pipes. */
23
+ function tableCells(line) {
24
+ const inner = line.replace(/^\|/, "").replace(/\|$/, "");
25
+ return inner.split(/(?<!\\)\|/).map((c) => c.replace(/\\\|/g, "|").trim());
26
+ }
27
+ const TABLE_RULE_RE = /^\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?$/;
12
28
  export function parseBlocks(text) {
13
29
  const blocks = [];
14
30
  let list = null;
@@ -34,24 +50,64 @@ export function parseBlocks(text) {
34
50
  list = null;
35
51
  continue;
36
52
  }
37
- const bullet = /^[-*•]\s+(.*)$/.exec(line);
38
- const numbered = /^\d+[.)]\s+(.*)$/.exec(line);
53
+ // A table: a header row, a rule of dashes, then rows. The rule is what
54
+ // tells a table from a sentence with a pipe in it.
55
+ if (line.includes("|") && TABLE_RULE_RE.test((lines[i + 1] ?? "").trim())) {
56
+ list = null;
57
+ const head = tableCells(line);
58
+ const rows = [];
59
+ i += 2;
60
+ while (i < lines.length && (lines[i] ?? "").trim().includes("|")) {
61
+ rows.push(tableCells((lines[i] ?? "").trim()));
62
+ i++;
63
+ }
64
+ i--;
65
+ blocks.push({ kind: "table", head, rows });
66
+ continue;
67
+ }
68
+ if (/^(-{3,}|\*{3,}|_{3,})$/.test(line)) {
69
+ list = null;
70
+ blocks.push({ kind: "hr" });
71
+ continue;
72
+ }
73
+ const bullet = BULLET_RE.exec(line);
74
+ const numbered = NUMBERED_RE.exec(line);
39
75
  if (bullet || numbered) {
40
76
  const kind = bullet ? "ul" : "ol";
77
+ const indent = raw.length - raw.trimStart().length;
78
+ const item = listItem((bullet ? bullet[2] : numbered[2]) ?? "");
79
+ // Indented under the previous item: one level of nesting, whichever
80
+ // marker it uses.
81
+ if (list && indent >= 2 && list.items.length > 0) {
82
+ const parent = list.items[list.items.length - 1];
83
+ (parent.children ??= []).push(item);
84
+ continue;
85
+ }
41
86
  if (!list || list.kind !== kind) {
42
- list = { kind, items: [] };
87
+ list =
88
+ kind === "ol"
89
+ ? { kind: "ol", items: [], start: Number(numbered[1]) || 1 }
90
+ : { kind: "ul", items: [] };
43
91
  blocks.push(list);
44
92
  }
45
- list.items.push((bullet ?? numbered)[1] ?? "");
93
+ list.items.push(item);
46
94
  continue;
47
95
  }
48
96
  list = null;
49
- if (/^#{1,6}\s/.test(line)) {
50
- blocks.push({ kind: "h", text: line.replace(/^#+\s+/, "") });
97
+ const heading = /^(#{1,6})\s+(.*)$/.exec(line);
98
+ if (heading) {
99
+ const level = Math.min(heading[1].length, 3);
100
+ blocks.push({ kind: "h", text: heading[2] ?? "", level });
51
101
  }
52
102
  else if (line.startsWith(">")) {
53
103
  // A model's `>` leaked into prose was one of orangecat's fixed bugs.
54
- blocks.push({ kind: "quote", text: line.replace(/^>\s?/, "") });
104
+ // Consecutive quoted lines are one quote.
105
+ const prev = blocks[blocks.length - 1];
106
+ const quoted = line.replace(/^>\s?/, "");
107
+ if (prev && prev.kind === "quote" && (lines[i - 1] ?? "").trim().startsWith(">"))
108
+ prev.text += `\n${quoted}`;
109
+ else
110
+ blocks.push({ kind: "quote", text: quoted });
55
111
  }
56
112
  else {
57
113
  const prev = blocks[blocks.length - 1];
@@ -64,7 +120,28 @@ export function parseBlocks(text) {
64
120
  }
65
121
  return blocks;
66
122
  }
67
- const INLINE_RE = /(`[^`]+`|\*\*[^*]+\*\*|\*[^*\s][^*]*\*|\[[^\]]+\]\([^)\s]+\)|\[[FD]\d+(?:,\s*[FD]\d+)*\]|https?:\/\/[^\s<>()]+[^\s<>().,;:!?'"])/g;
123
+ /**
124
+ * A list where every item opens with a bold lead — `**Title.** body` — is a
125
+ * list of named things, and reads as cards: a numbered or bulleted badge, the
126
+ * name, the body under it. That is how the ChatGPT app lays out "three
127
+ * options" or "two levels"; a model writes it that way unprompted.
128
+ */
129
+ export function listLead(text) {
130
+ const m = /^\*\*([^*]+?)\*\*\s*(?:[—–:-]\s*)?([\s\S]*)$/.exec(text);
131
+ if (!m)
132
+ return null;
133
+ let lead = (m[1] ?? "").trim().replace(/[.:]$/, "");
134
+ // A lead that opens with an emoji — `**🤖 Robot.** …` — hands it to the
135
+ // badge: the icon tile the ChatGPT app draws, from the model's own choice.
136
+ const icon = /^(\p{Extended_Pictographic}\uFE0F?)\s+(.+)$/u.exec(lead);
137
+ if (icon)
138
+ lead = icon[2] ?? lead;
139
+ return { lead, rest: (m[2] ?? "").trim(), ...(icon ? { icon: icon[1] } : {}) };
140
+ }
141
+ export function isCardList(items) {
142
+ return items.length >= 2 && items.every((it) => listLead(it.text) !== null);
143
+ }
144
+ const INLINE_RE = /(`[^`]+`|!\[[^\]]*\]\([^)\s]+\)|\*\*[^*]+\*\*|\*[^*\s][^*]*\*|\[[^\]]+\]\([^)\s]+\)|\[[FD]\d+(?:,\s*[FD]\d+)*\]|https?:\/\/[^\s<>()]+[^\s<>().,;:!?'"])/g;
68
145
  export function parseInline(text) {
69
146
  const out = [];
70
147
  for (const part of text.split(INLINE_RE)) {
@@ -85,6 +162,16 @@ export function parseInline(text) {
85
162
  out.push({ kind: "em", text: inner, children: parseInline(inner) });
86
163
  }
87
164
  else {
165
+ const image = /^!\[([^\]]*)\]\(([^)\s]+)\)$/.exec(part);
166
+ if (image) {
167
+ // Only a web image: a data: or javascript: "image" from a model is text.
168
+ const src = safeHref(image[2] ?? "");
169
+ if (src && /^https?:/.test(src))
170
+ out.push({ kind: "image", alt: image[1] ?? "", src });
171
+ else
172
+ out.push({ kind: "text", text: image[1] ?? part });
173
+ continue;
174
+ }
88
175
  const link = /^\[([^\]]+)\]\(([^)\s]+)\)$/.exec(part);
89
176
  const href = link
90
177
  ? safeHref(link[2] ?? "")
@@ -101,6 +188,16 @@ export function parseInline(text) {
101
188
  }
102
189
  return out;
103
190
  }
191
+ /** Every citation handle an answer uses, in order of first use. */
192
+ export function citedIds(text) {
193
+ const ids = [];
194
+ for (const m of text.matchAll(/\[([FD]\d+(?:,\s*[FD]\d+)*)\]/g)) {
195
+ for (const id of (m[1] ?? "").split(/,\s*/))
196
+ if (!ids.includes(id))
197
+ ids.push(id);
198
+ }
199
+ return ids;
200
+ }
104
201
  /**
105
202
  * Only http(s), mailto and same-site paths become links. A `javascript:` URL in
106
203
  * model output is text, never a link — the answer is written by a model that
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import type { ReactNode } from "react";
5
5
  export type CitationMap = Record<string, {
6
6
  label: string;
7
7
  detail: string;
8
+ href?: string;
8
9
  }>;
9
10
  export type RenderLink = (link: {
10
11
  href: string;
@@ -12,16 +13,48 @@ export type RenderLink = (link: {
12
13
  className: string;
13
14
  children: ReactNode;
14
15
  }) => ReactNode;
16
+ /** How a `[F1]` handle shows in the text. The default is a small superscript
17
+ * with the source in its tooltip; an app with its own source sheet renders
18
+ * that here instead. */
19
+ export type RenderCitation = (cite: {
20
+ ids: string[];
21
+ citations: CitationMap;
22
+ className: string;
23
+ }) => ReactNode;
24
+ /** The sources an answer cites, listed once under it. The default is the chip
25
+ * row; an app with its own source sheet renders that here instead. */
26
+ export type RenderSources = (sources: {
27
+ records: {
28
+ id: string;
29
+ label: string;
30
+ detail: string;
31
+ href?: string;
32
+ }[];
33
+ label: string;
34
+ }) => ReactNode;
15
35
  /** A plain anchor: same-site paths in place, everything else in a new tab. */
16
36
  export declare const defaultRenderLink: RenderLink;
37
+ export declare const defaultRenderCitation: RenderCitation;
17
38
  /**
18
- * Model output as readable text: paragraphs, lists, headings, bold, italic,
19
- * code, links and citations. Never HTML — nothing here can inject markup.
39
+ * Model output as readable text: paragraphs, lists, headings, tables, bold,
40
+ * italic, code, links, images and citations. Never HTML — nothing here can
41
+ * inject markup.
42
+ *
43
+ * A list of named things (`1. **Option.** why`) becomes cards with a badge,
44
+ * a name and a body; a table becomes a table that scrolls sideways on a phone
45
+ * instead of breaking the page; the sources an answer cites are listed once
46
+ * under it as chips.
20
47
  */
21
- export declare function Markdown({ text, citations, renderLink, className, }: {
48
+ export declare function Markdown({ text, citations, renderLink, renderCitation, renderSources, sources, sourcesLabel, className, }: {
22
49
  text: string;
23
50
  citations?: CitationMap;
24
51
  renderLink?: RenderLink;
52
+ renderCitation?: RenderCitation;
53
+ /** Your own sources row (a button that opens a sheet) in place of the chips. */
54
+ renderSources?: RenderSources;
55
+ /** The row of cited sources under the answer (needs `citations`). */
56
+ sources?: boolean;
57
+ sourcesLabel?: string;
25
58
  className?: string;
26
59
  }): import("react").JSX.Element;
27
60
  //# sourceMappingURL=Markdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/react/Markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;2BAE2B;AAC3B,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE5E,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,KAAK,SAAS,CAAC;AAEhB,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,EAAE,UAS7B,CAAC;AAuEJ;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,UAA8B,EAC9B,SAAS,GACV,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAuCA"}
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../src/react/Markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAYvC;;2BAE2B;AAC3B,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE3F,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,KAAK,SAAS,CAAC;AAEhB;;yBAEyB;AACzB,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAClC,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,KAAK,SAAS,CAAC;AAEhB;uEACuE;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE;IACpC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxE,KAAK,EAAE,MAAM,CAAC;CACf,KAAK,SAAS,CAAC;AAEhB,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,EAAE,UAS7B,CAAC;AAEJ,eAAO,MAAM,qBAAqB,EAAE,cASnC,CAAC;AAwEF;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,UAA8B,EAC9B,cAAsC,EACtC,aAAa,EACb,OAAc,EACd,YAAwB,EACxB,SAAS,GACV,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gFAAgF;IAChF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAyJA"}
@@ -1,8 +1,11 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { isInternalHref, parseBlocks, parseInline } from "../markdown.js";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { citedIds, isCardList, isInternalHref, listLead, parseBlocks, parseInline, } from "../markdown.js";
3
3
  /** A plain anchor: same-site paths in place, everything else in a new tab. */
4
4
  export const defaultRenderLink = ({ href, internal, className, children }) => internal ? (_jsx("a", { href: href, className: className, children: children })) : (_jsx("a", { href: href, className: className, target: "_blank", rel: "noopener noreferrer", children: children }));
5
- function Inline({ spans, citations, renderLink, }) {
5
+ export const defaultRenderCitation = ({ ids, citations, className }) => (_jsx("sup", { className: className, title: ids
6
+ .map((id) => `${id} — ${citations[id].label}\n${citations[id].detail}`)
7
+ .join("\n\n"), children: ids.join(" ") }));
8
+ function Inline({ spans, citations, renderLink, renderCitation, }) {
6
9
  return (_jsx(_Fragment, { children: spans.map((s, i) => {
7
10
  switch (s.kind) {
8
11
  case "code":
@@ -12,7 +15,7 @@ function Inline({ spans, citations, renderLink, }) {
12
15
  // Plain emphasis stays plain markup; only what holds a link, code
13
16
  // or a citation is rendered as nested spans.
14
17
  const plain = s.children.every((c) => c.kind === "text");
15
- const inner = plain ? (s.text) : (_jsx(Inline, { spans: s.children, citations: citations, renderLink: renderLink }));
18
+ const inner = plain ? (s.text) : (_jsx(Inline, { spans: s.children, citations: citations, renderLink: renderLink, renderCitation: renderCitation }));
16
19
  return s.kind === "strong" ? (_jsx("strong", { children: inner }, i)) : (_jsx("em", { children: inner }, i));
17
20
  }
18
21
  case "link":
@@ -22,13 +25,13 @@ function Inline({ spans, citations, renderLink, }) {
22
25
  className: "ck-link",
23
26
  children: s.text,
24
27
  }) }, i));
28
+ case "image":
29
+ return _jsx("img", { className: "ck-img", src: s.src, alt: s.alt, loading: "lazy" }, i);
25
30
  case "cite": {
26
31
  const known = s.ids.filter((id) => citations?.[id]);
27
- if (known.length === 0)
32
+ if (known.length === 0 || !citations)
28
33
  return null;
29
- return (_jsx("sup", { className: "ck-cite", title: known
30
- .map((id) => `${id} — ${citations[id].label}\n${citations[id].detail}`)
31
- .join("\n\n"), children: known.join(" ") }, i));
34
+ return (_jsx("span", { children: renderCitation({ ids: known, citations, className: "ck-cite" }) }, i));
32
35
  }
33
36
  default:
34
37
  return _jsx("span", { children: s.text }, i);
@@ -36,27 +39,61 @@ function Inline({ spans, citations, renderLink, }) {
36
39
  }) }));
37
40
  }
38
41
  /**
39
- * Model output as readable text: paragraphs, lists, headings, bold, italic,
40
- * code, links and citations. Never HTML — nothing here can inject markup.
42
+ * Model output as readable text: paragraphs, lists, headings, tables, bold,
43
+ * italic, code, links, images and citations. Never HTML — nothing here can
44
+ * inject markup.
45
+ *
46
+ * A list of named things (`1. **Option.** why`) becomes cards with a badge,
47
+ * a name and a body; a table becomes a table that scrolls sideways on a phone
48
+ * instead of breaking the page; the sources an answer cites are listed once
49
+ * under it as chips.
41
50
  */
42
- export function Markdown({ text, citations, renderLink = defaultRenderLink, className, }) {
43
- const inline = (t) => (_jsx(Inline, { spans: parseInline(t), citations: citations, renderLink: renderLink }));
44
- return (_jsx("div", { className: className ? `ck-md ${className}` : "ck-md", children: parseBlocks(text).map((b, i) => {
45
- switch (b.kind) {
46
- case "code":
47
- return (_jsx("pre", { className: "ck-pre", "data-lang": b.lang || undefined, children: _jsx("code", { children: b.code }) }, i));
48
- case "ul":
49
- case "ol": {
50
- const List = b.kind;
51
- return (_jsx(List, { children: b.items.map((item, j) => (_jsx("li", { children: inline(item) }, j))) }, i));
52
- }
53
- case "h":
54
- return (_jsx("p", { className: "ck-md-h", children: inline(b.text) }, i));
55
- case "quote":
56
- return _jsx("blockquote", { children: inline(b.text) }, i);
57
- default:
58
- return _jsx("p", { children: inline(b.text) }, i);
59
- }
51
+ export function Markdown({ text, citations, renderLink = defaultRenderLink, renderCitation = defaultRenderCitation, renderSources, sources = true, sourcesLabel = "Sources", className, }) {
52
+ const inline = (t) => (_jsx(Inline, { spans: parseInline(t), citations: citations, renderLink: renderLink, renderCitation: renderCitation }));
53
+ const items = (list, ordered, start = 1) => {
54
+ const List = ordered ? "ol" : "ul";
55
+ return (_jsx(List, { start: ordered && start !== 1 ? start : undefined, children: list.map((item, j) => (_jsxs("li", { className: item.task !== undefined ? "ck-task" : undefined, children: [item.task !== undefined && (_jsx("input", { type: "checkbox", checked: item.task, readOnly: true, "aria-hidden": true, tabIndex: -1 })), inline(item.text), item.children && items(item.children, false)] }, j))) }));
56
+ };
57
+ const cards = (list, ordered, start = 1) => (_jsx("ol", { className: ordered ? "ck-cards ck-cards-numbered" : "ck-cards", children: list.map((item, j) => {
58
+ const lead = listLead(item.text);
59
+ return (_jsxs("li", { className: "ck-card", children: [_jsx("span", { className: lead.icon ? "ck-card-badge ck-card-icon" : "ck-card-badge", "aria-hidden": true, children: lead.icon ?? (ordered ? start + j : "•") }), _jsxs("div", { className: "ck-card-body", children: [_jsx("div", { className: "ck-card-title", children: inline(lead.lead) }), lead.rest && _jsx("div", { className: "ck-card-text", children: inline(lead.rest) }), item.children && items(item.children, false)] })] }, j));
60
60
  }) }));
61
+ const cited = citations ? citedIds(text).filter((id) => citations[id]) : [];
62
+ return (_jsxs("div", { className: className ? `ck-md ${className}` : "ck-md", children: [parseBlocks(text).map((b, i) => {
63
+ switch (b.kind) {
64
+ case "code":
65
+ return (_jsx("pre", { className: "ck-pre", "data-lang": b.lang || undefined, children: _jsx("code", { children: b.code }) }, i));
66
+ case "ul":
67
+ return (_jsx("div", { children: isCardList(b.items) ? cards(b.items, false) : items(b.items, false) }, i));
68
+ case "ol":
69
+ return (_jsx("div", { children: isCardList(b.items)
70
+ ? cards(b.items, true, b.start)
71
+ : items(b.items, true, b.start) }, i));
72
+ case "h": {
73
+ const H = b.level === 1 ? "h2" : b.level === 2 ? "h3" : "h4";
74
+ return (_jsx(H, { className: `ck-md-h ck-md-h${b.level}`, children: inline(b.text) }, i));
75
+ }
76
+ case "quote":
77
+ return (_jsx("blockquote", { children: b.text.split("\n").map((line, j) => (_jsx("p", { children: inline(line) }, j))) }, i));
78
+ case "table":
79
+ return (_jsx("div", { className: "ck-table-wrap", children: _jsxs("table", { className: "ck-table", children: [_jsx("thead", { children: _jsx("tr", { children: b.head.map((cell, j) => (_jsx("th", { children: inline(cell) }, j))) }) }), _jsx("tbody", { children: b.rows.map((row, j) => (_jsx("tr", { children: b.head.map((_, k) => (_jsx("td", { children: inline(row[k] ?? "") }, k))) }, j))) })] }) }, i));
80
+ case "hr":
81
+ return _jsx("hr", { className: "ck-hr" }, i);
82
+ default:
83
+ return _jsx("p", { children: inline(b.text) }, i);
84
+ }
85
+ }), sources && cited.length > 0 && citations && renderSources ? (renderSources({
86
+ records: cited.map((id) => ({ id, ...citations[id] })),
87
+ label: sourcesLabel,
88
+ })) : sources && cited.length > 0 && citations ? (_jsxs("div", { className: "ck-sources", role: "list", "aria-label": sourcesLabel, children: [_jsx("span", { className: "ck-sources-label", children: sourcesLabel }), cited.map((id) => {
89
+ const c = citations[id];
90
+ const chip = (_jsxs(_Fragment, { children: [_jsx("span", { className: "ck-source-id", children: id }), _jsx("span", { className: "ck-source-label", children: c.label })] }));
91
+ return c.href ? (_jsx("span", { role: "listitem", children: renderLink({
92
+ href: c.href,
93
+ internal: isInternalHref(c.href),
94
+ className: "ck-source",
95
+ children: chip,
96
+ }) }, id)) : (_jsx("span", { role: "listitem", className: "ck-source", title: c.detail, children: chip }, id));
97
+ })] })) : null] }));
61
98
  }
62
99
  //# sourceMappingURL=Markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/react/Markdown.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/react/Markdown.tsx"],"names":[],"mappings":"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"}
@@ -12,8 +12,8 @@ export type { ComposerProps, ComposerLabels, ComposerLabelOverrides, ComposerVoi
12
12
  export { ChatThread, ChatMessage, ChatReplies, ChatStarters, DEFAULT_THREAD_LABELS, } from "./Thread.js";
13
13
  export type { ChatMessageData, ChatSpeaker, LiveTurn, Starter, ThreadLabels } from "./Thread.js";
14
14
  export { ChatScreen } from "./Screen.js";
15
- export { Markdown, defaultRenderLink } from "./Markdown.js";
16
- export type { CitationMap, RenderLink } from "./Markdown.js";
15
+ export { Markdown, defaultRenderLink, defaultRenderCitation } from "./Markdown.js";
16
+ export type { CitationMap, RenderLink, RenderCitation, RenderSources } from "./Markdown.js";
17
17
  export { useDictation } from "./use-dictation.js";
18
18
  export type { DictationController, DictationStatus, UseDictationOptions } from "./use-dictation.js";
19
19
  export { AttachMenu, DEFAULT_ATTACH_MENU_LABELS } from "./AttachMenu.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EACV,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EACV,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnF,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -10,7 +10,7 @@
10
10
  export { Composer, DEFAULT_COMPOSER_LABELS } from "./Composer.js";
11
11
  export { ChatThread, ChatMessage, ChatReplies, ChatStarters, DEFAULT_THREAD_LABELS, } from "./Thread.js";
12
12
  export { ChatScreen } from "./Screen.js";
13
- export { Markdown, defaultRenderLink } from "./Markdown.js";
13
+ export { Markdown, defaultRenderLink, defaultRenderCitation } from "./Markdown.js";
14
14
  export { useDictation } from "./use-dictation.js";
15
15
  export { AttachMenu, DEFAULT_ATTACH_MENU_LABELS } from "./AttachMenu.js";
16
16
  export { useAttachments } from "./use-attachments.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAOlE,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAOlE,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitbaum/chatkit",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "description": "One chat for every product: a composer with a microphone that always works, a thread that does not fight the reader, messages with copy and retry, and LLM markdown \u2014 the fleet's chat standard as a package.",
5
5
  "license": "MIT",
6
6
  "author": "Cato",
package/styles.css CHANGED
@@ -47,6 +47,11 @@
47
47
  /* ChatScreen: the reading column, and the margin it keeps from the edge. */
48
48
  --ck-measure: 48rem;
49
49
  --ck-gutter: 1rem;
50
+ /* ChatScreen measures the floating header and dock into these; with no
51
+ ChatScreen they are 0. --ck-viewport-height is set by useViewportHeight. */
52
+ --ck-top-inset: 0px;
53
+ --ck-bottom-inset: 0px;
54
+ --ck-viewport-height: 100dvh;
50
55
  /* The person's own words. Neutral, not the accent: the accent is for the
51
56
  one thing to press, and a column of tinted pills spent it on every turn. */
52
57
  --ck-bubble: var(--ck-raised);
@@ -781,7 +786,175 @@
781
786
  margin-top: 0.25em;
782
787
  }
783
788
  .ck-md-h {
789
+ margin: 0;
784
790
  font-weight: 650;
791
+ line-height: 1.3;
792
+ }
793
+ .ck-md > .ck-md-h + * {
794
+ margin-top: 0.5em;
795
+ }
796
+ .ck-md > * + .ck-md-h {
797
+ margin-top: 1.25em;
798
+ }
799
+ .ck-md-h1 {
800
+ font-size: 1.375em;
801
+ }
802
+ .ck-md-h2 {
803
+ font-size: 1.1875em;
804
+ }
805
+ .ck-md-h3 {
806
+ font-size: 1.0625em;
807
+ }
808
+ .ck-md ul ul,
809
+ .ck-md ol ul {
810
+ margin-top: 0.25em;
811
+ }
812
+ .ck-task {
813
+ list-style: none;
814
+ margin-left: -1.25em;
815
+ }
816
+ .ck-task > input {
817
+ margin: 0 0.5em 0 0;
818
+ vertical-align: -0.1em;
819
+ accent-color: var(--ck-accent);
820
+ pointer-events: none;
821
+ }
822
+ .ck-hr {
823
+ height: 1px;
824
+ margin: 1.25em 0;
825
+ border: 0;
826
+ background: var(--ck-line);
827
+ }
828
+ .ck-img {
829
+ display: block;
830
+ max-width: 100%;
831
+ height: auto;
832
+ margin: 0.25em 0;
833
+ border: 1px solid var(--ck-line);
834
+ border-radius: var(--ck-radius-sm);
835
+ }
836
+
837
+ /* A list of named things, as cards: a badge, the name, the body. The row is
838
+ a grid so a long name wraps under itself, never under the badge. */
839
+ .ck-cards {
840
+ display: flex;
841
+ flex-direction: column;
842
+ gap: 0.875em;
843
+ margin: 0;
844
+ padding: 0;
845
+ list-style: none;
846
+ }
847
+ .ck-card {
848
+ display: grid;
849
+ grid-template-columns: 2.5em minmax(0, 1fr);
850
+ gap: 0.75em;
851
+ align-items: start;
852
+ }
853
+ .ck-card-badge {
854
+ display: flex;
855
+ align-items: center;
856
+ justify-content: center;
857
+ width: 2.5em;
858
+ height: 2.5em;
859
+ border-radius: 0.75em;
860
+ background: var(--ck-raised);
861
+ color: var(--ck-fg-2);
862
+ font-size: 1em;
863
+ font-weight: 600;
864
+ font-variant-numeric: tabular-nums;
865
+ }
866
+ .ck-cards:not(.ck-cards-numbered) .ck-card-badge:not(.ck-card-icon) {
867
+ font-size: 1.5em;
868
+ line-height: 1;
869
+ }
870
+ .ck-card-icon {
871
+ font-size: 1.25em;
872
+ }
873
+ .ck-card-body {
874
+ min-width: 0;
875
+ padding-top: 0.2em;
876
+ }
877
+ .ck-card-title {
878
+ font-weight: 650;
879
+ }
880
+ .ck-card-text {
881
+ margin-top: 0.25em;
882
+ color: var(--ck-fg-2);
883
+ }
884
+ .ck-card-body > ul {
885
+ margin-top: 0.375em;
886
+ }
887
+
888
+ /* A table that scrolls sideways on a phone instead of breaking the page. */
889
+ .ck-table-wrap {
890
+ max-width: 100%;
891
+ overflow-x: auto;
892
+ -webkit-overflow-scrolling: touch;
893
+ }
894
+ .ck-table {
895
+ width: 100%;
896
+ border-collapse: collapse;
897
+ font-size: 0.9375em;
898
+ line-height: 1.45;
899
+ }
900
+ .ck-table th,
901
+ .ck-table td {
902
+ padding: 0.5em 0.75em 0.5em 0;
903
+ border-bottom: 1px solid var(--ck-line);
904
+ text-align: left;
905
+ vertical-align: top;
906
+ }
907
+ .ck-table th {
908
+ color: var(--ck-fg);
909
+ font-weight: 650;
910
+ }
911
+ .ck-table td {
912
+ color: var(--ck-fg);
913
+ }
914
+ .ck-table tr:last-child td {
915
+ border-bottom: 0;
916
+ }
917
+
918
+ /* The sources an answer cites, once, under it: a label and a chip each. */
919
+ .ck-sources {
920
+ display: flex;
921
+ flex-wrap: wrap;
922
+ align-items: center;
923
+ gap: 0.375rem;
924
+ margin-top: 1em;
925
+ }
926
+ .ck-sources-label {
927
+ margin-right: 0.25rem;
928
+ color: var(--ck-muted);
929
+ font-size: 0.8125rem;
930
+ }
931
+ .ck-source {
932
+ display: inline-flex;
933
+ align-items: center;
934
+ gap: 0.375em;
935
+ max-width: 100%;
936
+ min-height: 2rem;
937
+ padding: 0 0.625rem;
938
+ border: 1px solid var(--ck-line);
939
+ border-radius: 999px;
940
+ background: var(--ck-raised);
941
+ color: var(--ck-fg-2);
942
+ font-size: 0.8125rem;
943
+ text-decoration: none;
944
+ }
945
+ a.ck-source:hover {
946
+ border-color: var(--ck-line-2);
947
+ color: var(--ck-fg);
948
+ }
949
+ .ck-source-id {
950
+ font-family: var(--ck-mono);
951
+ font-size: 0.75em;
952
+ color: var(--ck-muted);
953
+ }
954
+ .ck-source-label {
955
+ overflow: hidden;
956
+ text-overflow: ellipsis;
957
+ white-space: nowrap;
785
958
  }
786
959
  .ck-md blockquote {
787
960
  padding-left: 0.875em;