@factorialco/f0-react 2.20.1 → 2.21.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
  };
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
  */
@@ -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). */
@@ -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
  }
package/dist/f0.js CHANGED
@@ -1,13 +1,13 @@
1
- import { g4 as uk, aj as wt, bt as Tg, z as fe, E as Pa, g1 as ck, A as gu, eF as _3, as as go, g5 as w3, at as fk, a2 as le, u as rt, V as dt, d9 as Vu, Q as S3, v as C3, Y as Hv, cX as mu, ak as Ur, ag as Dg, g6 as T3, g7 as Yb, g8 as D3, g9 as A3, ga as KC, dR as M3, gb as E3, gc as dk, gd as L3, aR as Aw, aS as Mw, K as pd, aT as Ew, az as hk, cg as Wv, ge as vk, gf as N3, fh as I3, aV as pk, dv as k3, bH as R3, b9 as gk, a0 as pt, a9 as Fu, gg as QC, gh as JC, gi as $m, gj as eT, gk as P3, gl as O3, au as B3, gm as Lw, gn as tT, fd as V3, go as F3, gp as z3, gq as G3, a7 as Nw, ae as mk, af as yu, gr as Oa, gs as el, gt as H3, gu as Iw, gv as kr, fY as bu, gw as fi, bX as kw, ff as W3, dL as Rw, aJ as iu, bY as yk, dj as Pw, gx as bk, gy as Ho, bm as Hs, gz as $3, al as Bn, aE as U3, cP as Xb, cO as xk, gA as Y3, gB as Ag, dk as Ow, fR as X3, ad as Bw, bO as q3, ar as Mg, gC as Z3, gD as j3, gE as K3, j as Q3, ep as J3, U as _k, cS as tl, dF as wk, bR as Vw, W as Eg, X as Lg, cF as Fw, $ as Ng, a6 as Ar, a8 as xu, fs as au, ft as ou, _ as su, fu as lu, fq as eH, fr as io, cI as Sk, aG as tH, dg as $v, gF as an, aQ as rH, gG as pn, gH as nH, gI as iH, gJ as Ck, gK as Ig, gL as aH, gM as oH, dn as Tk, dm as Dk, gN as sH, gO as lH, b1 as Ak, b7 as uH, fG as cH, fH, fI as dH, bu as zu, by as Gu, bF as gd, dM as hH, bv as vH, bg as pH, a1 as Mk, bn as gH, ab as mH, dd as rT, dE as Rf, an as yH, ao as bH, gP as xH, b6 as _H, bz as wH, cV as Ek, ah as SH, cN as CH, g2 as TH, gQ as DH, gR as AH, I as MH, gS as EH, gT as LH, gU as NH, d as IH, gV as kH } from "./F0CanvasPanel-DNz4nej5.js";
2
- import { ha as fme, C as dme, D as hme, b0 as vme, i as pme, F as gme, l as mme, m as yme, a as bme, o as xme, h3 as _me, p as wme, q as Sme, bh as Cme, bI as Tme, bs as Dme, ay as Ame, dQ as Mme, aH as Eme, bV as Lme, g as Nme, r as Ime, fT as kme, h as Rme, gZ as Pme, he as Ome, k as Bme, bA as Vme, h5 as Fme, bd as zme, h6 as Gme, h8 as Hme, h9 as Wme, ch as $me, hb as Ume, cc as Yme, cd as Xme, P as qme, h7 as Zme, ce as jme, hf as Kme, gW as Qme, gX as Jme, gY as eye, cf as tye, hd as rye, h4 as nye, h1 as iye, h0 as aye, fS as oye, hc as sye, b4 as lye, cb as uye, c8 as cye, ca as fye, c7 as dye, h2 as hye, fV as vye, fO as pye, b$ as gye, c9 as mye, g$ as yye, c as bye, n as xye, fN as _ye, g3 as wye, b2 as Sye, g_ as Cye, e as Tye, fQ as Dye, a$ as Aye, fP as Mye, f as Eye, b as Lye, hg as Nye } from "./F0CanvasPanel-DNz4nej5.js";
1
+ import { g4 as uk, aj as wt, bt as Tg, z as fe, E as Pa, g1 as ck, A as gu, eF as _3, as as go, g5 as w3, at as fk, a2 as le, u as rt, V as dt, d9 as Vu, Q as S3, v as C3, Y as Hv, cX as mu, ak as Ur, ag as Dg, g6 as T3, g7 as Yb, g8 as D3, g9 as A3, ga as KC, dR as M3, gb as E3, gc as dk, gd as L3, aR as Aw, aS as Mw, K as pd, aT as Ew, az as hk, cg as Wv, ge as vk, gf as N3, fh as I3, aV as pk, dv as k3, bH as R3, b9 as gk, a0 as pt, a9 as Fu, gg as QC, gh as JC, gi as $m, gj as eT, gk as P3, gl as O3, au as B3, gm as Lw, gn as tT, fd as V3, go as F3, gp as z3, gq as G3, a7 as Nw, ae as mk, af as yu, gr as Oa, gs as el, gt as H3, gu as Iw, gv as kr, fY as bu, gw as fi, bX as kw, ff as W3, dL as Rw, aJ as iu, bY as yk, dj as Pw, gx as bk, gy as Ho, bm as Hs, gz as $3, al as Bn, aE as U3, cP as Xb, cO as xk, gA as Y3, gB as Ag, dk as Ow, fR as X3, ad as Bw, bO as q3, ar as Mg, gC as Z3, gD as j3, gE as K3, j as Q3, ep as J3, U as _k, cS as tl, dF as wk, bR as Vw, W as Eg, X as Lg, cF as Fw, $ as Ng, a6 as Ar, a8 as xu, fs as au, ft as ou, _ as su, fu as lu, fq as eH, fr as io, cI as Sk, aG as tH, dg as $v, gF as an, aQ as rH, gG as pn, gH as nH, gI as iH, gJ as Ck, gK as Ig, gL as aH, gM as oH, dn as Tk, dm as Dk, gN as sH, gO as lH, b1 as Ak, b7 as uH, fG as cH, fH, fI as dH, bu as zu, by as Gu, bF as gd, dM as hH, bv as vH, bg as pH, a1 as Mk, bn as gH, ab as mH, dd as rT, dE as Rf, an as yH, ao as bH, gP as xH, b6 as _H, bz as wH, cV as Ek, ah as SH, cN as CH, g2 as TH, gQ as DH, gR as AH, I as MH, gS as EH, gT as LH, gU as NH, d as IH, gV as kH } from "./F0CanvasPanel-v9tjaOnW.js";
2
+ import { ha as fme, C as dme, D as hme, b0 as vme, i as pme, F as gme, l as mme, m as yme, a as bme, o as xme, h3 as _me, p as wme, q as Sme, bh as Cme, bI as Tme, bs as Dme, ay as Ame, dQ as Mme, aH as Eme, bV as Lme, g as Nme, r as Ime, fT as kme, h as Rme, gZ as Pme, he as Ome, k as Bme, bA as Vme, h5 as Fme, bd as zme, h6 as Gme, h8 as Hme, h9 as Wme, ch as $me, hb as Ume, cc as Yme, cd as Xme, P as qme, h7 as Zme, ce as jme, hf as Kme, gW as Qme, gX as Jme, gY as eye, cf as tye, hd as rye, h4 as nye, h1 as iye, h0 as aye, fS as oye, hc as sye, b4 as lye, cb as uye, c8 as cye, ca as fye, c7 as dye, h2 as hye, fV as vye, fO as pye, b$ as gye, c9 as mye, g$ as yye, c as bye, n as xye, fN as _ye, g3 as wye, b2 as Sye, g_ as Cye, e as Tye, fQ as Dye, a$ as Aye, fP as Mye, f as Eye, b as Lye, hg as Nye } from "./F0CanvasPanel-v9tjaOnW.js";
3
3
  import { jsx as w, jsxs as B, Fragment as kt } from "react/jsx-runtime";
4
4
  import * as Yn from "react";
5
5
  import He, { forwardRef as hn, useRef as oe, useImperativeHandle as RH, Children as Uv, createContext as Jr, useContext as _r, useState as ye, useMemo as ae, useEffect as _e, useCallback as te, useLayoutEffect as qb, createElement as Yd, isValidElement as Lk, Fragment as Nk, memo as Ik, useReducer as PH, cloneElement as OH, useId as kg } from "react";
6
- import { k as BH, l as VH, m as FH, n as zH, p as GH, q as kk, r as Yv, s as zw, t as Rk, v as Pk, w as Ok, x as HH, y as WH, z as $H, B as UH, C as YH } from "./F0AiTableCard-8ATpfNg4.js";
7
- import { A as kye, f as Rye, F as Pye, i as Oye, h as Bye, j as Vye, d as Fye, e as zye, c as Gye, a as Hye, g as Wye, o as $ye, u as Uye, b as Yye } from "./F0AiTableCard-8ATpfNg4.js";
6
+ import { k as BH, l as VH, m as FH, n as zH, p as GH, q as kk, r as Yv, s as zw, t as Rk, v as Pk, w as Ok, x as HH, y as WH, z as $H, B as UH, C as YH } from "./F0AiTableCard-BzXULBvr.js";
7
+ import { A as kye, f as Rye, F as Pye, i as Oye, h as Bye, j as Vye, d as Fye, e as zye, c as Gye, a as Hye, g as Wye, o as $ye, u as Uye, b as Yye } from "./F0AiTableCard-BzXULBvr.js";
8
8
  import { createPortal as Bk, unstable_batchedUpdates as Xd, flushSync as XH } from "react-dom";
9
- import { C as qH, E as Zb, G as Vk, ab as Fk, N as zk, a9 as ZH, T as jH, J as Gk, K as Gw, ac as Hw, a4 as KH, ad as QH, ae as JH, d as Rg, af as eW, R as Ww, u as $w, I as Hk, O as Uw, ag as Wk, ah as Yw, o as tW, $ as $k, W as Uk, ai as rW, aj as nW, ak as iW, al as aW, am as oW, M as sW } from "./useDataCollectionSource-Dutz5gMZ.js";
10
- import { q as qye, r as Zye, s as jye, y as Kye, ao as Qye, F as Jye, aa as e0e, t as t0e, a6 as r0e, a7 as n0e, a5 as i0e, a8 as a0e, v as o0e, P as s0e, x as l0e, z as u0e, w as c0e, D as f0e, m as d0e, n as h0e, an as v0e, a2 as p0e, H as g0e, ap as m0e, aq as y0e, ar as b0e, e as x0e } from "./useDataCollectionSource-Dutz5gMZ.js";
9
+ import { C as qH, E as Zb, G as Vk, ab as Fk, N as zk, a9 as ZH, T as jH, J as Gk, K as Gw, ac as Hw, a4 as KH, ad as QH, ae as JH, d as Rg, af as eW, R as Ww, u as $w, I as Hk, O as Uw, ag as Wk, ah as Yw, o as tW, $ as $k, W as Uk, ai as rW, aj as nW, ak as iW, al as aW, am as oW, M as sW } from "./useDataCollectionSource-BzwXcIpi.js";
10
+ import { q as qye, r as Zye, s as jye, y as Kye, ao as Qye, F as Jye, aa as e0e, t as t0e, a6 as r0e, a7 as n0e, a5 as i0e, a8 as a0e, v as o0e, P as s0e, x as l0e, z as u0e, w as c0e, D as f0e, m as d0e, n as h0e, an as v0e, a2 as p0e, H as g0e, ap as m0e, aq as y0e, ar as b0e, e as x0e } from "./useDataCollectionSource-BzwXcIpi.js";
11
11
  import { utils as uu, write as Yk } from "./xlsx-Bedf3nwD.js";
12
12
  import { defaultTranslations as w0e } from "./i18n-provider-defaults.js";
13
13
  import './f0.css';const lW = {
@@ -379,7 +379,7 @@ export declare const defaultTranslations: {
379
379
  readonly stopAnswerGeneration: "Stop generating";
380
380
  readonly responseStopped: "You stopped this response";
381
381
  readonly sendMessage: "Send message";
382
- readonly thoughtsGroupTitle: "Reflection";
382
+ readonly thoughtsGroupTitle: "Reasoning";
383
383
  readonly resourcesGroupTitle: "Resources";
384
384
  readonly thinking: "Thinking...";
385
385
  readonly feedbackModal: {
@@ -379,7 +379,7 @@ const e = {
379
379
  stopAnswerGeneration: "Stop generating",
380
380
  responseStopped: "You stopped this response",
381
381
  sendMessage: "Send message",
382
- thoughtsGroupTitle: "Reflection",
382
+ thoughtsGroupTitle: "Reasoning",
383
383
  resourcesGroupTitle: "Resources",
384
384
  thinking: "Thinking...",
385
385
  feedbackModal: {