diff --git a/apps/web/src/components/features/input/Mentions/ShortcutsSuggestions/ShortcutsSuggestions.tsx b/apps/web/src/components/features/input/Mentions/ShortcutsSuggestions/ShortcutsSuggestions.tsx index 5eefe4039..b204b8f6b 100644 --- a/apps/web/src/components/features/input/Mentions/ShortcutsSuggestions/ShortcutsSuggestions.tsx +++ b/apps/web/src/components/features/input/Mentions/ShortcutsSuggestions/ShortcutsSuggestions.tsx @@ -8,6 +8,7 @@ import PenWriting from '@/components/ui/icons/NucleoIconOutlined/pen-writing'; import Plus from '@/components/ui/icons/NucleoIconOutlined/plus'; import { createMentionSuggestionExtension, + type MentionInputTriggerItem, MentionSecondaryContentDropdown, type MentionTriggerItem, } from '@/components/ui/inputs/MentionInput'; @@ -38,8 +39,13 @@ export const useCreateShortcutsMentionsSuggestions = ( trigger: SHORTCUT_MENTION_TRIGGER, items: ({ defaultQueryMentionsFilter, editor, query }) => { const shortcuts = currentItemsRef.current; - const allItems = [ - ...shortcuts.map((s) => createShortcutForMention(s, editor)), + const allItems: MentionInputTriggerItem[] = [ + { + type: 'group', + items: shortcuts.map((s) => createShortcutForMention(s, editor)), + + className: 'max-h-[300px] overflow-y-auto', + }, { type: 'separator' as const }, { value: 'manageShortcuts', @@ -65,6 +71,7 @@ export const useCreateShortcutsMentionsSuggestions = ( return defaultQueryMentionsFilter(query, allItems); }, popoverContent: ShortcutPopoverContent, + popoverClassName: '', onChangeTransform: (v) => { const foundShortcut = shortcuts.find((shortcut) => shortcut.name === v.label); if (foundShortcut) { diff --git a/apps/web/src/components/ui/inputs/MentionInput/MentionInput.stories.tsx b/apps/web/src/components/ui/inputs/MentionInput/MentionInput.stories.tsx index 9494886e7..f64231fb0 100644 --- a/apps/web/src/components/ui/inputs/MentionInput/MentionInput.stories.tsx +++ b/apps/web/src/components/ui/inputs/MentionInput/MentionInput.stories.tsx @@ -298,6 +298,7 @@ const spongebobSuggestions = createMentionSuggestionExtension({ popoverContent: (props) => { return
This is a custom popover content for {props.value}
; }, + popoverClassName: 'bg-green-100 max-h-auto', }); export const Default: Story = { diff --git a/apps/web/src/components/ui/inputs/MentionInput/MentionInput.types.ts b/apps/web/src/components/ui/inputs/MentionInput/MentionInput.types.ts index 5291b923c..59c418a3b 100644 --- a/apps/web/src/components/ui/inputs/MentionInput/MentionInput.types.ts +++ b/apps/web/src/components/ui/inputs/MentionInput/MentionInput.types.ts @@ -42,7 +42,7 @@ export type MentionTriggerItem = export type MentionInputTriggerGroup = { items: MentionTriggerItem[]; - label: string | React.ReactNode; + label?: string | React.ReactNode | null; icon?: React.ReactNode; type: 'group'; disabled?: boolean; diff --git a/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionList.tsx b/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionList.tsx index 441c4e15b..8854257ac 100644 --- a/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionList.tsx +++ b/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionList.tsx @@ -30,7 +30,15 @@ export type MentionListProps = SuggestionProps< > & { trigger: string; emptyState?: React.ReactNode; className?: string }; function MentionListInner( - { trigger, emptyState, items, command, className }: MentionListProps, + { + trigger, + emptyState, + items, + command, + className, + query: _query, + editor: _editor, + }: MentionListProps, ref: React.ForwardedRef ) { const listRef = useRef(null); diff --git a/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionListGroup.tsx b/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionListGroup.tsx index 1051220b8..cc2921656 100644 --- a/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionListGroup.tsx +++ b/apps/web/src/components/ui/inputs/MentionInput/MentionList/MentionListGroup.tsx @@ -12,16 +12,19 @@ export function MentionListGroup({ className, disabled, //this is consumed by the children items, we can stylized this if we want }: MentionListGroupExtended) { + const hasLabelContent = !!label || !!icon; return (
-
- {icon && {icon}} - {label} -
+ {hasLabelContent && ( +
+ {icon && {icon}} + {label} +
+ )} {items.map((item, index) => ( = () => { - return
; + return
; }; diff --git a/apps/web/src/components/ui/inputs/MentionInput/createMentionSuggestionOption.tsx b/apps/web/src/components/ui/inputs/MentionInput/createMentionSuggestionOption.tsx index 0c802401e..dee2c83d0 100644 --- a/apps/web/src/components/ui/inputs/MentionInput/createMentionSuggestionOption.tsx +++ b/apps/web/src/components/ui/inputs/MentionInput/createMentionSuggestionOption.tsx @@ -18,6 +18,7 @@ export const createMentionSuggestionExtension = ({ popoverContent, onChangeTransform, pillStyling, + popoverClassName, }: { trigger: string; items: @@ -29,6 +30,7 @@ export const createMentionSuggestionExtension = ({ }) => MentionInputTriggerItem[]); //if no function is provided we will use a literal string match popoverContent?: MentionPopoverContentCallback; pillStyling?: MentionStylePillProps; + popoverClassName?: string; onChangeTransform?: MentionSuggestionExtension['onChangeTransform']; }): MentionSuggestionExtension => ({ char: trigger, @@ -51,8 +53,9 @@ export const createMentionSuggestionExtension = ({ const { editor } = props; component = new ReactRenderer( MentionList as React.ComponentType>, - { props: { ...props, trigger }, editor: props.editor } + { props: { ...props, trigger, className: popoverClassName }, editor: props.editor } ); + console.log(popoverClassName); if (!props.clientRect) { console.warn('No client rect for mention suggestion');