diff --git a/src/app/components/event-action-button/EventActionButton.css.ts b/src/app/components/event-action-button/EventActionButton.css.ts new file mode 100644 index 00000000..20189ee4 --- /dev/null +++ b/src/app/components/event-action-button/EventActionButton.css.ts @@ -0,0 +1,38 @@ +import { ComplexStyleRule } from '@vanilla-extract/css'; +import { recipe } from '@vanilla-extract/recipes'; +import { color, DefaultReset, MainColor } from 'folds'; + +const getVariant = (variant: MainColor): ComplexStyleRule => ({ + vars: { + color: color[variant].Main, + }, + selectors: { + '&:hover': { + color: color[variant].MainHover, + }, + }, +}); + +export const EventActionButton = recipe({ + base: [ + DefaultReset, + { + ':hover': { + textDecoration: 'underline', + }, + cursor: 'pointer', + }, + ], + variants: { + variant: { + Primary: getVariant('Primary'), + Secondary: getVariant('Secondary'), + Success: getVariant('Success'), + Warning: getVariant('Warning'), + Critical: getVariant('Critical'), + }, + }, + defaultVariants: { + variant: 'Primary', + }, +}); diff --git a/src/app/components/event-action-button/EventActionButton.tsx b/src/app/components/event-action-button/EventActionButton.tsx new file mode 100644 index 00000000..f15d7073 --- /dev/null +++ b/src/app/components/event-action-button/EventActionButton.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { as, MainColor } from "folds"; +import classNames from "classnames"; +import * as css from "./EventActionButton.css"; + +export const EventActionButton = as<'button', { variant?: MainColor }>( + ({ as: AsCutoutCard = 'button', className, variant = 'Primary', ...props }, ref) => ( + + ) +); diff --git a/src/app/features/room/RoomTimeline.tsx b/src/app/features/room/RoomTimeline.tsx index 2281b59d..13a89e08 100644 --- a/src/app/features/room/RoomTimeline.tsx +++ b/src/app/features/room/RoomTimeline.tsx @@ -126,6 +126,7 @@ import { useAccessiblePowerTagColors, useGetMemberPowerTag } from '../../hooks/u import { useTheme } from '../../hooks/useTheme'; import { useRoomCreatorsTag } from '../../hooks/useRoomCreatorsTag'; import { usePowerLevelTags } from '../../hooks/usePowerLevelTags'; +import { usePinnedEventParser } from '../../hooks/usePinnedEventParser'; const TimelineFloat = as<'div', css.TimelineFloatVariants>( ({ position, className, ...props }, ref) => ( @@ -532,6 +533,7 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli [mx, room, linkifyOpts, spoilerClickHandler, mentionClickHandler, useAuthentication] ); const parseMemberEvent = useMemberEventParser(); + const parsePinnedEvent = usePinnedEventParser(room.roomId); const [timeline, setTimeline] = useState(() => eventId ? getEmptyTimeline() : getInitialTimeline(room) @@ -1468,6 +1470,47 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli ); }, + [StateEvent.RoomPinnedEvents]: (mEventId, mEvent, item) => { + const highlighted = focusItem?.index === item && focusItem.highlight; + const parsed = parsePinnedEvent(mEvent); + + const timeJSX = ( +