Skip to content

Commit 2280bab

Browse files
committed
Improvements to the help and feedback button transition
1 parent dcc5d0f commit 2280bab

File tree

4 files changed

+52
-29
lines changed

4 files changed

+52
-29
lines changed

apps/webapp/app/components/AskAI.tsx

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
HandThumbUpIcon,
66
StopIcon,
77
} from "@heroicons/react/20/solid";
8+
import { cn } from "~/utils/cn";
89
import { type FeedbackComment, KapaProvider, type QA, useChat } from "@kapaai/react-sdk";
910
import { useSearchParams } from "@remix-run/react";
1011
import DOMPurify from "dompurify";
@@ -37,7 +38,7 @@ function useKapaWebsiteId() {
3738
return routeMatch?.kapa.websiteId;
3839
}
3940

40-
export function AskAI() {
41+
export function AskAI({ isCollapsed = false }: { isCollapsed?: boolean }) {
4142
const { isManagedCloud } = useFeatures();
4243
const websiteId = useKapaWebsiteId();
4344

@@ -46,21 +47,28 @@ export function AskAI() {
4647
}
4748

4849
return (
49-
<ClientOnly
50-
fallback={
51-
<Button
52-
variant="small-menu-item"
53-
data-action="ask-ai"
54-
hideShortcutKey
55-
data-modal-override-open-class-ask-ai="true"
56-
disabled
57-
>
58-
<AISparkleIcon className="size-5" />
59-
</Button>
60-
}
50+
<div
51+
className={cn(
52+
"transition-opacity duration-200",
53+
isCollapsed ? "pointer-events-none opacity-0" : "opacity-100"
54+
)}
6155
>
62-
{() => <AskAIProvider websiteId={websiteId} />}
63-
</ClientOnly>
56+
<ClientOnly
57+
fallback={
58+
<Button
59+
variant="small-menu-item"
60+
data-action="ask-ai"
61+
hideShortcutKey
62+
data-modal-override-open-class-ask-ai="true"
63+
disabled
64+
>
65+
<AISparkleIcon className="size-5" />
66+
</Button>
67+
}
68+
>
69+
{() => <AskAIProvider websiteId={websiteId} />}
70+
</ClientOnly>
71+
</div>
6472
);
6573
}
6674

apps/webapp/app/components/navigation/HelpAndFeedbackPopover.tsx

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
SignalIcon,
99
StarIcon,
1010
} from "@heroicons/react/20/solid";
11+
import { cn } from "~/utils/cn";
1112
import { DiscordIcon, SlackIcon } from "@trigger.dev/companyicons";
1213
import { Fragment, useState } from "react";
1314
import { useCurrentPlan } from "~/routes/_app.orgs.$organizationSlug/route";
@@ -24,7 +25,13 @@ import { StepNumber } from "../primitives/StepNumber";
2425
import { SideMenuItem } from "./SideMenuItem";
2526
import { Badge } from "../primitives/Badge";
2627

27-
export function HelpAndFeedback({ disableShortcut = false }: { disableShortcut?: boolean }) {
28+
export function HelpAndFeedback({
29+
disableShortcut = false,
30+
isCollapsed = false,
31+
}: {
32+
disableShortcut?: boolean;
33+
isCollapsed?: boolean;
34+
}) {
2835
const [isHelpMenuOpen, setHelpMenuOpen] = useState(false);
2936
const currentPlan = useCurrentPlan();
3037

@@ -33,16 +40,26 @@ export function HelpAndFeedback({ disableShortcut = false }: { disableShortcut?:
3340
<PopoverSideMenuTrigger
3441
isOpen={isHelpMenuOpen}
3542
shortcut={{ key: "h", enabledOnInputElements: false }}
36-
className="grow pr-2"
43+
className={isCollapsed ? "w-full justify-center" : "grow pr-2"}
3744
disabled={disableShortcut}
45+
hideShortcutKey={isCollapsed}
3846
>
3947
<div className="flex items-center gap-1.5">
40-
<QuestionMarkCircleIcon className="size-4 text-success" />
41-
Help & Feedback
48+
<QuestionMarkCircleIcon className="size-4.5 shrink-0 text-success" />
49+
<span
50+
className={cn(
51+
"overflow-hidden whitespace-nowrap transition-all duration-150",
52+
isCollapsed ? "max-w-0 opacity-0" : "max-w-[150px] opacity-100"
53+
)}
54+
>
55+
Help & Feedback
56+
</span>
4257
</div>
4358
</PopoverSideMenuTrigger>
4459
<PopoverContent
4560
className="min-w-[14rem] divide-y divide-grid-bright overflow-y-auto p-0 scrollbar-thin scrollbar-track-transparent scrollbar-thumb-charcoal-600"
61+
side={isCollapsed ? "right" : "top"}
62+
sideOffset={isCollapsed ? 8 : 4}
4663
align="start"
4764
>
4865
<Fragment>

apps/webapp/app/components/navigation/SideMenu.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -780,12 +780,8 @@ function HelpAndAI({ isCollapsed }: { isCollapsed: boolean }) {
780780
return (
781781
<>
782782
<ShortcutsAutoOpen />
783-
<CollapsibleHeight isCollapsed={isCollapsed}>
784-
<HelpAndFeedback />
785-
</CollapsibleHeight>
786-
<CollapsibleHeight isCollapsed={isCollapsed}>
787-
<AskAI />
788-
</CollapsibleHeight>
783+
<HelpAndFeedback isCollapsed={isCollapsed} />
784+
<AskAI isCollapsed={isCollapsed} />
789785
</>
790786
);
791787
}

apps/webapp/app/components/primitives/Popover.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,12 @@ function PopoverSideMenuTrigger({
154154
children,
155155
className,
156156
shortcut,
157+
hideShortcutKey = false,
157158
...props
158159
}: {
159160
isOpen?: boolean;
160161
shortcut?: useShortcutKeys.ShortcutDefinition;
162+
hideShortcutKey?: boolean;
161163
} & React.ComponentPropsWithoutRef<typeof PopoverTrigger>) {
162164
const ref = React.useRef<HTMLButtonElement>(null);
163165
useShortcutKeys.useShortcutKeys({
@@ -176,14 +178,14 @@ function PopoverSideMenuTrigger({
176178
{...props}
177179
ref={ref}
178180
className={cn(
179-
"flex h-[1.8rem] shrink-0 select-none items-center gap-x-1.5 rounded-sm bg-transparent px-[0.4rem] text-center font-sans text-2sm font-normal text-text-bright transition duration-150 focus-custom hover:bg-charcoal-750",
180-
shortcut ? "justify-between" : "",
181+
"flex h-[1.8rem] shrink-0 select-none items-center rounded-sm bg-transparent px-[0.4rem] text-center font-sans text-2sm font-normal text-text-bright transition duration-150 focus-custom hover:bg-charcoal-750",
182+
shortcut && !hideShortcutKey ? "justify-between gap-x-1.5" : "",
181183
className
182184
)}
183185
>
184186
{children}
185-
{shortcut && (
186-
<ShortcutKey className={cn("size-4 flex-none")} shortcut={shortcut} variant={"small"} />
187+
{shortcut && !hideShortcutKey && (
188+
<ShortcutKey className="size-4 flex-none" shortcut={shortcut} variant={"small"} />
187189
)}
188190
</PopoverTrigger>
189191
);

0 commit comments

Comments
 (0)