@factorialco/f0-react 6.72.0 → 6.74.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.
@@ -1807,6 +1807,28 @@ declare type CardAvatarVariant = AvatarVariant | {
1807
1807
  date: Date;
1808
1808
  };
1809
1809
 
1810
+ /**
1811
+ * Bookmark (save) toggle rendered as an icon button in the card's options overlay.
1812
+ * Shows an outline bookmark icon when not bookmarked and a filled one when bookmarked,
1813
+ * giving an at-a-glance indication of the saved state.
1814
+ */
1815
+ declare interface CardBookmark {
1816
+ /**
1817
+ * Whether the card is currently bookmarked (saved).
1818
+ * Controls the filled vs. outline icon and keeps the toggle visible while active.
1819
+ */
1820
+ bookmarked: boolean;
1821
+ /**
1822
+ * Called with the next bookmarked state when the user toggles the bookmark.
1823
+ */
1824
+ onBookmarkChange: (bookmarked: boolean) => void;
1825
+ /**
1826
+ * Accessible label for the toggle button (e.g. "Save product").
1827
+ * Falls back to the card `title` when omitted.
1828
+ */
1829
+ label?: string;
1830
+ }
1831
+
1810
1832
  /**
1811
1833
  * Group Cards: Renders
1812
1834
  */
@@ -1851,6 +1873,121 @@ declare type CardImageSize = (typeof cardImageSizes)[number];
1851
1873
 
1852
1874
  declare const cardImageSizes: readonly ["xs", "sm", "md", "lg", "xl"];
1853
1875
 
1876
+ declare interface CardInternalProps {
1877
+ /**
1878
+ * Whether the card has a compact layout
1879
+ */
1880
+ compact?: boolean;
1881
+ /**
1882
+ * The avatar to display in the card
1883
+ */
1884
+ avatar?: CardAvatarVariant;
1885
+ /**
1886
+ * Whether the card has an image
1887
+ */
1888
+ image?: string;
1889
+ /**
1890
+ * How the image should be displayed/fitted within its container
1891
+ * @default "fit-width"
1892
+ */
1893
+ imageFit?: CardImageFit;
1894
+ /**
1895
+ * Size of the image container
1896
+ * @default "sm"
1897
+ */
1898
+ imageSize?: CardImageSize;
1899
+ /**
1900
+ * Constrain the image container to a fixed aspect ratio instead of a fixed height.
1901
+ * When set, `imageSize` is ignored for height.
1902
+ * @example "video"
1903
+ */
1904
+ imageAspectRatio?: CardImageAspectRatio;
1905
+ /**
1906
+ * Whether to show a blurred background image when the image doesn't fill the container
1907
+ * @default true
1908
+ */
1909
+ blurredBackground?: boolean;
1910
+ /**
1911
+ * The title of the card
1912
+ */
1913
+ title?: string;
1914
+ /**
1915
+ * The description of the card
1916
+ */
1917
+ description?: string;
1918
+ /**
1919
+ * Metadata items to display in the card
1920
+ */
1921
+ metadata?: CardMetadata[];
1922
+ /**
1923
+ * The children to display in the card
1924
+ */
1925
+ children?: ReactNode;
1926
+ /**
1927
+ * The link to navigate to when the card is clicked
1928
+ */
1929
+ link?: string;
1930
+ /**
1931
+ * The primary action that displays a primary button in the card footer
1932
+ */
1933
+ primaryAction?: CardPrimaryAction;
1934
+ /**
1935
+ * The secondary actions - either an array of button actions or a single link
1936
+ */
1937
+ secondaryActions?: CardSecondaryAction[] | CardSecondaryLink;
1938
+ /**
1939
+ * Actions to display in the dropdown menu inside the card content
1940
+ */
1941
+ otherActions?: DropdownItem[];
1942
+ /**
1943
+ * Bookmark (save) toggle rendered as an icon button in the card's options overlay.
1944
+ * Shows an outline bookmark when not bookmarked and a filled one when bookmarked.
1945
+ */
1946
+ bookmark?: CardBookmark;
1947
+ /**
1948
+ * Whether the card is selectable
1949
+ */
1950
+ selectable?: boolean;
1951
+ /**
1952
+ * Whether the card is selected
1953
+ */
1954
+ selected?: boolean;
1955
+ /**
1956
+ * The callback to handle the selection of the card
1957
+ */
1958
+ onSelect?: (selected: boolean) => void;
1959
+ /**
1960
+ * The callback to handle the click of the card
1961
+ */
1962
+ onClick?: () => void;
1963
+ /**
1964
+ * Force vertical metadata for compact layout
1965
+ * Private prop
1966
+ */
1967
+ forceVerticalMetadata?: boolean;
1968
+ /**
1969
+ * Whether the card should have a full height
1970
+ */
1971
+ fullHeight?: boolean;
1972
+ /**
1973
+ * Use a softer/lighter border (`border-f1-border-secondary`) instead of the default
1974
+ * `border-f1-border`. Opt-in so existing cards keep their current appearance.
1975
+ * @default false
1976
+ */
1977
+ subtleBorder?: boolean;
1978
+ /**
1979
+ * When true, disables the full-card overlay link so parent components
1980
+ * can manage drag-and-drop while still allowing click navigation via onClick
1981
+ */
1982
+ disableOverlayLink?: boolean;
1983
+ /**
1984
+ * Alert banner displayed above the card with a coloured header strip and matching border.
1985
+ * Supports info, warning, critical, and positive variants with a default icon per variant.
1986
+ * Use `visible` + `onDismiss` for controlled dismiss behaviour.
1987
+ */
1988
+ alert?: CardAlertProps;
1989
+ }
1990
+
1854
1991
  declare type CardMetadata = {
1855
1992
  /** Leading icon. Optional — when omitted the row renders just the value. */
1856
1993
  icon?: IconType;
@@ -4081,6 +4218,8 @@ declare const defaultTranslations: {
4081
4218
  readonly details: "Recording details";
4082
4219
  readonly summary: "Summary";
4083
4220
  readonly transcription: "Transcription";
4221
+ readonly jumpTo: "Jump to {{time}}";
4222
+ readonly transcriptHint: "Select a line to move the recording to that moment";
4084
4223
  readonly language: "Language";
4085
4224
  readonly audio: "Audio";
4086
4225
  };
@@ -4564,6 +4703,7 @@ declare const defaultTranslations: {
4564
4703
  readonly closeSearch: "Close search";
4565
4704
  readonly noResults: "No chats found";
4566
4705
  readonly backToLatest: "Jump to latest";
4706
+ readonly readOnly: "You can't send messages in this conversation";
4567
4707
  readonly online: "Online";
4568
4708
  readonly muted: "Muted";
4569
4709
  readonly mute: "Mute";
@@ -6172,6 +6312,8 @@ export declare interface F0CardHorizontalProps {
6172
6312
  descriptionAsSingleLine?: boolean;
6173
6313
  }
6174
6314
 
6315
+ declare type F0CardProps = Omit<CardInternalProps, (typeof privateProps_8)[number]>;
6316
+
6175
6317
  /**
6176
6318
  * @experimental This is an experimental component use it at your own risk
6177
6319
  */
@@ -6278,21 +6420,25 @@ export declare const F0Chat: (props: F0ChatProps) => ReactNode;
6278
6420
  * `kind` — videos are files with a video MIME type. */
6279
6421
  export declare type F0ChatAttachedKind = "image" | "video" | "document" | "file";
6280
6422
 
6281
- export declare type F0ChatAttachment = F0ChatImageAttachment | F0ChatFileAttachment | F0ChatLocationAttachment | F0ChatVoiceAttachment;
6423
+ export declare type F0ChatAttachment = F0ChatImageAttachment | F0ChatFileAttachment | F0ChatLocationAttachment | F0ChatVoiceAttachment | F0ChatCardAttachment;
6282
6424
 
6283
6425
  /** How files reached the composer. Same story as {@link F0ChatReactionSource}:
6284
6426
  * {@link F0ChatRuntime.uploadFiles} cannot tell these apart. */
6285
6427
  export declare type F0ChatAttachSource = "button" | "drop" | "paste";
6286
6428
 
6287
6429
  /**
6288
- * Per-channel permissions. Everything is optional and defaults to today's
6289
- * behavior, so hosts only express what their transport restricts (frozen /
6290
- * read-only channels, moderation roles…):
6430
+ * Per-channel permissions, one per verb. Everything is optional and defaults to
6431
+ * today's behavior, so hosts only express what their transport restricts
6432
+ * (frozen / read-only channels, moderation roles…):
6291
6433
  * - `canSend` (default true): false hides the composer entirely.
6434
+ * - `canReply` (default: `canSend`): false hides Reply. Replying needs a
6435
+ * composer to reply *into*, so it follows `canSend` unless stated otherwise.
6292
6436
  * - `canReact` (default true): false hides the quick-reaction row, the emoji
6293
6437
  * pickers and disables toggling existing reaction pills.
6294
6438
  * - `canUpload` (default: whether `uploadFiles` exists): false disables the
6295
6439
  * attach button, drag & drop and voice notes even when `uploadFiles` exists.
6440
+ * - `canCopy` (default true): false hides Copy.
6441
+ * - `canViewInfo` (default true): false hides Info (delivery / read receipts).
6296
6442
  * - `canEditMessage` (default: own message within {@link F0ChatRuntime.editWindowMs}):
6297
6443
  * overrides the edit policy per message, INCLUDING the edit window — a host
6298
6444
  * that supplies this and wants a time limit must apply it here. Structural
@@ -6302,15 +6448,55 @@ export declare type F0ChatAttachSource = "button" | "drop" | "paste";
6302
6448
  * - `canDeleteMessage` (default: own message): overrides the delete policy per
6303
6449
  * message (e.g. moderators deleting others' messages). Failed local echoes
6304
6450
  * are always discardable — they don't exist server-side.
6451
+ *
6452
+ * On an `announcement` channel every boolean above defaults to **false**
6453
+ * instead: a noticeboard is one-way by construction. An explicit value always
6454
+ * wins, so a host with a poster passes `{ canSend: true }` and gets exactly
6455
+ * that. See `utils/capabilities.ts`.
6456
+ *
6457
+ * When no action survives, the hover ellipsis is not rendered at all.
6305
6458
  */
6306
6459
  export declare type F0ChatCapabilities = {
6307
6460
  canSend?: boolean;
6461
+ canReply?: boolean;
6308
6462
  canReact?: boolean;
6309
6463
  canUpload?: boolean;
6464
+ canCopy?: boolean;
6465
+ canViewInfo?: boolean;
6310
6466
  canEditMessage?: (message: F0ChatMessage) => boolean;
6311
6467
  canDeleteMessage?: (message: F0ChatMessage) => boolean;
6312
6468
  };
6313
6469
 
6470
+ /**
6471
+ * A rich card inside a message — an {@link F0Card} the host describes as data.
6472
+ *
6473
+ * Deliberately a CURATED subset of `F0CardProps`, not a passthrough: selection,
6474
+ * bookmarking, the overflow menu and the alert banner mean nothing in a
6475
+ * transcript, and `children` isn't serialisable — which is exactly what a
6476
+ * transport-backed card has to be (factorial → a Stream custom attachment
6477
+ * `{ type: "card", … }`). Handlers stay optional so a card can be pure data
6478
+ * (`href`) or host-wired (`onClick`).
6479
+ */
6480
+ export declare type F0ChatCardAttachment = {
6481
+ kind: "card";
6482
+ title: string;
6483
+ description?: string;
6484
+ /** Leading avatar — the full F0Card set (emoji, icon, module, person, date…). */
6485
+ avatar?: F0CardProps["avatar"];
6486
+ /** Cover image above the content. */
6487
+ image?: string;
6488
+ /** Call to action, rendered as a button in the card's divided footer. */
6489
+ action?: {
6490
+ label: string;
6491
+ /** Navigates. Takes precedence over `onClick` when both are set. */
6492
+ href?: string;
6493
+ onClick?: () => void;
6494
+ };
6495
+ /** Makes the whole card activate — the footer action still acts on its own. */
6496
+ href?: string;
6497
+ onClick?: () => void;
6498
+ };
6499
+
6314
6500
  /** The conversation currently shown in the panel (header + behaviour differs by type). */
6315
6501
  export declare type F0ChatChannel = {
6316
6502
  id: string;
@@ -6339,6 +6525,13 @@ export declare type F0ChatChannel = {
6339
6525
  memberCount?: number;
6340
6526
  /** DM only — the counterpart, used for the header identity hover card. */
6341
6527
  user?: F0ChatUser;
6528
+ /**
6529
+ * Sentence shown where the composer would be when the current user can't
6530
+ * send here ("Only Factorial can send messages"). Host-owned because only the
6531
+ * host knows who *can* post — and has to translate it. Falls back to a
6532
+ * generic i18n line.
6533
+ */
6534
+ readOnlyNotice?: string;
6342
6535
  };
6343
6536
 
6344
6537
  /** A status badge shown in the header next to the title (e.g. on vacation, away).
@@ -6348,7 +6541,22 @@ export declare type F0ChatChannelStatus = {
6348
6541
  label: string;
6349
6542
  };
6350
6543
 
6351
- export declare type F0ChatChannelType = "dm" | "group";
6544
+ /**
6545
+ * `announcement` is a one-way channel: a noticeboard (product changelog, company
6546
+ * news) where only the people the host grants permission to can post, and
6547
+ * everyone else reads. It renders like a DM — no avatar gutter, no sender names,
6548
+ * no `@here` — and every capability defaults to off (see
6549
+ * {@link F0ChatCapabilities}), so a read-only channel needs no configuration at
6550
+ * all while a host that has a poster still turns `canSend` back on.
6551
+ */
6552
+ export declare type F0ChatChannelType = "dm" | "group" | "announcement";
6553
+
6554
+ /**
6555
+ * What the composer can produce. Cards are authored by the host (a seeded
6556
+ * announcement, a transport's custom attachment) — there is no affordance to
6557
+ * attach one, so they're excluded from sending, editing and uploading.
6558
+ */
6559
+ export declare type F0ChatComposableAttachment = Exclude<F0ChatAttachment, F0ChatCardAttachment>;
6352
6560
 
6353
6561
  /**
6354
6562
  * Edits applied to an existing message. Text, mentions and attachments are all
@@ -6357,7 +6565,7 @@ export declare type F0ChatChannelType = "dm" | "group";
6357
6565
  */
6358
6566
  export declare type F0ChatEditInput = {
6359
6567
  body: string;
6360
- attachments?: F0ChatAttachment[];
6568
+ attachments?: F0ChatComposableAttachment[];
6361
6569
  /** People mentioned in the edited body (groups only). */
6362
6570
  mentions?: F0ChatMention[];
6363
6571
  /** Whether the edited message mentions the whole group (`@here`). */
@@ -6456,6 +6664,11 @@ export declare type F0ChatEvents = {
6456
6664
  }) => void;
6457
6665
  onLocationOpened?: () => void;
6458
6666
  onLinkPreviewClicked?: () => void;
6667
+ /** A card attachment was activated — `source` tells the footer button apart
6668
+ * from a click on the card body. Carries no title or URL. */
6669
+ onCardActivated?: (p: {
6670
+ source: "card" | "action";
6671
+ }) => void;
6459
6672
  onSearchOpened?: () => void;
6460
6673
  onSearchResultNavigated?: (p: {
6461
6674
  direction: "next" | "prev";
@@ -6505,7 +6718,7 @@ export declare type F0ChatHeaderAction = {
6505
6718
  * as its own icon button next to it. Inline requires `icon` — an inline
6506
6719
  * action without one falls back to the menu. */
6507
6720
  placement?: "menu" | "inline";
6508
- /** Restrict the action to a channel type. Omit for both. */
6721
+ /** Restrict the action to given channel types. Omit for all of them. */
6509
6722
  channelTypes?: F0ChatChannelType[];
6510
6723
  };
6511
6724
 
@@ -6823,7 +7036,7 @@ export declare type F0ChatRuntime = {
6823
7036
  * `channel.stopTyping()`).
6824
7037
  */
6825
7038
  stopTyping?: () => void | Promise<void>;
6826
- uploadFiles?: (files: File[]) => Promise<F0ChatAttachment[]>;
7039
+ uploadFiles?: (files: File[]) => Promise<F0ChatComposableAttachment[]>;
6827
7040
  /**
6828
7041
  * Max files attachable at once. When a selection/drop would exceed it, the
6829
7042
  * composer rejects the whole batch and flashes a transient error in the
@@ -6913,7 +7126,7 @@ export declare const f0ChatSenderColors: readonly ["viridian", "malibu", "yellow
6913
7126
 
6914
7127
  export declare type F0ChatSendInput = {
6915
7128
  body: string;
6916
- attachments?: F0ChatAttachment[];
7129
+ attachments?: F0ChatComposableAttachment[];
6917
7130
  replyToId?: string;
6918
7131
  /** People mentioned in the body (groups only). The host maps these to the
6919
7132
  * transport's mention field (factorial → Stream `mentioned_users`). */
@@ -7098,11 +7311,24 @@ declare type F0DialogHeaderProps = {
7098
7311
  resourceHeader?: F0ResourceHeaderProps;
7099
7312
  controls?: DialogControls;
7100
7313
  headerStatus?: string;
7314
+ /** See {@link F0DialogInternalProps.dismissable} — hides the close button. */
7315
+ dismissable?: boolean;
7101
7316
  } & Partial<Pick<TabsProps, "tabs" | "activeTabId" | "setActiveTabId">>;
7102
7317
 
7103
7318
  declare type F0DialogInternalProps = {
7104
7319
  isOpen: boolean;
7105
7320
  onClose: () => void;
7321
+ /**
7322
+ * Whether the reader can walk away. `false` removes the close button and
7323
+ * stops Escape and a click outside from closing — a forced choice, where the
7324
+ * dialog's own actions are the only way out.
7325
+ *
7326
+ * Use it only when leaving would be worse than being trapped: a decision the
7327
+ * product genuinely cannot proceed without. A dialog nobody can dismiss is a
7328
+ * dead end for anyone who does not understand it.
7329
+ * @default true
7330
+ */
7331
+ dismissable?: boolean;
7106
7332
  asBottomSheetInMobile?: boolean;
7107
7333
  position?: DialogPosition;
7108
7334
  width?: DialogWidth;
@@ -12027,6 +12253,8 @@ declare const privateProps_6: readonly ["compact"];
12027
12253
 
12028
12254
  declare const privateProps_7: readonly ["delay", "onOpen"];
12029
12255
 
12256
+ declare const privateProps_8: readonly ["forceVerticalMetadata", "disableOverlayLink"];
12257
+
12030
12258
  declare type ProductUpdate = {
12031
12259
  title: string;
12032
12260
  href: string;
@@ -15346,8 +15574,10 @@ declare module "@tiptap/core" {
15346
15574
 
15347
15575
  declare module "@tiptap/core" {
15348
15576
  interface Commands<ReturnType> {
15349
- transcript: {
15350
- insertTranscript: (data: TranscriptData) => ReturnType;
15577
+ videoEmbed: {
15578
+ setVideoEmbed: (options: {
15579
+ src: string;
15580
+ }) => ReturnType;
15351
15581
  };
15352
15582
  }
15353
15583
  }
@@ -15355,10 +15585,8 @@ declare module "@tiptap/core" {
15355
15585
 
15356
15586
  declare module "@tiptap/core" {
15357
15587
  interface Commands<ReturnType> {
15358
- videoEmbed: {
15359
- setVideoEmbed: (options: {
15360
- src: string;
15361
- }) => ReturnType;
15588
+ transcript: {
15589
+ insertTranscript: (data: TranscriptData) => ReturnType;
15362
15590
  };
15363
15591
  }
15364
15592
  }
@@ -1,6 +1,6 @@
1
- import { v as s, t, A as i, a as o, J as r, ar as n, aq as l, as as d, B as S, w as C, y as g, L as m, ay as u, az as c, aI as b, x as h, C as P, ax as T, aJ as p, D as F, z as I, a3 as E, b1 as A, b8 as B, K as y, b0 as D, E as L, b as W, i as v, ag as k, ah as O, G as _, an as f, F as x, j as N, n as H, o as R, k as M, c as V, q as w, r as G, H as z, aM as U, aN as j, aB as q, am as K, aR as Q, at as X, a6 as Z, aL as J, U as Y, ac as $, O as aa, bc as ea, V as sa, P as ta, M as ia, N as oa, au as ra, R as na, a_ as la, b2 as da, S as Sa, a7 as Ca, a8 as ga, _ as ma, $ as ua, a0 as ca, Z as ba, a1 as ha, W as Pa, a2 as Ta, a4 as pa, a5 as Fa, a9 as Ia, aa as Ea, b6 as Aa, b5 as Ba, ap as ya, ao as Da, aw as La, aK as Wa, aH as va, av as ka, ab as Oa, aC as _a, b7 as fa, ba as xa, aA as Na, aF as Ha, aD as Ra, bb as Ma, aG as Va, aE as wa, b9 as Ga, d as za, af as Ua, b4 as ja, b3 as qa, aj as Ka, f as Qa, l as Xa, p as Za, g as Ja, h as Ya, aU as $a, aS as ae, ak as ee, al as se, aQ as te, aT as ie, e as oe, s as re, aY as ne, aP as le, aV as de, ad as Se, a$ as Ce, u as ge, ae as me, ai as ue, aO as ce, T as be, Q as he, I as Pe, Y as Te, X as pe, aZ as Fe, aX as Ie, aW as Ee } from "./experimental-D277_AGp.js";
2
- import { dP as Be, ep as ye, eo as De, eC as Le, dm as We, em as ve, ce as ke, c4 as Oe, cb as _e, eh as fe, bZ as xe, bZ as Ne, bS as He, ei as Re, ch as Me, e0 as Ve, cj as we, eF as Ge, en as ze, ey as Ue, ez as je, d6 as qe, eD as Ke, k as Qe, dQ as Xe, cN as Ze, el as Je, er as Ye, eq as $e, T as as, h as es, bT as ss, eA as ts, eG as is, eB as os, eE as rs, ex as ns, eu as ls, ew as ds, es as Ss, ej as Cs, ek as gs, ed as ms, ev as us, et as cs } from "./F0CanvasPanel-D2x3eIDs.js";
3
- import { ax as hs, ay as Ps, a5 as Ts, a6 as ps, a3 as Fs, ag as Is, C as Es, a7 as As, aJ as Bs, ac as ys, aI as Ds, af as Ls, a4 as Ws, av as vs, aL as ks, aK as Os, an as _s, ah as fs, aq as xs, aO as Ns, a2 as Hs, as as Rs, ap as Ms, ak as Vs, aQ as ws, al as Gs, at as zs, au as Us, a8 as js, aM as qs, aN as Ks, am as Qs, aw as Xs, aF as Zs, O as Js, aH as Ys, a9 as $s, aS as at, ab as et, ad as st, aq as tt, aP as it, ar as ot, ao as rt, aR as nt, aa as lt, W as dt, ae as St, a1 as Ct, $ as gt, a0 as mt, aB as ut, aC as ct, az as bt, aG as ht, aj as Pt, ai as Tt, aD as pt, l as Ft, aA as It, aE as Et, y as At } from "./CoachmarkProvider-vsCLDtM0.js";
1
+ import { v as s, t, A as i, a as o, J as r, ar as n, aq as l, as as d, B as S, w as C, y as g, L as m, ay as u, az as c, aI as b, x as h, C as P, ax as T, aJ as p, D as F, z as I, a3 as E, b1 as A, b8 as B, K as y, b0 as D, E as L, b as W, i as v, ag as k, ah as O, G as _, an as f, F as x, j as N, n as H, o as R, k as M, c as V, q as w, r as G, H as z, aM as U, aN as j, aB as q, am as K, aR as Q, at as X, a6 as Z, aL as J, U as Y, ac as $, O as aa, bc as ea, V as sa, P as ta, M as ia, N as oa, au as ra, R as na, a_ as la, b2 as da, S as Sa, a7 as Ca, a8 as ga, _ as ma, $ as ua, a0 as ca, Z as ba, a1 as ha, W as Pa, a2 as Ta, a4 as pa, a5 as Fa, a9 as Ia, aa as Ea, b6 as Aa, b5 as Ba, ap as ya, ao as Da, aw as La, aK as Wa, aH as va, av as ka, ab as Oa, aC as _a, b7 as fa, ba as xa, aA as Na, aF as Ha, aD as Ra, bb as Ma, aG as Va, aE as wa, b9 as Ga, d as za, af as Ua, b4 as ja, b3 as qa, aj as Ka, f as Qa, l as Xa, p as Za, g as Ja, h as Ya, aU as $a, aS as ae, ak as ee, al as se, aQ as te, aT as ie, e as oe, s as re, aY as ne, aP as le, aV as de, ad as Se, a$ as Ce, u as ge, ae as me, ai as ue, aO as ce, T as be, Q as he, I as Pe, Y as Te, X as pe, aZ as Fe, aX as Ie, aW as Ee } from "./experimental-Cxp_BrIJ.js";
2
+ import { dP as Be, ep as ye, eo as De, eC as Le, dm as We, em as ve, ce as ke, c4 as Oe, cb as _e, eh as fe, bZ as xe, bZ as Ne, bS as He, ei as Re, ch as Me, e0 as Ve, cj as we, eF as Ge, en as ze, ey as Ue, ez as je, d6 as qe, eD as Ke, k as Qe, dQ as Xe, cN as Ze, el as Je, er as Ye, eq as $e, T as as, h as es, bT as ss, eA as ts, eG as is, eB as os, eE as rs, ex as ns, eu as ls, ew as ds, es as Ss, ej as Cs, ek as gs, ed as ms, ev as us, et as cs } from "./F0CanvasPanel-BVQo7wYW.js";
3
+ import { ax as hs, ay as Ps, a5 as Ts, a6 as ps, a3 as Fs, ag as Is, C as Es, a7 as As, aJ as Bs, ac as ys, aI as Ds, af as Ls, a4 as Ws, av as vs, aL as ks, aK as Os, an as _s, ah as fs, aq as xs, aO as Ns, a2 as Hs, as as Rs, ap as Ms, ak as Vs, aQ as ws, al as Gs, at as zs, au as Us, a8 as js, aM as qs, aN as Ks, am as Qs, aw as Xs, aF as Zs, O as Js, aH as Ys, a9 as $s, aS as at, ab as et, ad as st, aq as tt, aP as it, ar as ot, ao as rt, aR as nt, aa as lt, W as dt, ae as St, a1 as Ct, $ as gt, a0 as mt, aB as ut, aC as ct, az as bt, aG as ht, aj as Pt, ai as Tt, aD as pt, l as Ft, aA as It, aE as Et, y as At } from "./CoachmarkProvider-BPzXN23Q.js";
4
4
  export {
5
5
  hs as AUTO_PER_PAGE_MAX,
6
6
  Ps as AUTO_PER_PAGE_MIN_RESERVED_ROWS,
package/dist/f0.d.ts CHANGED
@@ -1325,12 +1325,18 @@ export declare interface AudioPlayerContent {
1325
1325
  */
1326
1326
  summary?: Localized<string>;
1327
1327
  /**
1328
- * Plain-text transcription of the recording, shown in the "Transcription"
1329
- * tab. Line breaks are preserved. When omitted, the card attempts to derive
1330
- * a transcription from the audio file's embedded/attached text tracks.
1331
- * Localizable.
1328
+ * Transcription of the recording, shown in the "Transcription" tab.
1329
+ *
1330
+ * Pass a **string** for a plain transcript (line breaks are preserved), or a
1331
+ * list of {@link TranscriptCue} to get a timed one: the card then marks the
1332
+ * cue being spoken, keeps it in view, and moves playback to a cue when it is
1333
+ * clicked. Pass a referentially stable array — a new identity on every
1334
+ * render defeats the memoisation that keeps a playing transcript cheap.
1335
+ *
1336
+ * When omitted, the card attempts to derive a transcription from the audio
1337
+ * file's embedded/attached text tracks. Localizable.
1332
1338
  */
1333
- transcription?: Localized<string>;
1339
+ transcription?: Localized<string | TranscriptCue[]>;
1334
1340
  }
1335
1341
 
1336
1342
  export declare interface AudioPlayerControls extends AudioPlayerState {
@@ -4972,6 +4978,8 @@ export declare const defaultTranslations: {
4972
4978
  readonly details: "Recording details";
4973
4979
  readonly summary: "Summary";
4974
4980
  readonly transcription: "Transcription";
4981
+ readonly jumpTo: "Jump to {{time}}";
4982
+ readonly transcriptHint: "Select a line to move the recording to that moment";
4975
4983
  readonly language: "Language";
4976
4984
  readonly audio: "Audio";
4977
4985
  };
@@ -5455,6 +5463,7 @@ export declare const defaultTranslations: {
5455
5463
  readonly closeSearch: "Close search";
5456
5464
  readonly noResults: "No chats found";
5457
5465
  readonly backToLatest: "Jump to latest";
5466
+ readonly readOnly: "You can't send messages in this conversation";
5458
5467
  readonly online: "Online";
5459
5468
  readonly muted: "Muted";
5460
5469
  readonly mute: "Mute";
@@ -19035,6 +19044,25 @@ declare type TranscribeOptions = {
19035
19044
  signal?: AbortSignal;
19036
19045
  };
19037
19046
 
19047
+ /**
19048
+ * One utterance of a transcript. Give it a `startTime` and the card syncs it
19049
+ * with playback: the cue being spoken is marked while the recording plays, and
19050
+ * clicking it moves playback to that moment. Without a `startTime` the cue is
19051
+ * plain text — no mark, no click target — so a transcript that carries no
19052
+ * timings renders as a plain dialogue.
19053
+ */
19054
+ export declare interface TranscriptCue {
19055
+ /**
19056
+ * What was said, as a single inline run. Rendered as markdown limited to
19057
+ * bold and italic, which is how a speaker gets its label —
19058
+ * `"**Recruiter:** How did you hear about us?"`. Escape `*` and `_` in text
19059
+ * you didn't write yourself.
19060
+ */
19061
+ text: string;
19062
+ /** Where the utterance starts, in seconds from the start of the recording. */
19063
+ startTime?: number;
19064
+ }
19065
+
19038
19066
  declare type TranslationKey = Join<PathsToStringProps<typeof defaultTranslations>, ".">;
19039
19067
 
19040
19068
  declare type TranslationShape<T> = {
@@ -20525,8 +20553,10 @@ declare module "@tiptap/core" {
20525
20553
 
20526
20554
  declare module "@tiptap/core" {
20527
20555
  interface Commands<ReturnType> {
20528
- transcript: {
20529
- insertTranscript: (data: TranscriptData) => ReturnType;
20556
+ videoEmbed: {
20557
+ setVideoEmbed: (options: {
20558
+ src: string;
20559
+ }) => ReturnType;
20530
20560
  };
20531
20561
  }
20532
20562
  }
@@ -20534,10 +20564,8 @@ declare module "@tiptap/core" {
20534
20564
 
20535
20565
  declare module "@tiptap/core" {
20536
20566
  interface Commands<ReturnType> {
20537
- videoEmbed: {
20538
- setVideoEmbed: (options: {
20539
- src: string;
20540
- }) => ReturnType;
20567
+ transcript: {
20568
+ insertTranscript: (data: TranscriptData) => ReturnType;
20541
20569
  };
20542
20570
  }
20543
20571
  }