@factorialco/f0-react 12.6.0 → 12.7.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 (30) hide show
  1. package/dist/{ChatPostComposerDialog-Cn2genet.js → ChatPostComposerDialog-t1X_eEx-.js} +2 -2
  2. package/dist/{CoachmarkProvider-DT14x0AU.js → CoachmarkProvider-C8AfrRY-.js} +2 -2
  3. package/dist/{DocumentToolbar-C9Po6BKY.js → DocumentToolbar-CiWldz64.js} +2 -2
  4. package/dist/{DocxViewer-haxAtwwO.js → DocxViewer-ZWB-Upv4.js} +1 -1
  5. package/dist/{F0AiProcessingOverlay-CVIRG3jF.js → F0AiProcessingOverlay-BZDPV9iG.js} +2 -1
  6. package/dist/{F0CanvasPanel-Cr7KX0zD.js → F0CanvasPanel-BpJr85HN.js} +11 -10
  7. package/dist/{F0DocumentViewer-DVyc9nMF.js → F0DocumentViewer-C0Aj9x9_.js} +3 -3
  8. package/dist/F0DocumentViewer-c0OzZYZK.js +3 -0
  9. package/dist/{F0Map-D7XCm7e2.js → F0Map-CyyZmEdH.js} +3 -3
  10. package/dist/F0VideoPlayer-DcPgDbG3.js +1 -0
  11. package/dist/{F0VideoPlayer-ByIehNyD.js → F0VideoPlayer-Ob0Ocg-j.js} +1 -1
  12. package/dist/{Map-B6ueo7xJ.js → Map-CkxnszKW.js} +3 -3
  13. package/dist/{PdfThumbnail-PHUaRH8_.js → PdfThumbnail-DKDEmiH7.js} +1 -1
  14. package/dist/{SheetViewer-C1rrcfIx.js → SheetViewer-D1-JA9nb.js} +3 -3
  15. package/dist/{TextViewer-k1eayJ7W.js → TextViewer-DW_Xu4Cb.js} +1 -1
  16. package/dist/ai.d.ts +2 -2
  17. package/dist/ai.js +2 -2
  18. package/dist/component-status.js +1 -1
  19. package/dist/experimental.d.ts +409 -456
  20. package/dist/experimental.js +4 -4
  21. package/dist/{exports-CnbBeOMM.d.ts → exports-BdFDYdp1.d.ts} +85 -85
  22. package/dist/f0.d.ts +102 -99
  23. package/dist/f0.js +6 -6
  24. package/dist/{index-DE9tIS8D.d.ts → index-DIwa_k8B.d.ts} +177 -173
  25. package/dist/{maplibre-D4TgPyqe.js → maplibre-DKmCLTnt.js} +1 -1
  26. package/dist/{pdfWorker-C0ND4urI.js → pdfWorker-Ch4pdihi.js} +1 -1
  27. package/dist/{types-tNl_jMZz.d.ts → types-C6VyXC_B.d.ts} +349 -326
  28. package/package.json +1 -1
  29. package/dist/F0DocumentViewer-BLNw_SjP.js +0 -3
  30. package/dist/F0VideoPlayer-BWUvWTys.js +0 -1
@@ -6,9 +6,9 @@ import { baseColors } from "@factorialco/f0-core";
6
6
  import * as AvatarPrimitive from "@radix-ui/react-avatar";
7
7
  import { TooltipPopupProps, TooltipPositionerProps } from "@base-ui/react/tooltip";
8
8
  //#region src/elements/lib/data-testid/data-testid.d.ts
9
- type WithDataTestIdProps = {
9
+ interface WithDataTestIdProps {
10
10
  dataTestId?: string;
11
- };
11
+ }
12
12
  /**
13
13
  * Wrapper component that conditionally renders a `data-testid` attribute.
14
14
  *
@@ -330,10 +330,10 @@ declare const F0AvatarEmoji: WithDataTestIdReturnType<typeof F0AvatarEmojiBase>;
330
330
  //#region src/elements/avatars/F0AvatarFile/types.d.ts
331
331
  declare const avatarFileSizes: readonly ["xs", "sm", "md", "lg"];
332
332
  type AvatarFileSize = (typeof avatarFileSizes)[number];
333
- type FileDef = {
333
+ interface FileDef {
334
334
  name: string;
335
335
  type: string;
336
- };
336
+ }
337
337
  //#endregion
338
338
  //#region src/elements/avatars/F0AvatarFile/F0AvatarFile.d.ts
339
339
  type F0AvatarFileProps = Omit<React.ComponentPropsWithoutRef<typeof Avatar>, "type" | "size"> & {
@@ -530,7 +530,7 @@ declare const F0AvatarModule: WithDataTestIdReturnType<typeof F0AvatarModuleBase
530
530
  * Base shape shared by all canvas content types.
531
531
  * Every entity adds its own fields on top of this.
532
532
  */
533
- type CanvasContentBase = {
533
+ interface CanvasContentBase {
534
534
  type: string;
535
535
  title: string;
536
536
  description?: string;
@@ -560,7 +560,7 @@ type CanvasContentBase = {
560
560
  * with `coversChat`, which fullscreen always dismisses.
561
561
  */
562
562
  keepsUnderFullscreen?: boolean;
563
- };
563
+ }
564
564
  /**
565
565
  * Dashboard canvas content — renders an analytics dashboard.
566
566
  */
@@ -634,16 +634,16 @@ type CanvasContent = DashboardCanvasContent | FormCanvasContent | DataDownloadCa
634
634
  * Each entity defines its own actions type; this aggregates them.
635
635
  * Passed by the host app to F0AiChatProvider via `canvasActions`.
636
636
  */
637
- type CanvasActions = {
637
+ interface CanvasActions {
638
638
  dashboard?: DashboardCanvasActions;
639
- };
639
+ }
640
640
  /**
641
641
  * Contract for a canvas entity type.
642
642
  *
643
643
  * Each entity (dashboard, survey, goal, job-posting…) implements this
644
644
  * interface and is added to the `canvasEntities` record passed to F0AiChat.
645
645
  */
646
- type CanvasEntityDefinition<T extends CanvasContentBase = CanvasContentBase> = {
646
+ interface CanvasEntityDefinition<T extends CanvasContentBase = CanvasContentBase> {
647
647
  /** Must match the `type` discriminant on the content object */
648
648
  type: T["type"];
649
649
  /** Renders the main body of the canvas panel */
@@ -669,12 +669,12 @@ type CanvasEntityDefinition<T extends CanvasContentBase = CanvasContentBase> = {
669
669
  * `overflow-auto`, letting the entity manage its own scrolling.
670
670
  */
671
671
  overflowHidden?: boolean;
672
- };
672
+ }
673
673
  /**
674
674
  * Inline dataset for client-side file generation (Excel / CSV).
675
675
  * Sent by the agent with the raw query results.
676
676
  */
677
- type DataDownloadDataset = {
677
+ interface DataDownloadDataset {
678
678
  /** Column headers in display order. */
679
679
  columns: string[];
680
680
  /** Array of row objects keyed by column name. */
@@ -694,13 +694,13 @@ type DataDownloadDataset = {
694
694
  * Used for Excel/CSV headers. Falls back to the raw column name when absent.
695
695
  */
696
696
  columnLabels?: Record<string, string>;
697
- };
697
+ }
698
698
  /**
699
699
  * A single proposed shift block in a timesheet-autofill preview. Every proposed
700
700
  * block carries concrete employee-local clock times (ISO datetime or "HH:MM");
701
701
  * days that cannot be proposed are omitted rather than emitted with empty bounds.
702
702
  */
703
- type AutofillTimesheetShift = {
703
+ interface AutofillTimesheetShift {
704
704
  date: string;
705
705
  clockIn: string;
706
706
  clockOut: string;
@@ -713,7 +713,7 @@ type AutofillTimesheetShift = {
713
713
  * location-type enum (today: "office" | "work_from_home" | "business_trip").
714
714
  */
715
715
  locationType?: string | null;
716
- };
716
+ }
717
717
  /**
718
718
  * A preset formatting instruction the LLM can specify instead of a
719
719
  * real formatter function. The wrapper component maps these to actual
@@ -919,14 +919,14 @@ type ChatDashboardDateNavigationGranularity = "day" | "week" | "month" | "quarte
919
919
  * grid. The `column` and `datasetId` are agent-side metadata used by the
920
920
  * compute SQL builder; they are stripped before reaching F0AnalyticsDashboard.
921
921
  */
922
- type ChatDashboardNavigationFilterDefinition = {
922
+ interface ChatDashboardNavigationFilterDefinition {
923
923
  type: "dateNavigation";
924
924
  label: string;
925
925
  column: string;
926
926
  datasetId: string;
927
927
  granularities: ChatDashboardDateNavigationGranularity[];
928
928
  defaultGranularity?: ChatDashboardDateNavigationGranularity;
929
- };
929
+ }
930
930
  interface ChatDashboardColumn {
931
931
  /** Column key — must match a key in each row object */
932
932
  id: string;
@@ -1033,7 +1033,7 @@ interface ChatDashboardConfig {
1033
1033
  * list page since this conversation was first opened). The header prefers
1034
1034
  * these values over the ones baked into `content` / `config`.
1035
1035
  */
1036
- type DashboardMetadata = {
1036
+ interface DashboardMetadata {
1037
1037
  /**
1038
1038
  * Latest persisted title. When present, the header displays this instead
1039
1039
  * of `content.title` so the chat-history snapshot never shadows the
@@ -1056,11 +1056,11 @@ type DashboardMetadata = {
1056
1056
  * can forward backend payloads verbatim without pre-parsing.
1057
1057
  */
1058
1058
  lastEdited: Date | string;
1059
- };
1059
+ }
1060
1060
  /**
1061
1061
  * Callbacks for persisting dashboards externally (beyond chat history).
1062
1062
  */
1063
- type DashboardCanvasActions = {
1063
+ interface DashboardCanvasActions {
1064
1064
  /** Update an existing saved dashboard */
1065
1065
  save: (id: string, category: string, config: ChatDashboardConfig) => Promise<void>;
1066
1066
  /**
@@ -1080,7 +1080,7 @@ type DashboardCanvasActions = {
1080
1080
  * instead of showing a placeholder.
1081
1081
  */
1082
1082
  getMetadata?: (id: string) => Promise<DashboardMetadata | void>;
1083
- };
1083
+ }
1084
1084
  //#endregion
1085
1085
  //#region src/addons/ai/ai/F0AiFileAttachments/types.d.ts
1086
1086
  /**
@@ -1088,7 +1088,7 @@ type DashboardCanvasActions = {
1088
1088
  * assistant produced. Built from the host's message parts with the adapters in
1089
1089
  * `./adapters`.
1090
1090
  */
1091
- type AiChatFile = {
1091
+ interface AiChatFile {
1092
1092
  url: string;
1093
1093
  name: string;
1094
1094
  /**
@@ -1108,7 +1108,7 @@ type AiChatFile = {
1108
1108
  /** Intrinsic photo size; reserves the box before the photo loads. */
1109
1109
  width?: number;
1110
1110
  height?: number;
1111
- };
1111
+ }
1112
1112
  /**
1113
1113
  * Which kind of preview a file opened. Photos and documents open a viewer
1114
1114
  * today; `video` and `file` are reserved for when they do too.
@@ -1130,7 +1130,7 @@ type AiChatFileKind = "image" | "video" | "document" | "file";
1130
1130
  type AiChatFileUrlResolver = (url: string, context: {
1131
1131
  signal: AbortSignal;
1132
1132
  }) => Promise<string | Blob | null | undefined> | string | Blob | null | undefined;
1133
- type AiChatFilePreviewConfig = {
1133
+ interface AiChatFilePreviewConfig {
1134
1134
  /**
1135
1135
  * Resolve file URLs before showing them. Without it, only files the browser
1136
1136
  * already holds (`blob:` and `data:` URLs) get rich previews; anything else
@@ -1143,9 +1143,9 @@ type AiChatFilePreviewConfig = {
1143
1143
  * @default false
1144
1144
  */
1145
1145
  directUrls?: boolean;
1146
- };
1146
+ }
1147
1147
  /** One file published by an agent's `showFiles` tool. */
1148
- type AiChatShowFilesItem = {
1148
+ interface AiChatShowFilesItem {
1149
1149
  path: string;
1150
1150
  displayName?: string;
1151
1151
  mimeType?: string;
@@ -1156,10 +1156,10 @@ type AiChatShowFilesItem = {
1156
1156
  preview?: {
1157
1157
  path: string;
1158
1158
  };
1159
- };
1159
+ }
1160
1160
  //#endregion
1161
1161
  //#region src/elements/avatars/F0Avatar/F0Avatar.d.ts
1162
- type AvatarProps = {
1162
+ interface AvatarProps {
1163
1163
  avatar: AvatarVariant;
1164
1164
  size?: AvatarSize;
1165
1165
  dataTestId?: string;
@@ -1170,7 +1170,7 @@ type AvatarProps = {
1170
1170
  * fits.
1171
1171
  */
1172
1172
  actions?: AvatarAction[];
1173
- };
1173
+ }
1174
1174
  type AvatarVariant = ({
1175
1175
  type: "person";
1176
1176
  } & Omit<F0AvatarPersonProps, "size">) | ({
@@ -1195,7 +1195,7 @@ declare const F0Avatar: WithDataTestIdReturnType<typeof F0AvatarBase>;
1195
1195
  //#endregion
1196
1196
  //#region src/blocks/F0PersonCard/types.d.ts
1197
1197
  /** A button in the person card, such as opening a chat with that person. */
1198
- type F0PersonCardAction = {
1198
+ interface F0PersonCardAction {
1199
1199
  label: string;
1200
1200
  /** `"default"` is the filled call to action; use it for one action at most.
1201
1201
  * @default "outline" */
@@ -1204,7 +1204,7 @@ type F0PersonCardAction = {
1204
1204
  * shows the button as loading until it settles: F0Button checks at runtime. */
1205
1205
  onClick: () => void;
1206
1206
  disabled?: boolean;
1207
- };
1207
+ }
1208
1208
  type F0PersonCardProps = WithDataTestIdProps & {
1209
1209
  name: string;
1210
1210
  /** Defaults to the initials of `name`. */
@@ -1213,6 +1213,8 @@ type F0PersonCardProps = WithDataTestIdProps & {
1213
1213
  subtitle?: string;
1214
1214
  /** Link to the person's profile, shown as a "View profile" button. */
1215
1215
  profileHref?: string;
1216
+ /** Called when "View profile" is clicked, before the link opens. */
1217
+ onProfileClick?: () => void;
1216
1218
  /** More buttons next to "View profile". The host decides which apply to
1217
1219
  * each person. */
1218
1220
  actions?: F0PersonCardAction[];
@@ -1223,7 +1225,7 @@ type F0PersonCardProps = WithDataTestIdProps & {
1223
1225
  * A person's identity in an {@link F0Card}, with a "View profile" button and
1224
1226
  * the host's actions next to it.
1225
1227
  */
1226
- declare const F0PersonCardBase: ({ name, avatar, subtitle, profileHref, actions, dataTestId }: F0PersonCardProps) => ReactNode;
1228
+ declare const F0PersonCardBase: ({ name, avatar, subtitle, profileHref, onProfileClick, actions, dataTestId }: F0PersonCardProps) => ReactNode;
1227
1229
  declare const F0PersonCard: typeof F0PersonCardBase;
1228
1230
  //#endregion
1229
1231
  //#region src/addons/ai/ai/F0AiChat/components/markdownRenderers/entityRef/entities/person/types.d.ts
@@ -1231,7 +1233,7 @@ declare const F0PersonCard: typeof F0PersonCardBase;
1231
1233
  * Profile data for a person entity (employee), resolved asynchronously
1232
1234
  * and displayed in the entity reference hover card.
1233
1235
  */
1234
- type PersonProfile = {
1236
+ interface PersonProfile {
1235
1237
  id: string | number;
1236
1238
  firstName: string;
1237
1239
  lastName: string;
@@ -1239,33 +1241,35 @@ type PersonProfile = {
1239
1241
  jobTitle?: string;
1240
1242
  /** Buttons next to "View profile", such as sending a message. */
1241
1243
  actions?: F0PersonCardAction[];
1242
- };
1244
+ /** Called when "View profile" is clicked, before the link opens. */
1245
+ onProfileClick?: () => void;
1246
+ }
1243
1247
  //#endregion
1244
1248
  //#region src/addons/ai/ai/F0AiChat/components/markdownRenderers/entityRef/entities/candidate/types.d.ts
1245
1249
  /**
1246
1250
  * Profile data for a candidate entity (ATS applicant), resolved asynchronously
1247
1251
  * and displayed in the entity reference hover card.
1248
1252
  */
1249
- type CandidateProfile = {
1253
+ interface CandidateProfile {
1250
1254
  id: string | number;
1251
1255
  firstName: string;
1252
1256
  lastName: string;
1253
1257
  avatarUrl?: string;
1254
1258
  source?: string;
1255
1259
  appliedAt?: string;
1256
- };
1260
+ }
1257
1261
  //#endregion
1258
1262
  //#region src/addons/ai/ai/F0AiChat/components/markdownRenderers/entityRef/entities/jobPosting/types.d.ts
1259
1263
  /**
1260
1264
  * Profile data for a job posting entity (ATS opening), resolved asynchronously
1261
1265
  * and displayed in the entity reference hover card.
1262
1266
  */
1263
- type JobPostingProfile = {
1267
+ interface JobPostingProfile {
1264
1268
  id: string | number;
1265
1269
  title: string;
1266
1270
  status?: string;
1267
1271
  location?: string;
1268
- };
1272
+ }
1269
1273
  //#endregion
1270
1274
  //#region src/elements/tags/F0TagStatus/types.d.ts
1271
1275
  declare const statuses$1: readonly ["neutral", "info", "positive", "warning", "critical"];
@@ -1286,7 +1290,7 @@ interface F0TagStatusProps {
1286
1290
  declare const F0TagStatus: WithDataTestIdReturnType<import("react").ForwardRefExoticComponent<F0TagStatusProps & import("react").RefAttributes<HTMLDivElement>>>;
1287
1291
  //#endregion
1288
1292
  //#region src/addons/ai/ai/F0AiChat/components/markdownRenderers/entityRef/entities/requisition/types.d.ts
1289
- type RequisitionProfile = {
1293
+ interface RequisitionProfile {
1290
1294
  id: string | number;
1291
1295
  title: string;
1292
1296
  status?: string;
@@ -1298,36 +1302,36 @@ type RequisitionProfile = {
1298
1302
  lastName: string;
1299
1303
  avatarUrl?: string;
1300
1304
  };
1301
- };
1305
+ }
1302
1306
  //#endregion
1303
1307
  //#region src/addons/ai/ai/F0AiChat/components/markdownRenderers/entityRef/entities/vacancy/types.d.ts
1304
1308
  /**
1305
1309
  * Profile data for a vacancy entity (ATS vacancy/position), resolved asynchronously
1306
1310
  * and displayed in the entity reference hover card.
1307
1311
  */
1308
- type VacancyProfile = {
1312
+ interface VacancyProfile {
1309
1313
  id: string | number;
1310
1314
  name: string;
1311
1315
  status?: string;
1312
1316
  vacancyType?: string;
1313
- };
1317
+ }
1314
1318
  //#endregion
1315
1319
  //#region src/addons/ai/ai/F0AiChat/components/markdownRenderers/entityRef/entities/expense/types.d.ts
1316
1320
  /**
1317
1321
  * Profile data for an expense entity, resolved asynchronously
1318
1322
  * and displayed in the entity reference hover card.
1319
1323
  */
1320
- type ExpenseProfile = {
1324
+ interface ExpenseProfile {
1321
1325
  id: string | number;
1322
1326
  description?: string;
1323
1327
  amount?: string;
1324
1328
  status?: string;
1325
- };
1329
+ }
1326
1330
  //#endregion
1327
1331
  //#region src/elements/lib/global.types.d.ts
1328
- type DataAttributes = {
1332
+ interface DataAttributes {
1329
1333
  [key: `data-${string}`]: string | undefined;
1330
- };
1334
+ }
1331
1335
  //#endregion
1332
1336
  //#region src/elements/Action/types.d.ts
1333
1337
  declare const actionButtonVariants: readonly ["default", "outline", "critical", "neutral", "ghost", "promote", "outlinePromote", "ai"];
@@ -1637,10 +1641,10 @@ declare const F0Button: WithDataTestIdReturnType<import("react").ForwardRefExoti
1637
1641
  } & import("react").RefAttributes<HTMLAnchorElement | HTMLButtonElement>>>;
1638
1642
  //#endregion
1639
1643
  //#region src/elements/lib/linkHandler.d.ts
1640
- type LinkContextValue = {
1644
+ interface LinkContextValue {
1641
1645
  currentPath?: string;
1642
1646
  component?: (props: LinkProps, ref: ForwardedRef<HTMLAnchorElement>) => JSX.Element;
1643
- };
1647
+ }
1644
1648
  type LinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
1645
1649
  exactMatch?: boolean;
1646
1650
  disabled?: boolean;
@@ -1654,13 +1658,13 @@ type NavigationItem = Pick<LinkProps, "href" | "exactMatch" | "onClick"> & {
1654
1658
  //#region src/elements/Dropdown/internal.d.ts
1655
1659
  declare const dropdownContentVariants: readonly ["expanded", "reduced"];
1656
1660
  type DropdownContentVariant = (typeof dropdownContentVariants)[number];
1657
- type DropdownItemSeparator = {
1661
+ interface DropdownItemSeparator {
1658
1662
  type: "separator";
1659
- };
1660
- type DropdownItemLabel = {
1663
+ }
1664
+ interface DropdownItemLabel {
1661
1665
  type: "label";
1662
1666
  text: string;
1663
- };
1667
+ }
1664
1668
  /**
1665
1669
  * A block the menu shows rather than a row it offers, such as an account card
1666
1670
  * under the menu's caption. It takes no focus and closes nothing, so it is not
@@ -1668,13 +1672,13 @@ type DropdownItemLabel = {
1668
1672
  * the menu keeps keyboard focus on its rows, so a control inside a panel cannot
1669
1673
  * be reached with the keyboard.
1670
1674
  */
1671
- type DropdownItemPanel = {
1675
+ interface DropdownItemPanel {
1672
1676
  type: "panel";
1673
1677
  content: React$1.ReactNode;
1674
- };
1678
+ }
1675
1679
  type DropdownItem = DropdownItemObject | DropdownItemSeparator | DropdownItemLabel | DropdownItemSubmenu | DropdownItemSwitch | DropdownItemPanel;
1676
1680
  /** What any row shows, whatever it does when you choose it. */
1677
- type DropdownItemVisuals = {
1681
+ interface DropdownItemVisuals {
1678
1682
  label: string;
1679
1683
  icon?: IconType;
1680
1684
  description?: string;
@@ -1682,7 +1686,7 @@ type DropdownItemVisuals = {
1682
1686
  /** Short trailing tag beside the label, e.g. "New". Not a sentence. */
1683
1687
  tag?: string;
1684
1688
  critical?: boolean;
1685
- };
1689
+ }
1686
1690
  type DropdownItemObject = Pick<NavigationItem, "label" | "href"> & Omit<DropdownItemVisuals, "label"> & {
1687
1691
  type?: "item";
1688
1692
  onClick?: () => void;
@@ -1874,26 +1878,26 @@ type CardAvatarVariant = AvatarVariant$1 | {
1874
1878
  //#region src/elements/value-display/types.d.ts
1875
1879
  type ValueDisplayVisualizationType = "table" | "card" | "list" | (string & {});
1876
1880
  type ValueDisplayTableAlignment = "left" | "right";
1877
- type ValueDisplayRendererContext = {
1881
+ interface ValueDisplayRendererContext {
1878
1882
  visualization: ValueDisplayVisualizationType;
1879
1883
  i18n: TranslationsType;
1880
1884
  tableAlign?: ValueDisplayTableAlignment;
1881
- };
1885
+ }
1882
1886
  //#endregion
1883
1887
  //#region src/elements/tags/F0TagAlert/types.d.ts
1884
1888
  declare const levels: readonly ["info", "warning", "critical", "positive"];
1885
1889
  type Level = (typeof levels)[number];
1886
- type Props$1<Text extends string = string> = {
1890
+ interface Props$1<Text extends string = string> {
1887
1891
  text: Text extends "" ? never : Text;
1888
1892
  level: Level;
1889
1893
  /**
1890
1894
  * Info text to display an i icon and a tooltip next to the tag
1891
1895
  */
1892
1896
  info?: string;
1893
- };
1897
+ }
1894
1898
  //#endregion
1895
1899
  //#region src/elements/tags/F0TagAlert/F0TagAlert.d.ts
1896
- declare const F0TagAlert: WithDataTestIdReturnType<import("react").ForwardRefExoticComponent<Props$1 & import("react").RefAttributes<HTMLDivElement>>>;
1900
+ declare const F0TagAlert: WithDataTestIdReturnType<import("react").ForwardRefExoticComponent<Props$1<string> & import("react").RefAttributes<HTMLDivElement>>>;
1897
1901
  //#endregion
1898
1902
  //#region src/elements/value-display/types/alertTag/alertTag.d.ts
1899
1903
  interface AlertTagValue {
@@ -2309,7 +2313,7 @@ type TooltipCopyProps = {
2309
2313
  description?: string;
2310
2314
  items: TooltipListItem[];
2311
2315
  };
2312
- type TooltipGroupProps = {
2316
+ interface TooltipGroupProps {
2313
2317
  children: ReactNode;
2314
2318
  /**
2315
2319
  * The wait before a tooltip in the group opens, for those that do not set
@@ -2327,7 +2331,7 @@ type TooltipGroupProps = {
2327
2331
  * @default 400
2328
2332
  */
2329
2333
  timeout?: number;
2330
- };
2334
+ }
2331
2335
  /**
2332
2336
  * Triggers that wait out the delay once, together: while any tooltip in the
2333
2337
  * group is on screen — or was, a moment ago — the next one opens on arrival.
@@ -2404,11 +2408,11 @@ declare const Tooltip: WithDataTestIdReturnType<typeof _Tooltip>;
2404
2408
  * bulleted list. A plain string is the title alone, which is what every caller
2405
2409
  * passed before the structured form existed.
2406
2410
  */
2407
- type TooltipContentValue = {
2411
+ interface TooltipContentValue {
2408
2412
  title?: string;
2409
2413
  description?: string;
2410
2414
  items?: TooltipListItem[];
2411
- };
2415
+ }
2412
2416
  type TooltipValue = string | TooltipContentValue;
2413
2417
  //#endregion
2414
2418
  //#region src/elements/value-display/types/icon/icon.d.ts
@@ -2649,7 +2653,7 @@ type Numeric = NumericValue | number | undefined | null;
2649
2653
  /**
2650
2654
  * Configuration options for the numeric formatter.
2651
2655
  */
2652
- type NumericFormatterOptions = {
2656
+ interface NumericFormatterOptions {
2653
2657
  /**
2654
2658
  * Locale string for number formatting (e.g., "en-US", "es-ES", "de-DE").
2655
2659
  * Determines the decimal separator and other locale-specific formatting rules.
@@ -2692,7 +2696,7 @@ type NumericFormatterOptions = {
2692
2696
  * @default true
2693
2697
  */
2694
2698
  useGrouping?: boolean;
2695
- };
2699
+ }
2696
2700
  /**
2697
2701
  * Formats a numeric value according to the provided options.
2698
2702
  *
@@ -2708,11 +2712,11 @@ type NumericFormatter = (value: Numeric, options?: NumericFormatterOptions) => s
2708
2712
  * @param formatter - The formatter to use.
2709
2713
  * @param formatterOptions - The formatting options.
2710
2714
  */
2711
- type NumericWithFormatter = {
2715
+ interface NumericWithFormatter {
2712
2716
  numericValue: NumericValue;
2713
2717
  formatter?: NumericFormatter;
2714
2718
  formatterOptions?: NumericFormatterOptions;
2715
- };
2719
+ }
2716
2720
  /**
2717
2721
  * A numeric value that can be formatted with an optional formatter and options.
2718
2722
  * This is a relaxed version of NumericWithFormatter that allows the numeric value to be a Numeric.
@@ -2767,11 +2771,11 @@ interface F0TagCompanyProps {
2767
2771
  declare const F0TagCompany: WithDataTestIdReturnType<import("react").ForwardRefExoticComponent<F0TagCompanyProps & import("react").RefAttributes<HTMLDivElement>>>;
2768
2772
  //#endregion
2769
2773
  //#region src/elements/tags/F0TagPerson/types.d.ts
2770
- type F0TagPersonProps = {
2774
+ interface F0TagPersonProps {
2771
2775
  src?: string;
2772
2776
  name: string;
2773
2777
  deactivated?: boolean;
2774
- };
2778
+ }
2775
2779
  //#endregion
2776
2780
  //#region src/elements/tags/F0TagPerson/F0TagPerson.d.ts
2777
2781
  declare const F0TagPerson: WithDataTestIdReturnType<import("react").ForwardRefExoticComponent<F0TagPersonProps & import("react").RefAttributes<HTMLDivElement>>>;
@@ -2859,7 +2863,7 @@ type TagDataType<T extends string> = Extract<TagVariant, {
2859
2863
  }> extends (infer V) ? V extends unknown ? Omit<V, "type" | "description"> : never : never;
2860
2864
  declare const tagTypes: readonly ["dot", "person", "team", "company", "alert", "status", "balance", "raw"];
2861
2865
  type TagType = (typeof tagTypes)[number];
2862
- type TagTypeMapping = {
2866
+ interface TagTypeMapping {
2863
2867
  dot: TagDataType<"dot">;
2864
2868
  person: TagDataType<"person">;
2865
2869
  team: TagDataType<"team">;
@@ -2868,8 +2872,8 @@ type TagTypeMapping = {
2868
2872
  status: TagDataType<"status">;
2869
2873
  balance: TagDataType<"balance">;
2870
2874
  raw: TagDataType<"raw">;
2871
- };
2872
- type F0TagListProps<T extends TagType> = {
2875
+ }
2876
+ interface F0TagListProps<T extends TagType> {
2873
2877
  /**
2874
2878
  * The type of tags to display. Only one type can be used at a time.
2875
2879
  */
@@ -2887,7 +2891,7 @@ type F0TagListProps<T extends TagType> = {
2887
2891
  * The remaining number to display.
2888
2892
  */
2889
2893
  remainingCount?: number;
2890
- };
2894
+ }
2891
2895
  //#endregion
2892
2896
  //#region src/elements/value-display/types/tagList/tagList.d.ts
2893
2897
  type TagListValue = { [T in TagType]: Pick<F0TagListProps<T>, "type" | "tags" | "max">; }[TagType];
@@ -3220,7 +3224,7 @@ declare const F0Card: WithDataTestIdReturnType<import("react").ForwardRefExoticC
3220
3224
  *
3221
3225
  * Extensible: add new entity types here as needed (e.g. `team`, `department`).
3222
3226
  */
3223
- type EntityResolvers = {
3227
+ interface EntityResolvers {
3224
3228
  person?: (id: string) => Promise<PersonProfile>;
3225
3229
  candidate?: (id: string) => Promise<CandidateProfile>;
3226
3230
  expense?: (id: string) => Promise<ExpenseProfile>;
@@ -3232,7 +3236,7 @@ type EntityResolvers = {
3232
3236
  * in the chat input to let users reference specific employees.
3233
3237
  */
3234
3238
  searchPersons?: (query: string) => Promise<PersonProfile[]>;
3235
- };
3239
+ }
3236
3240
  /**
3237
3241
  * Map of URL builder functions keyed by entity type.
3238
3242
  * Each builder takes an entity ID and returns the URL to navigate to.
@@ -3240,14 +3244,14 @@ type EntityResolvers = {
3240
3244
  * When a URL builder is not provided for an entity type, the hover card
3241
3245
  * will not show a navigation action.
3242
3246
  */
3243
- type EntityUrlBuilders = {
3247
+ interface EntityUrlBuilders {
3244
3248
  person?: (id: string) => string;
3245
3249
  candidate?: (id: string) => string;
3246
3250
  expense?: (id: string) => string;
3247
3251
  jobPosting?: (id: string) => string;
3248
3252
  requisition?: (id: string) => string;
3249
3253
  vacancy?: (id: string) => string;
3250
- };
3254
+ }
3251
3255
  /**
3252
3256
  * Hover card content of a host-registered entity type. `avatar` is the card's
3253
3257
  * leading slot, where a person's avatar goes: an icon for most entities
@@ -3260,7 +3264,7 @@ type CustomEntityRefCard = Pick<F0CardProps, "title" | "description" | "avatar">
3260
3264
  * The ref renders exactly like a person mention: an `@label` chip whose
3261
3265
  * hover card is resolved on first open.
3262
3266
  */
3263
- type CustomEntityRefConfig = {
3267
+ interface CustomEntityRefConfig {
3264
3268
  /**
3265
3269
  * Lazily resolves the hover card the first time it opens. While it runs the
3266
3270
  * card shows a skeleton; when it is omitted or fails, the card shows the
@@ -3271,12 +3275,12 @@ type CustomEntityRefConfig = {
3271
3275
  avatar?: CustomEntityRefCard["avatar"];
3272
3276
  /** When set, the card gets a "View" action to this URL. */
3273
3277
  url?: (id: string) => string;
3274
- };
3278
+ }
3275
3279
  /**
3276
3280
  * Grouped configuration for entity references in the AI chat.
3277
3281
  * Combines resolver functions (data fetching) with URL builders (navigation).
3278
3282
  */
3279
- type EntityRefs = {
3283
+ interface EntityRefs {
3280
3284
  resolvers?: EntityResolvers;
3281
3285
  urls?: EntityUrlBuilders;
3282
3286
  /**
@@ -3287,10 +3291,10 @@ type EntityRefs = {
3287
3291
  * Types that are neither built in nor registered render as plain text.
3288
3292
  */
3289
3293
  custom?: Record<string, CustomEntityRefConfig>;
3290
- };
3294
+ }
3291
3295
  //#endregion
3292
3296
  //#region src/blocks/ApplicationFrame/SidePanel/panelWidth.d.ts
3293
- type PanelBounds = {
3297
+ interface PanelBounds {
3294
3298
  min: number;
3295
3299
  /** How far a deliberate drag may go — bounded by the content's hard floor. */
3296
3300
  max: number;
@@ -3304,7 +3308,7 @@ type PanelBounds = {
3304
3308
  autoMax: number;
3305
3309
  /** The frame is too narrow to split: the panel should cover it instead. */
3306
3310
  shouldOverlay: boolean;
3307
- };
3311
+ }
3308
3312
  //#endregion
3309
3313
  //#region src/blocks/ApplicationFrame/SidePanel/types.d.ts
3310
3314
  /**
@@ -3318,7 +3322,7 @@ type SidePanelLayout = "sidepanel" | "fullscreen";
3318
3322
  * `id` keys the content, so switching views unmounts the previous one and
3319
3323
  * mounts the next.
3320
3324
  */
3321
- type SidePanelContent = {
3325
+ interface SidePanelContent {
3322
3326
  id: string;
3323
3327
  content: React.ReactNode;
3324
3328
  /** The edge this content docks to. Overrides the panel's `contentSide`. */
@@ -3335,7 +3339,7 @@ type SidePanelContent = {
3335
3339
  * this.
3336
3340
  */
3337
3341
  maxWidth?: number;
3338
- };
3342
+ }
3339
3343
  /**
3340
3344
  * A product's claim on the panel.
3341
3345
  *
@@ -3346,7 +3350,7 @@ type SidePanelContent = {
3346
3350
  * the panel used to need a global `enabled` flag and why a customer with
3347
3351
  * communications and no assistant got no panel.
3348
3352
  */
3349
- type SidePanelViewDefinition = {
3353
+ interface SidePanelViewDefinition {
3350
3354
  /**
3351
3355
  * Names the claim on the panel — `"ai"` is f0's own. Host bookkeeping: the
3352
3356
  * panel never looks a view up by it, and the id it restores on reload is the
@@ -3371,8 +3375,8 @@ type SidePanelViewDefinition = {
3371
3375
  * @default false
3372
3376
  */
3373
3377
  restoresContent?: boolean;
3374
- };
3375
- type SidePanelContextValue = {
3378
+ }
3379
+ interface SidePanelContextValue {
3376
3380
  /**
3377
3381
  * Whether anything can occupy the panel. False means the panel does not
3378
3382
  * exist: no chrome, no reserved width, no DOM.
@@ -3425,7 +3429,7 @@ type SidePanelContextValue = {
3425
3429
  resizable: boolean;
3426
3430
  shouldPlayEntranceAnimation: boolean;
3427
3431
  setShouldPlayEntranceAnimation: React.Dispatch<React.SetStateAction<boolean>>;
3428
- };
3432
+ }
3429
3433
  //#endregion
3430
3434
  //#region src/addons/ai/ai/F0AiChat/types.d.ts
3431
3435
  /**
@@ -3434,15 +3438,15 @@ type SidePanelContextValue = {
3434
3438
  * with no field rename, but is owned by f0 — nothing in `src/` imports
3435
3439
  * from `@copilotkit/*` anymore.
3436
3440
  */
3437
- type F0ToolCall = {
3441
+ interface F0ToolCall {
3438
3442
  id: string;
3439
3443
  type?: "function";
3440
3444
  function: {
3441
3445
  name: string;
3442
3446
  arguments: string;
3443
3447
  };
3444
- };
3445
- type F0Message = {
3448
+ }
3449
+ interface F0Message {
3446
3450
  id: string;
3447
3451
  role: "user" | "assistant" | "system" | "tool";
3448
3452
  content?: unknown;
@@ -3458,7 +3462,7 @@ type F0Message = {
3458
3462
  */
3459
3463
  replyQuote?: string;
3460
3464
  [key: string]: any;
3461
- };
3465
+ }
3462
3466
  /** Assistant-flavoured `F0Message`. Same shape — alias kept for clarity. */
3463
3467
  type F0AIMessage = F0Message;
3464
3468
  /**
@@ -3467,13 +3471,13 @@ type F0AIMessage = F0Message;
3467
3471
  * When pairing with a tool-result message, provide the same `id`
3468
3472
  * in both the tool call and the tool-result's `toolCallId`.
3469
3473
  */
3470
- type AppendToolCall = {
3474
+ interface AppendToolCall {
3471
3475
  id?: string;
3472
3476
  function: {
3473
3477
  name: string;
3474
3478
  arguments: string;
3475
3479
  };
3476
- };
3480
+ }
3477
3481
  /**
3478
3482
  * A message to inject via appendMessages.
3479
3483
  * IDs are generated internally — callers only provide role, content, and
@@ -3500,36 +3504,36 @@ type AppendMessage = {
3500
3504
  * as `<pending-context>...</pending-context>` so the agent receives it.
3501
3505
  * The conversation is not created until the user actually sends a message.
3502
3506
  */
3503
- type PendingContext = {
3507
+ interface PendingContext {
3504
3508
  /** Human-readable label shown in the empty state (e.g. "Expenses dashboard") */
3505
3509
  label: string;
3506
3510
  /** Full context string prepended invisibly to the first user message */
3507
3511
  context: string;
3508
- };
3512
+ }
3509
3513
  /**
3510
3514
  * Quoted fragment the user is replying to. Shown as a chip above the
3511
3515
  * textarea and, on submit, rendered as a markdown blockquote at the top of
3512
3516
  * the resulting user message. The blockquote alone is enough context — the
3513
3517
  * conversation thread tells the agent what it refers to.
3514
3518
  */
3515
- type PendingQuote = {
3519
+ interface PendingQuote {
3516
3520
  /** Plain-text selection (markdown stripped by the browser's toString()). */
3517
3521
  text: string;
3518
- };
3522
+ }
3519
3523
  /**
3520
3524
  * Credits usage data returned by the host app
3521
3525
  */
3522
- type CreditsUsage = {
3526
+ interface CreditsUsage {
3523
3527
  used: number;
3524
3528
  total: number;
3525
- };
3529
+ }
3526
3530
  /**
3527
3531
  * Credits configuration for the AI chat.
3528
3532
  * Groups all credits-related props into a single object.
3529
3533
  *
3530
3534
  * When provided, a credits button is shown in the chat header.
3531
3535
  */
3532
- type AiChatCredits = {
3536
+ interface AiChatCredits {
3533
3537
  /** Async function to fetch credits usage. Called each time the popover opens. */
3534
3538
  fetchUsage: () => Promise<CreditsUsage>;
3535
3539
  /** URL to the plan upgrade page. When provided, a link is shown in the popover. */
@@ -3540,14 +3544,14 @@ type AiChatCredits = {
3540
3544
  companyLogoUrl?: string;
3541
3545
  /** Plan name displayed below the company name (e.g. "Free plan", "Enterprise"). */
3542
3546
  planName?: string;
3543
- };
3547
+ }
3544
3548
  /**
3545
3549
  * Credit warning configuration.
3546
3550
  * Groups severity level and action callbacks into a single object.
3547
3551
  *
3548
3552
  * When provided, a warning banner is shown above the chat textarea.
3549
3553
  */
3550
- type AiChatCreditWarning = {
3554
+ interface AiChatCreditWarning {
3551
3555
  /** The severity level of the warning. */
3552
3556
  level: "soft";
3553
3557
  /** Host-localized message; defaults to `ai.creditWarning.soft`. */
@@ -3563,17 +3567,17 @@ type AiChatCreditWarning = {
3563
3567
  * `onGetCredits` is provided. Hosts typically pass the `Upsell` icon.
3564
3568
  */
3565
3569
  getCreditsIcon?: IconType;
3566
- };
3570
+ }
3567
3571
  /**
3568
3572
  * Employee credits usage data returned by the host app.
3569
3573
  *
3570
3574
  * Represents the logged-in employee's personal monthly allocation,
3571
3575
  * independent of any company-wide pool.
3572
3576
  */
3573
- type EmployeeCreditsUsage = {
3577
+ interface EmployeeCreditsUsage {
3574
3578
  used: number;
3575
3579
  total: number;
3576
- };
3580
+ }
3577
3581
  /**
3578
3582
  * Employee credits configuration for the AI chat.
3579
3583
  *
@@ -3586,7 +3590,7 @@ type EmployeeCreditsUsage = {
3586
3590
  * Hosts that don't use per-employee allocations should keep using `credits`
3587
3591
  * and leave `employeeCredits` undefined; behavior is unchanged.
3588
3592
  */
3589
- type AiChatEmployeeCredits = {
3593
+ interface AiChatEmployeeCredits {
3590
3594
  /** Async function to fetch the employee's credits usage. Called each time the popover opens. */
3591
3595
  fetchUsage: () => Promise<EmployeeCreditsUsage>;
3592
3596
  /** Company name displayed in the popover header. */
@@ -3595,7 +3599,7 @@ type AiChatEmployeeCredits = {
3595
3599
  companyLogoUrl?: string;
3596
3600
  /** Plan name displayed below the company name (e.g. "Free plan", "Enterprise"). */
3597
3601
  planName?: string;
3598
- };
3602
+ }
3599
3603
  /**
3600
3604
  * Interaction mode for the AI chat
3601
3605
  */
@@ -3607,12 +3611,12 @@ type VisualizationMode = "sidepanel" | "fullscreen" | "canvas";
3607
3611
  /**
3608
3612
  * Tracking options for the AI chat
3609
3613
  */
3610
- type UploadedFile = {
3614
+ interface UploadedFile {
3611
3615
  url: string;
3612
3616
  filename: string;
3613
3617
  mimetype: string;
3614
- };
3615
- type AiChatFileAttachmentConfig = {
3618
+ }
3619
+ interface AiChatFileAttachmentConfig {
3616
3620
  onUploadFiles: (files: File[]) => Promise<UploadedFile[]>;
3617
3621
  allowedMimeTypes?: string | string[];
3618
3622
  /**
@@ -3620,9 +3624,9 @@ type AiChatFileAttachmentConfig = {
3620
3624
  * Omit or pass undefined for no limit.
3621
3625
  */
3622
3626
  maxFiles?: number;
3623
- };
3627
+ }
3624
3628
  /** What every composer-menu entry shows, whatever choosing it does. */
3625
- type AiChatComposerActionBase = {
3629
+ interface AiChatComposerActionBase {
3626
3630
  /**
3627
3631
  * Host-side bookkeeping — a key for the host's own list, and what it reads
3628
3632
  * back in analytics. The composer neither renders it nor keys the menu by it.
@@ -3644,7 +3648,7 @@ type AiChatComposerActionBase = {
3644
3648
  * label alone doesn't already imply.
3645
3649
  */
3646
3650
  disabledTooltip?: string;
3647
- };
3651
+ }
3648
3652
  /** An entry that DOES something and closes the menu. */
3649
3653
  type AiChatComposerActionItem = AiChatComposerActionBase & {
3650
3654
  type?: "action";
@@ -3672,9 +3676,9 @@ type AiChatComposerActionToggle = AiChatComposerActionBase & {
3672
3676
  onCheckedChange: (checked: boolean) => void;
3673
3677
  };
3674
3678
  /** A rule between groups of entries. Carries no label and nothing to press. */
3675
- type AiChatComposerActionSeparator = {
3679
+ interface AiChatComposerActionSeparator {
3676
3680
  type: "separator";
3677
- };
3681
+ }
3678
3682
  /**
3679
3683
  * An entry in the composer's attachment menu — see `composerActions` on
3680
3684
  * `F0AiChatTextArea`. Attaching a file is NOT one of these: the composer
@@ -3682,7 +3686,7 @@ type AiChatComposerActionSeparator = {
3682
3686
  * "Connectors" doesn't have to rewire the file picker to keep it.
3683
3687
  */
3684
3688
  type AiChatComposerAction = AiChatComposerActionItem | AiChatComposerActionSubmenu | AiChatComposerActionToggle | AiChatComposerActionSeparator;
3685
- type TranscribeOptions = {
3689
+ interface TranscribeOptions {
3686
3690
  /**
3687
3691
  * Primary channel for live dictation: fires with the cumulative transcript
3688
3692
  * as it streams in, so the composer can fill the textarea while the user
@@ -3691,7 +3695,7 @@ type TranscribeOptions = {
3691
3695
  onPartial: (text: string) => void;
3692
3696
  /** Aborted when the user cancels an in-flight transcription. */
3693
3697
  signal?: AbortSignal;
3694
- };
3698
+ }
3695
3699
  /**
3696
3700
  * Transcribes a recorded audio blob to text (voice dictation). The returned
3697
3701
  * promise resolves with the final transcript; `onPartial` delivers
@@ -3704,13 +3708,13 @@ type TranscribeFn = (audio: Blob, options: TranscribeOptions) => Promise<string>
3704
3708
  * analytics layer (e.g. Amplitude) needs to attribute the click: the picked
3705
3709
  * sub-item, its parent group, and the resolved prompt that was actually sent.
3706
3710
  */
3707
- type WelcomeSuggestionClickEvent = {
3711
+ interface WelcomeSuggestionClickEvent {
3708
3712
  item: WelcomeScreenSuggestionItem;
3709
3713
  group: WelcomeScreenSuggestion;
3710
3714
  /** Prompt actually sent to the AI — `item.prompt` falling back to `item.title`. */
3711
3715
  prompt: string;
3712
- };
3713
- type AiChatTrackingOptions = {
3716
+ }
3717
+ interface AiChatTrackingOptions {
3714
3718
  onVisibility?: () => void;
3715
3719
  onClose?: () => void;
3716
3720
  onWelcomeSuggestionClick?: (event: WelcomeSuggestionClickEvent) => void;
@@ -3720,11 +3724,11 @@ type AiChatTrackingOptions = {
3720
3724
  onDictationStart?: () => void;
3721
3725
  /** Dictation discarded by the user, while recording or mid-transcription. */
3722
3726
  onDictationCancel?: () => void;
3723
- };
3727
+ }
3724
3728
  /**
3725
3729
  * Props for the AiChatProvider component
3726
3730
  */
3727
- type AiChatProviderProps = {
3731
+ interface AiChatProviderProps {
3728
3732
  enabled?: boolean;
3729
3733
  /**
3730
3734
  * Edge the whole side panel docks to (AI chat, hosted content and canvas).
@@ -3897,27 +3901,27 @@ type AiChatProviderProps = {
3897
3901
  chatOverlay?: React.ReactNode;
3898
3902
  /** Children rendered inside the provider. */
3899
3903
  children?: React.ReactNode;
3900
- };
3904
+ }
3901
3905
  /**
3902
3906
  * A single sub-suggestion shown inside a welcome-screen group's popover.
3903
3907
  * The `title` is the label users see; `prompt` is what gets sent to the AI
3904
3908
  * when they click (falls back to `title` when omitted). They can diverge so
3905
3909
  * you can show a short, scannable title while sending a fully-formed prompt.
3906
3910
  */
3907
- type WelcomeScreenSuggestionItem = {
3911
+ interface WelcomeScreenSuggestionItem {
3908
3912
  title: string;
3909
3913
  prompt?: string;
3910
- };
3914
+ }
3911
3915
  /**
3912
3916
  * A welcome-screen group rendered as an outline button in the welcome row.
3913
3917
  * Clicking the group opens a popover listing its `items`. The number of groups
3914
3918
  * is not capped yet (unlike welcome cards, which top out at 4).
3915
3919
  */
3916
- type WelcomeScreenSuggestion = {
3920
+ interface WelcomeScreenSuggestion {
3917
3921
  icon: IconType;
3918
3922
  label: string;
3919
3923
  items: WelcomeScreenSuggestionItem[];
3920
- };
3924
+ }
3921
3925
  /**
3922
3926
  * A card shown below the composer on the fullscreen welcome screen, rendered
3923
3927
  * as an `F0CardHorizontal`. Each card owns its behavior via `onClick`, so
@@ -3927,7 +3931,7 @@ type WelcomeScreenSuggestion = {
3927
3931
  * The chat owns the layout; the host owns the interaction. Up to 4 cards are
3928
3932
  * rendered (a 2×2 grid); extras are dropped.
3929
3933
  */
3930
- type F0AiChatWelcomeCard = {
3934
+ interface F0AiChatWelcomeCard {
3931
3935
  /** Stable identifier, also used as the React key. */
3932
3936
  id: string;
3933
3937
  icon: IconType;
@@ -3945,11 +3949,11 @@ type F0AiChatWelcomeCard = {
3945
3949
  * `onClick` renders as non-interactive.
3946
3950
  */
3947
3951
  onClick?: () => void;
3948
- };
3952
+ }
3949
3953
  /**
3950
3954
  * Disclaimer configuration for the chat input
3951
3955
  */
3952
- type AiChatDisclaimer = {
3956
+ interface AiChatDisclaimer {
3953
3957
  text: string;
3954
3958
  link?: string;
3955
3959
  linkText?: string;
@@ -3960,7 +3964,7 @@ type AiChatDisclaimer = {
3960
3964
  * any specific behaviour.
3961
3965
  */
3962
3966
  onClick?: () => void;
3963
- };
3967
+ }
3964
3968
  /**
3965
3969
  * Translation shape helper type
3966
3970
  */
@@ -4162,7 +4166,7 @@ interface AiChatTranslationsProviderProps {
4162
4166
  children: React.ReactNode;
4163
4167
  translations: AiChatTranslations;
4164
4168
  }
4165
- type AiChatUsageLimitsSection = {
4169
+ interface AiChatUsageLimitsSection {
4166
4170
  id: string;
4167
4171
  /** Already localized. */
4168
4172
  label: string;
@@ -4170,12 +4174,12 @@ type AiChatUsageLimitsSection = {
4170
4174
  description?: string;
4171
4175
  usedPercentage: number;
4172
4176
  unlimited?: boolean;
4173
- };
4177
+ }
4174
4178
  /**
4175
4179
  * Host-resolved numbers for `F0AiChatUsageLimitsButton`. Percentages only: the
4176
4180
  * product avoids credit counts in the chat.
4177
4181
  */
4178
- type AiChatUsageLimits = {
4182
+ interface AiChatUsageLimits {
4179
4183
  /** The viewer's own allowance, 0–100. */
4180
4184
  usedPercentage: number;
4181
4185
  /** Already localized, e.g. "Resets in 3h 6m". */
@@ -4185,7 +4189,7 @@ type AiChatUsageLimits = {
4185
4189
  sections?: AiChatUsageLimitsSection[];
4186
4190
  /** Renders the "Your company" row. */
4187
4191
  onSeeCompany?: () => void;
4188
- };
4192
+ }
4189
4193
  //#endregion
4190
4194
  //#region src/addons/ai/ai/F0AiChat/F0AiChat.d.ts
4191
4195
  /**
@@ -4241,7 +4245,7 @@ declare const markdownRenderers: MarkdownTagRenderers;
4241
4245
  * Most fields are optional / wide on purpose — the headless renders
4242
4246
  * what it finds and ignores the rest.
4243
4247
  */
4244
- type Message = {
4248
+ interface Message {
4245
4249
  id?: string;
4246
4250
  role?: string;
4247
4251
  content?: unknown;
@@ -4263,7 +4267,7 @@ type Message = {
4263
4267
  */
4264
4268
  replyQuote?: string;
4265
4269
  [key: string]: any;
4266
- };
4270
+ }
4267
4271
  /** Assistant-flavoured `Message`. Same shape — alias for self-documentation. */
4268
4272
  type AIMessage = Message;
4269
4273
  /**
@@ -4276,7 +4280,7 @@ type AIMessage = Message;
4276
4280
  * assistant messages → optional inline live-thinking message → optional
4277
4281
  * end-of-turn indicator → optional feedback footer.
4278
4282
  */
4279
- type RenderableTurn = {
4283
+ interface RenderableTurn {
4280
4284
  /** Messages rendered before the thinking section (typically the user message). */
4281
4285
  userMessages: Message[];
4282
4286
  /**
@@ -4331,9 +4335,9 @@ type RenderableTurn = {
4331
4335
  /** Reference message attached to feedback submissions. */
4332
4336
  targetMessage: Message;
4333
4337
  };
4334
- };
4338
+ }
4335
4339
  /** Props for the Thinking collapsible section. */
4336
- type ThinkingProps = {
4340
+ interface ThinkingProps {
4337
4341
  /** Pre-parsed step titles to show inside the collapsed group. */
4338
4342
  titles: string[];
4339
4343
  /** Section heading (defaults to "Thoughts" from i18n). */
@@ -4355,12 +4359,12 @@ type ThinkingProps = {
4355
4359
  * running, and nothing is rendered.
4356
4360
  */
4357
4361
  startedAt?: number | null;
4358
- };
4362
+ }
4359
4363
  //#endregion
4360
4364
  //#region src/addons/ai/ai/F0AiMessagesContainer/components/AssistantMessage.d.ts
4361
4365
  /** Read the tool call ID injected by AssistantMessage. */
4362
4366
  declare const useToolCallId: () => string | undefined;
4363
- type F0AssistantMessageExtraProps = {
4367
+ interface F0AssistantMessageExtraProps {
4364
4368
  /**
4365
4369
  * Returns a React node for the message's tool call, or null when there is
4366
4370
  * nothing to render. The container's connected wrapper closes over the
@@ -4378,11 +4382,11 @@ type F0AssistantMessageExtraProps = {
4378
4382
  * plain whitespace-preserving fallback is used instead.
4379
4383
  */
4380
4384
  renderMarkdown?: (content: string) => ReactNode;
4381
- };
4385
+ }
4382
4386
  //#endregion
4383
4387
  //#region src/addons/ai/ai/F0AiMessagesContainer/components/feedback/FeedbackProvider.d.ts
4384
4388
  type UserReaction = "like" | "dislike";
4385
- type FeedbackConfig = {
4389
+ interface FeedbackConfig {
4386
4390
  threadId: string;
4387
4391
  onThumbsUp: (msg: AIMessage, ctx: {
4388
4392
  threadId: string;
@@ -4392,7 +4396,7 @@ type FeedbackConfig = {
4392
4396
  threadId: string;
4393
4397
  feedback: string;
4394
4398
  }) => void;
4395
- };
4399
+ }
4396
4400
  //#endregion
4397
4401
  //#region src/addons/ai/ai/F0AiMessagesContainer/components/WelcomeScreen.d.ts
4398
4402
  /**
@@ -4400,15 +4404,15 @@ type FeedbackConfig = {
4400
4404
  * "How to use One" shortcut). The host owns `onClick`; f0 owns the pill styling
4401
4405
  * so it stays consistent with the rest of the welcome screen.
4402
4406
  */
4403
- type WelcomeScreenCta = {
4407
+ interface WelcomeScreenCta {
4404
4408
  label: string;
4405
4409
  icon?: IconType;
4406
4410
  onClick: () => void;
4407
- };
4411
+ }
4408
4412
  //#endregion
4409
4413
  //#region src/addons/ai/ai/F0AiMessagesContainer/F0AiMessagesContainer.d.ts
4410
4414
  type MessageSlotComponent = ComponentType<any>;
4411
- type F0AiMessagesContainerProps = {
4415
+ interface F0AiMessagesContainerProps {
4412
4416
  /** Optional override for the assistant bubble component. */
4413
4417
  AssistantMessage?: MessageSlotComponent;
4414
4418
  /** Optional override for the user bubble component. */
@@ -4469,7 +4473,7 @@ type F0AiMessagesContainerProps = {
4469
4473
  noShadows?: boolean;
4470
4474
  /** Passthrough children appended after the last turn (CopilotKit parity). */
4471
4475
  children?: ReactNode;
4472
- };
4476
+ }
4473
4477
  declare const F0AiMessagesContainer: (props: F0AiMessagesContainerProps) => import("react").JSX.Element;
4474
4478
  //#endregion
4475
4479
  //#region src/addons/ai/ai/F0AiChat/internal-types.d.ts
@@ -4767,46 +4771,46 @@ declare const Weekdays: import("react").ForwardRefExoticComponent<WeekdaysProps
4767
4771
  //#endregion
4768
4772
  //#region src/elements/DataList/types/actions.d.ts
4769
4773
  type ActionType = CopyActionType | NavigateActionType | OpenLinkActionType;
4770
- type CopyActionType = {
4774
+ interface CopyActionType {
4771
4775
  type: "copy";
4772
4776
  text?: string;
4773
- };
4774
- type NavigateActionType = {
4777
+ }
4778
+ interface NavigateActionType {
4775
4779
  type: "navigate";
4776
4780
  href: string;
4777
- };
4778
- type OpenLinkActionType = {
4781
+ }
4782
+ interface OpenLinkActionType {
4779
4783
  type: "open-link";
4780
4784
  href: string;
4781
- };
4785
+ }
4782
4786
  //#endregion
4783
4787
  //#region src/elements/DataList/types/items.d.ts
4784
- type DataListProps = {
4788
+ interface DataListProps {
4785
4789
  children: ReactElement | ReactElement[];
4786
4790
  label?: string;
4787
4791
  isHorizontal?: boolean;
4788
- };
4789
- type ItemProps = {
4792
+ }
4793
+ interface ItemProps {
4790
4794
  text: string;
4791
4795
  icon?: IconType;
4792
4796
  action?: ActionType;
4793
- };
4797
+ }
4794
4798
  type URL = string;
4795
- type EmployeeItemProps = {
4799
+ interface EmployeeItemProps {
4796
4800
  firstName: string;
4797
4801
  lastName: string;
4798
4802
  avatarUrl?: URL;
4799
4803
  action?: ActionType;
4800
- };
4801
- type CompanyItemProps = {
4804
+ }
4805
+ interface CompanyItemProps {
4802
4806
  name: string;
4803
4807
  avatarUrl?: URL;
4804
4808
  action?: ActionType;
4805
- };
4806
- type TeamItemProps = {
4809
+ }
4810
+ interface TeamItemProps {
4807
4811
  name: string;
4808
4812
  action?: ActionType;
4809
- };
4813
+ }
4810
4814
  //#endregion
4811
4815
  //#region src/elements/tags/F0TagDot/F0TagDot.d.ts
4812
4816
  declare const F0TagDot: WithDataTestIdReturnType<import("react").ForwardRefExoticComponent<Props$2 & import("react").RefAttributes<HTMLDivElement>>>;
@@ -4816,10 +4820,10 @@ declare const F0TagRaw: WithDataTestIdReturnType<import("react").ForwardRefExoti
4816
4820
  //#endregion
4817
4821
  //#region src/elements/tags/F0TagList/components/TagCounter.d.ts
4818
4822
  type TagCounterItem = TagVariant;
4819
- type Props = {
4823
+ interface Props {
4820
4824
  count: number;
4821
4825
  list?: TagCounterItem[];
4822
- };
4826
+ }
4823
4827
  declare function TagCounter({ count, list }: Props): import("react").JSX.Element;
4824
4828
  declare namespace TagCounter {
4825
4829
  var displayName: string;
@@ -4839,7 +4843,7 @@ declare const DataList: import("react").ForwardRefExoticComponent<DataListProps
4839
4843
  PersonItem: import("react").ForwardRefExoticComponent<EmployeeItemProps & import("react").RefAttributes<HTMLLIElement>>;
4840
4844
  TeamItem: import("react").ForwardRefExoticComponent<TeamItemProps & import("react").RefAttributes<HTMLLIElement>>;
4841
4845
  DotTagItem: import("react").ForwardRefExoticComponent<Props$2 & import("react").RefAttributes<HTMLLIElement>>;
4842
- AlertTagItem: import("react").ForwardRefExoticComponent<Props$1 & import("react").RefAttributes<HTMLLIElement>>;
4846
+ AlertTagItem: import("react").ForwardRefExoticComponent<Props$1<string> & import("react").RefAttributes<HTMLLIElement>>;
4843
4847
  BalanceTagItem: import("react").ForwardRefExoticComponent<F0TagBalanceProps & import("react").RefAttributes<HTMLLIElement>>;
4844
4848
  StatusTagItem: import("react").ForwardRefExoticComponent<F0TagStatusProps & import("react").RefAttributes<HTMLLIElement>>;
4845
4849
  RawTagItem: import("react").ForwardRefExoticComponent<F0TagRawProps & import("react").RefAttributes<HTMLLIElement>>;
@@ -4849,12 +4853,12 @@ declare const DataList: import("react").ForwardRefExoticComponent<DataListProps
4849
4853
  };
4850
4854
  //#endregion
4851
4855
  //#region src/elements/F0FileItem/F0FileItem.d.ts
4852
- type F0FileAction = {
4856
+ interface F0FileAction {
4853
4857
  icon?: IconType;
4854
4858
  label: string;
4855
4859
  onClick: () => void;
4856
4860
  critical?: boolean;
4857
- };
4861
+ }
4858
4862
  declare const f0FileItemSizes: readonly ["md", "lg"];
4859
4863
  type F0FileItemSize = (typeof f0FileItemSizes)[number];
4860
4864
  interface F0FileItemProps extends HTMLAttributes<HTMLDivElement> {