@factorialco/f0-react 2.37.1 → 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/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> = {
@@ -4216,11 +4265,6 @@ declare module "gridstack" {
4216
4265
  }
4217
4266
 
4218
4267
 
4219
- declare namespace Calendar {
4220
- var displayName: string;
4221
- }
4222
-
4223
-
4224
4268
  declare module "@tiptap/core" {
4225
4269
  interface Commands<ReturnType> {
4226
4270
  aiBlock: {
@@ -4270,6 +4314,11 @@ declare module "@tiptap/core" {
4270
4314
  }
4271
4315
 
4272
4316
 
4317
+ declare namespace Calendar {
4318
+ var displayName: string;
4319
+ }
4320
+
4321
+
4273
4322
  declare namespace F0GraphNodeWrapperInner {
4274
4323
  var displayName: string;
4275
4324
  }
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-BErabj-B.js";
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-DBzFU3JU.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-Bubo_nNb.js";
4
4
  export {
5
5
  c as AiChatTranslationsProvider,
6
6
  I as ChatSpinner,
@@ -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.";
@@ -6399,10 +6414,12 @@ declare type OneDataCollectionProps<R extends RecordType, Filters extends Filter
6399
6414
  features?: DataCollectionStorageFeaturesDefinition;
6400
6415
  };
6401
6416
  /**
6402
- * By default, when an `id` is set, the data collection reads its
6403
- * filters/search/sortings from the URL query params on mount and reflects any
6404
- * later changes back into them (see `dataCollectionUrlParams`). Set this to
6405
- * `true` to opt out of that URL syncing.
6417
+ * By default the data collection reads its filters/search/sortings/
6418
+ * visualization/page from the URL query params on mount and reflects any later
6419
+ * changes back into them (see `dataCollectionUrlParams`). This applies to any
6420
+ * collection — no `id` is required, and params are not scoped to one, so a
6421
+ * single URL-synced collection per page is assumed. Set this to `true` to opt
6422
+ * out of URL syncing.
6406
6423
  */
6407
6424
  disableUrlParams?: boolean;
6408
6425
  /**
@@ -8122,6 +8139,25 @@ declare interface TopLevelPrependNotesTextEditorPageDocumentPatch {
8122
8139
  blocks: JSONContent[];
8123
8140
  }
8124
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
+
8125
8161
  declare type TranslationKey = Join<PathsToStringProps<typeof defaultTranslations>, ".">;
8126
8162
 
8127
8163
  declare type TranslationShape<T> = {
@@ -8701,11 +8737,6 @@ declare module "gridstack" {
8701
8737
  }
8702
8738
 
8703
8739
 
8704
- declare namespace Calendar {
8705
- var displayName: string;
8706
- }
8707
-
8708
-
8709
8740
  declare module "@tiptap/core" {
8710
8741
  interface Commands<ReturnType> {
8711
8742
  aiBlock: {
@@ -8755,6 +8786,11 @@ declare module "@tiptap/core" {
8755
8786
  }
8756
8787
 
8757
8788
 
8789
+ declare namespace Calendar {
8790
+ var displayName: string;
8791
+ }
8792
+
8793
+
8758
8794
  declare namespace F0GraphNodeWrapperInner {
8759
8795
  var displayName: string;
8760
8796
  }
@@ -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-BErabj-B.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-BErabj-B.js";
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-O4gVVcoQ.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-O4gVVcoQ.js";
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.";
@@ -1632,10 +1648,10 @@ declare const boxVariants: (props?: ({
1632
1648
  export declare type Breakpoint = "sm" | "md" | "lg" | "xl";
1633
1649
 
1634
1650
  /**
1635
- * Builds a fresh `URLSearchParams` encoding a data collection `id` and state,
1636
- * symmetric with {@link parseDataCollectionUrlParams}. Always sets `dc_id`.
1651
+ * Builds a fresh `URLSearchParams` encoding a data collection's state, symmetric
1652
+ * with {@link parseDataCollectionUrlParams}.
1637
1653
  */
1638
- export declare const buildDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(id: string, state?: DataCollectionUrlState<CurrentFiltersState>) => URLSearchParams;
1654
+ export declare const buildDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(state?: DataCollectionUrlState<CurrentFiltersState>) => URLSearchParams;
1639
1655
 
1640
1656
  export declare const buildTranslations: (translations: TranslationsType) => TranslationsType;
1641
1657
 
@@ -3504,19 +3520,19 @@ export declare type Data<R extends RecordType> = {
3504
3520
 
3505
3521
  /**
3506
3522
  * Every data collection URL param shares this prefix, so each filter is its own
3507
- * readable param — e.g. `?dc_id=people/v1&dc_department=Sales&dc_search=ada`
3508
- * instead of a single JSON blob.
3523
+ * readable param — e.g. `?dc_department=Sales&dc_search=ada&dc_view=kanban`
3524
+ * instead of a single JSON blob. Params are not scoped to a collection id, so
3525
+ * this assumes a single URL-synced collection per page.
3509
3526
  */
3510
3527
  export declare const DATA_COLLECTION_URL_PARAM_PREFIX = "dc_";
3511
3528
 
3512
3529
  /**
3513
3530
  * The reserved (non-filter) param names. Individual filters are encoded as
3514
- * `dc_<filterKey>`; these three names are written last (via `set`) so that on
3515
- * the rare clash where a filter key is exactly `id`, `search` or `sort`, the
3531
+ * `dc_<filterKey>`; these names are written last (via `set`) so that on the rare
3532
+ * clash where a filter key is exactly `search`, `sort`, `view` or `page`, the
3516
3533
  * reserved param wins.
3517
3534
  */
3518
3535
  export declare const DATA_COLLECTION_URL_PARAMS: {
3519
- readonly id: "dc_id";
3520
3536
  readonly search: "dc_search";
3521
3537
  readonly sortings: "dc_sort";
3522
3538
  /** Active visualization type/key, e.g. `table` (omitted for the default one). */
@@ -3661,11 +3677,6 @@ export declare type DataCollectionStorageHandler<CurrentFiltersState extends Fil
3661
3677
  /** How {@link syncDataCollectionUrlParams} should update the browser history. */
3662
3678
  export declare type DataCollectionUrlHistoryMode = "replace" | "push" | "none";
3663
3679
 
3664
- export declare type DataCollectionUrlParams<CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>> = {
3665
- id: string;
3666
- state: DataCollectionUrlState<CurrentFiltersState>;
3667
- };
3668
-
3669
3680
  /** The subset of a data collection's state we read from / write to the URL. */
3670
3681
  export declare type DataCollectionUrlState<CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>> = Pick<DataCollectionStorage<CurrentFiltersState>, "filters" | "search" | "sortings"> & {
3671
3682
  /**
@@ -4545,6 +4556,14 @@ export declare const defaultTranslations: {
4545
4556
  readonly dismiss: "Dismiss";
4546
4557
  };
4547
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.";
4548
4567
  readonly removeFile: "Remove";
4549
4568
  readonly fileUploadError: "Upload failed";
4550
4569
  readonly fileUploadBlockedSubmit: "Your message wasn't sent because one of the attachments failed to upload. Remove it or retry.";
@@ -5611,7 +5630,7 @@ export declare interface F0AiChatProps {
5611
5630
  /**
5612
5631
  * @experimental This is an experimental component use it at your own risk
5613
5632
  */
5614
- 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;
5615
5634
 
5616
5635
  /**
5617
5636
  * Headless chat composer.
@@ -5622,7 +5641,7 @@ export declare const F0AiChatProvider: ({ enabled, initialMessage, chatHeader, c
5622
5641
  * coupling to `useAiChat()` or CopilotKit — wrappers like F0AiChat
5623
5642
  * provide the wiring.
5624
5643
  */
5625
- 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;
5626
5645
 
5627
5646
  export declare type F0AiChatTextAreaProps = {
5628
5647
  ref: RefObject<HTMLDivElement>;
@@ -5660,6 +5679,12 @@ export declare type F0AiChatTextAreaProps = {
5660
5679
  onPendingQuoteChange?: (quote: PendingQuote | null) => void;
5661
5680
  /** File attachment configuration. When omitted, attachments are disabled. */
5662
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;
5663
5688
  /** Async search used by the @-mention popover. When omitted, mentions are disabled. */
5664
5689
  searchPersons?: (query: string) => Promise<PersonProfile[]>;
5665
5690
  /**
@@ -12464,15 +12489,17 @@ export declare type PaginationInfo = Omit<PageBasedPaginatedResponse<unknown>, "
12464
12489
  export declare type PaginationType = "pages" | "infinite-scroll" | "no-pagination";
12465
12490
 
12466
12491
  /**
12467
- * Parses the data collection identifier and state out of URL query params.
12492
+ * Parses a data collection's state out of URL query params.
12468
12493
  *
12469
12494
  * @param input - A query string, a `URLSearchParams`, or omitted to read from
12470
12495
  * `window.location.search`.
12471
12496
  * @param filtersDefinition - Needed to decode the `dc_<filterKey>` params back
12472
12497
  * into correctly-typed filter values. Omit to skip filters.
12473
- * @returns `{ id, state }`, or `null` when no `dc_id` is present.
12498
+ * @returns The state encoded in the URL (empty when no `dc_` params are present).
12499
+ * Params are not scoped to a collection id — one synced collection per
12500
+ * page is assumed.
12474
12501
  */
12475
- export declare const parseDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(input?: string | URLSearchParams, filtersDefinition?: FiltersDefinition) => DataCollectionUrlParams<CurrentFiltersState> | null;
12502
+ export declare const parseDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(input?: string | URLSearchParams, filtersDefinition?: FiltersDefinition) => DataCollectionUrlState<CurrentFiltersState>;
12476
12503
 
12477
12504
  declare type PathsToStringProps<T> = T extends string ? [] : {
12478
12505
  [K in Extract<keyof T, string>]: [K, ...PathsToStringProps<T[K]>];
@@ -13543,12 +13570,12 @@ export declare const selectSizes: readonly ["sm", "md"];
13543
13570
  declare type SelectValueType = string | number;
13544
13571
 
13545
13572
  /**
13546
- * Writes a data collection's current filters/search/sortings onto an existing
13547
- * query string, preserving any unrelated params. Every `dc_`-prefixed param is
13548
- * rebuilt from `state`, so cleared filters drop out and an entirely empty state
13549
- * leaves the URL free of `dc_` params (rather than a bare `?dc_id=<id>`).
13573
+ * Writes a data collection's current state onto an existing query string,
13574
+ * preserving any unrelated params. Every `dc_`-prefixed param is rebuilt from
13575
+ * `state`, so cleared values drop out and an entirely empty state leaves the URL
13576
+ * free of `dc_` params.
13550
13577
  */
13551
- export declare const setDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(current: string | URLSearchParams | undefined, id: string, state: DataCollectionUrlState<CurrentFiltersState>) => URLSearchParams;
13578
+ export declare const setDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(current: string | URLSearchParams | undefined, state: DataCollectionUrlState<CurrentFiltersState>) => URLSearchParams;
13552
13579
 
13553
13580
  declare type SetFormCardValueFormatter = <T = unknown>(entry: FormCardValueFormatterEntry<T>) => void;
13554
13581
 
@@ -13843,14 +13870,14 @@ export declare type SurveySubmitAnswers = Record<string, string | number | boole
13843
13870
  declare type SwitchFieldRenderIf = BooleanRenderIfCondition | CommonRenderIfCondition | F0BaseFieldRenderIfFunction;
13844
13871
 
13845
13872
  /**
13846
- * Reflects a data collection's current filters/search/sortings into the URL.
13873
+ * Reflects a data collection's current state into the URL.
13847
13874
  *
13848
13875
  * Pairs with {@link parseDataCollectionUrlParams} (which reads the other way).
13849
13876
  * `OneDataCollection` wires this up by default when an `id` is set.
13850
13877
  *
13851
13878
  * @returns The resulting query string (no leading `?`), or `null` under SSR.
13852
13879
  */
13853
- export declare const syncDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(id: string, state: DataCollectionUrlState<CurrentFiltersState>, options?: {
13880
+ export declare const syncDataCollectionUrlParams: <CurrentFiltersState extends FiltersState<FiltersDefinition> = FiltersState<FiltersDefinition>>(state: DataCollectionUrlState<CurrentFiltersState>, options?: {
13854
13881
  history?: DataCollectionUrlHistoryMode;
13855
13882
  }) => string | null;
13856
13883
 
@@ -14445,6 +14472,25 @@ declare interface TopLevelPrependNotesTextEditorPageDocumentPatch {
14445
14472
  blocks: JSONContent[];
14446
14473
  }
14447
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
+
14448
14494
  declare type TranslationKey = Join<PathsToStringProps<typeof defaultTranslations>, ".">;
14449
14495
 
14450
14496
  declare type TranslationShape<T> = {
@@ -15522,11 +15568,6 @@ declare module "gridstack" {
15522
15568
  }
15523
15569
 
15524
15570
 
15525
- declare namespace Calendar {
15526
- var displayName: string;
15527
- }
15528
-
15529
-
15530
15571
  declare module "@tiptap/core" {
15531
15572
  interface Commands<ReturnType> {
15532
15573
  aiBlock: {
@@ -15576,6 +15617,11 @@ declare module "@tiptap/core" {
15576
15617
  }
15577
15618
 
15578
15619
 
15620
+ declare namespace Calendar {
15621
+ var displayName: string;
15622
+ }
15623
+
15624
+
15579
15625
  declare namespace F0GraphNodeWrapperInner {
15580
15626
  var displayName: string;
15581
15627
  }
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-BErabj-B.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-BErabj-B.js";
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-DBzFU3JU.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-DBzFU3JU.js";
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-O4gVVcoQ.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-O4gVVcoQ.js";
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.";
@@ -842,11 +850,6 @@ declare module "gridstack" {
842
850
  }
843
851
 
844
852
 
845
- declare namespace Calendar {
846
- var displayName: string;
847
- }
848
-
849
-
850
853
  declare module "@tiptap/core" {
851
854
  interface Commands<ReturnType> {
852
855
  aiBlock: {
@@ -896,6 +899,11 @@ declare module "@tiptap/core" {
896
899
  }
897
900
 
898
901
 
902
+ declare namespace Calendar {
903
+ var displayName: string;
904
+ }
905
+
906
+
899
907
  declare namespace F0GraphNodeWrapperInner {
900
908
  var displayName: string;
901
909
  }
@@ -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.",