@factorialco/f0-react 2.20.1 → 2.22.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.
@@ -1 +1 @@
1
- .rich-text-editor-container a.mention:not([data-type=mention]),.rich-text-display-container a.mention:not([data-type=mention]){border-radius:.375rem;background-color:hsl(var(--neutral-10));padding-left:6px!important;padding-right:6px!important;font-weight:500;color:hsl(var(--neutral-100));text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.rich-text-editor-container a.mention:not([data-type=mention]):hover,.rich-text-display-container a.mention:not([data-type=mention]):hover{background-color:hsl(var(--neutral-20))}.rich-text-editor-container a.mention:not([data-type=mention]):focus,.rich-text-display-container a.mention:not([data-type=mention]):focus{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:hsl(var(--selected-50))}.preserved-selection{background-color:hsl(var(--selected-60) / .2)}.enhance-highlight{background:linear-gradient(90deg,#e5561980,#a1ade580,#e5194380,#e5561980);background-size:300% 100%;animation:enhance-gradient-move 3s linear infinite;border-radius:4px}@keyframes enhance-gradient-move{0%{background-position:0% 50%}to{background-position:100% 50%}}.rich-text-editor-container *::-moz-selection{background-color:transparent!important}.rich-text-editor-container *::selection{background-color:transparent!important}.rich-text-editor-container::-moz-selection{background-color:transparent!important}.rich-text-editor-container::selection{background-color:transparent!important}.rich-text-editor-container p,.rich-text-display-container p{position:relative;margin:0 0 8px}.rich-text-editor-container p:last-child,.rich-text-display-container p:last-child{margin-bottom:0}.rich-text-editor-container h1,.rich-text-display-container h1{margin:0 0 12px;padding:0;font-size:1.625rem;line-height:2rem;letter-spacing:-.01em;font-weight:600}.rich-text-editor-container h2,.rich-text-display-container h2{margin:0 0 10px;padding:0;font-size:1.375rem;line-height:1.75rem;letter-spacing:-.01em;font-weight:500}.rich-text-editor-container h3,.rich-text-display-container h3,.rich-text-editor-container h4,.rich-text-display-container h4{margin:0 0 10px;padding:0;font-size:1rem;line-height:1.5rem;letter-spacing:-.01em;font-weight:500}.rich-text-editor-container ul,.rich-text-display-container ul{margin:0 0 10px;list-style:disc}.rich-text-editor-container ol,.rich-text-display-container ol{margin:0 0 10px;list-style-type:decimal}.rich-text-editor-container a:not([data-type=mention]):not(.mention),.rich-text-display-container a:not([data-type=mention]):not(.mention){cursor:pointer;font-weight:500;color:hsl(var(--neutral-100));text-decoration-line:underline;text-decoration-color:hsl(var(--neutral-40));text-decoration-thickness:1px;text-underline-offset:5px}.rich-text-editor-container a:not([data-type=mention]):not(.mention):hover,.rich-text-display-container a:not([data-type=mention]):not(.mention):hover{text-decoration-color:hsl(var(--neutral-100))}.rich-text-editor-container strong,.rich-text-display-container strong{font-weight:600}.rich-text-editor-container em,.rich-text-display-container em{font-style:italic}.rich-text-editor-container u,.rich-text-display-container u{text-decoration-line:underline}.rich-text-editor-container s,.rich-text-display-container s{text-decoration-line:line-through}.rich-text-editor-container .f1-bullet-list,.rich-text-display-container .f1-bullet-list{list-style-type:disc}.rich-text-editor-container .f1-ordered-list,.rich-text-display-container .f1-ordered-list{list-style-type:decimal}.rich-text-editor-container ul,.rich-text-editor-container ol,.rich-text-display-container ul,.rich-text-display-container ol{padding-left:20px}.rich-text-editor-container .f1-ordered-list p,.rich-text-display-container .f1-ordered-list p,.rich-text-editor-container .f1-bullet-list p,.rich-text-display-container .f1-bullet-list p{margin-left:8px}.rich-text-editor-container li,.rich-text-display-container li{margin-bottom:8px}.rich-text-editor-container pre,.rich-text-display-container pre{position:relative;margin:16px 0;overflow-x:auto;white-space:pre-wrap;border-radius:.75rem;background-color:hsl(var(--neutral-10));padding:8px}.rich-text-editor-container code,.rich-text-display-container code{font-size:.75rem;line-height:1rem;font-family:Menlo,Consolas,Monaco,monospace}.rich-text-editor-container blockquote,.rich-text-display-container blockquote{margin:0 0 10px;border-width:0px;border-left-width:4px;border-style:solid;border-color:hsl(var(--neutral-30));padding-left:16px}.ProseMirror:focus,.rich-text-display-container:focus{outline:2px solid transparent;outline-offset:2px}.ProseMirror-selectednode{outline:none!important}.rich-text-editor-container hr,.rich-text-display-container hr{margin-top:12px;margin-bottom:12px;border-width:0px;border-top-width:1px;border-color:hsl(var(--neutral-30))}.rich-text-editor-container mark,.rich-text-display-container mark{border-radius:.375rem;background-color:hsl(var(--promote-50) / .3);padding:2px;color:hsl(var(--neutral-100))}.rich-text-editor-container p:empty:before,.rich-text-display-container p:empty:before{content:" "}.rich-text-editor-container ul[data-type=taskList],.rich-text-display-container ul[data-type=taskList]{padding-left:0}.shadow-editor-tools{box-shadow:0 -4px 20px #0d162514}.scrollbar-macos{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}.scrollbar-macos::-webkit-scrollbar{width:8px}.scrollbar-macos::-webkit-scrollbar-track{background:var(--scrollbar-track)}.scrollbar-macos::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:9999px;border:2px solid transparent;background-clip:padding-box}.scrollbar-macos::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover)}.f1-task-item{margin-bottom:8px;display:flex;list-style-type:none;gap:8px}.f1-task-item div{flex:1 1 0%}.f1-task-item input{-moz-appearance:none;appearance:none;-webkit-appearance:none;position:relative;height:1.25rem;width:1.25rem;flex-shrink:0;cursor:pointer;border-radius:.375rem;border-width:1px;border-style:solid;border-color:hsl(var(--neutral-30));background-color:hsl(var(--neutral-0));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.f1-task-item input:hover{border-color:hsl(var(--neutral-40))}.f1-task-item input:checked{border-color:hsl(var(--selected-50) / .4);background-color:hsl(var(--selected-60))}.f1-task-item[data-checked=true]>div>p{color:hsl(var(--neutral-50));text-decoration-line:line-through}.f1-task-item input:checked:after{position:absolute;top:50%;left:50%;height:1rem;width:1rem;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));content:"";background-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.75 16.75L17.75 7.25004' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M6.25 11.75L10.75 16.75' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;background-size:contain}.f1-task-item-content{min-width:0px;flex:1 1 0%;outline:none}.f1-task-item[data-checked=true] .f1-task-item-content{color:hsl(var(--neutral-50));text-decoration-line:line-through}.f1-task-item-content p{margin:0}.tiptap p.is-empty:before{pointer-events:none;float:left;display:block;height:0px;max-width:100%;text-overflow:ellipsis;white-space:nowrap;color:hsl(var(--neutral-40));content:attr(data-placeholder)}.editor-mood-tracker p{margin:0}.rich-text-details{margin-top:0;margin-bottom:0;display:flex;gap:8px;padding-top:4px;padding-bottom:4px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.rich-text-details summary{font-size:1rem;line-height:1.5rem;letter-spacing:-.01em;font-weight:600}.rich-text-details summary::marker{content:""}.rich-text-details>button{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:.375rem;background-color:hsl(var(--neutral-0))}.rich-text-details>button:hover{background-color:hsl(var(--neutral-10))}.rich-text-details>button:before{font-size:.625rem;line-height:.75rem;color:hsl(var(--neutral-100));content:"▶"}.rich-text-details.is-open>button:before{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rich-text-details>div{display:flex;width:100%;flex-direction:column;gap:8px}.rich-text-details>div>[data-type=detailsContent]>:last-child{margin-bottom:8px}.rich-text-details.rich-text-details{margin-bottom:8px}.image-resizable-wrapper{max-width:100%}.image-resize-handle{z-index:10}.shine-text{background:linear-gradient(90deg,#888 0% 33%,#aaa 50%,#888 66% 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:shine 1.5s ease-in-out infinite}@keyframes shine{0%{background-position:200% 0}to{background-position:-200% 0}}
1
+ .rich-text-editor-container a.mention:not([data-type=mention]),.rich-text-display-container a.mention:not([data-type=mention]){border-radius:.375rem;background-color:hsl(var(--neutral-10));padding-left:6px!important;padding-right:6px!important;font-weight:500;color:hsl(var(--neutral-100));text-decoration-line:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.rich-text-editor-container a.mention:not([data-type=mention]):hover,.rich-text-display-container a.mention:not([data-type=mention]):hover{background-color:hsl(var(--neutral-20))}.rich-text-editor-container a.mention:not([data-type=mention]):focus,.rich-text-display-container a.mention:not([data-type=mention]):focus{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:hsl(var(--selected-50))}.preserved-selection{background-color:hsl(var(--selected-60) / .2)}.enhance-highlight{background:linear-gradient(90deg,#e5561980,#a1ade580,#e5194380,#e5561980);background-size:300% 100%;animation:enhance-gradient-move 3s linear infinite;border-radius:4px}@keyframes enhance-gradient-move{0%{background-position:0% 50%}to{background-position:100% 50%}}.rich-text-editor-container *::-moz-selection{background-color:transparent!important}.rich-text-editor-container *::selection{background-color:transparent!important}.rich-text-editor-container::-moz-selection{background-color:transparent!important}.rich-text-editor-container::selection{background-color:transparent!important}.rich-text-editor-container p,.rich-text-display-container p{position:relative;margin:0 0 8px}.rich-text-editor-container p:last-child,.rich-text-display-container p:last-child{margin-bottom:0}.rich-text-editor-container h1,.rich-text-display-container h1{margin:0 0 12px;padding:0;font-size:1.625rem;line-height:2rem;letter-spacing:-.01em;font-weight:600}.rich-text-editor-container h2,.rich-text-display-container h2{margin:0 0 10px;padding:0;font-size:1.375rem;line-height:1.75rem;letter-spacing:-.01em;font-weight:500}.rich-text-editor-container h3,.rich-text-display-container h3,.rich-text-editor-container h4,.rich-text-display-container h4{margin:0 0 10px;padding:0;font-size:1rem;line-height:1.5rem;letter-spacing:-.01em;font-weight:500}.rich-text-editor-container ul,.rich-text-display-container ul{margin:0 0 10px;list-style:disc}.rich-text-editor-container ol,.rich-text-display-container ol{margin:0 0 10px;list-style-type:decimal}.rich-text-editor-container a:not([data-type=mention]):not(.mention),.rich-text-display-container a:not([data-type=mention]):not(.mention){cursor:pointer;font-weight:500;color:hsl(var(--neutral-100));text-decoration-line:underline;text-decoration-color:hsl(var(--neutral-40));text-decoration-thickness:1px;text-underline-offset:5px}.rich-text-editor-container a:not([data-type=mention]):not(.mention):hover,.rich-text-display-container a:not([data-type=mention]):not(.mention):hover{text-decoration-color:hsl(var(--neutral-100))}.rich-text-editor-container strong,.rich-text-display-container strong{font-weight:600}.rich-text-editor-container em,.rich-text-display-container em{font-style:italic}.rich-text-editor-container u,.rich-text-display-container u{text-decoration-line:underline}.rich-text-editor-container s,.rich-text-display-container s{text-decoration-line:line-through}.rich-text-editor-container .f1-bullet-list,.rich-text-display-container .f1-bullet-list{list-style-type:disc}.rich-text-editor-container .f1-ordered-list,.rich-text-display-container .f1-ordered-list{list-style-type:decimal}.rich-text-editor-container ul,.rich-text-editor-container ol,.rich-text-display-container ul,.rich-text-display-container ol{padding-left:20px}.rich-text-editor-container .f1-ordered-list p,.rich-text-display-container .f1-ordered-list p,.rich-text-editor-container .f1-bullet-list p,.rich-text-display-container .f1-bullet-list p{margin-left:8px}.rich-text-editor-container li,.rich-text-display-container li{margin-bottom:8px}.rich-text-editor-container pre,.rich-text-display-container pre{position:relative;margin:16px 0;overflow-x:auto;white-space:pre-wrap;border-radius:.75rem;background-color:hsl(var(--neutral-10));padding:8px}.rich-text-editor-container code,.rich-text-display-container code{font-size:.75rem;line-height:1rem;font-family:Menlo,Consolas,Monaco,monospace}.rich-text-editor-container blockquote,.rich-text-display-container blockquote{margin:0 0 10px;border-width:0px;border-left-width:4px;border-style:solid;border-color:hsl(var(--neutral-30));padding-left:16px}.ProseMirror:focus,.rich-text-display-container:focus{outline:2px solid transparent;outline-offset:2px}.ProseMirror-selectednode{outline:none!important}.rich-text-editor-container hr,.rich-text-display-container hr{margin-top:12px;margin-bottom:12px;border-width:0px;border-top-width:1px;border-color:hsl(var(--neutral-30))}.rich-text-editor-container mark,.rich-text-display-container mark{border-radius:.375rem;background-color:hsl(var(--promote-50) / .3);padding:2px;color:hsl(var(--neutral-100))}.rich-text-editor-container p:empty:before,.rich-text-display-container p:empty:before{content:" "}.rich-text-editor-container ul[data-type=taskList],.rich-text-display-container ul[data-type=taskList]{padding-left:0}.shadow-editor-tools{box-shadow:0 -4px 20px #0d162514}.scrollbar-macos{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}.scrollbar-macos::-webkit-scrollbar{width:8px}.scrollbar-macos::-webkit-scrollbar-track{background:var(--scrollbar-track)}.scrollbar-macos::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:9999px;border:2px solid transparent;background-clip:padding-box}.scrollbar-macos::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover)}.f1-task-item{margin-bottom:8px;display:flex;list-style-type:none;gap:8px}.f1-task-item div{flex:1 1 0%}.f1-task-item input{-moz-appearance:none;appearance:none;-webkit-appearance:none;position:relative;height:1.25rem;width:1.25rem;flex-shrink:0;cursor:pointer;border-radius:.375rem;border-width:1px;border-style:solid;border-color:hsl(var(--neutral-30));background-color:hsl(var(--neutral-0));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.f1-task-item input:hover{border-color:hsl(var(--neutral-40))}.f1-task-item input:checked{border-color:hsl(var(--selected-50) / .4);background-color:hsl(var(--selected-60))}.f1-task-item[data-checked=true]>div>p{color:hsl(var(--neutral-50));text-decoration-line:line-through}.f1-task-item input:checked:after{position:absolute;top:50%;left:50%;height:1rem;width:1rem;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));content:"";background-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.75 16.75L17.75 7.25004' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M6.25 11.75L10.75 16.75' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;background-size:contain}.f1-task-item-content{min-width:0px;flex:1 1 0%;outline:none}.f1-task-item[data-checked=true] .f1-task-item-content{color:hsl(var(--neutral-50));text-decoration-line:line-through}.f1-task-item-content p{margin:0}.tiptap p.is-empty:before{pointer-events:none;float:left;display:block;height:0px;max-width:100%;text-overflow:ellipsis;white-space:nowrap;color:hsl(var(--neutral-40));content:attr(data-placeholder)}.editor-mood-tracker p{margin:0}.rich-text-details{margin-top:0;margin-bottom:0;display:flex;gap:8px;padding-top:4px;padding-bottom:4px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.rich-text-details summary{font-size:1rem;line-height:1.5rem;letter-spacing:-.01em;font-weight:600}.rich-text-details summary::marker{content:""}.rich-text-details>button{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;border-radius:.375rem;background-color:hsl(var(--neutral-0))}.rich-text-details>button:hover{background-color:hsl(var(--neutral-10))}.rich-text-details>button:before{font-size:.625rem;line-height:.75rem;color:hsl(var(--neutral-100));content:"▶"}.rich-text-details.is-open>button:before{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rich-text-details>div{display:flex;width:100%;flex-direction:column;gap:8px}.rich-text-details>div>[data-type=detailsContent]>:last-child{margin-bottom:8px}.rich-text-details.rich-text-details{margin-bottom:8px}.image-resizable-wrapper{max-width:100%}.image-resize-handle{z-index:10}.shine-text{background:linear-gradient(90deg,#888 0% 35%,#f5f5f5 50%,#888 65% 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:shine 3s ease-in-out infinite}@keyframes shine{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes globe-spin-enter{0%{opacity:0;transform:scale(.8);filter:blur(4px)}to{opacity:1;transform:scale(1);filter:blur(0)}}@keyframes globe-spin-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.035)}}.globe-spin-anim{animation:globe-spin-enter .5s cubic-bezier(.33,1,.68,1) both,globe-spin-breathe 3.6s ease-in-out .5s infinite}@media(prefers-reduced-motion:reduce){.globe-spin-anim{animation:none}}
package/dist/ai.d.ts CHANGED
@@ -7,6 +7,7 @@ import { CompanyItemProps } from './types';
7
7
  import { ComponentProps } from 'react';
8
8
  import { ComponentType } from 'react';
9
9
  import { CopilotKitProps } from '@copilotkit/react-core';
10
+ import { CSSProperties } from 'react';
10
11
  import { EmployeeItemProps } from './types';
11
12
  import { F0TagBalanceProps as F0TagBalanceProps_2 } from './types';
12
13
  import { F0TagCompanyProps } from './types';
@@ -44,7 +45,7 @@ import { WithDataTestIdReturnType } from '../../../lib/data-testid';
44
45
 
45
46
  export declare type ActionItemStatus = (typeof actionItemStatuses)[number];
46
47
 
47
- export declare const actionItemStatuses: readonly ["inProgress", "executing", "completed"];
48
+ export declare const actionItemStatuses: readonly ["inProgress", "executing", "writing", "completed"];
48
49
 
49
50
  /* Excluded from this release type: AgentState */
50
51
 
@@ -136,7 +137,6 @@ export declare type AiChatMode = "chat" | "voice";
136
137
  */
137
138
  export declare type AiChatProviderProps = {
138
139
  enabled?: boolean;
139
- greeting?: string;
140
140
  initialMessage?: string | string[];
141
141
  welcomeScreenSuggestions?: WelcomeScreenSuggestion[];
142
142
  disclaimer?: AiChatDisclaimer;
@@ -392,7 +392,7 @@ declare type AiChatProviderReturnValue = {
392
392
  pendingQuote: PendingQuote | null;
393
393
  /** Set the pending quote (pass null to clear). */
394
394
  setPendingQuote: React.Dispatch<React.SetStateAction<PendingQuote | null>>;
395
- } & Pick<AiChatState, "greeting" | "agent" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments"> & {
395
+ } & Pick<AiChatState, "agent" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments"> & {
396
396
  /** The current canvas content, or null when canvas is closed */
397
397
  canvasContent: CanvasContent | null;
398
398
  /** Open the canvas panel with the given content */
@@ -411,7 +411,6 @@ declare type AiChatProviderReturnValue = {
411
411
  * Internal state for the AiChat provider
412
412
  */
413
413
  declare interface AiChatState {
414
- greeting?: string;
415
414
  enabled: boolean;
416
415
  agent?: string;
417
416
  initialMessage?: string | string[];
@@ -454,7 +453,7 @@ declare interface AiChatState {
454
453
  declare type AiChatTrackingOptions = {
455
454
  onVisibility?: () => void;
456
455
  onClose?: () => void;
457
- onWelcomeSuggestionClick?: (item: WelcomeScreenSuggestionItem) => void;
456
+ onWelcomeSuggestionClick?: (event: WelcomeSuggestionClickEvent) => void;
458
457
  onNewChat?: () => void;
459
458
  onMessage?: (message: Message) => void;
460
459
  };
@@ -522,7 +521,7 @@ export declare const aiTranslations: {
522
521
  readonly stopAnswerGeneration: "Stop generating";
523
522
  readonly responseStopped: "You stopped this response";
524
523
  readonly sendMessage: "Send message";
525
- readonly thoughtsGroupTitle: "Reflection";
524
+ readonly thoughtsGroupTitle: "Reasoning";
526
525
  readonly resourcesGroupTitle: "Resources";
527
526
  readonly thinking: "Thinking...";
528
527
  readonly feedbackModal: {
@@ -1120,7 +1119,19 @@ export declare interface ChatDashboardRadarChartConfig extends ChatDashboardChar
1120
1119
  showArea?: boolean;
1121
1120
  }
1122
1121
 
1123
- export declare const ChatSpinner: ForwardRefExoticComponent<Omit<SVGProps<SVGSVGElement>, "ref"> & RefAttributes<SVGSVGElement>>;
1122
+ export declare const ChatSpinner: ForwardRefExoticComponent<ChatSpinnerProps & RefAttributes<HTMLDivElement>>;
1123
+
1124
+ declare interface ChatSpinnerProps {
1125
+ size?: number;
1126
+ className?: string;
1127
+ style?: CSSProperties;
1128
+ /**
1129
+ * "default" → spins 2 rotations, pauses, repeats.
1130
+ * "continuous" → 2 rotations forward, then 2 backward, no pause. Used for
1131
+ * "writing"-style activity where the indicator should never rest.
1132
+ */
1133
+ variant?: "default" | "continuous";
1134
+ }
1124
1135
 
1125
1136
  export declare type ChatThread = {
1126
1137
  id: string;
@@ -1780,7 +1791,7 @@ export declare const defaultTranslations: {
1780
1791
  readonly stopAnswerGeneration: "Stop generating";
1781
1792
  readonly responseStopped: "You stopped this response";
1782
1793
  readonly sendMessage: "Send message";
1783
- readonly thoughtsGroupTitle: "Reflection";
1794
+ readonly thoughtsGroupTitle: "Reasoning";
1784
1795
  readonly resourcesGroupTitle: "Resources";
1785
1796
  readonly thinking: "Thinking...";
1786
1797
  readonly feedbackModal: {
@@ -2319,7 +2330,7 @@ export declare interface F0ActionItemProps {
2319
2330
  /**
2320
2331
  * Current status of the action item
2321
2332
  */
2322
- status?: "inProgress" | "executing" | "completed";
2333
+ status?: "inProgress" | "executing" | "writing" | "completed";
2323
2334
  /**
2324
2335
  * Whether the action item is part of a group
2325
2336
  */
@@ -2418,7 +2429,7 @@ export declare type F0AiChatHistoryProps = {
2418
2429
  /**
2419
2430
  * @experimental This is an experimental component use it at your own risk
2420
2431
  */
2421
- export declare const F0AiChatProvider: ({ enabled, greeting, initialMessage, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onThumbsUp, onThumbsDown, onBeforeSendMessage, runtimeFetch, children, agent, tracking, ...copilotKitProps }: AiChatProviderProps) => JSX_2.Element;
2432
+ export declare const F0AiChatProvider: ({ enabled, initialMessage, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onThumbsUp, onThumbsDown, onBeforeSendMessage, runtimeFetch, children, agent, tracking, ...copilotKitProps }: AiChatProviderProps) => JSX_2.Element;
2422
2433
 
2423
2434
  /**
2424
2435
  * Headless chat composer.
@@ -2494,8 +2505,9 @@ export declare type F0AiChatTextAreaProps = {
2494
2505
  * Hovering an item previews its prompt in the textarea placeholder.
2495
2506
  */
2496
2507
  welcomeScreenSuggestions?: WelcomeScreenSuggestion[];
2497
- /** Called when the user clicks a sub-suggestion. */
2498
- onSuggestionClick?: (item: WelcomeScreenSuggestionItem) => void;
2508
+ /** Called when the user clicks a sub-suggestion. Receives the picked
2509
+ * `item` and its parent `group` (the outline-button entry). */
2510
+ onSuggestionClick?: (item: WelcomeScreenSuggestionItem, group: WelcomeScreenSuggestion) => void;
2499
2511
  /**
2500
2512
  * When true, the composer adopts the fullscreen layout: the welcome
2501
2513
  * footer is pushed to the bottom and the disclaimer is hidden so the
@@ -2580,12 +2592,12 @@ export declare type F0AiMessagesContainerProps = {
2580
2592
  isLoadingThread?: boolean;
2581
2593
  /** Optional React node rendered inline at the end of the list (e.g. CopilotKit interrupt). */
2582
2594
  interrupt?: ReactNode;
2583
- /** Greeting shown above the initial message in the welcome screen. */
2584
- greeting?: string;
2585
- /** Initial message(s) shown in the welcome screen, or a default if omitted. */
2595
+ /** Welcome phrase shown centered when the chat is empty. Falls back to
2596
+ * `translations.ai.defaultInitialMessage` if omitted. */
2586
2597
  initialMessage?: string | string[];
2587
- /** Optional click on the One icon (factorial uses it for the pong easter egg). */
2588
- onWelcomeIconClick?: () => void;
2598
+ /** Called when the user clicks the welcome phrase (used by F0AiChat to open
2599
+ * the pong easter egg). When omitted the phrase is non-interactive. */
2600
+ onWelcomeClick?: () => void;
2589
2601
  /** Returns a React node for an assistant message's tool call, or null. */
2590
2602
  renderToolCall?: F0AssistantMessageExtraProps["renderToolCall"];
2591
2603
  /** Called when the user selects text and clicks Reply (user or assistant bubble). */
@@ -4031,6 +4043,18 @@ export declare type WelcomeScreenSuggestionItem = {
4031
4043
  prompt?: string;
4032
4044
  };
4033
4045
 
4046
+ /**
4047
+ * Payload for `tracking.onWelcomeSuggestionClick`. Carries everything an
4048
+ * analytics layer (e.g. Amplitude) needs to attribute the click: the picked
4049
+ * sub-item, its parent group, and the resolved prompt that was actually sent.
4050
+ */
4051
+ declare type WelcomeSuggestionClickEvent = {
4052
+ item: WelcomeScreenSuggestionItem;
4053
+ group: WelcomeScreenSuggestion;
4054
+ /** Prompt actually sent to the AI — `item.prompt` falling back to `item.title`. */
4055
+ prompt: string;
4056
+ };
4057
+
4034
4058
  declare type WithDataTestIdProps = {
4035
4059
  dataTestId?: string;
4036
4060
  };
@@ -4082,11 +4106,6 @@ declare module "gridstack" {
4082
4106
  }
4083
4107
 
4084
4108
 
4085
- declare namespace Calendar {
4086
- var displayName: string;
4087
- }
4088
-
4089
-
4090
4109
  declare module "@tiptap/core" {
4091
4110
  interface Commands<ReturnType> {
4092
4111
  aiBlock: {
@@ -4118,8 +4137,10 @@ declare module "@tiptap/core" {
4118
4137
 
4119
4138
  declare module "@tiptap/core" {
4120
4139
  interface Commands<ReturnType> {
4121
- transcript: {
4122
- insertTranscript: (data: TranscriptData) => ReturnType;
4140
+ videoEmbed: {
4141
+ setVideoEmbed: (options: {
4142
+ src: string;
4143
+ }) => ReturnType;
4123
4144
  };
4124
4145
  }
4125
4146
  }
@@ -4127,15 +4148,18 @@ declare module "@tiptap/core" {
4127
4148
 
4128
4149
  declare module "@tiptap/core" {
4129
4150
  interface Commands<ReturnType> {
4130
- videoEmbed: {
4131
- setVideoEmbed: (options: {
4132
- src: string;
4133
- }) => ReturnType;
4151
+ transcript: {
4152
+ insertTranscript: (data: TranscriptData) => ReturnType;
4134
4153
  };
4135
4154
  }
4136
4155
  }
4137
4156
 
4138
4157
 
4158
+ declare namespace Calendar {
4159
+ var displayName: string;
4160
+ }
4161
+
4162
+
4139
4163
  declare namespace F0GraphNodeWrapperInner {
4140
4164
  var displayName: string;
4141
4165
  }
package/dist/ai.js CHANGED
@@ -1,6 +1,6 @@
1
- import { C as e, D as r, i, F as o, l as t, m as n, a as F, o as C, p as A, q as l, g as u, r as d, h, j as m, k as c, d as I, I as P, P as f, c as g, n as p, e as v, u as T, f as y, b as S } from "./F0CanvasPanel-DNz4nej5.js";
1
+ import { C as e, D as r, i, F as o, l as t, m as n, a as F, o as C, p as A, q as l, g as u, r as d, h, j as m, k as c, d as I, I as P, P as f, c as g, n as p, e as v, u as T, f as y, b as S } from "./F0CanvasPanel-v9tjaOnW.js";
2
2
  import { defaultTranslations as H } from "./i18n-provider-defaults.js";
3
- import { A as b, f as M, F as O, i as j, h as k, j as D, d as q, e as w, c as z, a as B, g as E, o as L, u as G, b as J } from "./F0AiTableCard-8ATpfNg4.js";
3
+ import { A as b, f as M, F as O, i as j, h as k, j as D, d as q, e as w, c as z, a as B, g as E, o as L, u as G, b as J } from "./F0AiTableCard-BzXULBvr.js";
4
4
  export {
5
5
  b as AiChatTranslationsProvider,
6
6
  e as ChatSpinner,
@@ -502,7 +502,6 @@ declare type AiChatFileAttachmentConfig = {
502
502
  */
503
503
  declare type AiChatProviderProps = {
504
504
  enabled?: boolean;
505
- greeting?: string;
506
505
  initialMessage?: string | string[];
507
506
  welcomeScreenSuggestions?: WelcomeScreenSuggestion[];
508
507
  disclaimer?: AiChatDisclaimer;
@@ -602,7 +601,7 @@ declare type AiChatProviderProps = {
602
601
  declare type AiChatTrackingOptions = {
603
602
  onVisibility?: () => void;
604
603
  onClose?: () => void;
605
- onWelcomeSuggestionClick?: (item: WelcomeScreenSuggestionItem) => void;
604
+ onWelcomeSuggestionClick?: (event: WelcomeSuggestionClickEvent) => void;
606
605
  onNewChat?: () => void;
607
606
  onMessage?: (message: Message_2) => void;
608
607
  };
@@ -3149,7 +3148,7 @@ declare const defaultTranslations: {
3149
3148
  readonly stopAnswerGeneration: "Stop generating";
3150
3149
  readonly responseStopped: "You stopped this response";
3151
3150
  readonly sendMessage: "Send message";
3152
- readonly thoughtsGroupTitle: "Reflection";
3151
+ readonly thoughtsGroupTitle: "Reasoning";
3153
3152
  readonly resourcesGroupTitle: "Resources";
3154
3153
  readonly thinking: "Thinking...";
3155
3154
  readonly feedbackModal: {
@@ -8230,6 +8229,18 @@ declare type WelcomeScreenSuggestionItem = {
8230
8229
  prompt?: string;
8231
8230
  };
8232
8231
 
8232
+ /**
8233
+ * Payload for `tracking.onWelcomeSuggestionClick`. Carries everything an
8234
+ * analytics layer (e.g. Amplitude) needs to attribute the click: the picked
8235
+ * sub-item, its parent group, and the resolved prompt that was actually sent.
8236
+ */
8237
+ declare type WelcomeSuggestionClickEvent = {
8238
+ item: WelcomeScreenSuggestionItem;
8239
+ group: WelcomeScreenSuggestion;
8240
+ /** Prompt actually sent to the AI — `item.prompt` falling back to `item.title`. */
8241
+ prompt: string;
8242
+ };
8243
+
8233
8244
  /**
8234
8245
  * @experimental This is an experimental component use it at your own risk
8235
8246
  */
@@ -8427,11 +8438,6 @@ declare module "gridstack" {
8427
8438
  }
8428
8439
 
8429
8440
 
8430
- declare namespace Calendar {
8431
- var displayName: string;
8432
- }
8433
-
8434
-
8435
8441
  declare module "@tiptap/core" {
8436
8442
  interface Commands<ReturnType> {
8437
8443
  aiBlock: {
@@ -8463,8 +8469,10 @@ declare module "@tiptap/core" {
8463
8469
 
8464
8470
  declare module "@tiptap/core" {
8465
8471
  interface Commands<ReturnType> {
8466
- transcript: {
8467
- insertTranscript: (data: TranscriptData) => ReturnType;
8472
+ videoEmbed: {
8473
+ setVideoEmbed: (options: {
8474
+ src: string;
8475
+ }) => ReturnType;
8468
8476
  };
8469
8477
  }
8470
8478
  }
@@ -8472,15 +8480,18 @@ declare module "@tiptap/core" {
8472
8480
 
8473
8481
  declare module "@tiptap/core" {
8474
8482
  interface Commands<ReturnType> {
8475
- videoEmbed: {
8476
- setVideoEmbed: (options: {
8477
- src: string;
8478
- }) => ReturnType;
8483
+ transcript: {
8484
+ insertTranscript: (data: TranscriptData) => ReturnType;
8479
8485
  };
8480
8486
  }
8481
8487
  }
8482
8488
 
8483
8489
 
8490
+ declare namespace Calendar {
8491
+ var displayName: string;
8492
+ }
8493
+
8494
+
8484
8495
  declare namespace F0GraphNodeWrapperInner {
8485
8496
  var displayName: string;
8486
8497
  }
@@ -1,9 +1,9 @@
1
- import { s as ua, B as fa, t as ma, v as ha, w as At, x as De, y as ga, z as g, A as X, E as pe, u as se, T as pa, G as ba, H as xa, R as va, J as wa, K as ne, L as ya, M as gt, N as rt, O as Re, Q as _e, S as Na, U as Ca, V as W, W as ka, X as Sa, Y as ve, Z as sn, _ as Ia, $ as Fa, a0 as M, a1 as on, a2 as O, a3 as we, a4 as Aa, a5 as La, a6 as Ea, a7 as _a, a8 as Oa, a9 as ke, aa as cn, ab as Da, ac as be, ad as $e, ae as Ta, af as pt, k as dn, ag as Ce, ah as za, ai as un, aj as ae, ak as H, al as fn, am as Pa, an as Ba, ao as Ra, ap as mn, aq as $a, ar as hn, as as me, at as ee, au as Wa, av as Ma, aw as ja, ax as Va, ay as ge, az as Ge, aA as Ga, aB as Ha, aC as Ua, aD as Ka, aE as He, aF as gn, aG as qa, aH as Ya, aI as Za, aJ as We, aK as Xa, aL as Ja, aM as Qa, aN as er, aO as tr, aP as nr, aQ as ar, aR as rr, aS as lr, aT as sr, aU as lt, aV as st, aW as pn, aX as ir, aY as or, aZ as cr, a_ as dr, a$ as Ue, b0 as bt, b1 as bn, b2 as ur, b3 as xn, b4 as fr, b5 as mr, b6 as hr, b7 as Ee, b8 as gr, b9 as Te, ba as Lt, bb as it, bc as pr, bd as br, a as xr, c as vr, be as vn, bf as wr, r as yr, F as Nr, bg as wn, bh as Cr, bi as yn, bj as kr, bk as Sr, bl as Ir, bm as Fr, bn as Ar, bo as Lr, bp as Er, bq as _r, br as Or, bs as Nn, bt as ue, bu as xt, bv as vt, bw as wt, bx as Cn, by as yt, bz as kn, bA as Sn, bB as Dr, bC as Tr, bD as zr, bE as Pr, bF as Br, bG as Rr, bH as $r, bI as Wr, bJ as Mr, bK as jr, bL as Et, bM as _t, bN as Ot, bO as Vr, bP as Gr, bQ as Hr, bR as Ur, bS as In, bT as Kr, bU as qr } from "./F0CanvasPanel-DNz4nej5.js";
2
- import { c4 as Tc, c3 as zc, cg as Pc, c0 as Bc, c1 as Rc, bV as $c, bW as Wc, ch as Mc, bX as jc, c2 as Vc, cc as Gc, cd as Hc, bY as Uc, c6 as Kc, c5 as qc, bZ as Yc, b_ as Zc, ce as Xc, ci as Jc, cf as Qc, cb as ed, c8 as td, ca as nd, c7 as ad, b$ as rd, c9 as ld } from "./F0CanvasPanel-DNz4nej5.js";
1
+ import { s as ua, B as fa, t as ma, v as ha, w as At, x as De, y as ga, z as g, A as X, E as pe, u as se, T as pa, G as ba, H as xa, R as va, J as wa, K as ne, L as ya, M as gt, N as rt, O as Re, Q as _e, S as Na, U as Ca, V as W, W as ka, X as Sa, Y as ve, Z as sn, _ as Ia, $ as Fa, a0 as M, a1 as on, a2 as O, a3 as we, a4 as Aa, a5 as La, a6 as Ea, a7 as _a, a8 as Oa, a9 as ke, aa as cn, ab as Da, ac as be, ad as $e, ae as Ta, af as pt, k as dn, ag as Ce, ah as za, ai as un, aj as ae, ak as H, al as fn, am as Pa, an as Ba, ao as Ra, ap as mn, aq as $a, ar as hn, as as me, at as ee, au as Wa, av as Ma, aw as ja, ax as Va, ay as ge, az as Ge, aA as Ga, aB as Ha, aC as Ua, aD as Ka, aE as He, aF as gn, aG as qa, aH as Ya, aI as Za, aJ as We, aK as Xa, aL as Ja, aM as Qa, aN as er, aO as tr, aP as nr, aQ as ar, aR as rr, aS as lr, aT as sr, aU as lt, aV as st, aW as pn, aX as ir, aY as or, aZ as cr, a_ as dr, a$ as Ue, b0 as bt, b1 as bn, b2 as ur, b3 as xn, b4 as fr, b5 as mr, b6 as hr, b7 as Ee, b8 as gr, b9 as Te, ba as Lt, bb as it, bc as pr, bd as br, a as xr, c as vr, be as vn, bf as wr, r as yr, F as Nr, bg as wn, bh as Cr, bi as yn, bj as kr, bk as Sr, bl as Ir, bm as Fr, bn as Ar, bo as Lr, bp as Er, bq as _r, br as Or, bs as Nn, bt as ue, bu as xt, bv as vt, bw as wt, bx as Cn, by as yt, bz as kn, bA as Sn, bB as Dr, bC as Tr, bD as zr, bE as Pr, bF as Br, bG as Rr, bH as $r, bI as Wr, bJ as Mr, bK as jr, bL as Et, bM as _t, bN as Ot, bO as Vr, bP as Gr, bQ as Hr, bR as Ur, bS as In, bT as Kr, bU as qr } from "./F0CanvasPanel-v9tjaOnW.js";
2
+ import { c4 as Tc, c3 as zc, cg as Pc, c0 as Bc, c1 as Rc, bV as $c, bW as Wc, ch as Mc, bX as jc, c2 as Vc, cc as Gc, cd as Hc, bY as Uc, c6 as Kc, c5 as qc, bZ as Yc, b_ as Zc, ce as Xc, ci as Jc, cf as Qc, cb as ed, c8 as td, ca as nd, c7 as ad, b$ as rd, c9 as ld } from "./F0CanvasPanel-v9tjaOnW.js";
3
3
  import { jsx as e, jsxs as o, Fragment as K } from "react/jsx-runtime";
4
4
  import ie, { forwardRef as j, useRef as G, useTransition as Yr, useState as _, useLayoutEffect as Fn, useId as ot, useContext as Ke, createContext as Nt, useEffect as $, useCallback as Q, useMemo as q, Fragment as Zr, isValidElement as Xr, cloneElement as An, Children as Ln } from "react";
5
- import { C as Jr, P as Qr, g as En, c as el, a as _n, F as ct, f as tl, M as nl, b as al, R as Dt, d as On, u as rl, e as Dn, S as ll, A as sl, B as il, L as ol, h as cl, V as dl, i as ul, j as Tt, k as fl, l as ml, O as hl } from "./useDataCollectionSource-Dutz5gMZ.js";
6
- import { q as id, r as od, o as cd, G as dd, s as ud, y as fd, a4 as md, E as hd, p as gd, K as pd, aa as bd, Q as xd, U as vd, t as wd, a6 as yd, a7 as Nd, a5 as Cd, a8 as kd, N as Sd, W as Id, a1 as Fd, a3 as Ad, v as Ld, x as Ed, z as _d, I as Od, a9 as Dd, J as Td, T as zd, w as Pd, D as Bd, m as Rd, n as $d, Y as Wd, Z as Md, a2 as jd, H as Vd, _ as Gd, $ as Hd, X as Ud, a0 as Kd } from "./useDataCollectionSource-Dutz5gMZ.js";
5
+ import { C as Jr, P as Qr, g as En, c as el, a as _n, F as ct, f as tl, M as nl, b as al, R as Dt, d as On, u as rl, e as Dn, S as ll, A as sl, B as il, L as ol, h as cl, V as dl, i as ul, j as Tt, k as fl, l as ml, O as hl } from "./useDataCollectionSource-BzwXcIpi.js";
6
+ import { q as id, r as od, o as cd, G as dd, s as ud, y as fd, a4 as md, E as hd, p as gd, K as pd, aa as bd, Q as xd, U as vd, t as wd, a6 as yd, a7 as Nd, a5 as Cd, a8 as kd, N as Sd, W as Id, a1 as Fd, a3 as Ad, v as Ld, x as Ed, z as _d, I as Od, a9 as Dd, J as Td, T as zd, w as Pd, D as Bd, m as Rd, n as $d, Y as Wd, Z as Md, a2 as jd, H as Vd, _ as Gd, $ as Hd, X as Ud, a0 as Kd } from "./useDataCollectionSource-BzwXcIpi.js";
7
7
  const gl = ua("Search", [
8
8
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }],
9
9
  ["path", { d: "m21 21-4.3-4.3", key: "1qie3q" }]
package/dist/f0.d.ts CHANGED
@@ -33,6 +33,7 @@ import { Context } from 'react';
33
33
  import { CopilotKitProps } from '@copilotkit/react-core';
34
34
  import { CountCellValue } from './types/count';
35
35
  import { CountryCellValue } from './types/country';
36
+ import { CSSProperties } from 'react';
36
37
  import { DashboardProps as DashboardProps_2 } from './Dashboard';
37
38
  import { DateCellValue } from './f0';
38
39
  import { DateCellValue as DateCellValue_2 } from './types/date';
@@ -306,7 +307,7 @@ declare type ActionDefinition = DropdownItemSeparator | (Pick<DropdownItemObject
306
307
 
307
308
  export declare type ActionItemStatus = (typeof actionItemStatuses)[number];
308
309
 
309
- export declare const actionItemStatuses: readonly ["inProgress", "executing", "completed"];
310
+ export declare const actionItemStatuses: readonly ["inProgress", "executing", "writing", "completed"];
310
311
 
311
312
  declare type ActionLinkProps = ActionBaseProps & {
312
313
  href: string;
@@ -510,7 +511,6 @@ export declare type AiChatMode = "chat" | "voice";
510
511
  */
511
512
  export declare type AiChatProviderProps = {
512
513
  enabled?: boolean;
513
- greeting?: string;
514
514
  initialMessage?: string | string[];
515
515
  welcomeScreenSuggestions?: WelcomeScreenSuggestion[];
516
516
  disclaimer?: AiChatDisclaimer;
@@ -766,7 +766,7 @@ declare type AiChatProviderReturnValue = {
766
766
  pendingQuote: PendingQuote | null;
767
767
  /** Set the pending quote (pass null to clear). */
768
768
  setPendingQuote: React.Dispatch<React.SetStateAction<PendingQuote | null>>;
769
- } & Pick<AiChatState, "greeting" | "agent" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments"> & {
769
+ } & Pick<AiChatState, "agent" | "disclaimer" | "resizable" | "entityRefs" | "canvasActions" | "canvasEntities" | "credits" | "employeeCredits" | "creditWarning" | "fileAttachments"> & {
770
770
  /** The current canvas content, or null when canvas is closed */
771
771
  canvasContent: CanvasContent | null;
772
772
  /** Open the canvas panel with the given content */
@@ -785,7 +785,6 @@ declare type AiChatProviderReturnValue = {
785
785
  * Internal state for the AiChat provider
786
786
  */
787
787
  declare interface AiChatState {
788
- greeting?: string;
789
788
  enabled: boolean;
790
789
  agent?: string;
791
790
  initialMessage?: string | string[];
@@ -828,7 +827,7 @@ declare interface AiChatState {
828
827
  declare type AiChatTrackingOptions = {
829
828
  onVisibility?: () => void;
830
829
  onClose?: () => void;
831
- onWelcomeSuggestionClick?: (item: WelcomeScreenSuggestionItem) => void;
830
+ onWelcomeSuggestionClick?: (event: WelcomeSuggestionClickEvent) => void;
832
831
  onNewChat?: () => void;
833
832
  onMessage?: (message: Message_2) => void;
834
833
  };
@@ -896,7 +895,7 @@ export declare const aiTranslations: {
896
895
  readonly stopAnswerGeneration: "Stop generating";
897
896
  readonly responseStopped: "You stopped this response";
898
897
  readonly sendMessage: "Send message";
899
- readonly thoughtsGroupTitle: "Reflection";
898
+ readonly thoughtsGroupTitle: "Reasoning";
900
899
  readonly resourcesGroupTitle: "Resources";
901
900
  readonly thinking: "Thinking...";
902
901
  readonly feedbackModal: {
@@ -2638,7 +2637,19 @@ export declare interface ChatDashboardRadarChartConfig extends ChatDashboardChar
2638
2637
  showArea?: boolean;
2639
2638
  }
2640
2639
 
2641
- export declare const ChatSpinner: ForwardRefExoticComponent<Omit<SVGProps<SVGSVGElement>, "ref"> & RefAttributes<SVGSVGElement>>;
2640
+ export declare const ChatSpinner: ForwardRefExoticComponent<ChatSpinnerProps & RefAttributes<HTMLDivElement>>;
2641
+
2642
+ declare interface ChatSpinnerProps {
2643
+ size?: number;
2644
+ className?: string;
2645
+ style?: CSSProperties;
2646
+ /**
2647
+ * "default" → spins 2 rotations, pauses, repeats.
2648
+ * "continuous" → 2 rotations forward, then 2 backward, no pause. Used for
2649
+ * "writing"-style activity where the indicator should never rest.
2650
+ */
2651
+ variant?: "default" | "continuous";
2652
+ }
2642
2653
 
2643
2654
  export declare type ChatThread = {
2644
2655
  id: string;
@@ -4345,7 +4356,7 @@ export declare const defaultTranslations: {
4345
4356
  readonly stopAnswerGeneration: "Stop generating";
4346
4357
  readonly responseStopped: "You stopped this response";
4347
4358
  readonly sendMessage: "Send message";
4348
- readonly thoughtsGroupTitle: "Reflection";
4359
+ readonly thoughtsGroupTitle: "Reasoning";
4349
4360
  readonly resourcesGroupTitle: "Resources";
4350
4361
  readonly thinking: "Thinking...";
4351
4362
  readonly feedbackModal: {
@@ -5296,7 +5307,7 @@ export declare interface F0ActionItemProps {
5296
5307
  /**
5297
5308
  * Current status of the action item
5298
5309
  */
5299
- status?: "inProgress" | "executing" | "completed";
5310
+ status?: "inProgress" | "executing" | "writing" | "completed";
5300
5311
  /**
5301
5312
  * Whether the action item is part of a group
5302
5313
  */
@@ -5436,7 +5447,7 @@ export declare type F0AiChatHistoryProps = {
5436
5447
  /**
5437
5448
  * @experimental This is an experimental component use it at your own risk
5438
5449
  */
5439
- export declare const F0AiChatProvider: ({ enabled, greeting, initialMessage, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onThumbsUp, onThumbsDown, onBeforeSendMessage, runtimeFetch, children, agent, tracking, ...copilotKitProps }: AiChatProviderProps) => JSX_2.Element;
5450
+ export declare const F0AiChatProvider: ({ enabled, initialMessage, welcomeScreenSuggestions, disclaimer, resizable, defaultVisualizationMode, lockVisualizationMode, historyEnabled, footer, VoiceMode, entityRefs, canvasActions, canvasEntities, credits, employeeCredits, creditWarning, fileAttachments, onThumbsUp, onThumbsDown, onBeforeSendMessage, runtimeFetch, children, agent, tracking, ...copilotKitProps }: AiChatProviderProps) => JSX_2.Element;
5440
5451
 
5441
5452
  /**
5442
5453
  * Headless chat composer.
@@ -5512,8 +5523,9 @@ export declare type F0AiChatTextAreaProps = {
5512
5523
  * Hovering an item previews its prompt in the textarea placeholder.
5513
5524
  */
5514
5525
  welcomeScreenSuggestions?: WelcomeScreenSuggestion[];
5515
- /** Called when the user clicks a sub-suggestion. */
5516
- onSuggestionClick?: (item: WelcomeScreenSuggestionItem) => void;
5526
+ /** Called when the user clicks a sub-suggestion. Receives the picked
5527
+ * `item` and its parent `group` (the outline-button entry). */
5528
+ onSuggestionClick?: (item: WelcomeScreenSuggestionItem, group: WelcomeScreenSuggestion) => void;
5517
5529
  /**
5518
5530
  * When true, the composer adopts the fullscreen layout: the welcome
5519
5531
  * footer is pushed to the bottom and the disclaimer is hidden so the
@@ -5730,12 +5742,12 @@ export declare type F0AiMessagesContainerProps = {
5730
5742
  isLoadingThread?: boolean;
5731
5743
  /** Optional React node rendered inline at the end of the list (e.g. CopilotKit interrupt). */
5732
5744
  interrupt?: ReactNode;
5733
- /** Greeting shown above the initial message in the welcome screen. */
5734
- greeting?: string;
5735
- /** Initial message(s) shown in the welcome screen, or a default if omitted. */
5745
+ /** Welcome phrase shown centered when the chat is empty. Falls back to
5746
+ * `translations.ai.defaultInitialMessage` if omitted. */
5736
5747
  initialMessage?: string | string[];
5737
- /** Optional click on the One icon (factorial uses it for the pong easter egg). */
5738
- onWelcomeIconClick?: () => void;
5748
+ /** Called when the user clicks the welcome phrase (used by F0AiChat to open
5749
+ * the pong easter egg). When omitted the phrase is non-interactive. */
5750
+ onWelcomeClick?: () => void;
5739
5751
  /** Returns a React node for an assistant message's tool call, or null. */
5740
5752
  renderToolCall?: F0AssistantMessageExtraProps["renderToolCall"];
5741
5753
  /** Called when the user selects text and clicks Reply (user or assistant bubble). */
@@ -5875,7 +5887,7 @@ export declare const F0Alert: WithDataTestIdReturnType_3<({ title, description,
5875
5887
 
5876
5888
  export declare interface F0AlertProps {
5877
5889
  title: string;
5878
- description: string;
5890
+ description?: string;
5879
5891
  action?: {
5880
5892
  label: string;
5881
5893
  disabled?: boolean;
@@ -14815,6 +14827,18 @@ export declare type WelcomeScreenSuggestionItem = {
14815
14827
  prompt?: string;
14816
14828
  };
14817
14829
 
14830
+ /**
14831
+ * Payload for `tracking.onWelcomeSuggestionClick`. Carries everything an
14832
+ * analytics layer (e.g. Amplitude) needs to attribute the click: the picked
14833
+ * sub-item, its parent group, and the resolved prompt that was actually sent.
14834
+ */
14835
+ declare type WelcomeSuggestionClickEvent = {
14836
+ item: WelcomeScreenSuggestionItem;
14837
+ group: WelcomeScreenSuggestion;
14838
+ /** Prompt actually sent to the AI — `item.prompt` falling back to `item.title`. */
14839
+ prompt: string;
14840
+ };
14841
+
14818
14842
  declare interface WiggleOptions {
14819
14843
  errorHighlight?: boolean;
14820
14844
  }
@@ -14918,11 +14942,6 @@ declare module "gridstack" {
14918
14942
  }
14919
14943
 
14920
14944
 
14921
- declare namespace Calendar {
14922
- var displayName: string;
14923
- }
14924
-
14925
-
14926
14945
  declare module "@tiptap/core" {
14927
14946
  interface Commands<ReturnType> {
14928
14947
  aiBlock: {
@@ -14954,8 +14973,10 @@ declare module "@tiptap/core" {
14954
14973
 
14955
14974
  declare module "@tiptap/core" {
14956
14975
  interface Commands<ReturnType> {
14957
- transcript: {
14958
- insertTranscript: (data: TranscriptData) => ReturnType;
14976
+ videoEmbed: {
14977
+ setVideoEmbed: (options: {
14978
+ src: string;
14979
+ }) => ReturnType;
14959
14980
  };
14960
14981
  }
14961
14982
  }
@@ -14963,15 +14984,18 @@ declare module "@tiptap/core" {
14963
14984
 
14964
14985
  declare module "@tiptap/core" {
14965
14986
  interface Commands<ReturnType> {
14966
- videoEmbed: {
14967
- setVideoEmbed: (options: {
14968
- src: string;
14969
- }) => ReturnType;
14987
+ transcript: {
14988
+ insertTranscript: (data: TranscriptData) => ReturnType;
14970
14989
  };
14971
14990
  }
14972
14991
  }
14973
14992
 
14974
14993
 
14994
+ declare namespace Calendar {
14995
+ var displayName: string;
14996
+ }
14997
+
14998
+
14975
14999
  declare namespace F0GraphNodeWrapperInner {
14976
15000
  var displayName: string;
14977
15001
  }