@factorialco/f0-react 2.38.0 → 2.39.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/dist/{F0CanvasPanel-BErabj-B.js → F0CanvasPanel-C_tqaABp.js} +2377 -2372
- package/dist/ai.d.ts +52 -3
- package/dist/ai.js +2 -2
- package/dist/experimental.d.ts +34 -0
- package/dist/experimental.js +4 -4
- package/dist/f0.d.ts +52 -3
- package/dist/f0.js +6 -6
- package/dist/i18n-provider-defaults.d.ts +8 -0
- package/dist/i18n-provider-defaults.js +8 -0
- package/dist/{useChatHistory-DBzFU3JU.js → useChatHistory-Bubo_nNb.js} +3880 -3653
- package/dist/{useDataCollectionSource-ZgUdpWim.js → useDataCollectionSource-DrGZctSN.js} +1 -1
- package/package.json +1 -1
package/dist/ai.d.ts
CHANGED
|
@@ -223,6 +223,13 @@ export declare type AiChatProviderProps = {
|
|
|
223
223
|
* File attachment configuration. When provided, enables file uploads in the chat.
|
|
224
224
|
*/
|
|
225
225
|
fileAttachments?: AiChatFileAttachmentConfig;
|
|
226
|
+
/**
|
|
227
|
+
* Voice dictation. When provided, a microphone button is shown in the
|
|
228
|
+
* composer: recorded audio is transcribed and the result fills the textarea
|
|
229
|
+
* (the user reviews and sends it as a normal text message). When omitted,
|
|
230
|
+
* the microphone is hidden.
|
|
231
|
+
*/
|
|
232
|
+
onTranscribe?: TranscribeFn;
|
|
226
233
|
onThumbsUp?: (message: F0AIMessage, { threadId, feedback }: {
|
|
227
234
|
threadId: string;
|
|
228
235
|
feedback: string;
|
|
@@ -358,7 +365,7 @@ declare type AiChatProviderReturnValue = {
|
|
|
358
365
|
pendingQuote: PendingQuote | null;
|
|
359
366
|
/** Set the pending quote (pass null to clear). */
|
|
360
367
|
setPendingQuote: React.Dispatch<React.SetStateAction<PendingQuote | null>>;
|
|
361
|
-
} & Pick<AiChatState, "agent" | "chatHeader" | "chatMessages" | "chatInput" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments"> & {
|
|
368
|
+
} & Pick<AiChatState, "agent" | "chatHeader" | "chatMessages" | "chatInput" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments" | "onTranscribe"> & {
|
|
362
369
|
/** The current canvas content, or null when canvas is closed */
|
|
363
370
|
canvasContent: CanvasContent | null;
|
|
364
371
|
/** Open the canvas panel with the given content */
|
|
@@ -400,6 +407,7 @@ declare interface AiChatState {
|
|
|
400
407
|
employeeCredits?: AiChatEmployeeCredits;
|
|
401
408
|
creditWarning?: AiChatCreditWarning;
|
|
402
409
|
fileAttachments?: AiChatFileAttachmentConfig;
|
|
410
|
+
onTranscribe?: TranscribeFn;
|
|
403
411
|
placeholders?: string[];
|
|
404
412
|
setPlaceholders?: React.Dispatch<React.SetStateAction<string[]>>;
|
|
405
413
|
onThumbsUp?: (message: F0AIMessage, { threadId, feedback }: {
|
|
@@ -574,6 +582,14 @@ export declare const aiTranslations: {
|
|
|
574
582
|
readonly dismiss: "Dismiss";
|
|
575
583
|
};
|
|
576
584
|
readonly attachFile: "Attach file";
|
|
585
|
+
readonly recordAudio: "Record audio";
|
|
586
|
+
readonly listening: "Listening…";
|
|
587
|
+
readonly stopRecording: "Stop and transcribe";
|
|
588
|
+
readonly cancelRecording: "Cancel recording";
|
|
589
|
+
readonly transcribing: "Transcribing…";
|
|
590
|
+
readonly micPermissionDenied: "Microphone access is blocked. Allow it in your browser settings to dictate.";
|
|
591
|
+
readonly micError: "Couldn't access the microphone.";
|
|
592
|
+
readonly transcriptionError: "Couldn't transcribe the audio. Try again.";
|
|
577
593
|
readonly removeFile: "Remove";
|
|
578
594
|
readonly fileUploadError: "Upload failed";
|
|
579
595
|
readonly fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.";
|
|
@@ -1870,6 +1886,14 @@ export declare const defaultTranslations: {
|
|
|
1870
1886
|
readonly dismiss: "Dismiss";
|
|
1871
1887
|
};
|
|
1872
1888
|
readonly attachFile: "Attach file";
|
|
1889
|
+
readonly recordAudio: "Record audio";
|
|
1890
|
+
readonly listening: "Listening…";
|
|
1891
|
+
readonly stopRecording: "Stop and transcribe";
|
|
1892
|
+
readonly cancelRecording: "Cancel recording";
|
|
1893
|
+
readonly transcribing: "Transcribing…";
|
|
1894
|
+
readonly micPermissionDenied: "Microphone access is blocked. Allow it in your browser settings to dictate.";
|
|
1895
|
+
readonly micError: "Couldn't access the microphone.";
|
|
1896
|
+
readonly transcriptionError: "Couldn't transcribe the audio. Try again.";
|
|
1873
1897
|
readonly removeFile: "Remove";
|
|
1874
1898
|
readonly fileUploadError: "Upload failed";
|
|
1875
1899
|
readonly fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.";
|
|
@@ -2439,7 +2463,7 @@ export declare interface F0AiChatProps {
|
|
|
2439
2463
|
/**
|
|
2440
2464
|
* @experimental This is an experimental component use it at your own risk
|
|
2441
2465
|
*/
|
|
2442
|
-
export declare const F0AiChatProvider: ({ enabled, initialMessage, chatHeader, chatMessages, chatInput, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onThumbsUp, onThumbsDown, children, agent, tracking, }: AiChatProviderProps) => JSX_2.Element;
|
|
2466
|
+
export declare const F0AiChatProvider: ({ enabled, initialMessage, chatHeader, chatMessages, chatInput, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onTranscribe, onThumbsUp, onThumbsDown, children, agent, tracking, }: AiChatProviderProps) => JSX_2.Element;
|
|
2443
2467
|
|
|
2444
2468
|
/**
|
|
2445
2469
|
* Headless chat composer.
|
|
@@ -2450,7 +2474,7 @@ export declare const F0AiChatProvider: ({ enabled, initialMessage, chatHeader, c
|
|
|
2450
2474
|
* coupling to `useAiChat()` or CopilotKit — wrappers like F0AiChat
|
|
2451
2475
|
* provide the wiring.
|
|
2452
2476
|
*/
|
|
2453
|
-
export declare const F0AiChatTextArea: ({ onSubmit, onStop, inProgress, onBeforeSubmit, placeholders, creditWarning, clarifyingUI, pendingContext, onPendingContextChange, pendingQuote, onPendingQuoteChange, fileAttachments, searchPersons, onProcessFilesRef, disclaimer, footer, isWelcomeScreen, fullscreen, welcomeScreenSuggestions, onSuggestionClick, ref, }: F0AiChatTextAreaProps) => JSX_2.Element;
|
|
2477
|
+
export declare const F0AiChatTextArea: ({ onSubmit, onStop, inProgress, onBeforeSubmit, placeholders, creditWarning, clarifyingUI, pendingContext, onPendingContextChange, pendingQuote, onPendingQuoteChange, fileAttachments, onTranscribe, searchPersons, onProcessFilesRef, disclaimer, footer, isWelcomeScreen, fullscreen, welcomeScreenSuggestions, onSuggestionClick, ref, }: F0AiChatTextAreaProps) => JSX_2.Element;
|
|
2454
2478
|
|
|
2455
2479
|
export declare type F0AiChatTextAreaProps = {
|
|
2456
2480
|
ref: RefObject<HTMLDivElement>;
|
|
@@ -2488,6 +2512,12 @@ export declare type F0AiChatTextAreaProps = {
|
|
|
2488
2512
|
onPendingQuoteChange?: (quote: PendingQuote | null) => void;
|
|
2489
2513
|
/** File attachment configuration. When omitted, attachments are disabled. */
|
|
2490
2514
|
fileAttachments?: AiChatFileAttachmentConfig;
|
|
2515
|
+
/**
|
|
2516
|
+
* Voice dictation. When provided, a microphone button is shown: recorded
|
|
2517
|
+
* audio is transcribed and the transcript fills the textarea (the user
|
|
2518
|
+
* reviews and sends it manually). When omitted, the microphone is hidden.
|
|
2519
|
+
*/
|
|
2520
|
+
onTranscribe?: TranscribeFn;
|
|
2491
2521
|
/** Async search used by the @-mention popover. When omitted, mentions are disabled. */
|
|
2492
2522
|
searchPersons?: (query: string) => Promise<PersonProfile[]>;
|
|
2493
2523
|
/**
|
|
@@ -3979,6 +4009,25 @@ export declare interface ThreadGroup {
|
|
|
3979
4009
|
threads: ChatThread[];
|
|
3980
4010
|
}
|
|
3981
4011
|
|
|
4012
|
+
/**
|
|
4013
|
+
* Transcribes a recorded audio blob to text (voice dictation). The returned
|
|
4014
|
+
* promise resolves with the final transcript; `onPartial` delivers
|
|
4015
|
+
* intermediate results for live textarea fill. When omitted from the chat
|
|
4016
|
+
* config, the microphone button is not rendered.
|
|
4017
|
+
*/
|
|
4018
|
+
declare type TranscribeFn = (audio: Blob, options: TranscribeOptions) => Promise<string>;
|
|
4019
|
+
|
|
4020
|
+
declare type TranscribeOptions = {
|
|
4021
|
+
/**
|
|
4022
|
+
* Primary channel for live dictation: fires with the cumulative transcript
|
|
4023
|
+
* as it streams in, so the composer can fill the textarea while the user
|
|
4024
|
+
* speaks. Implementations that don't stream may call it once at the end.
|
|
4025
|
+
*/
|
|
4026
|
+
onPartial: (text: string) => void;
|
|
4027
|
+
/** Aborted when the user cancels an in-flight transcription. */
|
|
4028
|
+
signal?: AbortSignal;
|
|
4029
|
+
};
|
|
4030
|
+
|
|
3982
4031
|
declare type TranslationKey = Join<PathsToStringProps<typeof defaultTranslations>, ".">;
|
|
3983
4032
|
|
|
3984
4033
|
declare type TranslationShape<T> = {
|
package/dist/ai.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { D as e, F as r, a as t, e as o, f as i, c as n, d as F, I as C, P as A, b as l, u as d } from "./F0CanvasPanel-
|
|
1
|
+
import { D as e, F as r, a as t, e as o, f as i, c as n, d as F, I as C, P as A, b as l, u as d } from "./F0CanvasPanel-C_tqaABp.js";
|
|
2
2
|
import { defaultTranslations as m } from "./i18n-provider-defaults.js";
|
|
3
|
-
import { A as c, C as I, h as P, t as v, v as f, x as p, n as T, j as g, r as y, y as S, q as x, s as H, k as V, e as b, g as k, l as w, F as M, i as O, a as D, p as j, m as q, o as z, b as B, f as E, w as L, c as R, d as G, u as J } from "./useChatHistory-
|
|
3
|
+
import { A as c, C as I, h as P, t as v, v as f, x as p, n as T, j as g, r as y, y as S, q as x, s as H, k as V, e as b, g as k, l as w, F as M, i as O, a as D, p as j, m as q, o as z, b as B, f as E, w as L, c as R, d as G, u as J } from "./useChatHistory-Bubo_nNb.js";
|
|
4
4
|
export {
|
|
5
5
|
c as AiChatTranslationsProvider,
|
|
6
6
|
I as ChatSpinner,
|
package/dist/experimental.d.ts
CHANGED
|
@@ -589,6 +589,13 @@ declare type AiChatProviderProps = {
|
|
|
589
589
|
* File attachment configuration. When provided, enables file uploads in the chat.
|
|
590
590
|
*/
|
|
591
591
|
fileAttachments?: AiChatFileAttachmentConfig;
|
|
592
|
+
/**
|
|
593
|
+
* Voice dictation. When provided, a microphone button is shown in the
|
|
594
|
+
* composer: recorded audio is transcribed and the result fills the textarea
|
|
595
|
+
* (the user reviews and sends it as a normal text message). When omitted,
|
|
596
|
+
* the microphone is hidden.
|
|
597
|
+
*/
|
|
598
|
+
onTranscribe?: TranscribeFn;
|
|
592
599
|
onThumbsUp?: (message: F0AIMessage, { threadId, feedback }: {
|
|
593
600
|
threadId: string;
|
|
594
601
|
feedback: string;
|
|
@@ -3280,6 +3287,14 @@ declare const defaultTranslations: {
|
|
|
3280
3287
|
readonly dismiss: "Dismiss";
|
|
3281
3288
|
};
|
|
3282
3289
|
readonly attachFile: "Attach file";
|
|
3290
|
+
readonly recordAudio: "Record audio";
|
|
3291
|
+
readonly listening: "Listening…";
|
|
3292
|
+
readonly stopRecording: "Stop and transcribe";
|
|
3293
|
+
readonly cancelRecording: "Cancel recording";
|
|
3294
|
+
readonly transcribing: "Transcribing…";
|
|
3295
|
+
readonly micPermissionDenied: "Microphone access is blocked. Allow it in your browser settings to dictate.";
|
|
3296
|
+
readonly micError: "Couldn't access the microphone.";
|
|
3297
|
+
readonly transcriptionError: "Couldn't transcribe the audio. Try again.";
|
|
3283
3298
|
readonly removeFile: "Remove";
|
|
3284
3299
|
readonly fileUploadError: "Upload failed";
|
|
3285
3300
|
readonly fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.";
|
|
@@ -8124,6 +8139,25 @@ declare interface TopLevelPrependNotesTextEditorPageDocumentPatch {
|
|
|
8124
8139
|
blocks: JSONContent[];
|
|
8125
8140
|
}
|
|
8126
8141
|
|
|
8142
|
+
/**
|
|
8143
|
+
* Transcribes a recorded audio blob to text (voice dictation). The returned
|
|
8144
|
+
* promise resolves with the final transcript; `onPartial` delivers
|
|
8145
|
+
* intermediate results for live textarea fill. When omitted from the chat
|
|
8146
|
+
* config, the microphone button is not rendered.
|
|
8147
|
+
*/
|
|
8148
|
+
declare type TranscribeFn = (audio: Blob, options: TranscribeOptions) => Promise<string>;
|
|
8149
|
+
|
|
8150
|
+
declare type TranscribeOptions = {
|
|
8151
|
+
/**
|
|
8152
|
+
* Primary channel for live dictation: fires with the cumulative transcript
|
|
8153
|
+
* as it streams in, so the composer can fill the textarea while the user
|
|
8154
|
+
* speaks. Implementations that don't stream may call it once at the end.
|
|
8155
|
+
*/
|
|
8156
|
+
onPartial: (text: string) => void;
|
|
8157
|
+
/** Aborted when the user cancels an in-flight transcription. */
|
|
8158
|
+
signal?: AbortSignal;
|
|
8159
|
+
};
|
|
8160
|
+
|
|
8127
8161
|
declare type TranslationKey = Join<PathsToStringProps<typeof defaultTranslations>, ".">;
|
|
8128
8162
|
|
|
8129
8163
|
declare type TranslationShape<T> = {
|
package/dist/experimental.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { g as da, B as ua, h as fa, i as ma, j as At, k as De, l as ha, m as p, n as X, o as be, u as ie, T as pa, p as ba, q as ga, R as xa, r as va, s as re, t as wa, v as pt, w as rt, x as Re, A as _e, y as ya, z as Na, C as M, E as Ca, G as ka, H as ve, J as sn, K as Sa, L as Ia, M as W, N as on, S as O, O as we, Q as Fa, U as Aa, V as La, W as Ea, X as _a, Y as ke, Z as cn, _ as Oa, $ as ge, a0 as $e, a1 as Da, a2 as bt, d as dn, a3 as Ce, a4 as Ta, a5 as un, a6 as ne, a7 as K, a8 as fn, a9 as mn, aa as za, ab as hn, ac as me, ad as ee, ae as Pa, af as Ba, ag as Ra, ah as $a, ai as pe, aj as Ge, ak as Wa, al as Ma, am as ja, an as Va, ao as He, ap as pn, aq as Ga, ar as Ha, as as Ua, at as We, au as Ka, av as qa, aw as Ya, ax as Za, ay as Xa, az as Ja, aA as Qa, aB as er, aC as tr, aD as nr, aE as lt, aF as it, aG as bn, aH as ar, aI as rr, aJ as lr, aK as ir, aL as Ue, aM as gt, aN as gn, aO as sr, aP as xn, aQ as or, aR as cr, aS as dr, aT as Ee, aU as ur, aV as Te, aW as Lt, aX as st, aY as fr, aZ as mr, a as hr, b as pr, a_ as vn, a$ as br, f as gr, F as xr, b0 as wn, b1 as vr, b2 as yn, b3 as wr, b4 as yr, b5 as Nr, b6 as Cr, b7 as kr, b8 as Sr, b9 as Ir, ba as Fr, bb as Ar, bc as Nn, bd as ue, be as xt, bf as vt, bg as wt, bh as Cn, bi as yt, bj as kn, bk as Sn, bl as Lr, bm as Er, bn as _r, bo as Or, bp as Dr, bq as Tr, br as zr, bs as Pr, bt as Br, bu as Rr, bv as Et, bw as _t, bx as Ot, by as $r, bz as Wr, bA as Mr, bB as jr, bC as In, bD as Vr, bE as Gr } from "./F0CanvasPanel-
|
|
2
|
-
import { bQ as Lc, bP as Ec, c0 as _c, bM as Oc, bN as Dc, bF as Tc, bG as zc, bH as Pc, c1 as Bc, bO as Rc, bY as $c, bZ as Wc, bI as Mc, bS as jc, bR as Vc, bJ as Gc, bK as Hc, b_ as Uc, c2 as Kc, b$ as qc, bX as Yc, bU as Zc, bW as Xc, bT as Jc, bL as Qc, bV as ed } from "./F0CanvasPanel-
|
|
1
|
+
import { g as da, B as ua, h as fa, i as ma, j as At, k as De, l as ha, m as p, n as X, o as be, u as ie, T as pa, p as ba, q as ga, R as xa, r as va, s as re, t as wa, v as pt, w as rt, x as Re, A as _e, y as ya, z as Na, C as M, E as Ca, G as ka, H as ve, J as sn, K as Sa, L as Ia, M as W, N as on, S as O, O as we, Q as Fa, U as Aa, V as La, W as Ea, X as _a, Y as ke, Z as cn, _ as Oa, $ as ge, a0 as $e, a1 as Da, a2 as bt, d as dn, a3 as Ce, a4 as Ta, a5 as un, a6 as ne, a7 as K, a8 as fn, a9 as mn, aa as za, ab as hn, ac as me, ad as ee, ae as Pa, af as Ba, ag as Ra, ah as $a, ai as pe, aj as Ge, ak as Wa, al as Ma, am as ja, an as Va, ao as He, ap as pn, aq as Ga, ar as Ha, as as Ua, at as We, au as Ka, av as qa, aw as Ya, ax as Za, ay as Xa, az as Ja, aA as Qa, aB as er, aC as tr, aD as nr, aE as lt, aF as it, aG as bn, aH as ar, aI as rr, aJ as lr, aK as ir, aL as Ue, aM as gt, aN as gn, aO as sr, aP as xn, aQ as or, aR as cr, aS as dr, aT as Ee, aU as ur, aV as Te, aW as Lt, aX as st, aY as fr, aZ as mr, a as hr, b as pr, a_ as vn, a$ as br, f as gr, F as xr, b0 as wn, b1 as vr, b2 as yn, b3 as wr, b4 as yr, b5 as Nr, b6 as Cr, b7 as kr, b8 as Sr, b9 as Ir, ba as Fr, bb as Ar, bc as Nn, bd as ue, be as xt, bf as vt, bg as wt, bh as Cn, bi as yt, bj as kn, bk as Sn, bl as Lr, bm as Er, bn as _r, bo as Or, bp as Dr, bq as Tr, br as zr, bs as Pr, bt as Br, bu as Rr, bv as Et, bw as _t, bx as Ot, by as $r, bz as Wr, bA as Mr, bB as jr, bC as In, bD as Vr, bE as Gr } from "./F0CanvasPanel-C_tqaABp.js";
|
|
2
|
+
import { bQ as Lc, bP as Ec, c0 as _c, bM as Oc, bN as Dc, bF as Tc, bG as zc, bH as Pc, c1 as Bc, bO as Rc, bY as $c, bZ as Wc, bI as Mc, bS as jc, bR as Vc, bJ as Gc, bK as Hc, b_ as Uc, c2 as Kc, b$ as qc, bX as Yc, bU as Zc, bW as Xc, bT as Jc, bL as Qc, bV as ed } from "./F0CanvasPanel-C_tqaABp.js";
|
|
3
3
|
import { jsx as e, jsxs as o, Fragment as U } from "react/jsx-runtime";
|
|
4
4
|
import se, { forwardRef as j, useRef as G, useTransition as Hr, useState as _, useLayoutEffect as Fn, useId as ot, useContext as Ke, createContext as Nt, useEffect as $, useCallback as Q, useMemo as q, Fragment as Ur, isValidElement as Kr, cloneElement as An, Children as Ln } from "react";
|
|
5
|
-
import { C as qr, P as Yr, g as En, c as Zr, a as _n, F as ct, f as Xr, M as Jr, b as Qr, R as Dt, d as On, u as el, e as Dn, S as tl, A as nl, B as al, L as rl, h as ll, V as il, i as sl, j as Tt, k as ol, l as cl, O as dl } from "./useDataCollectionSource-
|
|
6
|
-
import { r as nd, s as ad, p as rd, H as ld, t as id, z as sd, a9 as od, G as cd, q as dd, Q as ud, o as fd, Y as md, U as hd, J as pd, af as bd, K as gd, Z as xd, _ as vd, v as wd, ab as yd, ac as Nd, aa as Cd, ad as kd, N as Sd, $ as Id, a6 as Fd, a8 as Ad, w as Ld, y as Ed, D as _d, W as Od, ae as Dd, X as Td, T as zd, x as Pd, E as Bd, m as Rd, n as $d, a1 as Wd, a2 as Md, a7 as jd, I as Vd, a3 as Gd, a4 as Hd, a0 as Ud, a5 as Kd } from "./useDataCollectionSource-
|
|
5
|
+
import { C as qr, P as Yr, g as En, c as Zr, a as _n, F as ct, f as Xr, M as Jr, b as Qr, R as Dt, d as On, u as el, e as Dn, S as tl, A as nl, B as al, L as rl, h as ll, V as il, i as sl, j as Tt, k as ol, l as cl, O as dl } from "./useDataCollectionSource-DrGZctSN.js";
|
|
6
|
+
import { r as nd, s as ad, p as rd, H as ld, t as id, z as sd, a9 as od, G as cd, q as dd, Q as ud, o as fd, Y as md, U as hd, J as pd, af as bd, K as gd, Z as xd, _ as vd, v as wd, ab as yd, ac as Nd, aa as Cd, ad as kd, N as Sd, $ as Id, a6 as Fd, a8 as Ad, w as Ld, y as Ed, D as _d, W as Od, ae as Dd, X as Td, T as zd, x as Pd, E as Bd, m as Rd, n as $d, a1 as Wd, a2 as Md, a7 as jd, I as Vd, a3 as Gd, a4 as Hd, a0 as Ud, a5 as Kd } from "./useDataCollectionSource-DrGZctSN.js";
|
|
7
7
|
const ul = da("Search", [
|
|
8
8
|
["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }],
|
|
9
9
|
["path", { d: "m21 21-4.3-4.3", key: "1qie3q" }]
|
package/dist/f0.d.ts
CHANGED
|
@@ -601,6 +601,13 @@ export declare type AiChatProviderProps = {
|
|
|
601
601
|
* File attachment configuration. When provided, enables file uploads in the chat.
|
|
602
602
|
*/
|
|
603
603
|
fileAttachments?: AiChatFileAttachmentConfig;
|
|
604
|
+
/**
|
|
605
|
+
* Voice dictation. When provided, a microphone button is shown in the
|
|
606
|
+
* composer: recorded audio is transcribed and the result fills the textarea
|
|
607
|
+
* (the user reviews and sends it as a normal text message). When omitted,
|
|
608
|
+
* the microphone is hidden.
|
|
609
|
+
*/
|
|
610
|
+
onTranscribe?: TranscribeFn;
|
|
604
611
|
onThumbsUp?: (message: F0AIMessage, { threadId, feedback }: {
|
|
605
612
|
threadId: string;
|
|
606
613
|
feedback: string;
|
|
@@ -736,7 +743,7 @@ declare type AiChatProviderReturnValue = {
|
|
|
736
743
|
pendingQuote: PendingQuote | null;
|
|
737
744
|
/** Set the pending quote (pass null to clear). */
|
|
738
745
|
setPendingQuote: React.Dispatch<React.SetStateAction<PendingQuote | null>>;
|
|
739
|
-
} & Pick<AiChatState, "agent" | "chatHeader" | "chatMessages" | "chatInput" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments"> & {
|
|
746
|
+
} & Pick<AiChatState, "agent" | "chatHeader" | "chatMessages" | "chatInput" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments" | "onTranscribe"> & {
|
|
740
747
|
/** The current canvas content, or null when canvas is closed */
|
|
741
748
|
canvasContent: CanvasContent | null;
|
|
742
749
|
/** Open the canvas panel with the given content */
|
|
@@ -778,6 +785,7 @@ declare interface AiChatState {
|
|
|
778
785
|
employeeCredits?: AiChatEmployeeCredits;
|
|
779
786
|
creditWarning?: AiChatCreditWarning;
|
|
780
787
|
fileAttachments?: AiChatFileAttachmentConfig;
|
|
788
|
+
onTranscribe?: TranscribeFn;
|
|
781
789
|
placeholders?: string[];
|
|
782
790
|
setPlaceholders?: React.Dispatch<React.SetStateAction<string[]>>;
|
|
783
791
|
onThumbsUp?: (message: F0AIMessage, { threadId, feedback }: {
|
|
@@ -952,6 +960,14 @@ export declare const aiTranslations: {
|
|
|
952
960
|
readonly dismiss: "Dismiss";
|
|
953
961
|
};
|
|
954
962
|
readonly attachFile: "Attach file";
|
|
963
|
+
readonly recordAudio: "Record audio";
|
|
964
|
+
readonly listening: "Listening…";
|
|
965
|
+
readonly stopRecording: "Stop and transcribe";
|
|
966
|
+
readonly cancelRecording: "Cancel recording";
|
|
967
|
+
readonly transcribing: "Transcribing…";
|
|
968
|
+
readonly micPermissionDenied: "Microphone access is blocked. Allow it in your browser settings to dictate.";
|
|
969
|
+
readonly micError: "Couldn't access the microphone.";
|
|
970
|
+
readonly transcriptionError: "Couldn't transcribe the audio. Try again.";
|
|
955
971
|
readonly removeFile: "Remove";
|
|
956
972
|
readonly fileUploadError: "Upload failed";
|
|
957
973
|
readonly fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.";
|
|
@@ -4540,6 +4556,14 @@ export declare const defaultTranslations: {
|
|
|
4540
4556
|
readonly dismiss: "Dismiss";
|
|
4541
4557
|
};
|
|
4542
4558
|
readonly attachFile: "Attach file";
|
|
4559
|
+
readonly recordAudio: "Record audio";
|
|
4560
|
+
readonly listening: "Listening…";
|
|
4561
|
+
readonly stopRecording: "Stop and transcribe";
|
|
4562
|
+
readonly cancelRecording: "Cancel recording";
|
|
4563
|
+
readonly transcribing: "Transcribing…";
|
|
4564
|
+
readonly micPermissionDenied: "Microphone access is blocked. Allow it in your browser settings to dictate.";
|
|
4565
|
+
readonly micError: "Couldn't access the microphone.";
|
|
4566
|
+
readonly transcriptionError: "Couldn't transcribe the audio. Try again.";
|
|
4543
4567
|
readonly removeFile: "Remove";
|
|
4544
4568
|
readonly fileUploadError: "Upload failed";
|
|
4545
4569
|
readonly fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.";
|
|
@@ -5606,7 +5630,7 @@ export declare interface F0AiChatProps {
|
|
|
5606
5630
|
/**
|
|
5607
5631
|
* @experimental This is an experimental component use it at your own risk
|
|
5608
5632
|
*/
|
|
5609
|
-
export declare const F0AiChatProvider: ({ enabled, initialMessage, chatHeader, chatMessages, chatInput, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onThumbsUp, onThumbsDown, children, agent, tracking, }: AiChatProviderProps) => JSX_2.Element;
|
|
5633
|
+
export declare const F0AiChatProvider: ({ enabled, initialMessage, chatHeader, chatMessages, chatInput, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onTranscribe, onThumbsUp, onThumbsDown, children, agent, tracking, }: AiChatProviderProps) => JSX_2.Element;
|
|
5610
5634
|
|
|
5611
5635
|
/**
|
|
5612
5636
|
* Headless chat composer.
|
|
@@ -5617,7 +5641,7 @@ export declare const F0AiChatProvider: ({ enabled, initialMessage, chatHeader, c
|
|
|
5617
5641
|
* coupling to `useAiChat()` or CopilotKit — wrappers like F0AiChat
|
|
5618
5642
|
* provide the wiring.
|
|
5619
5643
|
*/
|
|
5620
|
-
export declare const F0AiChatTextArea: ({ onSubmit, onStop, inProgress, onBeforeSubmit, placeholders, creditWarning, clarifyingUI, pendingContext, onPendingContextChange, pendingQuote, onPendingQuoteChange, fileAttachments, searchPersons, onProcessFilesRef, disclaimer, footer, isWelcomeScreen, fullscreen, welcomeScreenSuggestions, onSuggestionClick, ref, }: F0AiChatTextAreaProps) => JSX_2.Element;
|
|
5644
|
+
export declare const F0AiChatTextArea: ({ onSubmit, onStop, inProgress, onBeforeSubmit, placeholders, creditWarning, clarifyingUI, pendingContext, onPendingContextChange, pendingQuote, onPendingQuoteChange, fileAttachments, onTranscribe, searchPersons, onProcessFilesRef, disclaimer, footer, isWelcomeScreen, fullscreen, welcomeScreenSuggestions, onSuggestionClick, ref, }: F0AiChatTextAreaProps) => JSX_2.Element;
|
|
5621
5645
|
|
|
5622
5646
|
export declare type F0AiChatTextAreaProps = {
|
|
5623
5647
|
ref: RefObject<HTMLDivElement>;
|
|
@@ -5655,6 +5679,12 @@ export declare type F0AiChatTextAreaProps = {
|
|
|
5655
5679
|
onPendingQuoteChange?: (quote: PendingQuote | null) => void;
|
|
5656
5680
|
/** File attachment configuration. When omitted, attachments are disabled. */
|
|
5657
5681
|
fileAttachments?: AiChatFileAttachmentConfig;
|
|
5682
|
+
/**
|
|
5683
|
+
* Voice dictation. When provided, a microphone button is shown: recorded
|
|
5684
|
+
* audio is transcribed and the transcript fills the textarea (the user
|
|
5685
|
+
* reviews and sends it manually). When omitted, the microphone is hidden.
|
|
5686
|
+
*/
|
|
5687
|
+
onTranscribe?: TranscribeFn;
|
|
5658
5688
|
/** Async search used by the @-mention popover. When omitted, mentions are disabled. */
|
|
5659
5689
|
searchPersons?: (query: string) => Promise<PersonProfile[]>;
|
|
5660
5690
|
/**
|
|
@@ -14442,6 +14472,25 @@ declare interface TopLevelPrependNotesTextEditorPageDocumentPatch {
|
|
|
14442
14472
|
blocks: JSONContent[];
|
|
14443
14473
|
}
|
|
14444
14474
|
|
|
14475
|
+
/**
|
|
14476
|
+
* Transcribes a recorded audio blob to text (voice dictation). The returned
|
|
14477
|
+
* promise resolves with the final transcript; `onPartial` delivers
|
|
14478
|
+
* intermediate results for live textarea fill. When omitted from the chat
|
|
14479
|
+
* config, the microphone button is not rendered.
|
|
14480
|
+
*/
|
|
14481
|
+
declare type TranscribeFn = (audio: Blob, options: TranscribeOptions) => Promise<string>;
|
|
14482
|
+
|
|
14483
|
+
declare type TranscribeOptions = {
|
|
14484
|
+
/**
|
|
14485
|
+
* Primary channel for live dictation: fires with the cumulative transcript
|
|
14486
|
+
* as it streams in, so the composer can fill the textarea while the user
|
|
14487
|
+
* speaks. Implementations that don't stream may call it once at the end.
|
|
14488
|
+
*/
|
|
14489
|
+
onPartial: (text: string) => void;
|
|
14490
|
+
/** Aborted when the user cancels an in-flight transcription. */
|
|
14491
|
+
signal?: AbortSignal;
|
|
14492
|
+
};
|
|
14493
|
+
|
|
14445
14494
|
declare type TranslationKey = Join<PathsToStringProps<typeof defaultTranslations>, ".">;
|
|
14446
14495
|
|
|
14447
14496
|
declare type TranslationShape<T> = {
|
package/dist/f0.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { du as dk, a6 as yt, bd as Dg, m as ce, o as Pa, fZ as hk, n as Hs, eH as C3, ac as go, g2 as T3, ad as Ew, S as oe, u as tt, C as dt, cY as Vu, A as vk, i as D3, H as Wv, cK as yu, a7 as kr, a3 as gd, g3 as A3, g4 as Xb, g5 as M3, g6 as E3, g7 as eT, dQ as L3, g8 as N3, g9 as pk, ga as I3, M as pt, aX as k3, aL as R3, b8 as P3, dM as tT, s as Fu, a1 as Lw, a2 as Ws, b9 as O3, fh as B3, aB as Nw, aC as Iw, aD as kw, aj as gk, c0 as Uv, dv as mk, gb as V3, fl as F3, aF as yk, de as z3, br as G3, aV as bk, Y as zu, gc as H3, ae as W3, gd as Rw, ge as rT, ff as U3, gf as $3, gg as Y3, gh as X3, W as Pw, dN as bu, bH as Ow, dK as q3, dp as Bw, at as ou, bI as xk, d5 as Vw, b6 as Us, a8 as Bn, ao as Z3, cz as qb, cy as _k, gi as Ag, d6 as Fw, fR as j3, a0 as wk, fe as K3, by as Q3, ab as Mg, dG as J3, dH as eH, dI as tH, c as rH, er as nH, z as Sk, cF as rl, dm as Ck, bB as zw, E as Eg, G as Lg, cp as Gw, L as Ng, V as Ar, X as xu, fx as su, fy as lu, K as uu, fz as cu, fv as iH, fw as io, cs as Tk, aq as aH, d3 as $v, gj as on, aA as oH, d9 as Dk, d8 as Ak, gk as sH, aN as Mk, aT as lH, dC as uH, dD as cH, dw as fH, be as Gu, bi as Hu, bp as md, dq as dH, bf as hH, b0 as vH, N as Ek, b7 as pH, _ as gH, d0 as nT, dl as Pf, fi as mH, fj as yH, gl as bH, aS as xH, bj as _H, cI as Lk, a4 as wH, cx as SH, g0 as CH, gm as TH, gn as DH, I as AH, go as MH, gp as EH, gq as LH, gr as NH } from "./F0CanvasPanel-
|
|
2
|
-
import { gA as Dme, D as Ame, aM as Mme, F as Eme, a as Lme, e as Nme, b1 as Ime, bs as kme, bc as Rme, ai as Pme, dP as Ome, ar as Bme, bF as Vme, f as Fme, dJ as zme, dy as Gme, gE as Hme, d as Wme, bG as Ume, bk as $me, gv as Yme, aZ as Xme, gw as qme, gy as Zme, gz as jme, c1 as Kme, gB as Qme, bY as Jme, bZ as eye, P as tye, gx as rye, b_ as nye, gF as iye, gs as aye, gt as oye, gu as sye, b$ as lye, gD as uye, fS as cye, gC as fye, aQ as dye, bX as hye, bU as vye, bW as pye, bT as gye, fU as mye, fO as yye, bL as bye, bV as xye, b as _ye, fN as wye, g1 as Sye, aO as Cye, dt as Tye, fQ as Dye, fP as Aye, gG as Mye } from "./F0CanvasPanel-
|
|
1
|
+
import { du as dk, a6 as yt, bd as Dg, m as ce, o as Pa, fZ as hk, n as Hs, eH as C3, ac as go, g2 as T3, ad as Ew, S as oe, u as tt, C as dt, cY as Vu, A as vk, i as D3, H as Wv, cK as yu, a7 as kr, a3 as gd, g3 as A3, g4 as Xb, g5 as M3, g6 as E3, g7 as eT, dQ as L3, g8 as N3, g9 as pk, ga as I3, M as pt, aX as k3, aL as R3, b8 as P3, dM as tT, s as Fu, a1 as Lw, a2 as Ws, b9 as O3, fh as B3, aB as Nw, aC as Iw, aD as kw, aj as gk, c0 as Uv, dv as mk, gb as V3, fl as F3, aF as yk, de as z3, br as G3, aV as bk, Y as zu, gc as H3, ae as W3, gd as Rw, ge as rT, ff as U3, gf as $3, gg as Y3, gh as X3, W as Pw, dN as bu, bH as Ow, dK as q3, dp as Bw, at as ou, bI as xk, d5 as Vw, b6 as Us, a8 as Bn, ao as Z3, cz as qb, cy as _k, gi as Ag, d6 as Fw, fR as j3, a0 as wk, fe as K3, by as Q3, ab as Mg, dG as J3, dH as eH, dI as tH, c as rH, er as nH, z as Sk, cF as rl, dm as Ck, bB as zw, E as Eg, G as Lg, cp as Gw, L as Ng, V as Ar, X as xu, fx as su, fy as lu, K as uu, fz as cu, fv as iH, fw as io, cs as Tk, aq as aH, d3 as $v, gj as on, aA as oH, d9 as Dk, d8 as Ak, gk as sH, aN as Mk, aT as lH, dC as uH, dD as cH, dw as fH, be as Gu, bi as Hu, bp as md, dq as dH, bf as hH, b0 as vH, N as Ek, b7 as pH, _ as gH, d0 as nT, dl as Pf, fi as mH, fj as yH, gl as bH, aS as xH, bj as _H, cI as Lk, a4 as wH, cx as SH, g0 as CH, gm as TH, gn as DH, I as AH, go as MH, gp as EH, gq as LH, gr as NH } from "./F0CanvasPanel-C_tqaABp.js";
|
|
2
|
+
import { gA as Dme, D as Ame, aM as Mme, F as Eme, a as Lme, e as Nme, b1 as Ime, bs as kme, bc as Rme, ai as Pme, dP as Ome, ar as Bme, bF as Vme, f as Fme, dJ as zme, dy as Gme, gE as Hme, d as Wme, bG as Ume, bk as $me, gv as Yme, aZ as Xme, gw as qme, gy as Zme, gz as jme, c1 as Kme, gB as Qme, bY as Jme, bZ as eye, P as tye, gx as rye, b_ as nye, gF as iye, gs as aye, gt as oye, gu as sye, b$ as lye, gD as uye, fS as cye, gC as fye, aQ as dye, bX as hye, bU as vye, bW as pye, bT as gye, fU as mye, fO as yye, bL as bye, bV as xye, b as _ye, fN as wye, g1 as Sye, aO as Cye, dt as Tye, fQ as Dye, fP as Aye, gG as Mye } from "./F0CanvasPanel-C_tqaABp.js";
|
|
3
3
|
import { jsx as w, jsxs as B, Fragment as kt } from "react/jsx-runtime";
|
|
4
4
|
import * as Yn from "react";
|
|
5
5
|
import He, { forwardRef as Jr, useRef as se, useImperativeHandle as IH, Children as Yv, createContext as en, useContext as _r, useState as ye, useMemo as ae, useEffect as _e, useCallback as te, useLayoutEffect as Zb, createElement as Xd, isValidElement as Nk, Fragment as Ig, memo as Ik, useReducer as kH, cloneElement as RH, useId as kg } from "react";
|
|
6
|
-
import { z as PH, B as OH, U as iT, D as aT, E as $m, G as oT, H as BH, I as Oa, J as nl, K as VH, L as Hw, M as Rr, N as fi, O as FH, P as zH, Q as kk, Z as Ho, R as GH, S as HH, T as WH, V as Rk, W as Xv, X as Ww, Y as Pk, _ as Ok, $ as pn, a0 as UH, a1 as $H, a2 as Bk, a3 as Rg, a4 as YH, a5 as XH, a6 as Vk, a7 as qH, a8 as ZH, a9 as jH, aa as KH, ab as QH, ac as JH, F as eW } from "./useChatHistory-
|
|
7
|
-
import { A as Lye, C as Nye, h as Iye, t as kye, v as Rye, x as Pye, ah as Oye, n as Bye, j as Vye, r as Fye, y as zye, q as Gye, s as Hye, k as Wye, e as Uye, g as $ye, l as Yye, i as Xye, a as qye, p as Zye, ai as jye, af as Kye, ae as Qye, ag as Jye, m as e0e, o as t0e, ad as r0e, b as n0e, f as i0e, w as a0e, c as o0e, d as s0e, u as l0e } from "./useChatHistory-
|
|
6
|
+
import { z as PH, B as OH, U as iT, D as aT, E as $m, G as oT, H as BH, I as Oa, J as nl, K as VH, L as Hw, M as Rr, N as fi, O as FH, P as zH, Q as kk, Z as Ho, R as GH, S as HH, T as WH, V as Rk, W as Xv, X as Ww, Y as Pk, _ as Ok, $ as pn, a0 as UH, a1 as $H, a2 as Bk, a3 as Rg, a4 as YH, a5 as XH, a6 as Vk, a7 as qH, a8 as ZH, a9 as jH, aa as KH, ab as QH, ac as JH, F as eW } from "./useChatHistory-Bubo_nNb.js";
|
|
7
|
+
import { A as Lye, C as Nye, h as Iye, t as kye, v as Rye, x as Pye, ah as Oye, n as Bye, j as Vye, r as Fye, y as zye, q as Gye, s as Hye, k as Wye, e as Uye, g as $ye, l as Yye, i as Xye, a as qye, p as Zye, ai as jye, af as Kye, ae as Qye, ag as Jye, m as e0e, o as t0e, ad as r0e, b as n0e, f as i0e, w as a0e, c as o0e, d as s0e, u as l0e } from "./useChatHistory-Bubo_nNb.js";
|
|
8
8
|
import { createPortal as Fk, unstable_batchedUpdates as qd, flushSync as tW } from "react-dom";
|
|
9
|
-
import { C as rW, o as nW, G as jb, H as zk, ag as Gk, Q as Hk, ae as iW, U as aW, X as Wk, Y as Uw, ah as $w, a9 as oW, ai as sW, aj as lW, d as Pg, ak as uW, R as Yw, u as Xw, W as Uk, O as qw, al as $k, am as Zw, p as cW, a4 as Yk, $ as Xk, an as fW, ao as dW, ap as hW, aq as vW, ar as pW, M as gW, as as Kb } from "./useDataCollectionSource-
|
|
10
|
-
import { r as c0e, s as f0e, t as d0e, z as h0e, az as v0e, ay as p0e, au as g0e, F as m0e, J as y0e, af as b0e, K as x0e, v as _0e, aA as w0e, ab as S0e, ac as C0e, aa as T0e, ad as D0e, N as A0e, w as M0e, P as E0e, y as L0e, D as N0e, T as I0e, x as k0e, E as R0e, aC as P0e, m as O0e, n as B0e, at as V0e, aB as F0e, a7 as z0e, I as G0e, aD as H0e, aE as W0e, av as U0e, aw as $0e, ax as Y0e, e as X0e, aF as q0e } from "./useDataCollectionSource-
|
|
9
|
+
import { C as rW, o as nW, G as jb, H as zk, ag as Gk, Q as Hk, ae as iW, U as aW, X as Wk, Y as Uw, ah as $w, a9 as oW, ai as sW, aj as lW, d as Pg, ak as uW, R as Yw, u as Xw, W as Uk, O as qw, al as $k, am as Zw, p as cW, a4 as Yk, $ as Xk, an as fW, ao as dW, ap as hW, aq as vW, ar as pW, M as gW, as as Kb } from "./useDataCollectionSource-DrGZctSN.js";
|
|
10
|
+
import { r as c0e, s as f0e, t as d0e, z as h0e, az as v0e, ay as p0e, au as g0e, F as m0e, J as y0e, af as b0e, K as x0e, v as _0e, aA as w0e, ab as S0e, ac as C0e, aa as T0e, ad as D0e, N as A0e, w as M0e, P as E0e, y as L0e, D as N0e, T as I0e, x as k0e, E as R0e, aC as P0e, m as O0e, n as B0e, at as V0e, aB as F0e, a7 as z0e, I as G0e, aD as H0e, aE as W0e, av as U0e, aw as $0e, ax as Y0e, e as X0e, aF as q0e } from "./useDataCollectionSource-DrGZctSN.js";
|
|
11
11
|
import { utils as fu, write as qk } from "./xlsx-Bedf3nwD.js";
|
|
12
12
|
import { defaultTranslations as j0e } from "./i18n-provider-defaults.js";
|
|
13
13
|
import './f0.css';const mW = {
|
|
@@ -472,6 +472,14 @@ export declare const defaultTranslations: {
|
|
|
472
472
|
readonly dismiss: "Dismiss";
|
|
473
473
|
};
|
|
474
474
|
readonly attachFile: "Attach file";
|
|
475
|
+
readonly recordAudio: "Record audio";
|
|
476
|
+
readonly listening: "Listening…";
|
|
477
|
+
readonly stopRecording: "Stop and transcribe";
|
|
478
|
+
readonly cancelRecording: "Cancel recording";
|
|
479
|
+
readonly transcribing: "Transcribing…";
|
|
480
|
+
readonly micPermissionDenied: "Microphone access is blocked. Allow it in your browser settings to dictate.";
|
|
481
|
+
readonly micError: "Couldn't access the microphone.";
|
|
482
|
+
readonly transcriptionError: "Couldn't transcribe the audio. Try again.";
|
|
475
483
|
readonly removeFile: "Remove";
|
|
476
484
|
readonly fileUploadError: "Upload failed";
|
|
477
485
|
readonly fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.";
|
|
@@ -472,6 +472,14 @@ const e = {
|
|
|
472
472
|
dismiss: "Dismiss"
|
|
473
473
|
},
|
|
474
474
|
attachFile: "Attach file",
|
|
475
|
+
recordAudio: "Record audio",
|
|
476
|
+
listening: "Listening…",
|
|
477
|
+
stopRecording: "Stop and transcribe",
|
|
478
|
+
cancelRecording: "Cancel recording",
|
|
479
|
+
transcribing: "Transcribing…",
|
|
480
|
+
micPermissionDenied: "Microphone access is blocked. Allow it in your browser settings to dictate.",
|
|
481
|
+
micError: "Couldn't access the microphone.",
|
|
482
|
+
transcriptionError: "Couldn't transcribe the audio. Try again.",
|
|
475
483
|
removeFile: "Remove",
|
|
476
484
|
fileUploadError: "Upload failed",
|
|
477
485
|
fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.",
|