@factorialco/f0-react 7.26.0 → 7.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/{ChatPdfThumbnail-ClM__09d.js → ChatPdfThumbnail-nPN7h1J_.js} +1 -1
  2. package/dist/{ChatPostComposerDialog-CulXWuXz.js → ChatPostComposerDialog-DgLx0nZo.js} +3 -3
  3. package/dist/{DocumentToolbar-BT_ZNfp2.js → DocumentToolbar-C7zG7ZUu.js} +2 -2
  4. package/dist/{DocxViewer-DpPuh1PW.js → DocxViewer-eyg5mndl.js} +2 -2
  5. package/dist/{F0AiProcessingOverlay-De6FGwQg.js → F0AiProcessingOverlay-jjEVkSpZ.js} +1 -1
  6. package/dist/{F0CanvasPanel-DxLBBpm0.js → F0CanvasPanel-CMwh5HFX.js} +23778 -23678
  7. package/dist/{F0Map-DNeWhe4i.js → F0Map-DwKK15l3.js} +4 -4
  8. package/dist/{F0VideoPlayer-Db_-7z6H.js → F0VideoPlayer-C5EwwFKi.js} +1 -1
  9. package/dist/{MapProvider-BYegpc30.js → MapProvider-C4kRQyql.js} +17814 -17662
  10. package/dist/{SheetViewer-0d49Ei5k.js → SheetViewer-BLw1V__e.js} +2 -2
  11. package/dist/{TextViewer-zMTtB78V.js → TextViewer-DM_pMS2I.js} +2 -2
  12. package/dist/ai.d.ts +14 -6
  13. package/dist/ai.js +2 -2
  14. package/dist/component-status.d.ts +6 -6
  15. package/dist/component-status.js +1 -1
  16. package/dist/{experimental-CpvI08wg.js → experimental-Drx9E2I8.js} +1380 -1380
  17. package/dist/experimental.d.ts +128 -6
  18. package/dist/experimental.js +34 -34
  19. package/dist/f0.d.ts +249 -53
  20. package/dist/f0.js +16408 -14565
  21. package/dist/i18n-provider-defaults.d.ts +14 -6
  22. package/dist/i18n-provider-defaults.js +8 -0
  23. package/dist/index-BT8pDyvx.js +4 -0
  24. package/dist/{index-B0iafuqy.js → index-Df32kENo.js} +2 -2
  25. package/dist/{index-DYcLlpRy.js → index-byfMYN7B.js} +1 -1
  26. package/dist/{index-CHbEJEN1.js → index-dy3bOSuJ.js} +3 -3
  27. package/dist/{index-CXuh5wB5.js → index-lalKcSOE.js} +3 -3
  28. package/dist/{pdfWorker-4bRMvKlA.js → pdfWorker-Ce9zqyou.js} +2 -2
  29. package/dist/styles.css +1 -1
  30. package/package.json +2 -1
  31. package/tailwind.config.ts +11 -0
  32. package/dist/index-BHaEDRPV.js +0 -4
package/dist/f0.d.ts CHANGED
@@ -1359,6 +1359,31 @@ export declare type AppendToolCall = {
1359
1359
  };
1360
1360
  };
1361
1361
 
1362
+ export declare type AppToastOptions = ToastCommonOptions & ToastTiming & {
1363
+ /**
1364
+ * The kind of toast. `app` is a status message about something the user
1365
+ * did or the app did.
1366
+ * @default "app"
1367
+ */
1368
+ type?: "app";
1369
+ /**
1370
+ * The actions to display in the toast
1371
+ */
1372
+ actions?: F0ToastActions;
1373
+ /**
1374
+ * The title of the toast
1375
+ */
1376
+ title?: string;
1377
+ /**
1378
+ * The description of the toast
1379
+ */
1380
+ description?: string;
1381
+ /**
1382
+ * The variant of the toast
1383
+ */
1384
+ variant?: F0ToastVariant;
1385
+ };
1386
+
1362
1387
  export declare const AreaChart: WithDataTestIdReturnType_5<ForwardRefExoticComponent<Omit<LineChartPropsBase<LineChartConfig_2> & {
1363
1388
  lineType?: "step" | "linear" | "natural" | "monotoneX";
1364
1389
  marginTop?: number;
@@ -5536,6 +5561,14 @@ export declare const defaultTranslations: {
5536
5561
  readonly remove: "Remove favorite";
5537
5562
  };
5538
5563
  readonly notifications: "Notifications";
5564
+ readonly toasts: {
5565
+ readonly clearAll: "Clear all";
5566
+ readonly messages: "Messages";
5567
+ readonly moreMessages: {
5568
+ readonly one: "+{{count}} more message";
5569
+ readonly other: "+{{count}} more messages";
5570
+ };
5571
+ };
5539
5572
  readonly ai: {
5540
5573
  readonly openChat: "Open Chat with One AI";
5541
5574
  readonly closeChat: "Close Chat with One AI";
@@ -13258,6 +13291,12 @@ autoFocus?: boolean;
13258
13291
  * combobox — has to be tabbable, or focus can leave it and never come back.
13259
13292
  */
13260
13293
  tabIndex?: number;
13294
+ /**
13295
+ * Replaces the magnifier. For a field that finds things by some other means
13296
+ * than matching text — a question put to an assistant — and should not
13297
+ * promise that it matches text.
13298
+ */
13299
+ icon?: IconType;
13261
13300
  } & Pick<InputFieldProps<string>, "onChange" | "name" | "size" | "role" | "aria-activedescendant" | "aria-autocomplete" | "aria-controls" | "aria-expanded" | "onFocus" | "onBlur" | "onKeyDown" | "loading" | "disabled" | "placeholder" | "clearable"> & RefAttributes<HTMLInputElement>>;
13262
13301
 
13263
13302
  export declare type F0SearchInputProps = {
@@ -13271,6 +13310,12 @@ export declare type F0SearchInputProps = {
13271
13310
  * combobox — has to be tabbable, or focus can leave it and never come back.
13272
13311
  */
13273
13312
  tabIndex?: number;
13313
+ /**
13314
+ * Replaces the magnifier. For a field that finds things by some other means
13315
+ * than matching text — a question put to an assistant — and should not
13316
+ * promise that it matches text.
13317
+ */
13318
+ icon?: IconType;
13274
13319
  } & Pick<InputFieldProps<string>, "size" | "loading" | "clearable" | "placeholder" | "disabled" | "onBlur" | "onFocus" | "onChange" | "name" | "role" | "onKeyDown" | "aria-controls" | "aria-expanded" | "aria-activedescendant" | "aria-autocomplete">;
13275
13320
 
13276
13321
  /**
@@ -14116,7 +14161,13 @@ export declare interface F0TimelineRowTaskProps extends F0TimelineRowBaseProps {
14116
14161
  otherActions?: F0TimelineRowOtherAction[];
14117
14162
  }
14118
14163
 
14119
- declare type F0ToastProps = {
14164
+ declare type F0ToastActions = ToastActionButton | [ToastActionButton] | ToastActionLink | [ToastActionLink] | [ToastActionButton, ToastActionLink];
14165
+
14166
+ declare type F0ToastProps = ToastCardProps & {
14167
+ /**
14168
+ * The actions to display in the toast
14169
+ */
14170
+ actions?: F0ToastActions;
14120
14171
  /**
14121
14172
  * The title of the toast
14122
14173
  */
@@ -14129,22 +14180,6 @@ declare type F0ToastProps = {
14129
14180
  * The variant of the toast
14130
14181
  */
14131
14182
  variant?: F0ToastVariant;
14132
- /**
14133
- * The duration of the toast in milliseconds (if not provided, the toast will stay open until the user closes it)
14134
- */
14135
- duration?: number;
14136
- /**
14137
- * Whether the toast is paused. If true, the duraction timer will not tick in anycase
14138
- */
14139
- forcePauseTimer?: boolean;
14140
- /**
14141
- * The callback to be called when the toast is closed
14142
- */
14143
- onClose?: () => void;
14144
- /**
14145
- * The actions to display in the toast ()
14146
- */
14147
- actions?: ToastActionButton | [ToastActionButton] | ToastActionLink | [ToastActionLink] | [ToastActionButton, ToastActionLink];
14148
14183
  };
14149
14184
 
14150
14185
  declare type F0ToastVariant = (typeof toastVariants)[number];
@@ -16593,6 +16628,48 @@ declare type Message_2 = {
16593
16628
 
16594
16629
  declare type MessageSlotComponent = ComponentType<any>;
16595
16630
 
16631
+ export declare type MessageToastOptions = ToastCommonOptions & ToastTiming & {
16632
+ /**
16633
+ * The kind of toast. `message` is something a person sent, shown with
16634
+ * their avatar, like a chat notification.
16635
+ */
16636
+ type: "message";
16637
+ /**
16638
+ * The avatar of the sender (or of the conversation, for a group)
16639
+ */
16640
+ avatar: AvatarVariant;
16641
+ /**
16642
+ * The display name of the sender
16643
+ */
16644
+ sender: string;
16645
+ /**
16646
+ * Where the message was posted, e.g. the channel name. Omit for a direct
16647
+ * message.
16648
+ */
16649
+ topic?: string;
16650
+ /**
16651
+ * The text of the message
16652
+ */
16653
+ message: string;
16654
+ /**
16655
+ * Called when the message is clicked, e.g. to open the conversation. The
16656
+ * toast closes after it.
16657
+ */
16658
+ onClick?: () => void;
16659
+ /**
16660
+ * Groups messages of one conversation into a single toast
16661
+ */
16662
+ thread?: MessageToastThread;
16663
+ };
16664
+
16665
+ export declare type MessageToastThread = {
16666
+ /**
16667
+ * Messages with the same thread id share one toast: each new message
16668
+ * replaces it in place, restarts its timer and adds to its "+N more" count.
16669
+ */
16670
+ id: string;
16671
+ };
16672
+
16596
16673
  declare type MetadataAction = {
16597
16674
  icon: IconType;
16598
16675
  label: string;
@@ -17438,6 +17515,11 @@ declare type OneFilterPickerRootProps<Definition extends FiltersDefinition> = {
17438
17515
  onChange: (value: FiltersState<Definition>) => void;
17439
17516
  /** The children of the component */
17440
17517
  children?: React.ReactNode;
17518
+ /**
17519
+ * An entry listed before the filters inside the panel, with a pane of its
17520
+ * own. For a way of filtering that is not one filter.
17521
+ */
17522
+ quickFilter?: QuickFilterDefinition;
17441
17523
  /** The mode of the component */
17442
17524
  mode?: FiltersMode;
17443
17525
  /** Callback fired when filters open state is changed */
@@ -17884,6 +17966,15 @@ export declare type PresetDefinition<Filters extends FiltersDefinition> = {
17884
17966
  * boundary.
17885
17967
  */
17886
17968
  settings?: unknown;
17969
+ /**
17970
+ * Whatever the quick filter captured of its own narrowing, from
17971
+ * {@link QuickFilterDefinition.capture}, handed back to `restore` when this
17972
+ * view is applied. Opaque here: a view that narrows the list by something that
17973
+ * is not a filter — a question, a saved lookup — would otherwise be saved as
17974
+ * the filters it happens to have set, which for a narrowing that sets none at
17975
+ * all is a view that shows everything.
17976
+ */
17977
+ quickFilter?: unknown;
17887
17978
  /** Function to count the number of items that match the filter */
17888
17979
  itemsCount?: (filters: FiltersState<Filters>) => Promise<number | undefined> | number | undefined;
17889
17980
  };
@@ -18195,6 +18286,89 @@ declare type QuestionPropsToOmit = "onAction" | "onChange" | "onAddNewElement";
18195
18286
 
18196
18287
  export declare type QuestionType = "rating" | "select" | "multi-select" | "dropdown-single" | "dropdown-multi" | "text" | "longText" | "numeric" | "link" | "date" | "file" | "checkbox";
18197
18288
 
18289
+ /**
18290
+ * A way of narrowing the list that is not one filter: an entry listed above
18291
+ * the filters inside the panel, with a pane of its own when picked. A natural
18292
+ * language question, a saved view, "my team".
18293
+ */
18294
+ export declare type QuickFilterDefinition = {
18295
+ /** The entry's label in the filter list */
18296
+ label: string;
18297
+ /** Icon drawn before that label */
18298
+ icon?: IconType;
18299
+ /**
18300
+ * Whether what is applied to the list right now came from this entry. The
18301
+ * panel opens on the filter that carries a value when something is applied;
18302
+ * when that something is the quick filter's own answer, it opens on the
18303
+ * entry instead, so the reader returns to the question they asked rather
18304
+ * than to one of the filters it set.
18305
+ */
18306
+ active?: boolean;
18307
+ /**
18308
+ * The pane shown when the entry is picked. f0 draws the entry and nothing
18309
+ * else; the pane is the consumer's.
18310
+ *
18311
+ * `stage` merges into the draft the apply button commits — the same draft
18312
+ * the filter panes write — so a staged key shows in the list at once, a
18313
+ * tick made afterwards survives Apply, and nothing lingers past it. Pass a
18314
+ * key with `undefined` to clear it. Nothing reaches the list until Apply.
18315
+ */
18316
+ render: (api: {
18317
+ stage: (filters: Record<string, unknown>) => void;
18318
+ }) => ReactNode;
18319
+ /**
18320
+ * Whether the quick filter is working on an answer right now. The collection
18321
+ * shows it where it shows its own — a spinner beside the list's controls — so
18322
+ * that a reader who asked and then closed the panel can still see that an
18323
+ * answer is coming.
18324
+ */
18325
+ loading?: boolean;
18326
+ /**
18327
+ * What this entry has put on the list, in a form a saved view can hold. Called
18328
+ * when a view is saved and whenever the current view is compared with one;
18329
+ * `undefined` means the list is not showing this entry's work.
18330
+ *
18331
+ * Opaque to f0, which stores it and hands it back — the entry is the only thing
18332
+ * that knows what its own narrowing is made of. Keep it small and serializable:
18333
+ * it goes wherever saved views are kept. A reference, a question, an id — not a
18334
+ * result, which would be stale by the time the view is opened again.
18335
+ */
18336
+ capture?: () => unknown;
18337
+ /**
18338
+ * Puts that back, with whatever `capture` returned, when a saved view is
18339
+ * applied — and with `undefined` for a view that has none of this entry's work
18340
+ * in it, which means clear whatever is there.
18341
+ *
18342
+ * Called after the view's filters, so a narrowing that depends on them can be
18343
+ * worked out against the state they leave behind.
18344
+ */
18345
+ restore?: (state: unknown) => void;
18346
+ /**
18347
+ * Called when the apply button is pressed while this entry's pane is the one
18348
+ * showing, just before the draft is committed and the panel closes.
18349
+ *
18350
+ * The button says "apply filters" and the reader has this pane in front of
18351
+ * them, so whatever they have entered here is part of what they are applying.
18352
+ * Without this, a pane that keeps its own unsubmitted state — a typed
18353
+ * question, an unconfirmed choice — watches the panel close over it and
18354
+ * appear to do nothing.
18355
+ */
18356
+ onApply?: () => void;
18357
+ /**
18358
+ * A chip in the applied-filters row for what the quick filter has put on
18359
+ * the list that no filter chip can show — a set of rows, a computed column.
18360
+ * Without it that narrowing has no surface once the panel closes, and the
18361
+ * list reads as broken rather than as filtered. Listed first; its close
18362
+ * control and the row's Clear both call `onRemove`, and clicking it opens
18363
+ * the panel. Shown even while a preset stands in for the filter chips,
18364
+ * because no preset stands in for this.
18365
+ */
18366
+ chip?: {
18367
+ label: string;
18368
+ onRemove: () => void;
18369
+ };
18370
+ };
18371
+
18198
18372
  export declare const RadarChart: WithDataTestIdReturnType_5<ForwardRefExoticComponent<Omit<RadarChartProps<ChartConfig_2> & {
18199
18373
  dataTestId?: string;
18200
18374
  } & RefAttributes<HTMLDivElement>, "ref"> & RefAttributes<HTMLElement | SVGElement>>>;
@@ -20037,51 +20211,48 @@ declare type ToastActionLink = {
20037
20211
  keepOpen?: boolean;
20038
20212
  };
20039
20213
 
20040
- export declare type ToastId = string;
20041
-
20042
- export declare type ToastOptions = {
20214
+ declare type ToastCardProps = {
20043
20215
  /**
20044
- * The title of the toast
20216
+ * How long the toast stays open, in milliseconds. Draws the countdown bar;
20217
+ * closing the toast when it runs out is the toast provider's job.
20045
20218
  */
20046
- title?: string;
20219
+ duration?: number;
20047
20220
  /**
20048
- * The description of the toast
20221
+ * The callback to be called when the toast is closed
20049
20222
  */
20050
- description?: string;
20223
+ onClose?: () => void;
20051
20224
  /**
20052
- * The variant of the toast
20225
+ * Changes whenever the toast's timer starts again, so the countdown bar
20226
+ * starts again from full.
20053
20227
  */
20054
- variant?: F0ToastVariant;
20228
+ countdownKey?: string | number;
20055
20229
  /**
20056
- * The actions to display in the toast
20230
+ * Changes whenever the toast's content is replaced in place, so the new
20231
+ * text fades in.
20057
20232
  */
20058
- actions?: F0ToastProps["actions"];
20233
+ contentKey?: number;
20234
+ };
20235
+
20236
+ declare type ToastCommonOptions = {
20059
20237
  /**
20060
20238
  * Optional id for the toast. If not provided, a random id will be generated.
20239
+ * Opening a toast with the id of an open one replaces it in place.
20061
20240
  */
20062
20241
  id?: ToastId;
20063
- } & ({
20064
- /**
20065
- * The duration of the toast in milliseconds. Defaults to 5000ms, or
20066
- * 10000ms when the toast has an action (more time to read and reach it).
20067
- * Use `persistent: true` to keep it open until the user closes it.
20068
- * @default 5000
20069
- */
20070
- duration?: number;
20071
- /**
20072
- * Whether the toast should persist until the user closes it
20073
- */
20074
- persistent?: undefined;
20075
- } | {
20076
- duration?: undefined;
20077
- persistent: true;
20078
- });
20242
+ };
20243
+
20244
+ export declare type ToastId = string;
20245
+
20246
+ export declare type ToastOptions = AppToastOptions | MessageToastOptions;
20079
20247
 
20080
20248
  export declare const ToastProvider: ({ children, portalTargets, }: ToastProviderProps) => JSX_2.Element;
20081
20249
 
20082
20250
  /**
20083
- * A toast as held by the store: the public options resolved into the props the
20084
- * `F0Toast` component renders, plus a stable `id` and an `onClose` callback.
20251
+ * @deprecated The toast store that held these items was replaced by Base UI's
20252
+ * toast manager, and nothing reads this type any more.
20253
+ * @removeIn 8.0.0
20254
+ * @migration Remove the import. To open a toast, pass `ToastOptions` to
20255
+ * `toasts.open`.
20085
20256
  */
20086
20257
  export declare type ToastProviderItem = F0ToastProps & {
20087
20258
  id: ToastId;
@@ -20089,7 +20260,7 @@ export declare type ToastProviderItem = F0ToastProps & {
20089
20260
  };
20090
20261
 
20091
20262
  declare type ToastProviderProps = {
20092
- children: React.ReactNode;
20263
+ children: ReactNode;
20093
20264
  portalTargets?: Record<"mobile" | "desktop", string>;
20094
20265
  };
20095
20266
 
@@ -20102,6 +20273,14 @@ declare type ToastProviderProps = {
20102
20273
  * import { toasts } from "@factorialco/f0-react"
20103
20274
  *
20104
20275
  * const id = toasts.open({ title: "Saved", variant: "success" })
20276
+ * toasts.open({
20277
+ * type: "message",
20278
+ * avatar: { type: "person", firstName: "Ana", lastName: "Ruiz" },
20279
+ * sender: "Ana Ruiz",
20280
+ * topic: "design",
20281
+ * message: "Can you take a look?",
20282
+ * thread: { id: channelId },
20283
+ * })
20105
20284
  * toasts.close(id)
20106
20285
  * toasts.closeAll()
20107
20286
  */
@@ -20121,6 +20300,23 @@ export declare const toasts: {
20121
20300
  closeAll: () => void;
20122
20301
  };
20123
20302
 
20303
+ declare type ToastTiming = {
20304
+ /**
20305
+ * The duration of the toast in milliseconds. Defaults to 5000ms, or
20306
+ * 10000ms when the toast has an action (more time to read and reach it).
20307
+ * Use `persistent: true` to keep it open until the user closes it.
20308
+ * @default 5000
20309
+ */
20310
+ duration?: number;
20311
+ /**
20312
+ * Whether the toast should persist until the user closes it
20313
+ */
20314
+ persistent?: undefined;
20315
+ } | {
20316
+ duration?: undefined;
20317
+ persistent: true;
20318
+ };
20319
+
20124
20320
  declare const toastVariants: readonly ["error", "warning", "success", "loading", "default"];
20125
20321
 
20126
20322
  /** A button rendered in the footer at the bottom of the table of contents */
@@ -21733,10 +21929,8 @@ declare module "@tiptap/core" {
21733
21929
 
21734
21930
  declare module "@tiptap/core" {
21735
21931
  interface Commands<ReturnType> {
21736
- videoEmbed: {
21737
- setVideoEmbed: (options: {
21738
- src: string;
21739
- }) => ReturnType;
21932
+ transcript: {
21933
+ insertTranscript: (data: TranscriptData) => ReturnType;
21740
21934
  };
21741
21935
  }
21742
21936
  }
@@ -21744,8 +21938,10 @@ declare module "@tiptap/core" {
21744
21938
 
21745
21939
  declare module "@tiptap/core" {
21746
21940
  interface Commands<ReturnType> {
21747
- transcript: {
21748
- insertTranscript: (data: TranscriptData) => ReturnType;
21941
+ videoEmbed: {
21942
+ setVideoEmbed: (options: {
21943
+ src: string;
21944
+ }) => ReturnType;
21749
21945
  };
21750
21946
  }
21751
21947
  }