snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
This commit is contained in:
74
packages/commenting/src/ui/reactions.tsx
Normal file
74
packages/commenting/src/ui/reactions.tsx
Normal file
@@ -0,0 +1,74 @@
|
||||
import { ComponentType } from 'react'
|
||||
import { Reaction, ReactionTooltipProps, RenderReaction } from './reaction'
|
||||
|
||||
/** One person who reacted with a given emoji, for the hover list. @public */
|
||||
export interface ReactionReactor {
|
||||
/** Display name of the person who reacted. */
|
||||
name: string
|
||||
/** True for the current user. */
|
||||
you: boolean
|
||||
}
|
||||
|
||||
/** One emoji's reactions on a comment, already tallied. @public */
|
||||
export interface ReactionSummary {
|
||||
emoji: string
|
||||
/** How many people reacted with this emoji. */
|
||||
count: number
|
||||
/** True when the current user is one of them — renders the pill highlighted. */
|
||||
active: boolean
|
||||
/** Who reacted with this emoji, in reaction order — shown in the hover list. */
|
||||
reactors: ReactionReactor[]
|
||||
}
|
||||
|
||||
/** @public */
|
||||
export interface ReactionsProps {
|
||||
/** The comment's reactions, grouped by emoji. Empty renders nothing. */
|
||||
reactions: ReactionSummary[]
|
||||
/** Toggles the current user's reaction for an emoji. */
|
||||
onToggle?(emoji: string): void
|
||||
/** Whether the current user may react. False makes the pills inert (e.g. a signed-out
|
||||
* viewer, or a read-only thread) while still showing counts. */
|
||||
canReact?: boolean
|
||||
/** Whether hovering a pill shows its reactor list. Pass false to suppress it — e.g. while
|
||||
* another popup menu on the comment is open. Defaults to true. */
|
||||
enableHoverList?: boolean
|
||||
/** How to draw each emoji token. Defaults to the token string (OS emoji font). */
|
||||
renderReaction?: RenderReaction
|
||||
/** The tooltip naming who reacted, shown when a pill is hovered. Defaults to an inline sentence
|
||||
* (`DefaultReactionTooltip`). Swap it to render the reactor list however you like. */
|
||||
ReactionTooltip?: ComponentType<ReactionTooltipProps>
|
||||
}
|
||||
|
||||
/**
|
||||
* The row of tallied reactions under a comment. Presentational — the host supplies the summaries
|
||||
* and owns what toggling does. Hovering a pill lists who reacted (see `Reaction`).
|
||||
*
|
||||
* The add-reaction affordance is a separate component (`ReactionPicker`) so it can live outside
|
||||
* this row — on a comment card it sits with the card's hover actions, which keeps its position
|
||||
* fixed as reactions are added here.
|
||||
* @public @react
|
||||
*/
|
||||
export function Reactions({
|
||||
reactions,
|
||||
onToggle,
|
||||
canReact = true,
|
||||
enableHoverList = true,
|
||||
renderReaction,
|
||||
ReactionTooltip,
|
||||
}: ReactionsProps) {
|
||||
if (reactions.length === 0) return null
|
||||
return (
|
||||
<div className="tlui-cmt-reactions">
|
||||
{reactions.map((reaction) => (
|
||||
<Reaction
|
||||
key={reaction.emoji}
|
||||
{...reaction}
|
||||
enableHoverList={enableHoverList}
|
||||
renderReaction={renderReaction}
|
||||
ReactionTooltip={ReactionTooltip}
|
||||
onClick={canReact ? () => onToggle?.(reaction.emoji) : undefined}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user