@factorialco/f0-react 7.32.1 → 7.34.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/{ChatPdfThumbnail-BwpWiV7T.js → ChatPdfThumbnail-CFEB3FYp.js} +1 -1
- package/dist/{ChatPostComposerDialog-CFyr4Byz.js → ChatPostComposerDialog-DnuStGGi.js} +3 -3
- package/dist/{DocumentToolbar-DKzU4Tzy.js → DocumentToolbar-BT7Ks9jN.js} +2 -2
- package/dist/{DocxViewer-DfxGhQjU.js → DocxViewer-DzCul5m1.js} +2 -2
- package/dist/{F0AiProcessingOverlay-jO1HO2BD.js → F0AiProcessingOverlay-C3q5kdSu.js} +3999 -3813
- package/dist/{F0CanvasPanel-DLF1SCk4.js → F0CanvasPanel-DB32LsaK.js} +12766 -12683
- package/dist/{F0Map-CygKhB5i.js → F0Map-CFivWqOr.js} +4 -4
- package/dist/{F0VideoPlayer-DbTZXcO6.js → F0VideoPlayer-C5TOVGjz.js} +356 -377
- package/dist/{MapProvider-Ch1cPKjS.js → MapProvider-COBzcEBa.js} +214 -189
- package/dist/{SheetViewer-ViMuN1CA.js → SheetViewer-Bvv7GLJ5.js} +2 -2
- package/dist/{TextViewer-BcLRfqsx.js → TextViewer-CTLt0pvu.js} +2 -2
- package/dist/ai.d.ts +417 -5
- package/dist/ai.js +23 -22
- package/dist/component-status.js +1 -1
- package/dist/{experimental-CvuOJdq3.js → experimental-B0saLXEl.js} +11986 -11293
- package/dist/experimental.d.ts +425 -40
- package/dist/experimental.js +277 -275
- package/dist/f0.d.ts +129 -2
- package/dist/f0.js +22 -21
- package/dist/i18n-provider-defaults.d.ts +9 -0
- package/dist/i18n-provider-defaults.js +12 -0
- package/dist/{index-OJh_6X7K.js → index-AqJa6oaL.js} +3 -3
- package/dist/{index-DzDT9DH3.js → index-BdKI708R.js} +2 -2
- package/dist/index-C2VXFg3o.js +4 -0
- package/dist/{index-BBR_mAii.js → index-Dq029AUw.js} +1 -1
- package/dist/{index-HQ5Z51m0.js → index-H07Crbx2.js} +3 -3
- package/dist/{pdfWorker-Dv3lniwl.js → pdfWorker-CJFmh5Jp.js} +2 -2
- package/dist/styles.css +1 -1
- package/icons/app/Floating.d.ts.map +1 -1
- package/icons/app/Floating.js +1 -1
- package/icons/app/Fullscreen.d.ts +4 -0
- package/icons/app/Fullscreen.d.ts.map +1 -0
- package/icons/app/Fullscreen.js +5 -0
- package/icons/app/PanelLeft.d.ts +4 -0
- package/icons/app/PanelLeft.d.ts.map +1 -0
- package/icons/app/PanelLeft.js +5 -0
- package/icons/app/PanelRight.d.ts +4 -0
- package/icons/app/PanelRight.d.ts.map +1 -0
- package/icons/app/PanelRight.js +5 -0
- package/icons/app/index.d.ts +3 -0
- package/icons/app/index.d.ts.map +1 -1
- package/icons/app/index.js +3 -0
- package/package.json +2 -2
- package/dist/index-OmxDZUdx.js +0 -4
package/dist/experimental.d.ts
CHANGED
|
@@ -1682,9 +1682,18 @@ declare interface BreakType {
|
|
|
1682
1682
|
}
|
|
1683
1683
|
|
|
1684
1684
|
/**
|
|
1685
|
-
* Flattens the roster into tiles,
|
|
1685
|
+
* Flattens the roster into tiles: shares, then everyone else, then you.
|
|
1686
|
+
*
|
|
1686
1687
|
* Screen shares come first so they are never pushed off the visible page by a
|
|
1687
|
-
* long roster
|
|
1688
|
+
* long roster — your own included, because when you share, what you are
|
|
1689
|
+
* sharing is the thing the room is looking at.
|
|
1690
|
+
*
|
|
1691
|
+
* YOUR CAMERA GOES LAST, and it is the one place the host's order is not
|
|
1692
|
+
* preserved. Without it a one-to-one traded sides: the spotlight rule puts the
|
|
1693
|
+
* other person on the left, while the plain grid took the roster order, which
|
|
1694
|
+
* puts you first — so pinning and unpinning swapped the two of you over. Two
|
|
1695
|
+
* rules ordering the same room. This is the rule they now share, and it reads
|
|
1696
|
+
* the same way everywhere: the people you are talking to lead, you follow.
|
|
1688
1697
|
*/
|
|
1689
1698
|
export declare const buildTiles: (participants: F0MeetingParticipant[]) => F0MeetingTile[];
|
|
1690
1699
|
|
|
@@ -4377,6 +4386,32 @@ export declare interface CurrentVersion {
|
|
|
4377
4386
|
|
|
4378
4387
|
declare type CustomEmptyStates = Partial<Record<EmptyStateType, Partial<EmptyState>>>;
|
|
4379
4388
|
|
|
4389
|
+
/**
|
|
4390
|
+
* Hover card content of a host-registered entity type. `avatar` is the card's
|
|
4391
|
+
* leading slot, where a person's avatar goes: an icon for most entities
|
|
4392
|
+
* (`{ type: "icon", icon: PalmTree }`).
|
|
4393
|
+
*/
|
|
4394
|
+
declare type CustomEntityRefCard = Pick<F0CardProps, "title" | "description" | "avatar">;
|
|
4395
|
+
|
|
4396
|
+
/**
|
|
4397
|
+
* How a host-defined `<entity-ref type="…">` renders in messages.
|
|
4398
|
+
*
|
|
4399
|
+
* The ref renders exactly like a person mention: an `@label` chip whose
|
|
4400
|
+
* hover card is resolved on first open.
|
|
4401
|
+
*/
|
|
4402
|
+
declare type CustomEntityRefConfig = {
|
|
4403
|
+
/**
|
|
4404
|
+
* Lazily resolves the hover card the first time it opens. While it runs the
|
|
4405
|
+
* card shows a skeleton; when it is omitted or fails, the card shows the
|
|
4406
|
+
* label with `avatar`.
|
|
4407
|
+
*/
|
|
4408
|
+
resolve?: (id: string) => Promise<CustomEntityRefCard>;
|
|
4409
|
+
/** Card avatar used when `resolve` returns none, or is omitted or fails. */
|
|
4410
|
+
avatar?: CustomEntityRefCard["avatar"];
|
|
4411
|
+
/** When set, the card gets a "View" action to this URL. */
|
|
4412
|
+
url?: (id: string) => string;
|
|
4413
|
+
};
|
|
4414
|
+
|
|
4380
4415
|
export declare type CustomVisualizationProps<Source extends {
|
|
4381
4416
|
dataAdapter: DataCollectionDataAdapter<any, any, any>;
|
|
4382
4417
|
}> = {
|
|
@@ -5699,6 +5734,10 @@ declare const defaultTranslations: {
|
|
|
5699
5734
|
readonly thinkingElapsedSeconds: "{{seconds}}s";
|
|
5700
5735
|
readonly thinkingElapsedMinutes: "{{minutes}}m {{seconds}}s";
|
|
5701
5736
|
readonly attribution: "Suggested by One";
|
|
5737
|
+
readonly mentions: {
|
|
5738
|
+
readonly people: "People";
|
|
5739
|
+
readonly suggestions: "Mention suggestions";
|
|
5740
|
+
};
|
|
5702
5741
|
readonly evidence: {
|
|
5703
5742
|
readonly show: "See {{name}}";
|
|
5704
5743
|
readonly hide: "Hide {{name}}";
|
|
@@ -6077,12 +6116,15 @@ declare const defaultTranslations: {
|
|
|
6077
6116
|
readonly muted: "Muted";
|
|
6078
6117
|
readonly waitingToJoin: "Waiting…";
|
|
6079
6118
|
readonly sharingScreen: "Sharing screen";
|
|
6119
|
+
readonly audioRoom: "People in this call";
|
|
6080
6120
|
readonly chatPanel: "Chat";
|
|
6081
6121
|
readonly transcriptPanel: "Transcript";
|
|
6082
6122
|
readonly notesPanel: "Notes";
|
|
6083
6123
|
readonly openChat: "Open chat";
|
|
6084
6124
|
readonly closeChat: "Close chat";
|
|
6085
6125
|
readonly closePanel: "Close panel";
|
|
6126
|
+
readonly resizeChatPanel: "Resize chat panel";
|
|
6127
|
+
readonly chatPanelWidth: "{{width}} pixels";
|
|
6086
6128
|
readonly notesPlaceholder: "Take notes for everyone in the call…";
|
|
6087
6129
|
readonly roomChatPlaceholder: "Message this call…";
|
|
6088
6130
|
readonly roomChatEmpty: "Messages here are only for this call and disappear when it ends.";
|
|
@@ -6145,6 +6187,8 @@ declare const defaultTranslations: {
|
|
|
6145
6187
|
readonly movedToFloating: "Meeting in a floating window";
|
|
6146
6188
|
readonly movedToSidePanel: "Meeting in the side panel";
|
|
6147
6189
|
readonly movedToMinimized: "Meeting minimized";
|
|
6190
|
+
readonly audioOnlyAnnouncement: "Audio only. There is not enough room for video";
|
|
6191
|
+
readonly videoResumed: "Video is back";
|
|
6148
6192
|
readonly movedInline: "Meeting on the page";
|
|
6149
6193
|
readonly movedToPictureInPicture: "Meeting in a picture-in-picture window";
|
|
6150
6194
|
};
|
|
@@ -6823,7 +6867,7 @@ declare const DropdownMenuItem: React_2.ForwardRefExoticComponent<Omit<DropdownM
|
|
|
6823
6867
|
inset?: boolean;
|
|
6824
6868
|
} & React_2.RefAttributes<HTMLDivElement>>;
|
|
6825
6869
|
|
|
6826
|
-
declare type DropdownProps = Omit<DropdownInternalProps, (typeof
|
|
6870
|
+
declare type DropdownProps = Omit<DropdownInternalProps, (typeof privateProps_5)[number]> & {
|
|
6827
6871
|
open?: boolean;
|
|
6828
6872
|
onOpenChange?: (open: boolean) => void;
|
|
6829
6873
|
} & WithDataTestIdProps;
|
|
@@ -7090,6 +7134,14 @@ export declare type EntityId = number | string;
|
|
|
7090
7134
|
declare type EntityRefs = {
|
|
7091
7135
|
resolvers?: EntityResolvers;
|
|
7092
7136
|
urls?: EntityUrlBuilders;
|
|
7137
|
+
/**
|
|
7138
|
+
* Entity types F0 does not know, keyed by the `type` attribute of
|
|
7139
|
+
* `<entity-ref>` (e.g. `allowance`, `timeoff_policy`). Built-in types
|
|
7140
|
+
* (`person`, `candidate`, …) keep their own renderers and are configured
|
|
7141
|
+
* through `resolvers` and `urls`; an entry here for one of them is ignored.
|
|
7142
|
+
* Types that are neither built in nor registered render as plain text.
|
|
7143
|
+
*/
|
|
7144
|
+
custom?: Record<string, CustomEntityRefConfig>;
|
|
7093
7145
|
};
|
|
7094
7146
|
|
|
7095
7147
|
/**
|
|
@@ -7236,6 +7288,18 @@ declare type ExtractVisualizationSettings<T> = T extends {
|
|
|
7236
7288
|
};
|
|
7237
7289
|
} ? S : never;
|
|
7238
7290
|
|
|
7291
|
+
/**
|
|
7292
|
+
* WHERE A HOST HANGS SOMETHING OFF THE CONVERSATION'S NAME — a coachmark
|
|
7293
|
+
* explaining a limit, a tour step, a hint. F0 owns the header's markup, so it
|
|
7294
|
+
* owns the promise that there is a stable thing to point at; a host guessing
|
|
7295
|
+
* at class names would break on the next restyle.
|
|
7296
|
+
*
|
|
7297
|
+
* It resolves ONLY once the title has arrived (the skeleton does not carry it),
|
|
7298
|
+
* which is what makes an overlay anchored to it wait for a header worth
|
|
7299
|
+
* pointing at instead of opening over a pulsing grey bar.
|
|
7300
|
+
*/
|
|
7301
|
+
export declare const F0_CHAT_HEADER_TITLE_SELECTOR = "[data-f0-chat-header-title]";
|
|
7302
|
+
|
|
7239
7303
|
export declare const F0ActionBar: WithDataTestIdReturnType_2<ForwardRefExoticComponent<F0ActionBarProps & RefAttributes<F0ActionBarRef>>>;
|
|
7240
7304
|
|
|
7241
7305
|
declare interface F0ActionBarProps {
|
|
@@ -7830,7 +7894,7 @@ export declare interface F0CardHorizontalProps {
|
|
|
7830
7894
|
descriptionAsSingleLine?: boolean;
|
|
7831
7895
|
}
|
|
7832
7896
|
|
|
7833
|
-
declare type F0CardProps = Omit<CardInternalProps, (typeof
|
|
7897
|
+
declare type F0CardProps = Omit<CardInternalProps, (typeof privateProps_4)[number]>;
|
|
7834
7898
|
|
|
7835
7899
|
/**
|
|
7836
7900
|
* @experimental This is an experimental component use it at your own risk
|
|
@@ -7931,7 +7995,7 @@ export declare interface F0CarouselDialogProps extends Pick<F0DialogInternalProp
|
|
|
7931
7995
|
* the {@link F0ChatRuntime} from a surrounding `F0ChatProvider`. Panel controls
|
|
7932
7996
|
* (fullscreen / close) are wired by the host so F0Chat stays transport-agnostic.
|
|
7933
7997
|
*/
|
|
7934
|
-
export declare const F0Chat: (props: F0ChatProps) => ReactNode;
|
|
7998
|
+
export declare const F0Chat: ({ surface, ...props }: F0ChatProps) => ReactNode;
|
|
7935
7999
|
|
|
7936
8000
|
/** Attachment family, as the transcript classifies it (see
|
|
7937
8001
|
* `utils/attachments.ts`). Note `video` is not an {@link F0ChatAttachment}
|
|
@@ -8431,6 +8495,97 @@ export declare type F0ChatHeaderAction = {
|
|
|
8431
8495
|
placement?: "menu" | "inline";
|
|
8432
8496
|
/** Restrict the action to given channel types. Omit for all of them. */
|
|
8433
8497
|
channelTypes?: F0ChatChannelType[];
|
|
8498
|
+
/**
|
|
8499
|
+
* TURNS AN INLINE ACTION INTO A TOGGLE, because that is what it has become:
|
|
8500
|
+
* something with an on and an off. Starting a huddle is a button until the
|
|
8501
|
+
* call exists — from then on the same control means "you are in it", and a
|
|
8502
|
+
* reader coming back to the conversation has to be able to see that without
|
|
8503
|
+
* pressing anything.
|
|
8504
|
+
*
|
|
8505
|
+
* Set it and F0 renders a real toggle with its `aria-pressed`, bordered so
|
|
8506
|
+
* the on state reads as a state rather than as a hover that stuck. Leave it
|
|
8507
|
+
* undefined for an action that only ever fires, which is most of them —
|
|
8508
|
+
* `false` is not the same thing as absent here.
|
|
8509
|
+
*
|
|
8510
|
+
* Ignored in the overflow menu: a menu item is a line of text you press, and
|
|
8511
|
+
* it has nowhere to wear a state.
|
|
8512
|
+
*/
|
|
8513
|
+
active?: boolean;
|
|
8514
|
+
/** The glyph for the `active` half, when it differs. Omit to keep `icon` in
|
|
8515
|
+
* both states. */
|
|
8516
|
+
activeIcon?: IconType;
|
|
8517
|
+
/**
|
|
8518
|
+
* Marks the action as destructive, so it reads as one in the overflow menu.
|
|
8519
|
+
* Leaving a channel or archiving a conversation is not the same kind of thing
|
|
8520
|
+
* as muting it, and a menu that renders them identically says it is.
|
|
8521
|
+
* Ignored for `inline` actions — the row of icon buttons has no such state.
|
|
8522
|
+
*/
|
|
8523
|
+
critical?: boolean;
|
|
8524
|
+
};
|
|
8525
|
+
|
|
8526
|
+
/**
|
|
8527
|
+
* THE HOST'S STATEMENT THAT HISTORY IS BEING WITHHELD. The loaded window has
|
|
8528
|
+
* reached a boundary behind which there IS older history the reader is not
|
|
8529
|
+
* allowed to see — a plan that only includes the last N days, a retention
|
|
8530
|
+
* policy, a legal hold.
|
|
8531
|
+
*
|
|
8532
|
+
* F0 neither computes nor enforces it: the host filters `messages` itself and
|
|
8533
|
+
* sets this together with `hasMoreOlder: false`. It cannot be derived here —
|
|
8534
|
+
* after the host has filtered, "the conversation started 10 days ago" and
|
|
8535
|
+
* "there are three years behind this" look identical from inside the panel.
|
|
8536
|
+
*
|
|
8537
|
+
* ABSENT ⇒ the oldest loaded message is the true beginning, or simply not
|
|
8538
|
+
* loaded yet. A conversation that genuinely started last week must never carry
|
|
8539
|
+
* one: the notice would claim something was taken away when nothing was.
|
|
8540
|
+
*
|
|
8541
|
+
* It is drawn as an `F0Card` whose only control is an upsell button, and the
|
|
8542
|
+
* host owns every part of it. The copy for the same reason
|
|
8543
|
+
* {@link F0ChatChannel.readOnlyNotice} is host-owned: only the host knows which
|
|
8544
|
+
* plan this is, and it is the one with the translations. And the button as the
|
|
8545
|
+
* WHOLE {@link UpsellingButtonProps} surface rather than a bare `onClick`,
|
|
8546
|
+
* because asking for a plan to change is a REQUEST with an outcome — the
|
|
8547
|
+
* loading label, the success and error copy and the next steps its confirmation
|
|
8548
|
+
* dialog shows are all part of what a host configures. An action that merely
|
|
8549
|
+
* navigates sets `showConfirmation: false`.
|
|
8550
|
+
*/
|
|
8551
|
+
export declare type F0ChatHistoryLimit = {
|
|
8552
|
+
/** Headline. Says what is missing, not what to buy. */
|
|
8553
|
+
title: string;
|
|
8554
|
+
/** One sentence of context — which window is included, what lies behind it. */
|
|
8555
|
+
description?: string;
|
|
8556
|
+
/** Mark shown beside the copy. */
|
|
8557
|
+
icon?: IconType;
|
|
8558
|
+
/** The upsell request, whole — see above. */
|
|
8559
|
+
action: UpsellingButtonProps;
|
|
8560
|
+
};
|
|
8561
|
+
|
|
8562
|
+
/**
|
|
8563
|
+
* WHAT A CONVERSATION WITH A WITHHELD PAST SAYS FOR ITSELF — the card F0 puts
|
|
8564
|
+
* at the top of such a transcript, exported because the host needs THE SAME ONE
|
|
8565
|
+
* for the pop-up it floats over the conversation on arrival.
|
|
8566
|
+
*
|
|
8567
|
+
* Exported rather than left to each host to rebuild: two cards that must look
|
|
8568
|
+
* identical and are written twice are two cards that drift. They differ in one
|
|
8569
|
+
* thing only, and it is the one thing they should differ in — the floating copy
|
|
8570
|
+
* can be dismissed, the one at the top of history cannot. A close button there
|
|
8571
|
+
* would take the explanation away from a boundary the reader reaches again on
|
|
8572
|
+
* the next scroll, and F0 has nowhere to remember that it was closed.
|
|
8573
|
+
*
|
|
8574
|
+
* Its only standing control is an `UpsellingButton`: the request it sends and
|
|
8575
|
+
* everything its confirmation dialog says belong to the host — see
|
|
8576
|
+
* {@link F0ChatHistoryLimit}.
|
|
8577
|
+
*/
|
|
8578
|
+
export declare const F0ChatHistoryLimitCard: ({ notice, dismissActions, }: {
|
|
8579
|
+
notice: F0ChatHistoryLimit;
|
|
8580
|
+
/** Rendered after the upsell, in the order given. Omit where there is no way
|
|
8581
|
+
* out — see above. */
|
|
8582
|
+
dismissActions?: F0ChatHistoryLimitDismissAction[];
|
|
8583
|
+
}) => ReactNode;
|
|
8584
|
+
|
|
8585
|
+
/** A way out of the card, for hosts that render it somewhere dismissable. */
|
|
8586
|
+
export declare type F0ChatHistoryLimitDismissAction = {
|
|
8587
|
+
label: string;
|
|
8588
|
+
onClick: () => void;
|
|
8434
8589
|
};
|
|
8435
8590
|
|
|
8436
8591
|
export declare type F0ChatImageAttachment = {
|
|
@@ -8814,11 +8969,22 @@ export declare type F0ChatPostRequiredAction = {
|
|
|
8814
8969
|
};
|
|
8815
8970
|
|
|
8816
8971
|
export declare type F0ChatProps = {
|
|
8817
|
-
/**
|
|
8972
|
+
/**
|
|
8973
|
+
* Where the chat is mounted — see {@link F0ChatSurface}. On `"page"` the
|
|
8974
|
+
* panel controls below are ignored, not merely unused: a conversation that is
|
|
8975
|
+
* the page has nothing to close and nowhere to expand to, and leaving that to
|
|
8976
|
+
* the convention of "don't pass the callback" is how it comes back.
|
|
8977
|
+
* @default "panel"
|
|
8978
|
+
*/
|
|
8979
|
+
surface?: F0ChatSurface;
|
|
8980
|
+
/** Whether the hosting panel is in fullscreen (controls the header toggle
|
|
8981
|
+
* icon). Ignored on the `page` surface. */
|
|
8818
8982
|
isFullscreen?: boolean;
|
|
8819
|
-
/** Toggle the hosting panel's fullscreen. Hidden when omitted
|
|
8983
|
+
/** Toggle the hosting panel's fullscreen. Hidden when omitted, and always on
|
|
8984
|
+
* the `page` surface. */
|
|
8820
8985
|
onToggleFullscreen?: () => void;
|
|
8821
|
-
/** Close the hosting panel. Hidden when omitted
|
|
8986
|
+
/** Close the hosting panel. Hidden when omitted, and always on the `page`
|
|
8987
|
+
* surface. */
|
|
8822
8988
|
onClose?: () => void;
|
|
8823
8989
|
/**
|
|
8824
8990
|
* Host-provided header actions (pin, mute, edit group…). Search is the only
|
|
@@ -8836,6 +9002,43 @@ export declare type F0ChatProps = {
|
|
|
8836
9002
|
* Undefined keeps the default header, so no existing usage changes.
|
|
8837
9003
|
*/
|
|
8838
9004
|
header?: ReactNode | null;
|
|
9005
|
+
/**
|
|
9006
|
+
* Host chrome pinned to the END of the built-in header's action row, after
|
|
9007
|
+
* the overflow menu and any inline actions.
|
|
9008
|
+
*
|
|
9009
|
+
* Not an `F0ChatHeaderAction`: those are things you do TO the conversation,
|
|
9010
|
+
* and they are labels and icons F0 lays out. This is a rendered control that
|
|
9011
|
+
* belongs to the app around the chat — the One switch on a full-page
|
|
9012
|
+
* conversation, where there is no page header left to carry it.
|
|
9013
|
+
*
|
|
9014
|
+
* Ignored when `header` replaces the built-in one; that host already owns
|
|
9015
|
+
* the whole row.
|
|
9016
|
+
*/
|
|
9017
|
+
headerContent?: ReactNode;
|
|
9018
|
+
/**
|
|
9019
|
+
* THE HOST'S POP-UP OVER THE TOP OF THE CONVERSATION — full width, floating.
|
|
9020
|
+
*
|
|
9021
|
+
* Where a host says something ABOUT the conversation rather than in it:
|
|
9022
|
+
* "older messages aren't included in your plan", "this channel is archived on
|
|
9023
|
+
* Friday". It sits under the header and over the transcript, the width of the
|
|
9024
|
+
* panel, and it is the shape a warning like that wants: a popover anchored to
|
|
9025
|
+
* something in the header would be a fixed-width panel with an arrow pointing
|
|
9026
|
+
* at a title that has nothing to do with what it says.
|
|
9027
|
+
*
|
|
9028
|
+
* IT FLOATS, and that is the point. Taking layout space would push the whole
|
|
9029
|
+
* transcript down on arrival and pull it back up on dismissal — the reader's
|
|
9030
|
+
* place in the conversation moving twice for a message they are about to
|
|
9031
|
+
* close. Floating also means the virtualizer never measures around it, and
|
|
9032
|
+
* the sticky date pill steps below it on its own
|
|
9033
|
+
* (`CHAT_NOTICE_HEIGHT_PROPERTY`).
|
|
9034
|
+
*
|
|
9035
|
+
* It survives scrolling: this is a standing fact about the conversation, not
|
|
9036
|
+
* something tied to where the reader is in it. Dismissing is the host's — F0
|
|
9037
|
+
* renders what it is handed and remembers nothing, because when it shows and
|
|
9038
|
+
* whether a dismissal outlives the session both depend on things F0 cannot
|
|
9039
|
+
* see.
|
|
9040
|
+
*/
|
|
9041
|
+
notice?: ReactNode;
|
|
8839
9042
|
};
|
|
8840
9043
|
|
|
8841
9044
|
/**
|
|
@@ -8881,6 +9084,17 @@ export declare type F0ChatRuntime = {
|
|
|
8881
9084
|
typingUsers: F0ChatUser[];
|
|
8882
9085
|
hasMoreOlder: boolean;
|
|
8883
9086
|
loadingOlder: boolean;
|
|
9087
|
+
/**
|
|
9088
|
+
* Set ONLY once the window has reached a boundary the plan (or a retention
|
|
9089
|
+
* rule) puts on history — see {@link F0ChatHistoryLimit}. F0 renders it at
|
|
9090
|
+
* the very top of the transcript, and only in the settled state
|
|
9091
|
+
* (`!hasMoreOlder && !loadingOlder`), so it can never appear above rows that
|
|
9092
|
+
* are still being paginated in.
|
|
9093
|
+
*
|
|
9094
|
+
* It is the host's job to also report `hasMoreOlder: false` here: left true,
|
|
9095
|
+
* the transcript would keep asking for pages it is never going to get.
|
|
9096
|
+
*/
|
|
9097
|
+
historyLimit?: F0ChatHistoryLimit;
|
|
8884
9098
|
/**
|
|
8885
9099
|
* Whether there are newer messages than the loaded window — true after jumping
|
|
8886
9100
|
* to an old message (e.g. a search hit), so the transcript isn't anchored to
|
|
@@ -9220,6 +9434,20 @@ export declare type F0ChatShelfAction = {
|
|
|
9220
9434
|
*/
|
|
9221
9435
|
export declare type F0ChatStatus = "connecting" | "ready" | "reconnecting" | "offline" | "error";
|
|
9222
9436
|
|
|
9437
|
+
/**
|
|
9438
|
+
* Where the chat lives, which is the one thing it cannot work out for itself.
|
|
9439
|
+
*
|
|
9440
|
+
* `"panel"` (default) is a card inside the side panel: it can be closed and
|
|
9441
|
+
* expanded, and the panel draws the border around it.
|
|
9442
|
+
*
|
|
9443
|
+
* `"page"` is the main content of a route — the conversation IS the page, so
|
|
9444
|
+
* there is nothing to close and nowhere to expand to. `onClose`,
|
|
9445
|
+
* `onToggleFullscreen` and `isFullscreen` are ignored rather than merely
|
|
9446
|
+
* unused, the side panel is never consulted, and the header draws its own seam
|
|
9447
|
+
* against the transcript in place of the card border it no longer has.
|
|
9448
|
+
*/
|
|
9449
|
+
export declare type F0ChatSurface = "panel" | "page";
|
|
9450
|
+
|
|
9223
9451
|
/**
|
|
9224
9452
|
* Membership / lifecycle events rendered as a centered system row. Closed
|
|
9225
9453
|
* union — the host maps unknown transport event kinds to a body-only system
|
|
@@ -10888,8 +11116,10 @@ export declare type F0MeetingRuntime = {
|
|
|
10888
11116
|
localParticipantId: string;
|
|
10889
11117
|
/**
|
|
10890
11118
|
* Everyone in the room INCLUDING the local participant, in a stable order the
|
|
10891
|
-
* host controls (join order). F0 owns speaker promotion
|
|
10892
|
-
*
|
|
11119
|
+
* host controls (join order). F0 owns speaker promotion, pagination and the
|
|
11120
|
+
* local participant's own position on top of this — your camera is always the
|
|
11121
|
+
* last tile, whatever index you are at here. A host that reorders on every
|
|
11122
|
+
* speaker change makes the grid churn.
|
|
10893
11123
|
*/
|
|
10894
11124
|
participants: F0MeetingParticipant[];
|
|
10895
11125
|
localMedia: F0MeetingLocalMedia;
|
|
@@ -10954,6 +11184,16 @@ export declare type F0MeetingSidePanelTab = {
|
|
|
10954
11184
|
export declare type F0MeetingSignal = {
|
|
10955
11185
|
/** 0..1, smoothed by the host. LiveKit `Participant.audioLevel`. */
|
|
10956
11186
|
audioLevel: number;
|
|
11187
|
+
/**
|
|
11188
|
+
* Energy per frequency band, 0..1 each, low to high — LiveKit's
|
|
11189
|
+
* `useMultibandTrackVolume`, or an `AnalyserNode` the host already has.
|
|
11190
|
+
*
|
|
11191
|
+
* Optional, and the waveform is honest about it: with a single `audioLevel`
|
|
11192
|
+
* five bars can only be one number drawn five times, so they rise and fall
|
|
11193
|
+
* together. Give it bands and each bar moves on its own, because each one is
|
|
11194
|
+
* actually a different measurement.
|
|
11195
|
+
*/
|
|
11196
|
+
bands?: readonly number[];
|
|
10957
11197
|
isSpeaking: boolean;
|
|
10958
11198
|
quality: F0MeetingConnectionQuality;
|
|
10959
11199
|
};
|
|
@@ -14414,7 +14654,7 @@ declare type MeetingRoomChatProps = {
|
|
|
14414
14654
|
};
|
|
14415
14655
|
|
|
14416
14656
|
/**
|
|
14417
|
-
* The in-call panel: chat, transcript and notes beside the grid.
|
|
14657
|
+
* The in-call panel: chat, transcript and notes, beside the grid in fullscreen.
|
|
14418
14658
|
*
|
|
14419
14659
|
* F0 owns the bar, the selection and the close button because the control that
|
|
14420
14660
|
* opens the panel lives in F0's own action bar and needs the tab labels and
|
|
@@ -14424,15 +14664,23 @@ declare type MeetingRoomChatProps = {
|
|
|
14424
14664
|
* particular: its transcript is virtualized, and measuring rows inside a
|
|
14425
14665
|
* display:none subtree yields zero heights that the list then has to correct
|
|
14426
14666
|
* on reveal.
|
|
14667
|
+
*
|
|
14668
|
+
* The width comes from `plan`, never from a class. It used to be a literal
|
|
14669
|
+
* `w-[420px]` paired with a `SIDE_PANEL_WIDTH` nothing read — Tailwind cannot
|
|
14670
|
+
* take a number, the two had to agree, and nothing checked that they did.
|
|
14427
14671
|
*/
|
|
14428
|
-
export declare const MeetingSidePanel: ({ panel }: MeetingSidePanelProps) => JSX_2.Element | null;
|
|
14672
|
+
export declare const MeetingSidePanel: ({ panel, plan }: MeetingSidePanelProps) => JSX_2.Element | null;
|
|
14429
14673
|
|
|
14430
14674
|
declare type MeetingSidePanelProps = {
|
|
14431
14675
|
panel: F0MeetingSidePanel;
|
|
14676
|
+
/** Where it sits and how wide, decided by `planSidePanel` from the room. */
|
|
14677
|
+
plan: SidePanelPlan;
|
|
14432
14678
|
};
|
|
14433
14679
|
|
|
14434
14680
|
export declare type MeetingSignalStore = F0MeetingSignalStore & {
|
|
14435
14681
|
setAudioLevel: (participantId: string, level: number) => void;
|
|
14682
|
+
/** Per-band energy for the waveform. See `F0MeetingSignal.bands`. */
|
|
14683
|
+
setAudioBands: (participantId: string, bands: readonly number[]) => void;
|
|
14436
14684
|
setSpeaking: (participantIds: readonly string[]) => void;
|
|
14437
14685
|
setQuality: (participantId: string, quality: F0MeetingConnectionQuality) => void;
|
|
14438
14686
|
remove: (participantId: string) => void;
|
|
@@ -14454,9 +14702,11 @@ declare type MeetingSurfaceContextValue = {
|
|
|
14454
14702
|
/** What the user chose. Never mutated by the environment. */
|
|
14455
14703
|
mode: F0MeetingSurfaceDestination;
|
|
14456
14704
|
/**
|
|
14457
|
-
* What actually renders.
|
|
14458
|
-
*
|
|
14459
|
-
*
|
|
14705
|
+
* What actually renders. It differs from `mode` for exactly two reasons, and
|
|
14706
|
+
* neither is the size of the screen: a place that is not there (an inline
|
|
14707
|
+
* slot nobody registered, a panel no frame provides) derives to `floating`,
|
|
14708
|
+
* and an open picture-in-picture window is `pip` for as long as it is open.
|
|
14709
|
+
* The user's pick is never overwritten, only stood aside from.
|
|
14460
14710
|
*/
|
|
14461
14711
|
effectiveMode: F0MeetingSurfaceMode;
|
|
14462
14712
|
setMode: (mode: F0MeetingSurfaceDestination) => void;
|
|
@@ -14468,15 +14718,6 @@ declare type MeetingSurfaceContextValue = {
|
|
|
14468
14718
|
settleRect: (rect: F0Rect) => void;
|
|
14469
14719
|
/** Commit a resize, keeping the current anchor. */
|
|
14470
14720
|
resizeRect: (rect: F0Rect) => void;
|
|
14471
|
-
/** True below the md breakpoint: no dragging, pill instead of window. */
|
|
14472
|
-
isCompactViewport: boolean;
|
|
14473
|
-
/**
|
|
14474
|
-
* The frame's content area. `panel` mode does NOT use it — there the room is
|
|
14475
|
-
* the side panel's content and the panel places itself. It is what a window
|
|
14476
|
-
* sizes itself against when it has to sit BESIDE the panel (see
|
|
14477
|
-
* `fitToContent`), and the viewport when no frame published one.
|
|
14478
|
-
*/
|
|
14479
|
-
panelArea: F0Rect;
|
|
14480
14721
|
/**
|
|
14481
14722
|
* Whether there is a side panel for the call to be the content of.
|
|
14482
14723
|
*
|
|
@@ -14486,15 +14727,16 @@ declare type MeetingSurfaceContextValue = {
|
|
|
14486
14727
|
* `floating` and the switch stops offering it.
|
|
14487
14728
|
*/
|
|
14488
14729
|
hasPanelSlot: boolean;
|
|
14489
|
-
setPanelSlot: (available: boolean) => void;
|
|
14490
|
-
/** Registered by `F0MeetingSlot` so `inline` knows where to fly to. */
|
|
14491
|
-
setInlineRect: (rect: F0Rect | null) => void;
|
|
14492
14730
|
/**
|
|
14493
|
-
*
|
|
14494
|
-
*
|
|
14495
|
-
* rather than
|
|
14731
|
+
* WHICH EDGE the slot is on, or `null` when there is none. The mode switch
|
|
14732
|
+
* draws the panel with the side it actually docks to, so the control shows
|
|
14733
|
+
* where the call is going rather than a generic panel that could be either.
|
|
14496
14734
|
*/
|
|
14497
|
-
|
|
14735
|
+
panelSide: "left" | "right" | null;
|
|
14736
|
+
/** `null` retires the slot; a side registers one. */
|
|
14737
|
+
setPanelSlot: (side: "left" | "right" | null) => void;
|
|
14738
|
+
/** Registered by `F0MeetingSlot` so `inline` knows where to fly to. */
|
|
14739
|
+
setInlineRect: (rect: F0Rect | null) => void;
|
|
14498
14740
|
/** What the user asked the spotlight to do, if anything. */
|
|
14499
14741
|
focusIntent: F0MeetingFocusIntent;
|
|
14500
14742
|
setFocusIntent: (intent: F0MeetingFocusIntent) => void;
|
|
@@ -14503,6 +14745,18 @@ declare type MeetingSurfaceContextValue = {
|
|
|
14503
14745
|
setSidePanelOpen: (open: boolean) => void;
|
|
14504
14746
|
activeTabId: string | null;
|
|
14505
14747
|
setActiveTabId: (id: string) => void;
|
|
14748
|
+
/**
|
|
14749
|
+
* The width the panel was last dragged to — a PREFERENCE, not the width it
|
|
14750
|
+
* draws at. `planSidePanel` clamps it against the room on every render and
|
|
14751
|
+
* the clamp is never written back, so shrinking the window does not destroy
|
|
14752
|
+
* a deliberate choice: widen it again and the panel returns to where it was.
|
|
14753
|
+
*
|
|
14754
|
+
* Not keyed by `roomId`, unlike the mode: how wide you like your chat is a
|
|
14755
|
+
* fact about you, not about this call.
|
|
14756
|
+
*/
|
|
14757
|
+
sidePanelWidth: number;
|
|
14758
|
+
setSidePanelWidth: (width: number) => void;
|
|
14759
|
+
resetSidePanelWidth: () => void;
|
|
14506
14760
|
announce: (message: string) => void;
|
|
14507
14761
|
liveMessage: string;
|
|
14508
14762
|
/** What the browser offers for picture-in-picture, after the host's opt-out. */
|
|
@@ -15397,7 +15651,7 @@ export declare interface OneCalendarInternalProps {
|
|
|
15397
15651
|
periods?: DatePeriodsDefinition;
|
|
15398
15652
|
}
|
|
15399
15653
|
|
|
15400
|
-
export declare type OneCalendarProps = Omit<OneCalendarInternalProps, (typeof
|
|
15654
|
+
export declare type OneCalendarProps = Omit<OneCalendarInternalProps, (typeof privateProps_6)[number]>;
|
|
15401
15655
|
|
|
15402
15656
|
export declare const OneDataCollection: OneDataCollectionGeneric;
|
|
15403
15657
|
|
|
@@ -16199,13 +16453,13 @@ declare const privateProps_2: readonly ["withBorder"];
|
|
|
16199
16453
|
|
|
16200
16454
|
declare const privateProps_3: readonly ["buttonToggle", "variant", "editing", "onBlurWithin", "onPressEnter", "onPressEscape", "onDismiss"];
|
|
16201
16455
|
|
|
16202
|
-
declare const privateProps_4: readonly [];
|
|
16456
|
+
declare const privateProps_4: readonly ["forceVerticalMetadata", "disableOverlayLink"];
|
|
16203
16457
|
|
|
16204
|
-
declare const privateProps_5: readonly [
|
|
16458
|
+
declare const privateProps_5: readonly [];
|
|
16205
16459
|
|
|
16206
|
-
declare const privateProps_6: readonly ["
|
|
16460
|
+
declare const privateProps_6: readonly ["compact"];
|
|
16207
16461
|
|
|
16208
|
-
declare const privateProps_7: readonly ["
|
|
16462
|
+
declare const privateProps_7: readonly ["delay", "onOpen"];
|
|
16209
16463
|
|
|
16210
16464
|
declare type ProductUpdate = {
|
|
16211
16465
|
title: string;
|
|
@@ -16981,6 +17235,24 @@ export declare type SidebarChat = {
|
|
|
16981
17235
|
* chat resolves, flip this to false and pass the real `label`/`avatar`.
|
|
16982
17236
|
*/
|
|
16983
17237
|
loading?: boolean;
|
|
17238
|
+
/**
|
|
17239
|
+
* Where the conversation lives. With it the row is a real link, rendered
|
|
17240
|
+
* through the host's router (`LinkProvider`), so cmd/middle-click, "open in
|
|
17241
|
+
* new tab" and Back all work, and the active row is resolved from the URL
|
|
17242
|
+
* rather than from `activeChatId`. Without it the row stays a button and
|
|
17243
|
+
* `onClick` is the only way in.
|
|
17244
|
+
*
|
|
17245
|
+
* The host must mount `LinkProvider` with a live `currentPath` for the
|
|
17246
|
+
* selection to follow the URL; if it does not, the row falls back to
|
|
17247
|
+
* `activeChatId` rather than going dead.
|
|
17248
|
+
*/
|
|
17249
|
+
href?: string;
|
|
17250
|
+
/**
|
|
17251
|
+
* Match `href` exactly when resolving the active state. Leave it off for a
|
|
17252
|
+
* conversation with sub-routes (a thread, say) so the parent row stays lit.
|
|
17253
|
+
* @default false
|
|
17254
|
+
*/
|
|
17255
|
+
exactMatch?: boolean;
|
|
16984
17256
|
onClick?: () => void;
|
|
16985
17257
|
/** When > 0, the chat is rendered as unread (darker, bolder name). */
|
|
16986
17258
|
unreadCount?: number;
|
|
@@ -17161,6 +17433,18 @@ export declare type SidebarChatProviderProps = {
|
|
|
17161
17433
|
export declare type SidebarChatStatus = {
|
|
17162
17434
|
icon: IconType;
|
|
17163
17435
|
label: string;
|
|
17436
|
+
/**
|
|
17437
|
+
* THE STATUS IS LIVE, so the whole row wears it: the glyph takes the selected
|
|
17438
|
+
* colour and the row takes the selected background — the same one the control
|
|
17439
|
+
* that started it wears in the conversation's own header. A call in progress
|
|
17440
|
+
* is the case this exists for, and it has to be findable from the list
|
|
17441
|
+
* without opening anything.
|
|
17442
|
+
*
|
|
17443
|
+
* At most one status per row should carry it. An accent that several things
|
|
17444
|
+
* share stops pointing at any of them, which is the whole job here: the row
|
|
17445
|
+
* is coloured because ONE thing about it is happening right now.
|
|
17446
|
+
*/
|
|
17447
|
+
accent?: boolean;
|
|
17164
17448
|
};
|
|
17165
17449
|
|
|
17166
17450
|
/**
|
|
@@ -17171,9 +17455,13 @@ export declare type SidebarChatStatus = {
|
|
|
17171
17455
|
export declare type SidebarChatStore = {
|
|
17172
17456
|
groups: SidebarChatGroup[];
|
|
17173
17457
|
/**
|
|
17174
|
-
* Id of the currently active chat
|
|
17175
|
-
*
|
|
17176
|
-
*
|
|
17458
|
+
* Id of the currently active chat, for rows with no `href`: you can be on any
|
|
17459
|
+
* page (e.g. the dashboard) with such a chat active, so its active state is
|
|
17460
|
+
* driven from here rather than from the router.
|
|
17461
|
+
*
|
|
17462
|
+
* A ROUTED row (one carrying `href`) takes its active state from the URL
|
|
17463
|
+
* instead. This stays the source for unrouted rows, and the fallback for
|
|
17464
|
+
* routed ones when no `LinkProvider` is mounted.
|
|
17177
17465
|
*/
|
|
17178
17466
|
activeChatId?: string;
|
|
17179
17467
|
/** Number of conversations with unread messages (across all groups). */
|
|
@@ -17348,6 +17636,18 @@ export declare type SidebarTab = {
|
|
|
17348
17636
|
* tab (transparent background; the icon darkens on hover).
|
|
17349
17637
|
*/
|
|
17350
17638
|
variant?: "default" | "ai";
|
|
17639
|
+
/**
|
|
17640
|
+
* Where this tab lives. With it the tab is a real link: cmd-click opens the
|
|
17641
|
+
* section in a new tab, and switching sections is a navigation rather than a
|
|
17642
|
+
* state change the host has to translate into one. The selection stays
|
|
17643
|
+
* controlled — `activeTab` is still the host's, derived from its own route.
|
|
17644
|
+
*
|
|
17645
|
+
* Declaring `href` on ANY tab also turns off the mount-time restore of
|
|
17646
|
+
* `persistKey` — see {@link usePersistedTab}.
|
|
17647
|
+
*/
|
|
17648
|
+
href?: string;
|
|
17649
|
+
/** Match `href` exactly when resolving the active state. @default false */
|
|
17650
|
+
exactMatch?: boolean;
|
|
17351
17651
|
};
|
|
17352
17652
|
|
|
17353
17653
|
/**
|
|
@@ -17553,6 +17853,29 @@ declare type SidePanelContextValue = {
|
|
|
17553
17853
|
*/
|
|
17554
17854
|
export declare type SidePanelLayout = "sidepanel" | "fullscreen";
|
|
17555
17855
|
|
|
17856
|
+
/**
|
|
17857
|
+
* Where the in-call panel sits, which is a question about the ROOM'S width and
|
|
17858
|
+
* never about the viewport's — the same rule the grid, the density table and
|
|
17859
|
+
* the control bar already follow.
|
|
17860
|
+
*
|
|
17861
|
+
* - `beside` the panel is a column in the row and the grid shrinks for it.
|
|
17862
|
+
* - `over` the panel floats on the grid's right edge; the grid keeps its
|
|
17863
|
+
* full width and never re-solves.
|
|
17864
|
+
* - `full` the panel takes the whole video area. The control bar is outside
|
|
17865
|
+
* the row, so leaving and muting are still there.
|
|
17866
|
+
*/
|
|
17867
|
+
declare type SidePanelLayout_2 = "beside" | "over" | "full";
|
|
17868
|
+
|
|
17869
|
+
declare type SidePanelPlan = {
|
|
17870
|
+
layout: SidePanelLayout_2;
|
|
17871
|
+
/** The width to draw, already clamped. `full` reports the room's own. */
|
|
17872
|
+
width: number;
|
|
17873
|
+
min: number;
|
|
17874
|
+
max: number;
|
|
17875
|
+
/** A handle that cannot travel is worse than no handle. */
|
|
17876
|
+
canResize: boolean;
|
|
17877
|
+
};
|
|
17878
|
+
|
|
17556
17879
|
/**
|
|
17557
17880
|
* A product's claim on the panel.
|
|
17558
17881
|
*
|
|
@@ -17574,6 +17897,20 @@ export declare type SidePanelViewDefinition = {
|
|
|
17574
17897
|
available?: boolean;
|
|
17575
17898
|
/** Edge this view docks to. Falls back to the panel's `side`. */
|
|
17576
17899
|
side?: "left" | "right";
|
|
17900
|
+
/**
|
|
17901
|
+
* Can this view re-mount content persisted from a previous session? Only a
|
|
17902
|
+
* view whose host actually answers `restoringViewId` — by calling `present`
|
|
17903
|
+
* or `cancelRestore` — should say true.
|
|
17904
|
+
*
|
|
17905
|
+
* Default `false`, and deliberately so. With no restorer the panel holds a
|
|
17906
|
+
* skeleton for the full safety timeout on every reload, including — after a
|
|
17907
|
+
* product moves its content OUT of the panel — for an id nothing will ever
|
|
17908
|
+
* claim again. The safe default is that the panel does not hold itself
|
|
17909
|
+
* hostage for a host that never opted in; the host who wants the restore is
|
|
17910
|
+
* also the host in a position to notice this field.
|
|
17911
|
+
* @default false
|
|
17912
|
+
*/
|
|
17913
|
+
restoresContent?: boolean;
|
|
17577
17914
|
};
|
|
17578
17915
|
|
|
17579
17916
|
/**
|
|
@@ -18629,7 +18966,7 @@ declare type TooltipListItem = string | {
|
|
|
18629
18966
|
description?: string;
|
|
18630
18967
|
};
|
|
18631
18968
|
|
|
18632
|
-
export declare type TooltipProps = Omit<TooltipInternalProps, (typeof
|
|
18969
|
+
export declare type TooltipProps = Omit<TooltipInternalProps, (typeof privateProps_7)[number]>;
|
|
18633
18970
|
|
|
18634
18971
|
export declare interface TopLevelAppendNotesTextEditorPageDocumentPatch {
|
|
18635
18972
|
type: "top_level_append";
|
|
@@ -18719,6 +19056,54 @@ export declare type UpsellActionDefinition = {
|
|
|
18719
19056
|
/** Returns the upsell action, or undefined to hide it. */
|
|
18720
19057
|
export declare type UpsellActionDefinitionFn = () => UpsellActionDefinition | undefined;
|
|
18721
19058
|
|
|
19059
|
+
declare interface UpsellingButtonProps extends Omit<F0ButtonProps, "icon"> {
|
|
19060
|
+
variant?: "promote" | "outlinePromote";
|
|
19061
|
+
/**
|
|
19062
|
+
* The text to be displayed in the button
|
|
19063
|
+
*/
|
|
19064
|
+
label: string;
|
|
19065
|
+
/**
|
|
19066
|
+
* Whether to show the Upsell icon. Defaults to true.
|
|
19067
|
+
*/
|
|
19068
|
+
showIcon?: boolean;
|
|
19069
|
+
/**
|
|
19070
|
+
* Function to be executed when the button is clicked
|
|
19071
|
+
*/
|
|
19072
|
+
onRequest?: () => Promise<void> | void;
|
|
19073
|
+
/**
|
|
19074
|
+
* Whether to show the confirmation dialog after the request
|
|
19075
|
+
*/
|
|
19076
|
+
showConfirmation?: boolean;
|
|
19077
|
+
/**
|
|
19078
|
+
* The error message to be displayed in the confirmation dialog
|
|
19079
|
+
*/
|
|
19080
|
+
errorMessage: ErrorMessageProps;
|
|
19081
|
+
/**
|
|
19082
|
+
* The success message to be displayed in the confirmation dialog
|
|
19083
|
+
*/
|
|
19084
|
+
successMessage: SuccessMessageProps;
|
|
19085
|
+
/**
|
|
19086
|
+
* The label to be displayed in the button when the request is being processed
|
|
19087
|
+
*/
|
|
19088
|
+
loadingState: LoadingStateProps;
|
|
19089
|
+
/**
|
|
19090
|
+
* The next steps to be displayed in the confirmation dialog
|
|
19091
|
+
*/
|
|
19092
|
+
nextSteps: NextStepsProps;
|
|
19093
|
+
/**
|
|
19094
|
+
* The label to be displayed in the close button of the confirmation dialog
|
|
19095
|
+
*/
|
|
19096
|
+
closeLabel: string;
|
|
19097
|
+
/**
|
|
19098
|
+
* Callback to notify when the modal state changes (open/closed)
|
|
19099
|
+
*/
|
|
19100
|
+
onModalStateChange?: (isOpen: boolean) => void;
|
|
19101
|
+
/**
|
|
19102
|
+
* Portal container for the confirmation dialog
|
|
19103
|
+
*/
|
|
19104
|
+
portalContainer?: HTMLElement | null;
|
|
19105
|
+
}
|
|
19106
|
+
|
|
18722
19107
|
export declare function useAiPromotionChat(): AiPromotionChatProviderReturnValue;
|
|
18723
19108
|
|
|
18724
19109
|
/**
|