A siimple and pretty component to add reactions in your application
Using npm
npm i svelte-reactions
Or using yarn
yarn add svelte-reactions
Using js
<script>
import 'svelte-reactions/global.css';
import { Trigger } from 'svelte-reactions';
const reactions = [
{
id: '1',
reaction: '👍',
quantity: 100,
clicked: false
}
];
</script>
<Trigger bind:reactions />
Using ts
<script lang="ts">
import 'svelte-reactions/global.css';
import { Trigger, type ReactionType } from 'svelte-reactions';
const reactions: ReactionType = [
{
id: '1',
reaction: '👍',
quantity: 100,
clicked: false
}
];
</script>
<Trigger bind:reactions />
We expose some CSS Variables to make more easy customize the colors of the component:
| Variable | Description |
|---|---|
| --srTriggerBg | Define the background color of default Trigger component |
| --srTriggerColor | Define the text color of default Trigger component |
| --srTriggerHoverBg | Define the background hover color of default Trigger component |
| --srTriggerContainerBoxShadow | Define the style box shadow of the reactions container |
| --srTriggerContainerBg | Define the background color of the reactions container |
| --srReactionClickedBg | Define the background color of reaction block when this is already clicked |
| --srReactionNotClickedBg | Define the background color of reaction block when this is not already clicked |
| --srReactionHoverBg | Define the background hover color of reaction block |
| --srReactionClickedHoverBg | Define the background hover color of reaction block when this is already clicked |
| --srEmojiColor | Define the text color of reaction |
| --srEmojiClickedColor | Define the text color of reaction when this is already clicked |
| --srLabelBorderColor | Define the border color of default label component |
| --srLabelClickedBorderColor | Define the border color of default label component when reaction is already clicked |
| --srLabelBg | Define the background color of default label component |
| --srLabelClickedBg | Define the background color of default label component when reaction is already clicked |
| --srLabelColor | Define the text color of default label component |
| --srLabelClickedColor | Define the text color of default label component when reaction is already clicked |
| --srLabelHoverBg | Define the background hover color of default label component |
| --srLabelClickedHoverBg | Define the background hover color of default label component when reaction is already clicked |
Then you can use this variables to customize the component, for example:
<!-- CustomReactionComponent.svelte -->
<script>
import { Trigger } from 'svelte-reaction';
export let reactions;
export let showLabels = true;
export let position = 'bottom-left'
</script>
<Trigger {reactions} {showLabels} {position} />
<style global>
:root {
--srTriggerBg: red;
--srTriggerHoverBg: blue;
--srTriggerColor: white;
}
</style>
If you need to be more strict, always you can overwrite the next classes to get the better result:
| Class name | Description |
|---|---|
| .trigger-container | Default class for default trigger and labels container |
| .trigger | Default class for default trigger element |
| .reactions-container | Default class for the reactions contanier (floating component) |
| .reaction | Default class for the reaction element |
| .emoji | Default class for the emoji element |
| .labels-container | Deault class for the labels container |
| .label | Default class for the label element |
| .label-component | Default class for the label element, when the reaction is defined as SvelteComponent insted of String |
Remember alway use global styles for overwriting CSS variables and classes
| Property | Type | Description |
|---|---|---|
id |
string | Identifier of a reaction, useful for bind data with your database. |
reaction |
string | SvelteComponent | You can use any string for a reaction, however we recomend you to use a string with 1 value of lenght, when you use an SvelteComponent as reaction, components like svg or img or any other, we recomend you to use this sizes: width between 20px and 35px same as height. |
labelReaction |
string | SvelteComponent | undefined | Same as reaction property, this define the reaction representation on summary labels (by default this value is equal to provided reaction value |
quantity |
number | Define the quantity of reactions, for example 50 likes in some post. |
clicked |
boolean | Define if the current user clicked some reaction. |
This type is used on the <Trigger /> component props, for example:
<Trigger position='bottom-left' />
valid values:
'bottom-left' | 'top-left' | 'bottom-right' | 'top-right'
| Property | Type | Description |
|---|---|---|
reactions |
ReactionType[] | Define the set of reactions. |
showLabels |
boolean | Define if the component generate summary of reactionis. |
position |
Placement | Define the placement of the reactions containers. |
on:reaction |
CustomEvent | Throw an event when some reaction is clicked |