@bitbaum/chatkit 0.26.0 → 0.28.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
@@ -458,6 +458,60 @@ and radius follow the same `--ck-*` variables as the composer. The styles are
458
458
  in `styles.css` (not in the embedded `styles/chat.css`: this is not a chat
459
459
  surface).
460
460
 
461
+ #### In a form (0.27)
462
+
463
+ A field in a form needs more than a note box: a name for the post, an error,
464
+ the keys that submit it, and a blur an inline editor can save on. All of it is
465
+ optional; without these props the field is what it was, except that a `hint`
466
+ is now linked to the field with `aria-describedby`, and Enter in Improve's
467
+ "What should change?" box applies the instruction.
468
+
469
+ ```tsx
470
+ <form action="/api/listing" method="post">
471
+ <DictationField
472
+ label="Title"
473
+ name="title" // posts with the native form
474
+ multiline={false}
475
+ value={title}
476
+ onValueChange={setTitle}
477
+ error={tried && !title.trim() ? "A title is needed." : null}
478
+ hint="One line, said or typed."
479
+ onSubmit={save} // Enter here; Cmd/Ctrl+Enter in a text area
480
+ />
481
+ </form>
482
+ ```
483
+
484
+ - `name`, `autoFocus`, `readOnly` (no microphone, no Improve: nothing may
485
+ change the text), `id`, `maxLength`, `disabled`, `required`.
486
+ - `invalid` and `error`: `aria-invalid="true"`, the frame in `--ck-danger`, and
487
+ the error in words under the field (`<p class="ck-field-error" role="alert">`).
488
+ `error` implies `invalid`; an empty `error` (`""`, `0`) is no error. The error and `hint` describe the field through
489
+ `aria-describedby` (ids `<id>-error`, `<id>-hint`).
490
+ - `onSubmit`: the submit keys are the package's, so they are the same in every
491
+ app. Cmd+Enter or Ctrl+Enter in a multi-line field, Enter in a one-line one
492
+ (Shift+Enter does nothing there). Never during an IME composition, never
493
+ while disabled or read-only, never while a take is recorded or transcribed.
494
+ With `onSubmit` set, Enter in a one-line field is the package's whether it
495
+ submits or not: the browser's own form post never runs, so a form is not
496
+ sent mid-take without the words. An Enter that ends an IME composition is
497
+ left to the browser.
498
+ - `onKeyDown` runs first, on every key (Escape to cancel an inline editor);
499
+ `event.preventDefault()` there stops `onSubmit`.
500
+ - `onFocus` / `onBlur` belong to the whole field: the text box, the
501
+ microphone, Improve and its panel. Moving between them is not a blur, so
502
+ pressing the microphone does not close an inline editor that saves on blur.
503
+ Leaving while a take is recorded or transcribed is reported once the take
504
+ has ended and its words have gone through `onValueChange`, so a host that
505
+ unmounts the field on blur keeps what was said. Waiting for Improve is not
506
+ a blur either. A switch to another window or app is not a blur. A field
507
+ unmounted by the host while its blur is held reports no blur (the words
508
+ still arrive through `onValueChange`).
509
+ - `inputProps`: what the box itself may also take — `spellCheck`,
510
+ `autoComplete`, `autoCapitalize`, `inputMode`, `enterKeyHint`, `minLength`,
511
+ `aria-*`, `data-*` (`DictationFieldInputProps`). Spread before the managed
512
+ props, so the field's own id, value, class, label wiring, keys and focus
513
+ win; an `aria-describedby` there is joined with the hint and error ids.
514
+
461
515
  ### Comments — `CommentThread` (0.23)
462
516
 
463
517
  The conversation under anything: an article, a page, a listing.
@@ -480,7 +534,10 @@ The conversation under anything: an article, a page, a listing.
480
534
  The component owns the list, the optimistic removal (rolled back, in words, if
481
535
  it fails) and every failure message; the box is `Composer`, so it has the
482
536
  microphone, 16px text and Enter-to-send; a refused post keeps the draft in the
483
- box. A comment is shown as text, never as markup, with its line breaks. Times
537
+ box. To say why a post was refused ("Write a longer comment", a rate
538
+ limit), throw `new CommentRefused(words)` from `post` or `remove`: the thread
539
+ shows those words instead of the generic "try again", which would fail the
540
+ same way forever; any other error shows the label. A comment is shown as text, never as markup, with its line breaks. Times
484
541
  render in `timeZone` (UTC by default, so the server's and the browser's markup
485
542
  agree), or through your own `formatTime`.
486
543
 
@@ -913,7 +970,9 @@ on `Composer`, `labels` on `ChatThread`.
913
970
  back after a reload, attachments on, a queue behind a running answer.
914
971
 
915
972
  12. Any other text box is `DictationField`: the same microphone, 16px text and
916
- 44px targets as the composer, and an optional Improve with Undo.
973
+ 44px targets as the composer, and an optional Improve with Undo. In a form
974
+ it takes a name, an error said in words, the same submit keys in every app
975
+ and a blur that belongs to the whole field.
917
976
  13. A conversation under an item is `CommentThread`: oldest first, the same box
918
977
  with the microphone, remove your own, a way to sign in for a reader who
919
978
  cannot yet write.
@@ -12,11 +12,30 @@ export type CommentItem = {
12
12
  * every failure message; the app owns the database and who may do what.
13
13
  */
14
14
  export type CommentTransport = {
15
- /** Store the comment and return it as stored (its id, its author, its time). Throw to refuse. */
15
+ /**
16
+ * Store the comment and return it as stored (its id, its author, its time).
17
+ * Throw to refuse: a `CommentRefused` with the reason the reader should see.
18
+ */
16
19
  post: (text: string) => Promise<CommentItem>;
17
20
  /** Delete one. Omit and nobody gets a Remove button. */
18
21
  remove?: (id: string) => Promise<void>;
19
22
  };
23
+ /**
24
+ * Throw this from `transport.post` or `transport.remove` to say why in the
25
+ * reader's words: the thread shows `message` under the box instead of its
26
+ * generic `postFailed` / `removeFailed`, so "Write a longer comment" or "You
27
+ * have posted a lot this hour" reaches the reader rather than "try again",
28
+ * which would fail the same way forever. Any other error shows the label: a
29
+ * raw `TypeError` or a server's English is never shown (the same rule as
30
+ * `ChatTurnError`).
31
+ */
32
+ export declare class CommentRefused extends Error {
33
+ constructor(message: string, options?: {
34
+ cause?: unknown;
35
+ });
36
+ }
37
+ /** What a failed post or removal says: a `CommentRefused`'s words, else the label. */
38
+ export declare function commentFailure(error: unknown, fallback: string): string;
20
39
  export type CommentThreadLabels = {
21
40
  /** The heading: "No comments yet", "1 comment", "7 comments". */
22
41
  count: (n: number) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"CommentThread.d.ts","sourceRoot":"","sources":["../../src/react/CommentThread.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iGAAiG;IACjG,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,iEAAiE;IACjE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,mBAU3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kFAAkF;IAClF,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,sFAAsF;IACtF,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChC,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IAC9C,8EAA8E;IAC9E,KAAK,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,KAAK,MAAM,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAaF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,EACT,KAAK,EACL,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAgB,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,GACV,EAAE,kBAAkB,+BA6GpB"}
1
+ {"version":3,"file":"CommentThread.d.ts","sourceRoot":"","sources":["../../src/react/CommentThread.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,wDAAwD;IACxD,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAI/D;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,iEAAiE;IACjE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,mBAU3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kFAAkF;IAClF,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IACjC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,sFAAsF;IACtF,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChC,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IAC9C,8EAA8E;IAC9E,KAAK,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,KAAK,MAAM,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAaF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,EACT,KAAK,EACL,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAgB,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,GACV,EAAE,kBAAkB,+BA6GpB"}
@@ -2,6 +2,25 @@
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { createElement, useId, useState } from "react";
4
4
  import { Composer } from "./Composer.js";
5
+ /**
6
+ * Throw this from `transport.post` or `transport.remove` to say why in the
7
+ * reader's words: the thread shows `message` under the box instead of its
8
+ * generic `postFailed` / `removeFailed`, so "Write a longer comment" or "You
9
+ * have posted a lot this hour" reaches the reader rather than "try again",
10
+ * which would fail the same way forever. Any other error shows the label: a
11
+ * raw `TypeError` or a server's English is never shown (the same rule as
12
+ * `ChatTurnError`).
13
+ */
14
+ export class CommentRefused extends Error {
15
+ constructor(message, options = {}) {
16
+ super(message, options.cause === undefined ? undefined : { cause: options.cause });
17
+ this.name = "CommentRefused";
18
+ }
19
+ }
20
+ /** What a failed post or removal says: a `CommentRefused`'s words, else the label. */
21
+ export function commentFailure(error, fallback) {
22
+ return error instanceof CommentRefused && error.message.trim() ? error.message : fallback;
23
+ }
5
24
  export const DEFAULT_COMMENT_THREAD_LABELS = {
6
25
  count: (n) => (n === 0 ? "No comments yet" : n === 1 ? "1 comment" : `${n} comments`),
7
26
  placeholder: "Say something about this…",
@@ -47,8 +66,8 @@ export function CommentThread({ comments, transport, viewer, signInHref, canRemo
47
66
  setList((current) => [...current, created]);
48
67
  return true;
49
68
  }
50
- catch {
51
- setError(labels.postFailed);
69
+ catch (e) {
70
+ setError(commentFailure(e, labels.postFailed));
52
71
  return false;
53
72
  }
54
73
  finally {
@@ -64,9 +83,9 @@ export function CommentThread({ comments, transport, viewer, signInHref, canRemo
64
83
  try {
65
84
  await transport.remove(id);
66
85
  }
67
- catch {
86
+ catch (e) {
68
87
  setList(before);
69
- setError(labels.removeFailed);
88
+ setError(commentFailure(e, labels.removeFailed));
70
89
  }
71
90
  };
72
91
  const heading = createElement(`h${headingLevel}`, { id: headingId, className: "ck-comments-title" }, labels.count(list.length));
@@ -1 +1 @@
1
- {"version":3,"file":"CommentThread.js","sourceRoot":"","sources":["../../src/react/CommentThread.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommentThread.js","sourceRoot":"","sources":["../../src/react/CommentThread.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type ReactNode, type Ref } from "react";
1
+ import { type HTMLAttributes, type KeyboardEvent as ReactKeyboardEvent, type ReactNode, type Ref } from "react";
2
2
  import { type DictationProblem } from "../dictation.js";
3
3
  import type { ComposerVoice } from "./Composer.js";
4
4
  export type DictationFieldLabels = {
@@ -30,6 +30,24 @@ export declare const DEFAULT_DICTATION_FIELD_LABELS: DictationFieldLabels;
30
30
  * owns those — only the way a person asks, sees and takes it back.
31
31
  */
32
32
  export type ImproveRun = (text: string, instruction: string) => Promise<string | null | undefined>;
33
+ /**
34
+ * Props the component sets itself. `inputProps` cannot replace them: the
35
+ * field's value, its label wiring, its error state, its 16px text and its
36
+ * keys belong to the package.
37
+ */
38
+ type ManagedInputKey = "id" | "className" | "style" | "value" | "defaultValue" | "placeholder" | "children" | "dangerouslySetInnerHTML" | "onChange" | "onKeyDown" | "onFocus" | "onBlur" | "aria-label" | "aria-invalid";
39
+ /**
40
+ * What an app may add to the text box itself: `spellCheck`, `autoComplete`,
41
+ * `autoCapitalize`, `inputMode`, `enterKeyHint`, `minLength`, `aria-*` and
42
+ * `data-*`. Spread before the managed props, so the managed ones win;
43
+ * `aria-describedby` is joined with the hint and error ids, not replaced.
44
+ */
45
+ export type DictationFieldInputProps = Omit<HTMLAttributes<HTMLElement>, ManagedInputKey> & {
46
+ autoComplete?: string;
47
+ minLength?: number;
48
+ } & {
49
+ [data: `data-${string}`]: string | number | boolean | undefined;
50
+ };
33
51
  export type DictationFieldProps = {
34
52
  value: string;
35
53
  onValueChange: (next: string) => void;
@@ -45,6 +63,35 @@ export type DictationFieldProps = {
45
63
  maxLength?: number;
46
64
  disabled?: boolean;
47
65
  required?: boolean;
66
+ /** The field's name in a native `<form>` post. */
67
+ name?: string;
68
+ autoFocus?: boolean;
69
+ /** Shown, selectable, not editable: no microphone, no Improve, no Undo. */
70
+ readOnly?: boolean;
71
+ /** The error state: `aria-invalid`, the frame in the danger colour. */
72
+ invalid?: boolean;
73
+ /** The error, in words, under the field (`role="alert"`). Implies `invalid`. */
74
+ error?: ReactNode;
75
+ /** Runs first; `event.preventDefault()` here stops `onSubmit`. */
76
+ onKeyDown?: (event: ReactKeyboardEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
77
+ /**
78
+ * The submit keys, the same in every app: Cmd+Enter or Ctrl+Enter in a
79
+ * multi-line field, Enter in a one-line one. Never during an IME
80
+ * composition, never while disabled or read-only, never while a take is
81
+ * being recorded or transcribed.
82
+ */
83
+ onSubmit?: () => void;
84
+ /** Focus entered the FIELD (text box, microphone, Improve and its panel). */
85
+ onFocus?: () => void;
86
+ /**
87
+ * Focus left the whole field — not when it moves between its parts, so
88
+ * pressing the microphone is not a blur. Leaving while a take is recorded
89
+ * or transcribed is reported once the take has ended and its words have
90
+ * been delivered through `onValueChange`.
91
+ */
92
+ onBlur?: () => void;
93
+ /** Extra attributes for the text box; see `DictationFieldInputProps`. */
94
+ inputProps?: DictationFieldInputProps;
48
95
  /** The microphone. Pass `{ transcribeUrl }` for the server leg; `false` hides it. */
49
96
  voice?: ComposerVoice | false;
50
97
  /** Give it, and a non-empty field offers "Improve". */
@@ -74,5 +121,6 @@ export type DictationFieldProps = {
74
121
  * has text offers one more control: pick a suggestion or say or type what to
75
122
  * change, the text is replaced, and Undo puts it back until the next edit.
76
123
  */
77
- export declare function DictationField({ value, onValueChange, label, ariaLabel, id, placeholder, multiline, rows, maxLength, disabled, required, voice, improve, hint, inputRef, labels: overrides, className, }: DictationFieldProps): import("react").JSX.Element;
124
+ export declare function DictationField({ value, onValueChange, label, ariaLabel, id, placeholder, multiline, rows, maxLength, disabled, required, name, autoFocus, readOnly, invalid, error, onKeyDown, onSubmit, onFocus, onBlur, inputProps, voice, improve, hint, inputRef, labels: overrides, className, }: DictationFieldProps): import("react").JSX.Element;
125
+ export {};
78
126
  //# sourceMappingURL=DictationField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DictationField.d.ts","sourceRoot":"","sources":["../../src/react/DictationField.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAErF,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC5C,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,oBAkB5C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEnG,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,KAAK,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAC9B,uDAAuD;IACvD,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/D,oDAAoD;IACpD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,GAAG;QAC1D,SAAS,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;KACxD,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,aAAa,EACb,KAAK,EACL,SAAS,EACT,EAAE,EACF,WAAW,EACX,SAAgB,EAChB,IAAQ,EACR,SAAS,EACT,QAAgB,EAChB,QAAQ,EACR,KAAU,EACV,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,MAAM,EAAE,SAAS,EACjB,SAAS,GACV,EAAE,mBAAmB,+BAwMrB"}
1
+ {"version":3,"file":"DictationField.d.ts","sourceRoot":"","sources":["../../src/react/DictationField.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useEffect, useId, useRef, useState } from "react";
3
+ import { useEffect, useId, useRef, useState, } from "react";
4
4
  import { appendTranscript } from "../composer.js";
5
5
  import { DEFAULT_DICTATION_MESSAGES } from "../dictation.js";
6
6
  import { useDictation } from "./use-dictation.js";
7
7
  import { useAutoGrow } from "./hooks.js";
8
+ import { useFieldFocus } from "./field-focus.js";
8
9
  import { VoiceBar, VoiceProblem } from "./Voice.js";
9
10
  import { IconMic, IconSpinner } from "./icons.js";
10
11
  export const DEFAULT_DICTATION_FIELD_LABELS = {
@@ -39,7 +40,7 @@ export const DEFAULT_DICTATION_FIELD_LABELS = {
39
40
  * has text offers one more control: pick a suggestion or say or type what to
40
41
  * change, the text is replaced, and Undo puts it back until the next edit.
41
42
  */
42
- export function DictationField({ value, onValueChange, label, ariaLabel, id, placeholder, multiline = true, rows = 3, maxLength, disabled = false, required, voice = {}, improve, hint, inputRef, labels: overrides, className, }) {
43
+ export function DictationField({ value, onValueChange, label, ariaLabel, id, placeholder, multiline = true, rows = 3, maxLength, disabled = false, required, name, autoFocus, readOnly = false, invalid = false, error, onKeyDown, onSubmit, onFocus, onBlur, inputProps, voice = {}, improve, hint, inputRef, labels: overrides, className, }) {
43
44
  const labels = {
44
45
  ...DEFAULT_DICTATION_FIELD_LABELS,
45
46
  ...overrides,
@@ -65,11 +66,25 @@ export function DictationField({ value, onValueChange, label, ariaLabel, id, pla
65
66
  set(appendTranscript(valueRef.current, said));
66
67
  },
67
68
  });
68
- const voiceOn = voice !== false && dictation.supported;
69
+ const voiceOn = voice !== false && dictation.supported && !readOnly;
69
70
  const listening = dictation.status === "listening";
70
71
  const transcribing = dictation.status === "transcribing";
71
72
  const [open, setOpen] = useState(false);
72
73
  const [working, setWorking] = useState(false);
74
+ // Improve at work disables its own box and button, so focus falls off them
75
+ // with nowhere to go: the person is still in the field, waiting.
76
+ const focus = useFieldFocus({
77
+ busy: dictation.status !== "idle" || working,
78
+ onFocus,
79
+ onBlur,
80
+ });
81
+ // An error with no words (`error=""` from a `?? ""`, a `0` from `n && msg`)
82
+ // is no error: colour must never be the only sign.
83
+ const hasError = error !== undefined && error !== null && error !== false && error !== "" && error !== 0;
84
+ const isInvalid = invalid || hasError;
85
+ const hintId = hint ? `${fieldId}-hint` : undefined;
86
+ const errorId = hasError ? `${fieldId}-error` : undefined;
87
+ const describedBy = [inputProps?.["aria-describedby"], errorId, hintId].filter(Boolean).join(" ") || undefined;
73
88
  const [failed, setFailed] = useState(false);
74
89
  const [instruction, setInstruction] = useState("");
75
90
  const [undo, setUndo] = useState(null);
@@ -97,16 +112,42 @@ export function DictationField({ value, onValueChange, label, ariaLabel, id, pla
97
112
  setWorking(false);
98
113
  }
99
114
  };
100
- const canImprove = Boolean(improve) && value.trim().length > 0;
115
+ const canImprove = Boolean(improve) && !readOnly && value.trim().length > 0;
101
116
  const common = {
102
117
  id: fieldId,
103
118
  className: "ck-field-input",
119
+ style: undefined,
104
120
  value,
105
121
  placeholder: listening ? labels.listening : placeholder,
106
122
  maxLength,
107
123
  required,
124
+ name,
125
+ autoFocus,
126
+ readOnly: readOnly || undefined,
108
127
  disabled: disabled || transcribing,
109
128
  "aria-label": label ? undefined : (ariaLabel ?? placeholder),
129
+ "aria-invalid": isInvalid ? true : undefined,
130
+ "aria-describedby": describedBy,
131
+ };
132
+ const handleKeyDown = (e) => {
133
+ onKeyDown?.(e);
134
+ if (!onSubmit || e.defaultPrevented || e.key !== "Enter")
135
+ return;
136
+ // An Enter that confirms an IME composition (Japanese, Chinese, Korean)
137
+ // is the person choosing a word, not sending.
138
+ if (e.nativeEvent.isComposing || e.keyCode === 229)
139
+ return;
140
+ const chord = e.metaKey || e.ctrlKey;
141
+ if (multiline && !chord)
142
+ return; // a new line
143
+ // From here the key is the package's: in a one-line field the browser
144
+ // would otherwise send the native form, mid-take, without the words.
145
+ e.preventDefault();
146
+ if (disabled || readOnly || dictation.status !== "idle")
147
+ return;
148
+ if (!multiline && (e.shiftKey || e.altKey))
149
+ return;
150
+ onSubmit();
110
151
  };
111
152
  const onChange = (next) => {
112
153
  setUndo(null);
@@ -120,9 +161,11 @@ export function DictationField({ value, onValueChange, label, ariaLabel, id, pla
120
161
  else if (inputRef)
121
162
  inputRef.current = el;
122
163
  };
123
- return (_jsxs("div", { className: className ? `ck-field-wrap ${className}` : "ck-field-wrap", children: [label && (_jsx("label", { className: "ck-field-label", htmlFor: fieldId, children: label })), _jsxs("div", { className: "ck-field-frame", children: [_jsx(VoiceBar, { dictation: dictation, labels: labels }), _jsxs("div", { className: multiline ? "ck-field" : "ck-field ck-field-single", children: [multiline ? (_jsx("textarea", { ...common, ref: setRefs, rows: rows, onChange: (e) => onChange(e.target.value) })) : (_jsx("input", { ...common, ref: setRefs, type: "text", enterKeyHint: "done", onChange: (e) => onChange(e.target.value) })), _jsxs("div", { className: "ck-field-actions", children: [canImprove && (_jsx("button", { type: "button", className: "ck-field-improve", "aria-expanded": open, disabled: disabled || working, onClick: () => setOpen((o) => !o), children: labels.improve })), voiceOn && (_jsx("button", { type: "button", className: listening ? "ck-icon-btn ck-mic ck-mic-on" : "ck-icon-btn ck-mic", onClick: dictation.toggle, disabled: disabled || transcribing, "aria-label": listening ? labels.voiceStop : labels.voice, "aria-pressed": listening, title: listening ? labels.voiceStop : labels.voice, children: transcribing ? _jsx(IconSpinner, {}) : _jsx(IconMic, {}) }))] })] })] }), open && improve && (_jsxs("div", { className: "ck-field-improve-panel", children: [improve.suggestions && improve.suggestions.length > 0 && (_jsx("div", { className: "ck-field-suggestions", role: "group", children: improve.suggestions.map((s) => (_jsx("button", { type: "button", className: "ck-field-suggestion", disabled: working, onClick: () => void run(s), children: s }, s))) })), _jsxs("div", { className: "ck-field-improve-row", children: [_jsx(DictationField, { value: instruction, onValueChange: setInstruction, multiline: false, placeholder: labels.improveWhat, ariaLabel: labels.improveWhat, voice: voice, disabled: working, labels: overrides }), _jsx("button", { type: "button", className: "ck-field-apply", disabled: working || !instruction.trim(), onClick: () => void run(instruction), children: working ? labels.improveWorking : labels.improveApply })] }), failed && (_jsx("p", { className: "ck-problem", role: "alert", children: _jsx("span", { children: labels.improveFailed }) }))] })), undo !== null && (_jsxs("p", { className: "ck-field-undo", role: "status", children: [_jsx("span", { children: labels.improved }), _jsx("button", { type: "button", className: "ck-problem-retry", onClick: () => {
164
+ return (_jsxs("div", { ref: focus.wrapRef, className: ["ck-field-wrap", isInvalid && "ck-field-invalid", className]
165
+ .filter(Boolean)
166
+ .join(" "), onFocus: focus.onFocus, onBlur: focus.onBlur, children: [label && (_jsx("label", { className: "ck-field-label", htmlFor: fieldId, children: label })), _jsxs("div", { className: "ck-field-frame", children: [_jsx(VoiceBar, { dictation: dictation, labels: labels }), _jsxs("div", { className: multiline ? "ck-field" : "ck-field ck-field-single", children: [multiline ? (_jsx("textarea", { ...inputProps, ...common, ref: setRefs, rows: rows, onChange: (e) => onChange(e.target.value), onKeyDown: handleKeyDown })) : (_jsx("input", { ...inputProps, ...common, ref: setRefs, type: "text", enterKeyHint: inputProps?.enterKeyHint ?? "done", onChange: (e) => onChange(e.target.value), onKeyDown: handleKeyDown })), _jsxs("div", { className: "ck-field-actions", children: [canImprove && (_jsx("button", { type: "button", className: "ck-field-improve", "aria-expanded": open, disabled: disabled || working, onClick: () => setOpen((o) => !o), children: labels.improve })), voiceOn && (_jsx("button", { type: "button", className: listening ? "ck-icon-btn ck-mic ck-mic-on" : "ck-icon-btn ck-mic", onClick: dictation.toggle, disabled: disabled || transcribing, "aria-label": listening ? labels.voiceStop : labels.voice, "aria-pressed": listening, title: listening ? labels.voiceStop : labels.voice, children: transcribing ? _jsx(IconSpinner, {}) : _jsx(IconMic, {}) }))] })] })] }), errorId && (_jsx("p", { id: errorId, className: "ck-field-error", role: "alert", children: error })), open && improve && !readOnly && (_jsxs("div", { className: "ck-field-improve-panel", children: [improve.suggestions && improve.suggestions.length > 0 && (_jsx("div", { className: "ck-field-suggestions", role: "group", children: improve.suggestions.map((s) => (_jsx("button", { type: "button", className: "ck-field-suggestion", disabled: working, onClick: () => void run(s), children: s }, s))) })), _jsxs("div", { className: "ck-field-improve-row", children: [_jsx(DictationField, { value: instruction, onValueChange: setInstruction, multiline: false, placeholder: labels.improveWhat, ariaLabel: labels.improveWhat, voice: voice, disabled: working, labels: overrides, onSubmit: () => void run(instruction) }), _jsx("button", { type: "button", className: "ck-field-apply", disabled: working || !instruction.trim(), onClick: () => void run(instruction), children: working ? labels.improveWorking : labels.improveApply })] }), failed && (_jsx("p", { className: "ck-problem", role: "alert", children: _jsx("span", { children: labels.improveFailed }) }))] })), undo !== null && !readOnly && (_jsxs("p", { className: "ck-field-undo", role: "status", children: [_jsx("span", { children: labels.improved }), _jsx("button", { type: "button", className: "ck-problem-retry", onClick: () => {
124
167
  set(undo);
125
168
  setUndo(null);
126
- }, children: labels.undo })] })), _jsx(VoiceProblem, { dictation: dictation, labels: labels }), hint && _jsx("div", { className: "ck-field-hint", children: hint })] }));
169
+ }, children: labels.undo })] })), _jsx(VoiceProblem, { dictation: dictation, labels: labels }), hint && (_jsx("div", { id: hintId, className: "ck-field-hint", children: hint }))] }));
127
170
  }
128
171
  //# sourceMappingURL=DictationField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DictationField.js","sourceRoot":"","sources":["../../src/react/DictationField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DictationField.js","sourceRoot":"","sources":["../../src/react/DictationField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type FocusEvent as ReactFocusEvent } from "react";
2
+ /**
3
+ * Focus for a whole field, not for one element in it.
4
+ *
5
+ * A field is a text box, a microphone, Improve and the improve panel. A host
6
+ * that saves and closes an inline editor on blur must not see a blur when
7
+ * focus moves between those parts, or the editor closes under the person's
8
+ * finger as they press the microphone. So `onFocus` fires when focus enters
9
+ * the field and `onBlur` when it leaves it; moves inside are not reported.
10
+ *
11
+ * Focus can also go nowhere (`relatedTarget` null): a tap on empty page, a
12
+ * button that takes no focus (Safari), a control the field itself removes or
13
+ * disables while busy, or the window losing focus. Once focus has settled
14
+ * the field decides: back inside, or the window switched away → still here; a
15
+ * recent press inside → still here (the press was on the field); a recent
16
+ * press outside → left. Until a later press or focus lands outside, the field
17
+ * counts as focused, and the document listeners report the blur then.
18
+ *
19
+ * A blur while `busy` (a take is recorded or transcribed, or Improve is at
20
+ * work) is held and reported once that has ended, which is after a take's
21
+ * words were delivered, so a host that unmounts the field on blur never loses
22
+ * what was said. A field unmounted while its blur is held reports none: the
23
+ * words still reach `onValueChange`, the blur does not.
24
+ */
25
+ export declare function useFieldFocus({ busy, onFocus, onBlur, }: {
26
+ busy: boolean;
27
+ onFocus?: () => void;
28
+ onBlur?: () => void;
29
+ }): {
30
+ wrapRef: import("react").RefObject<HTMLDivElement | null>;
31
+ onFocus: () => void;
32
+ onBlur: (e: ReactFocusEvent<HTMLDivElement>) => void;
33
+ };
34
+ //# sourceMappingURL=field-focus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-focus.d.ts","sourceRoot":"","sources":["../../src/react/field-focus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,UAAU,IAAI,eAAe,EAAE,MAAM,OAAO,CAAC;AAK3F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,MAAM,GACP,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;;;gBAoEO,eAAe,CAAC,cAAc,CAAC;EAyBtC"}
@@ -0,0 +1,120 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useRef } from "react";
3
+ /** A press this recent explains a focus that went nowhere (iOS moves focus at the click). */
4
+ const PRESS_EXPLAINS_MS = 1000;
5
+ /**
6
+ * Focus for a whole field, not for one element in it.
7
+ *
8
+ * A field is a text box, a microphone, Improve and the improve panel. A host
9
+ * that saves and closes an inline editor on blur must not see a blur when
10
+ * focus moves between those parts, or the editor closes under the person's
11
+ * finger as they press the microphone. So `onFocus` fires when focus enters
12
+ * the field and `onBlur` when it leaves it; moves inside are not reported.
13
+ *
14
+ * Focus can also go nowhere (`relatedTarget` null): a tap on empty page, a
15
+ * button that takes no focus (Safari), a control the field itself removes or
16
+ * disables while busy, or the window losing focus. Once focus has settled
17
+ * the field decides: back inside, or the window switched away → still here; a
18
+ * recent press inside → still here (the press was on the field); a recent
19
+ * press outside → left. Until a later press or focus lands outside, the field
20
+ * counts as focused, and the document listeners report the blur then.
21
+ *
22
+ * A blur while `busy` (a take is recorded or transcribed, or Improve is at
23
+ * work) is held and reported once that has ended, which is after a take's
24
+ * words were delivered, so a host that unmounts the field on blur never loses
25
+ * what was said. A field unmounted while its blur is held reports none: the
26
+ * words still reach `onValueChange`, the blur does not.
27
+ */
28
+ export function useFieldFocus({ busy, onFocus, onBlur, }) {
29
+ const wrapRef = useRef(null);
30
+ const inside = useRef(false);
31
+ const held = useRef(false);
32
+ const busyRef = useRef(busy);
33
+ const lastPress = useRef(null);
34
+ const callbacks = useRef({ onFocus, onBlur });
35
+ // Before the busy effect below, so a held blur calls the host's handler
36
+ // from the render that already has the delivered words.
37
+ useEffect(() => {
38
+ callbacks.current = { onFocus, onBlur };
39
+ });
40
+ const contains = useCallback((node) => typeof Node !== "undefined" && node instanceof Node && !!wrapRef.current?.contains(node), []);
41
+ const leave = useCallback(() => {
42
+ if (!inside.current)
43
+ return;
44
+ if (busyRef.current) {
45
+ held.current = true;
46
+ return;
47
+ }
48
+ inside.current = false;
49
+ held.current = false;
50
+ callbacks.current.onBlur?.();
51
+ }, []);
52
+ useEffect(() => {
53
+ busyRef.current = busy;
54
+ if (!busy && held.current)
55
+ leave();
56
+ }, [busy, leave]);
57
+ const tracking = Boolean(onFocus || onBlur);
58
+ useEffect(() => {
59
+ if (!tracking)
60
+ return;
61
+ const onPointer = (e) => {
62
+ const pressedInside = contains(e.target);
63
+ lastPress.current = { inside: pressedInside, at: Date.now() };
64
+ if (pressedInside) {
65
+ // Back on the field before the take ended: nothing to report.
66
+ held.current = false;
67
+ return;
68
+ }
69
+ // Focused nowhere in the field (see above) and a press elsewhere: left.
70
+ if (inside.current && !contains(document.activeElement))
71
+ leave();
72
+ };
73
+ const onFocusIn = (e) => {
74
+ if (!contains(e.target))
75
+ leave();
76
+ };
77
+ document.addEventListener("pointerdown", onPointer, true);
78
+ document.addEventListener("focusin", onFocusIn, true);
79
+ return () => {
80
+ document.removeEventListener("pointerdown", onPointer, true);
81
+ document.removeEventListener("focusin", onFocusIn, true);
82
+ };
83
+ }, [tracking, contains, leave]);
84
+ const handleFocus = useCallback(() => {
85
+ held.current = false;
86
+ if (inside.current)
87
+ return;
88
+ inside.current = true;
89
+ callbacks.current.onFocus?.();
90
+ }, []);
91
+ const handleBlur = useCallback((e) => {
92
+ const next = e.relatedTarget;
93
+ if (next) {
94
+ if (!contains(next))
95
+ leave();
96
+ return;
97
+ }
98
+ setTimeout(() => {
99
+ if (!inside.current || !wrapRef.current)
100
+ return;
101
+ if (contains(document.activeElement))
102
+ return;
103
+ if (!document.hasFocus())
104
+ return;
105
+ const press = lastPress.current;
106
+ if (press && Date.now() - press.at < PRESS_EXPLAINS_MS) {
107
+ if (!press.inside)
108
+ leave();
109
+ return;
110
+ }
111
+ // No press: focus fell off a control this field removed or disabled
112
+ // while busy (a take, Improve at work). The person has not gone anywhere.
113
+ if (busyRef.current)
114
+ return;
115
+ leave();
116
+ }, 0);
117
+ }, [contains, leave]);
118
+ return { wrapRef, onFocus: handleFocus, onBlur: handleBlur };
119
+ }
120
+ //# sourceMappingURL=field-focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-focus.js","sourceRoot":"","sources":["../../src/react/field-focus.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,13 @@ export declare function useClipboard(resetMs?: number): {
14
14
  * case page). Never scroll other ancestors as a side effect of following.
15
15
  * `grew` counts new user turns: an arriving assistant turn is not permission
16
16
  * to take the reader away from an older answer.
17
+ *
18
+ * A greeting on a page is not a conversation yet. While the document owns the
19
+ * scroll and the reader has sent nothing (`grew` is 0), the thread neither
20
+ * moves the page nor offers a way back down: a contact box at the foot of a
21
+ * long page opened that page at the box, past everything above it (bitbaum
22
+ * /hire/ and /builders/, 2026-11-12). The first turn the reader sends starts
23
+ * the following.
17
24
  */
18
25
  export declare function useStickToBottom(changes: DependencyList, grew: number): {
19
26
  scrollRef: RefObject<HTMLDivElement | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAO;;iBAUhC,MAAM;EAYhB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM;;;;;;;EA4LrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,OAAO,UAAO,QAqBvF;AAED;;;;;;;;gFAQgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAM,QAqB/F"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAO;;iBAUhC,MAAM;EAYhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM;;;;;;;EAuMrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,OAAO,UAAO,QAqBvF;AAED;;;;;;;;gFAQgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAM,QAqB/F"}
@@ -31,6 +31,13 @@ export function useClipboard(resetMs = 1500) {
31
31
  * case page). Never scroll other ancestors as a side effect of following.
32
32
  * `grew` counts new user turns: an arriving assistant turn is not permission
33
33
  * to take the reader away from an older answer.
34
+ *
35
+ * A greeting on a page is not a conversation yet. While the document owns the
36
+ * scroll and the reader has sent nothing (`grew` is 0), the thread neither
37
+ * moves the page nor offers a way back down: a contact box at the foot of a
38
+ * long page opened that page at the box, past everything above it (bitbaum
39
+ * /hire/ and /builders/, 2026-11-12). The first turn the reader sends starts
40
+ * the following.
34
41
  */
35
42
  export function useStickToBottom(changes, grew) {
36
43
  const scrollRef = useRef(null);
@@ -39,6 +46,8 @@ export function useStickToBottom(changes, grew) {
39
46
  const [pageScroll, setPageScroll] = useState(false);
40
47
  const followingRef = useRef(true);
41
48
  const owner = useRef(null);
49
+ const turns = useRef(grew);
50
+ turns.current = grew;
42
51
  const previousTop = useRef(0);
43
52
  const downwardIntent = useRef(false);
44
53
  const draggingScrollbar = useRef(false);
@@ -72,6 +81,8 @@ export function useStickToBottom(changes, grew) {
72
81
  if (!el || !end)
73
82
  return;
74
83
  const page = el === document.scrollingElement;
84
+ if (page && turns.current === 0)
85
+ return;
75
86
  const bottom = end.getBoundingClientRect().bottom;
76
87
  const top = page
77
88
  ? el.scrollTop + bottom - window.innerHeight
@@ -221,7 +232,15 @@ export function useStickToBottom(changes, grew) {
221
232
  }
222
233
  previous.current = grew;
223
234
  }, [grew, follow, pin]);
224
- return { scrollRef, endRef, following, pageScroll, onScroll, jumpToBottom };
235
+ return {
236
+ scrollRef,
237
+ endRef,
238
+ // Nothing to jump to before the reader has said anything on a page.
239
+ following: following || (pageScroll && grew === 0),
240
+ pageScroll,
241
+ onScroll,
242
+ jumpToBottom,
243
+ };
225
244
  }
226
245
  /**
227
246
  * Publishes the VISUAL viewport height as `--ck-viewport-height`.
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,8 @@ export type { ComposerProps, ComposerLabels, ComposerLabelOverrides, ComposerVoi
12
12
  export { ChatThread, ChatMessage, ChatReplies, ChatStarters, starterParts, ThinkingRow, formatThinkingDuration, DEFAULT_THREAD_LABELS, } from "./Thread.js";
13
13
  export type { ChatMessageData, ChatFailure, FooterInfo, MessageChip, ChatSpeaker, LiveTurn, Starter, Thinking, ThinkingStep, ThreadLabels, } from "./Thread.js";
14
14
  export { DictationField, DEFAULT_DICTATION_FIELD_LABELS } from "./DictationField.js";
15
- export type { DictationFieldProps, DictationFieldLabels, ImproveRun } from "./DictationField.js";
16
- export { CommentThread, DEFAULT_COMMENT_THREAD_LABELS } from "./CommentThread.js";
15
+ export type { DictationFieldProps, DictationFieldLabels, DictationFieldInputProps, ImproveRun, } from "./DictationField.js";
16
+ export { CommentThread, CommentRefused, commentFailure, DEFAULT_COMMENT_THREAD_LABELS, } from "./CommentThread.js";
17
17
  export type { CommentItem, CommentTransport, CommentThreadProps, CommentThreadLabels, } from "./CommentThread.js";
18
18
  export { ChatScreen } from "./Screen.js";
19
19
  export { Markdown, SourcesRow, defaultRenderLink, defaultRenderCitation } from "./Markdown.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,EACb,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrF,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjD,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,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9E,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC9F,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  export { Composer, DEFAULT_COMPOSER_LABELS } from "./Composer.js";
11
11
  export { ChatThread, ChatMessage, ChatReplies, ChatStarters, starterParts, ThinkingRow, formatThinkingDuration, DEFAULT_THREAD_LABELS, } from "./Thread.js";
12
12
  export { DictationField, DEFAULT_DICTATION_FIELD_LABELS } from "./DictationField.js";
13
- export { CommentThread, DEFAULT_COMMENT_THREAD_LABELS } from "./CommentThread.js";
13
+ export { CommentThread, CommentRefused, commentFailure, DEFAULT_COMMENT_THREAD_LABELS, } from "./CommentThread.js";
14
14
  export { ChatScreen } from "./Screen.js";
15
15
  export { Markdown, SourcesRow, defaultRenderLink, defaultRenderCitation } from "./Markdown.js";
16
16
  export { AnswerActions, DEFAULT_ANSWER_ACTIONS_LABELS } from "./AnswerActions.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;AAQlE,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAOlF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQ9E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,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;AAQlE,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAOrF,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQ9E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitbaum/chatkit",
3
- "version": "0.26.0",
3
+ "version": "0.28.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 — the fleet's chat standard as a package.",
5
5
  "license": "MIT",
6
6
  "author": "Cato",
@@ -78,7 +78,7 @@
78
78
  "verify": "pnpm run format:check && pnpm run lint && pnpm run typecheck && pnpm run build && pnpm test && pnpm run test:browser",
79
79
  "format": "prettier --write .",
80
80
  "format:check": "prettier --check .",
81
- "demo": "esbuild demo/demo.tsx --bundle --jsx=automatic --format=iife --define:process.env.NODE_ENV='\"production\"' --outfile=demo/dist/demo.js --log-level=warning",
81
+ "demo": "esbuild demo/demo.tsx --bundle --jsx=automatic --format=iife --define:process.env.NODE_ENV='\"production\"' --outfile=demo/dist/demo.js --log-level=warning && esbuild demo/demo.tsx --bundle --jsx=automatic --format=iife --define:process.env.NODE_ENV='\"development\"' --outfile=demo/dist/demo-dev.js --log-level=warning",
82
82
  "test:browser": "pnpm run demo && node test/browser.mjs && node test/browser-scroll.mjs && node test/browser-app.mjs && node test/browser-pdf.mjs && node test/browser-field.mjs"
83
83
  },
84
84
  "devDependencies": {
package/styles/chat.css CHANGED
@@ -30,6 +30,9 @@
30
30
  --ck-muted: hsl(var(--text-muted, 0 0% 50%));
31
31
  --ck-line: hsl(var(--border-subtle, 0 0% 90%));
32
32
  --ck-line-2: hsl(var(--border-default, 0 0% 82%));
33
+ /* The composer's border while it has focus: the secondary ink, at least 3:1
34
+ on the composer in light and dark (WCAG 2.4.7, 1.4.11). */
35
+ --ck-focus: var(--ck-fg-2);
33
36
  --ck-accent: var(--accent-primary, #ff5c00);
34
37
  --ck-on-accent: hsl(var(--on-accent, 0 0% 8%));
35
38
  --ck-accent-soft: color-mix(in srgb, var(--ck-accent) 14%, transparent);
@@ -96,8 +99,9 @@
96
99
  background: var(--ck-bg);
97
100
  transition: border-color 0.15s ease;
98
101
  }
99
- .ck-composer:focus-within {
100
- border-color: var(--ck-line-2);
102
+ .ck-composer:focus-within,
103
+ .ck-screen-dock .ck-composer:focus-within {
104
+ border-color: var(--ck-focus);
101
105
  }
102
106
  .ck-composer-compact {
103
107
  gap: 0.375rem;
package/styles.css CHANGED
@@ -30,6 +30,9 @@
30
30
  --ck-muted: hsl(var(--text-muted, 0 0% 50%));
31
31
  --ck-line: hsl(var(--border-subtle, 0 0% 90%));
32
32
  --ck-line-2: hsl(var(--border-default, 0 0% 82%));
33
+ /* The composer's border while it has focus: the secondary ink, at least 3:1
34
+ on the composer in light and dark (WCAG 2.4.7, 1.4.11). */
35
+ --ck-focus: var(--ck-fg-2);
33
36
  --ck-accent: var(--accent-primary, #ff5c00);
34
37
  --ck-on-accent: hsl(var(--on-accent, 0 0% 8%));
35
38
  --ck-accent-soft: color-mix(in srgb, var(--ck-accent) 14%, transparent);
@@ -96,8 +99,9 @@
96
99
  background: var(--ck-bg);
97
100
  transition: border-color 0.15s ease;
98
101
  }
99
- .ck-composer:focus-within {
100
- border-color: var(--ck-line-2);
102
+ .ck-composer:focus-within,
103
+ .ck-screen-dock .ck-composer:focus-within {
104
+ border-color: var(--ck-focus);
101
105
  }
102
106
  .ck-composer-compact {
103
107
  gap: 0.375rem;
@@ -2588,6 +2592,23 @@ a.ck-turn-chip:hover {
2588
2592
  font-size: 0.875rem;
2589
2593
  color: var(--ck-muted);
2590
2594
  }
2595
+ /* The error state. The frame turns the danger colour (a 2px edge, drawn
2596
+ inside so nothing moves; only this field's frame, not the improve box in
2597
+ its panel), and the error is said in words under it: colour
2598
+ is never the only sign. */
2599
+ .ck-field-invalid > .ck-field-frame > .ck-field,
2600
+ .ck-field-invalid > .ck-field-frame > .ck-field:focus-within {
2601
+ border-color: var(--ck-danger);
2602
+ box-shadow: inset 0 0 0 1px var(--ck-danger);
2603
+ }
2604
+ .ck-field-error {
2605
+ margin: 0;
2606
+ font-size: 0.875rem;
2607
+ font-weight: 600;
2608
+ line-height: 1.4;
2609
+ color: var(--ck-danger);
2610
+ overflow-wrap: anywhere;
2611
+ }
2591
2612
  :where(.ck-field-wrap, .ck-comments) button:focus-visible,
2592
2613
  .ck-comment-signin-link:focus-visible {
2593
2614
  outline: 2px solid var(--ck-accent);