@bitbaum/chatkit 0.8.2 → 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 +22 -1
- package/dist/markdown.d.ts +39 -5
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +108 -11
- package/dist/markdown.js.map +1 -1
- package/dist/react/Markdown.d.ts +36 -3
- package/dist/react/Markdown.d.ts.map +1 -1
- package/dist/react/Markdown.js +65 -28
- package/dist/react/Markdown.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
- package/styles.css +168 -0
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.
|
|
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
|
package/dist/markdown.d.ts
CHANGED
|
@@ -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
|
|
9
|
-
* **bold**, *italic*, `code`,
|
|
10
|
-
*
|
|
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),  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:
|
|
29
|
+
items: ListItem[];
|
|
21
30
|
} | {
|
|
22
31
|
kind: "ol";
|
|
23
|
-
items:
|
|
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
|
package/dist/markdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
9
|
-
* **bold**, *italic*, `code`,
|
|
10
|
-
*
|
|
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),  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
|
-
|
|
38
|
-
|
|
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 =
|
|
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(
|
|
93
|
+
list.items.push(item);
|
|
46
94
|
continue;
|
|
47
95
|
}
|
|
48
96
|
list = null;
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/react/Markdown.d.ts
CHANGED
|
@@ -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,
|
|
19
|
-
* code, links and citations. Never HTML — nothing here can
|
|
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;
|
|
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"}
|
package/dist/react/Markdown.js
CHANGED
|
@@ -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
|
-
|
|
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("
|
|
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,
|
|
40
|
-
* code, links and citations. Never HTML — nothing here can
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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":";AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/react/Markdown.tsx"],"names":[],"mappings":"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"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/react/index.js
CHANGED
|
@@ -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";
|
package/dist/react/index.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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
|
@@ -786,7 +786,175 @@
|
|
|
786
786
|
margin-top: 0.25em;
|
|
787
787
|
}
|
|
788
788
|
.ck-md-h {
|
|
789
|
+
margin: 0;
|
|
789
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;
|
|
790
958
|
}
|
|
791
959
|
.ck-md blockquote {
|
|
792
960
|
padding-left: 0.875em;
|