Primitives to help with sharing content on social media and beyond.
npm install @solid-primitives/share



Primitives for supporting sharing of resources on social media and beyond.
- createSocialShare - A primitive for sharing on social media and beyond.
- makeWebShare - Generates a simple non-reactive WebShare primitive for sharing.
- createWebShare - Creates a reactive status about web share.
```
npm install @solid-primitives/shareor
yarn add @solid-primitives/shareor
pnpm add @solid-primitives/share
`ts
import { createSocialShare, BLUESKY } from "@solid-primitives/share";
const [share, close] = createSocialShare(() => ({
title: "SolidJS.com",
url: "https://www.solidjs.com",
description: "Simple and well-behaved reactivity!",
}));
share(BLUESKY);
`
`ts`
function createSocialShare(
options: Accessor<{
network?: Network;
url: string;
title: string;
description: string;
quote?: string;
hashtags?: string;
twitterUser?: string;
media?: string;
tag?: string;
popup?: SharePopupOptions;
}>,
controller: Window = window,
): [share: (network: Network | undefined) => void, close: () => void, isSharing: Accessor
The following are a list of supported networks that may be imported from the share package.
| Network | url | title | description | Extras/Comments |hashtags
| ------------- | ------------------ | ------------------ | ------------------ | ----------------------------------------------------------------------------------------------------------- |
| Baidu | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Buffer | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Bluesky | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Email | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| EverNote | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Facebook | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | A list of comma-separated hashtags, only the first one will be used.quote Facebook quote. |media
| FlipBoard | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| HackerNews | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| InstaPaper | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| Line | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| LinkedIn | :heavy_check_mark: | :x: | :x: | |
| Messenger | :heavy_check_mark: | :x: | :x: | |
| Odnoklassniki | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Pinterest | :heavy_check_mark: | :heavy_check_mark: | :x: | URL of an image describing the content. |hashtags
| Pocket | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Reddit | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Skype | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| SMS | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| StumbleUpon | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Telegram | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| Tumblr | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| Twitter | :heavy_check_mark: | :heavy_check_mark: | :x: | A list of comma-separated hashtags.twitter-user Twitter user to mention. |hashtags
| X | :heavy_check_mark: | :heavy_check_mark: | :x: | A list of comma-separated hashtags.twitter-user X user to mention. |media
| Viber | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| VK | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | URL of an image describing the content. |media
| Weibo | :heavy_check_mark: | :heavy_check_mark: | :x: | URL of an image describing the content. |media
| WhatsApp | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| Wordpress | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | URL of an image describing the content. |
| Xing | :heavy_check_mark: | :heavy_check_mark: | :x: | |
| Yammer | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
For the networks: Bluesky, Line, Skype, SMS, Telegram, Viber, WhatsApp and Yammer; the shared content is a string of the form: "$title $url $description"
Note that you can also provide your own custom network by formatting the input string into the share function. The following is a list of properties that will be replaced by the utility:
- @u: URL@t
- : Title@d
- : Description@q
- : Quote@h
- : Hashtags@m
- : Media@tu
- : X User (X specific)
The following is an example of X's share string:
`ts`
const x: Network = "https://www.x.com/intent/tweet?text=@t&url=@u&hashtags=@h@tu";
You may view a working example here on Stackblitz.
A portion of this primitive was built from https://github.com/nicolasbeauvais/vue-social-sharing/blob/master/src/share-network.js.
Generates a simple non-reactive WebShare primitive for sharing. Uses the WebShare API.
`ts
import { makeWebShare } from "@solid-primitives/share";
const share = makeWebShare();
try {
await share({ url: "https://solidjs.com" });
} catch (e) {
console.log(e);
}
`
Creates a reactive status about web share. Uses the WebShare API.
`ts
import { createWebShare } from "@solid-primitives/share";
const [data, setData] = createSignal
const shareStatus = createWebShare(data);
createEffect(() => {
console.log(shareStatus.status, shareStatus.message);
});
``
See CHANGELOG.md