diff --git a/apps/web/package.json b/apps/web/package.json
index ba4030cb9..f2e90056a 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -5,7 +5,7 @@
"type": "module",
"scripts": {
"dev": "next dev --turbo",
- "dev:fast": "make start-fast",
+ "dev:fast": "make fast",
"build": "next build",
"start": "next start",
"lint": "next lint && npx prettier --write . '!src/components/ui/icons/**' --log-level error",
diff --git a/apps/web/src/components/ui/report/ReportEditor.tsx b/apps/web/src/components/ui/report/ReportEditor.tsx
index 01799ad07..b8038dc34 100644
--- a/apps/web/src/components/ui/report/ReportEditor.tsx
+++ b/apps/web/src/components/ui/report/ReportEditor.tsx
@@ -64,6 +64,9 @@ export const ReportEditor = React.memo(
// Initialize the editor instance using the custom useEditor hook
const isReady = useRef(false);
+ // readOnly = true;
+ // isStreaming = true;
+
const editor = useReportEditor({
isStreaming,
mode,
@@ -127,12 +130,12 @@ export const ReportEditor = React.memo(
variant={variant}
readonly={readOnly}
disabled={disabled}
- className={containerClassName}>
+ className={cn('pb-[20vh]', containerClassName)}>
diff --git a/apps/web/src/components/ui/report/elements/StreamingText.tsx b/apps/web/src/components/ui/report/elements/StreamingText.tsx
index 8130eeed8..6cabd1964 100644
--- a/apps/web/src/components/ui/report/elements/StreamingText.tsx
+++ b/apps/web/src/components/ui/report/elements/StreamingText.tsx
@@ -15,10 +15,7 @@ export function StreamingText(props: PlateTextProps) {
{
- editor.tf.withoutSaving(() => {
- editor.tf.withoutNormalizing(() => {
- const operations = buildUpdateOperations(editor, chunks);
- executeOperations(operations);
+ editor.tf.withScrolling(
+ () => {
+ editor.tf.withoutSaving(() => {
+ editor.tf.withoutNormalizing(() => {
+ const operations = buildUpdateOperations(editor, chunks);
+ executeOperations(operations);
+ });
});
- });
- });
+ },
+ {
+ scrollOptions: { behavior: 'smooth' }
+ }
+ );
}
}
}));
diff --git a/apps/web/src/styles/tailwindAnimations.css b/apps/web/src/styles/tailwindAnimations.css
index a92df01e6..cb6918838 100644
--- a/apps/web/src/styles/tailwindAnimations.css
+++ b/apps/web/src/styles/tailwindAnimations.css
@@ -60,6 +60,28 @@
}
}
+/*
+ highlightFade animation:
+ - Animates a highlight background and a bottom border only (no outline).
+ - The border is only on the bottom, not using outline.
+*/
+@keyframes highlightFade {
+ 0% {
+ /* Use highlight background, fallback to brand, then yellow */
+ background-color: var(--color-highlight-background, var(--color-purple-200, yellow));
+ /* Only bottom border is visible at start */
+ border-bottom: 1px solid var(--color-highlight-border, var(--color-purple-300, yellow));
+ }
+ 100% {
+ background-color: var(--color-highlight-to-background, transparent);
+ border-bottom: 0px solid var(--color-highlight-to-border, transparent);
+ }
+}
+
+.animate-highlight-fade {
+ animation: highlightFade var(--tw-duration, 3s) ease-out forwards;
+}
+
.fade-in {
animation-name: fade-in;
animation-duration: var(--tw-duration, 0.7s);