├── .editorconfig ├── .git-blame-ignore-revs ├── .github ├── FUNDING.yml └── workflows │ ├── ci.yaml │ ├── publish.yml │ ├── size.yml │ └── test.yml ├── .gitignore ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── assets ├── demo@2x.png └── logo.svg ├── deno.json ├── index.html ├── package.json ├── pnpm-lock.yaml ├── script ├── fix ├── fmt └── lint ├── src ├── icons │ ├── bluesky.svg │ ├── copy-url-done.svg │ ├── copy-url.svg │ ├── email.svg │ ├── facebook.svg │ ├── fediverse.svg │ ├── hackernews.svg │ ├── linkedin-in.svg │ ├── linkedin.svg │ ├── lobsters.svg │ ├── mastodon.svg │ ├── messenger.svg │ ├── odnoklassniki.svg │ ├── pinterest.svg │ ├── pocket.svg │ ├── print.svg │ ├── reddit.svg │ ├── teams.svg │ ├── telegram.svg │ ├── tumblr.svg │ ├── twitter.svg │ ├── viber.svg │ ├── vkontakte.svg │ ├── web-share.svg │ └── whatsapp.svg ├── index.js ├── shareon.css └── shareon.js ├── svgo.config.js └── vite.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | max_line_length = 80 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | d95105353f659f1dfc16aa00e97dde9a18406be4 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: kytta 2 | liberapay: kytta 3 | custom: paypal.me/NickKaramoff 4 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: CI 3 | 4 | on: 5 | push: 6 | branches: 7 | - main 8 | pull_request: 9 | 10 | permissions: {} 11 | 12 | jobs: 13 | format: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | with: 18 | persist-credentials: false 19 | - uses: denoland/setup-deno@v2 20 | with: 21 | deno-version: v2.x 22 | - run: script/fmt 23 | - uses: pre-commit-ci/lite-action@v1.1.0 24 | if: ${{ github.event_name == 'pull_request' }} 25 | 26 | lint: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - uses: actions/checkout@v4 30 | with: 31 | persist-credentials: false 32 | - uses: denoland/setup-deno@v2 33 | with: 34 | deno-version: v2.x 35 | - run: script/lint --fix 36 | - uses: pre-commit-ci/lite-action@v1.1.0 37 | if: ${{ github.event_name == 'pull_request' }} 38 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | release: 5 | types: 6 | - published 7 | 8 | jobs: 9 | publish: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | contents: read 13 | id-token: write 14 | 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v4 18 | - name: Set up pnpm 19 | uses: pnpm/action-setup@v4 20 | with: 21 | version: 9 22 | - name: Setup Node.js 23 | uses: actions/setup-node@v4 24 | with: 25 | node-version: 22 26 | registry-url: "https://registry.npmjs.org" 27 | cache: pnpm 28 | - name: Install dependencies 29 | run: pnpm install --ignore-scripts 30 | - name: Build 31 | run: pnpm run build 32 | - name: Publish to NPM (with provenance) 33 | run: pnpm publish --no-git-checks --access public --tag ${{ github.event.release.prerelease && 'next' || 'latest' }} 34 | env: 35 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 36 | NPM_CONFIG_PROVENANCE: "true" 37 | -------------------------------------------------------------------------------- /.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: Size Limit 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | 8 | permissions: 9 | pull-requests: write 10 | 11 | jobs: 12 | size: 13 | runs-on: ubuntu-latest 14 | env: 15 | CI_JOB_NUMBER: 1 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Fetch Git refs 20 | run: git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/* 21 | - uses: pnpm/action-setup@v4 22 | with: 23 | version: 9 24 | - uses: actions/setup-node@v4 25 | with: 26 | node-version: 22 27 | cache: pnpm 28 | - name: Check package size 29 | uses: andresz1/size-limit-action@v1.8.0 30 | with: 31 | github_token: ${{ secrets.GITHUB_TOKEN }} 32 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | env: 12 | FORCE_COLOR: 2 13 | 14 | jobs: 15 | test: 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | - uses: pnpm/action-setup@v4 21 | with: 22 | version: 9 23 | - uses: actions/setup-node@v4 24 | with: 25 | node-version: 22 26 | cache: pnpm 27 | - name: Install dependencies 28 | run: pnpm install --ignore-scripts 29 | - name: Build 30 | run: pnpm run build 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dev/ 2 | dist/ 3 | .idea/ 4 | node_modules/ 5 | .vscode/ 6 | package-lock.json 7 | yarn.lock 8 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | ci: 2 | skip: 3 | - deno-fmt 4 | - deno-lint 5 | 6 | repos: 7 | - repo: https://github.com/pre-commit/pre-commit-hooks 8 | rev: v5.0.0 9 | hooks: 10 | - id: end-of-file-fixer 11 | exclude: 'src/icons/.*\.svg' 12 | - id: fix-byte-order-marker 13 | - id: mixed-line-ending 14 | - id: trailing-whitespace 15 | args: [--markdown-linebreak-ext=md] 16 | - id: check-json 17 | - id: check-toml 18 | - id: check-yaml 19 | - repo: local 20 | hooks: 21 | - id: deno-fmt 22 | name: deno fmt 23 | entry: deno fmt 24 | language: system 25 | types_or: 26 | - html 27 | - css 28 | - javascript 29 | - ts 30 | - json 31 | - yaml 32 | exclude_types: 33 | - markdown 34 | exclude: ^pnpm-lock\.yaml$ 35 | - repo: local 36 | hooks: 37 | - id: deno-lint 38 | name: deno lint 39 | entry: deno lint 40 | args: ["--fix"] 41 | language: system 42 | files: '\.[cm]?[jt]s$' 43 | - repo: https://github.com/kytta/mirrors-svgo 44 | rev: v4.0.0-rc.2 45 | hooks: 46 | - id: svgo 47 | files: "^src/icons/" 48 | additional_dependencies: 49 | - svgo@3 50 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 6 | 7 | ## [2.6.0] - 2024-11-23 8 | 9 | ### Added 10 | 11 | - [#132](https://github.com/kytta/shareon/pull/132) 12 | Hacker News button by [Abdelhadi](https://github.com/Abd-Elhadi) 13 | - [#134](https://github.com/kytta/shareon/pull/134) 14 | Bluesky button 15 | 16 | ### Security 17 | 18 | - [#122](https://github.com/kytta/shareon/pull/122) 19 | Bump `braces` to v3.0.3 20 | - [#135](https://github.com/kytta/shareon/pull/135) 21 | Bump `micromatch` to 4.0.8 22 | - [#136](https://github.com/kytta/shareon/pull/136) 23 | Bump `cross-spawn` to v7.0.5 24 | - [#137](https://github.com/kytta/shareon/pull/137) 25 | Bump `rollup` to v4.27.2 26 | 27 | ### Behind-the-scenes 28 | 29 | - [#123](https://github.com/kytta/shareon/pull/123) 30 | Use PNPM lockfile v9 31 | - [#124](https://github.com/kytta/shareon/pull/124) 32 | Update dev dependencies 33 | 34 | ## [2.5.0] - 2024-02-04 35 | 36 | ### Added 37 | 38 | - [#108](https://github.com/kytta/shareon/pull/108) 39 | Fediverse button (via [Share₂Fedi](https://github.com/kytta/share2fedi)) 40 | 41 | ## [2.4.0] - 2023-12-07 42 | 43 | ### Added 44 | 45 | - [#99](https://github.com/kytta/shareon/pull/99) 46 | Email button 47 | - [#100](https://github.com/kytta/shareon/pull/100) 48 | Print button 49 | 50 | ### Behind-the-scenes 51 | 52 | - [#95](https://github.com/kytta/shareon/pull/95) 53 | Update to Vite v5 54 | - [#101](https://github.com/kytta/shareon/pull/101) 55 | Enable automatic package publishing 56 | 57 | ## [2.3.0] - 2023-08-01 58 | 59 | ### Added 60 | 61 | - [#80](https://github.com/kytta/shareon/pull/80): 62 | Tumblr button by [Isaac](https://github.com/kabszac) 63 | 64 | ### Behind-the-scenes 65 | 66 | - [#82](https://github.com/kytta/shareon/pull/82): 67 | PNPM is now enforced by [Anderson](https://github.com/andersonjoseph) 68 | 69 | ## [2.2.3] - 2023-07-19 70 | 71 | ### Fixed 72 | 73 | - v2.2.2 was published with the bug not fixed. 74 | 75 | ## [2.2.2] - 2023-07-15 76 | 77 | ### Fixed 78 | 79 | - [#71](https://github.com/kytta/shareon/pull/71): 80 | Web Share icon got minified incorrectly, causing it to not show up at all. 81 | Fixed by Jake. 82 | 83 | ## [2.2.1] - 2023-07-15 84 | 85 | ### Behind-the-scenes 86 | 87 | - [#70](https://github.com/kytta/shareon/pull/70): 88 | Icon minification and inlining happens automatically now. As a bonus, the CSS 89 | size went a bit down :) 90 | 91 | ## [2.2.0] - 2023-07-15 92 | 93 | ### Added 94 | 95 | - `data-hashtags` for Facebook and Twitter by Edward in https://github.com/kytta/shareon/pull/60 96 | - Microsoft Teams button by Dimitrios in https://github.com/kytta/shareon/pull/66 97 | - Web Share API button by Dimitrios in https://github.com/kytta/shareon/pull/67 98 | 99 | ### Changed 100 | 101 | - the advertized bundle size now uses Brotli for compression (https://github.com/kytta/shareon/pull/69) 102 | 103 | ## [2.1.0] - 2023-03-20 104 | 105 | ### Added 106 | 107 | - "Copy URL" button in https://github.com/kytta/shareon/pull/44 108 | 109 | ### Behind-the-scenes 110 | 111 | - Added pre-commit hooks in https://github.com/kytta/shareon/pull/47 112 | - Fixed `size-limit-action` branch in https://github.com/kytta/shareon/pull/48 113 | 114 | ## [2.0.2] - 2023-01-25 115 | 116 | ### Changed 117 | 118 | - Sourcemaps are not being output any more 119 | - They're being loaded automatically and don't serve any other purpose. 120 | Disabling those helps us save a few bytes 121 | - Change minifier to esbuild (instead of terser) 122 | - This disables the minification of ESM, which is a good thing, because 123 | otherwise the file can't be tree-shaken properly 124 | - Shareon is now `type: "module"` 125 | - This doesn't change anything for the end users 126 | - Banner was removed 127 | - It took unnecessary bytes, and embedding it was somewhat buggy 128 | - Browserslist config now targets `defaults` 129 | - Opera 90 and Samsung Browser 17 aren't targeted. Shareon will still work on 130 | these browsers. 131 | - the previous config (using `last 3 versions instead` of `last 2 versions`) 132 | didn't change coverage that much 133 | 134 | ### Behind-the-scenes 135 | 136 | - Updated to Vite v4 137 | - CSS is now bundled using Vite 138 | - this makes the build script leaner; it's still processed with PostCSS 139 | - Moved PostCSS and ESLint config to package.json 140 | 141 | ## [2.0.1] - 2023-01-23 142 | 143 | ### Changed 144 | 145 | - Mastodon button updated to match the new style (#42) 146 | 147 | ## [2.0.0] - 2021-02-13 148 | 149 | ### Added 150 | 151 | - **BREAKING:** new (auto-)init behaviour, inspired by [petite-vue](https://github.com/vuejs/petite-vue) 152 | 153 | - `require`, `import`, or use ` 29 | ``` 30 | 31 | - `defer` makes sure Shareon is loaded after HTML is parsed 32 | - `init` will automatically initialize Shareon buttons 33 | 34 | ### Do not auto-initialize 35 | 36 | Remove the `init` attribute and initialize Shareon when you need it: 37 | 38 | ```html 39 | 43 | 44 | 48 | ``` 49 | 50 | ### Use ESM build 51 | 52 | There is also a ESM build for the browsers, which doesn't support 53 | auto-initialization: 54 | 55 | ```html 56 | 61 | ``` 62 | 63 | ### Bundle with Node 64 | 65 | You can also install Shareon using your favourite package manager and include it 66 | in your source files: 67 | 68 | ```sh 69 | pnpm add shareon # or `npm install`, or `yarn add` 70 | ``` 71 | 72 | ```js 73 | import { init } from "shareon"; 74 | import "shareon/css"; // most bundlers will transpile this CSS 75 | 76 | init(); 77 | ``` 78 | 79 | CommonJS imports are also supported: 80 | 81 | ```js 82 | const Shareon = require("shareon"); 83 | require("shareon/css"); // most bundlers will transpile this CSS 84 | 85 | Shareon.init(); 86 | ``` 87 | 88 | ## Usage 89 | 90 | Create a container with class `shareon` and populate it with elements, class 91 | names of which match the names of the social networks (or `copy-url`, for the 92 | 'Copy URL' button, or `print` for the 'Print' button): 93 | 94 | ```html 95 |
96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 |
121 | ``` 122 | 123 | Shareon will populate these `` elements with correct `href` attributes. 124 | 125 | ### Use with ` 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 |
86 |

<a> with custom params

87 |
93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 |
117 |
118 |
119 |

Specimen

120 |
121 | Share 122 | 123 | 124 | 125 | 126 | 127 | Toot 128 | 129 |
130 | 131 | Pin 132 | 133 | 134 | 135 | 136 | Post 137 | 138 |
139 | Send 140 | 141 | 142 | Copy URL 143 | 144 | 145 | 146 |
147 |
148 | 149 | 150 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shareon", 3 | "version": "2.6.0", 4 | "description": "Lightweight, stylish and ethical share buttons for popular social networks", 5 | "license": "MIT", 6 | "homepage": "https://shareon.js.org", 7 | "keywords": [ 8 | "share buttons", 9 | "sharing", 10 | "social networks" 11 | ], 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/kytta/shareon.git" 15 | }, 16 | "bugs": { 17 | "url": "https://github.com/kytta/shareon/issues" 18 | }, 19 | "author": { 20 | "name": "Nikita Karamov", 21 | "email": "me@kytta.dev", 22 | "url": "https://www.kytta.dev/" 23 | }, 24 | "funding": [ 25 | "https://github.com/sponsors/kytta/", 26 | "https://liberapay.com/kytta", 27 | "https://www.paypal.com/paypalme/NickKaramoff" 28 | ], 29 | "type": "module", 30 | "main": "./dist/shareon.umd.js", 31 | "unpkg": "./dist/shareon.iife.js", 32 | "jsdelivr": "./dist/shareon.iife.js", 33 | "module": "./dist/shareon.es.js", 34 | "exports": { 35 | ".": { 36 | "import": "./dist/shareon.es.js", 37 | "require": "./dist/shareon.umd.js" 38 | }, 39 | "./css": "./dist/shareon.min.css" 40 | }, 41 | "files": [ 42 | "dist" 43 | ], 44 | "scripts": { 45 | "build": "vite build", 46 | "dev": "vite", 47 | "size": "size-limit", 48 | "test": "pnpm run build && pnpm run size", 49 | "postversion": "pnpm run build", 50 | "prepublishOnly": "rm -rf ./package && clean-publish", 51 | "postpublish": "rm -rf ./package", 52 | "preinstall": "npx only-allow pnpm" 53 | }, 54 | "devDependencies": { 55 | "@size-limit/preset-small-lib": "^11.1.4", 56 | "autoprefixer": "^10.4.19", 57 | "clean-publish": "^5.0.0", 58 | "postcss": "^8.4.39", 59 | "postcss-calc": "^10.0.0", 60 | "postcss-css-variables": "^0.19.0", 61 | "postcss-csso": "^6.0.1", 62 | "postcss-url": "^10.1.3", 63 | "size-limit": "^11.1.4", 64 | "vite": "^5.3.4" 65 | }, 66 | "postcss": { 67 | "plugins": { 68 | "postcss-url": { 69 | "url": "inline", 70 | "optimizeSvgEncode": true 71 | }, 72 | "postcss-css-variables": {}, 73 | "postcss-calc": {}, 74 | "autoprefixer": {}, 75 | "postcss-csso": {} 76 | } 77 | }, 78 | "size-limit": [ 79 | { 80 | "limit": "6.6 KiB", 81 | "path": "./dist/shareon.min.css" 82 | }, 83 | { 84 | "limit": "1.1 KiB", 85 | "path": "./dist/shareon.es.js" 86 | } 87 | ], 88 | "publishConfig": { 89 | "directory": "package" 90 | }, 91 | "clean-publish": { 92 | "withoutPublish": true, 93 | "tempDir": "package", 94 | "fields": [ 95 | "postcss" 96 | ] 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@size-limit/preset-small-lib': 12 | specifier: ^11.1.4 13 | version: 11.1.4(size-limit@11.1.4) 14 | autoprefixer: 15 | specifier: ^10.4.19 16 | version: 10.4.19(postcss@8.4.39) 17 | clean-publish: 18 | specifier: ^5.0.0 19 | version: 5.0.0 20 | postcss: 21 | specifier: ^8.4.39 22 | version: 8.4.39 23 | postcss-calc: 24 | specifier: ^10.0.0 25 | version: 10.0.0(postcss@8.4.39) 26 | postcss-css-variables: 27 | specifier: ^0.19.0 28 | version: 0.19.0(postcss@8.4.39) 29 | postcss-csso: 30 | specifier: ^6.0.1 31 | version: 6.0.1(postcss@8.4.39) 32 | postcss-url: 33 | specifier: ^10.1.3 34 | version: 10.1.3(postcss@8.4.39) 35 | size-limit: 36 | specifier: ^11.1.4 37 | version: 11.1.4 38 | vite: 39 | specifier: ^5.3.4 40 | version: 5.3.4 41 | publishDirectory: package 42 | 43 | packages: 44 | 45 | '@esbuild/aix-ppc64@0.21.5': 46 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 47 | engines: {node: '>=12'} 48 | cpu: [ppc64] 49 | os: [aix] 50 | 51 | '@esbuild/android-arm64@0.21.5': 52 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 53 | engines: {node: '>=12'} 54 | cpu: [arm64] 55 | os: [android] 56 | 57 | '@esbuild/android-arm@0.21.5': 58 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 59 | engines: {node: '>=12'} 60 | cpu: [arm] 61 | os: [android] 62 | 63 | '@esbuild/android-x64@0.21.5': 64 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 65 | engines: {node: '>=12'} 66 | cpu: [x64] 67 | os: [android] 68 | 69 | '@esbuild/darwin-arm64@0.21.5': 70 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 71 | engines: {node: '>=12'} 72 | cpu: [arm64] 73 | os: [darwin] 74 | 75 | '@esbuild/darwin-x64@0.21.5': 76 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 77 | engines: {node: '>=12'} 78 | cpu: [x64] 79 | os: [darwin] 80 | 81 | '@esbuild/freebsd-arm64@0.21.5': 82 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 83 | engines: {node: '>=12'} 84 | cpu: [arm64] 85 | os: [freebsd] 86 | 87 | '@esbuild/freebsd-x64@0.21.5': 88 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 89 | engines: {node: '>=12'} 90 | cpu: [x64] 91 | os: [freebsd] 92 | 93 | '@esbuild/linux-arm64@0.21.5': 94 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 95 | engines: {node: '>=12'} 96 | cpu: [arm64] 97 | os: [linux] 98 | 99 | '@esbuild/linux-arm@0.21.5': 100 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 101 | engines: {node: '>=12'} 102 | cpu: [arm] 103 | os: [linux] 104 | 105 | '@esbuild/linux-ia32@0.21.5': 106 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 107 | engines: {node: '>=12'} 108 | cpu: [ia32] 109 | os: [linux] 110 | 111 | '@esbuild/linux-loong64@0.21.5': 112 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 113 | engines: {node: '>=12'} 114 | cpu: [loong64] 115 | os: [linux] 116 | 117 | '@esbuild/linux-mips64el@0.21.5': 118 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 119 | engines: {node: '>=12'} 120 | cpu: [mips64el] 121 | os: [linux] 122 | 123 | '@esbuild/linux-ppc64@0.21.5': 124 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 125 | engines: {node: '>=12'} 126 | cpu: [ppc64] 127 | os: [linux] 128 | 129 | '@esbuild/linux-riscv64@0.21.5': 130 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 131 | engines: {node: '>=12'} 132 | cpu: [riscv64] 133 | os: [linux] 134 | 135 | '@esbuild/linux-s390x@0.21.5': 136 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 137 | engines: {node: '>=12'} 138 | cpu: [s390x] 139 | os: [linux] 140 | 141 | '@esbuild/linux-x64@0.21.5': 142 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 143 | engines: {node: '>=12'} 144 | cpu: [x64] 145 | os: [linux] 146 | 147 | '@esbuild/netbsd-x64@0.21.5': 148 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 149 | engines: {node: '>=12'} 150 | cpu: [x64] 151 | os: [netbsd] 152 | 153 | '@esbuild/openbsd-x64@0.21.5': 154 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 155 | engines: {node: '>=12'} 156 | cpu: [x64] 157 | os: [openbsd] 158 | 159 | '@esbuild/sunos-x64@0.21.5': 160 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 161 | engines: {node: '>=12'} 162 | cpu: [x64] 163 | os: [sunos] 164 | 165 | '@esbuild/win32-arm64@0.21.5': 166 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 167 | engines: {node: '>=12'} 168 | cpu: [arm64] 169 | os: [win32] 170 | 171 | '@esbuild/win32-ia32@0.21.5': 172 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 173 | engines: {node: '>=12'} 174 | cpu: [ia32] 175 | os: [win32] 176 | 177 | '@esbuild/win32-x64@0.21.5': 178 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 179 | engines: {node: '>=12'} 180 | cpu: [x64] 181 | os: [win32] 182 | 183 | '@nodelib/fs.scandir@2.1.5': 184 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 185 | engines: {node: '>= 8'} 186 | 187 | '@nodelib/fs.stat@2.0.5': 188 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 189 | engines: {node: '>= 8'} 190 | 191 | '@nodelib/fs.walk@1.2.8': 192 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 193 | engines: {node: '>= 8'} 194 | 195 | '@rollup/rollup-android-arm-eabi@4.27.2': 196 | resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==} 197 | cpu: [arm] 198 | os: [android] 199 | 200 | '@rollup/rollup-android-arm64@4.27.2': 201 | resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} 202 | cpu: [arm64] 203 | os: [android] 204 | 205 | '@rollup/rollup-darwin-arm64@4.27.2': 206 | resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} 207 | cpu: [arm64] 208 | os: [darwin] 209 | 210 | '@rollup/rollup-darwin-x64@4.27.2': 211 | resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} 212 | cpu: [x64] 213 | os: [darwin] 214 | 215 | '@rollup/rollup-freebsd-arm64@4.27.2': 216 | resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} 217 | cpu: [arm64] 218 | os: [freebsd] 219 | 220 | '@rollup/rollup-freebsd-x64@4.27.2': 221 | resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} 222 | cpu: [x64] 223 | os: [freebsd] 224 | 225 | '@rollup/rollup-linux-arm-gnueabihf@4.27.2': 226 | resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} 227 | cpu: [arm] 228 | os: [linux] 229 | 230 | '@rollup/rollup-linux-arm-musleabihf@4.27.2': 231 | resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} 232 | cpu: [arm] 233 | os: [linux] 234 | 235 | '@rollup/rollup-linux-arm64-gnu@4.27.2': 236 | resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} 237 | cpu: [arm64] 238 | os: [linux] 239 | 240 | '@rollup/rollup-linux-arm64-musl@4.27.2': 241 | resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} 242 | cpu: [arm64] 243 | os: [linux] 244 | 245 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': 246 | resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} 247 | cpu: [ppc64] 248 | os: [linux] 249 | 250 | '@rollup/rollup-linux-riscv64-gnu@4.27.2': 251 | resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} 252 | cpu: [riscv64] 253 | os: [linux] 254 | 255 | '@rollup/rollup-linux-s390x-gnu@4.27.2': 256 | resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} 257 | cpu: [s390x] 258 | os: [linux] 259 | 260 | '@rollup/rollup-linux-x64-gnu@4.27.2': 261 | resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} 262 | cpu: [x64] 263 | os: [linux] 264 | 265 | '@rollup/rollup-linux-x64-musl@4.27.2': 266 | resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} 267 | cpu: [x64] 268 | os: [linux] 269 | 270 | '@rollup/rollup-win32-arm64-msvc@4.27.2': 271 | resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} 272 | cpu: [arm64] 273 | os: [win32] 274 | 275 | '@rollup/rollup-win32-ia32-msvc@4.27.2': 276 | resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==} 277 | cpu: [ia32] 278 | os: [win32] 279 | 280 | '@rollup/rollup-win32-x64-msvc@4.27.2': 281 | resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} 282 | cpu: [x64] 283 | os: [win32] 284 | 285 | '@sindresorhus/merge-streams@2.3.0': 286 | resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} 287 | engines: {node: '>=18'} 288 | 289 | '@size-limit/esbuild@11.1.4': 290 | resolution: {integrity: sha512-Nxh+Fw4Z7sFjRLeT7GDZIy297VXyJrMvG20UDSWP31QgglriEBDkW9U77T7W6js5FaEr89bYVrGzpHfmE1CLFw==} 291 | engines: {node: ^18.0.0 || >=20.0.0} 292 | peerDependencies: 293 | size-limit: 11.1.4 294 | 295 | '@size-limit/file@11.1.4': 296 | resolution: {integrity: sha512-QxnGj9cxhCEuqMAV01gqonXIKcc+caZqFHZpV51oL2ZJNGSPP9Q/yyf+7HbVe00faOFd1dZZwMwzZmX7HQ9LbA==} 297 | engines: {node: ^18.0.0 || >=20.0.0} 298 | peerDependencies: 299 | size-limit: 11.1.4 300 | 301 | '@size-limit/preset-small-lib@11.1.4': 302 | resolution: {integrity: sha512-wELW374esv+2Nlzf7g+qW4Af9L69duLoO9F52f0sGk/nzb6et7u8gLRvweWrBfm3itUrqHCpGSSVabTsIU8kNw==} 303 | peerDependencies: 304 | size-limit: 11.1.4 305 | 306 | '@types/estree@1.0.6': 307 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 308 | 309 | anymatch@3.1.3: 310 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 311 | engines: {node: '>= 8'} 312 | 313 | autoprefixer@10.4.19: 314 | resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} 315 | engines: {node: ^10 || ^12 || >=14} 316 | hasBin: true 317 | peerDependencies: 318 | postcss: ^8.1.0 319 | 320 | balanced-match@1.0.2: 321 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 322 | 323 | binary-extensions@2.3.0: 324 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 325 | engines: {node: '>=8'} 326 | 327 | brace-expansion@1.1.11: 328 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 329 | 330 | braces@3.0.3: 331 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 332 | engines: {node: '>=8'} 333 | 334 | browserslist@4.23.2: 335 | resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} 336 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 337 | hasBin: true 338 | 339 | bytes-iec@3.1.1: 340 | resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} 341 | engines: {node: '>= 0.8'} 342 | 343 | caniuse-lite@1.0.30001642: 344 | resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} 345 | 346 | chokidar@3.6.0: 347 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 348 | engines: {node: '>= 8.10.0'} 349 | 350 | clean-publish@5.0.0: 351 | resolution: {integrity: sha512-1qjtqP3piZL4t8SqGojOyA12bg8AtbFPIQstNvxmss1fhwfma3CqMJ/Y/kbRvAllLX2/c4ZKjcCCKDqEtpcymA==} 352 | engines: {node: '>= 18.0.0'} 353 | hasBin: true 354 | 355 | concat-map@0.0.1: 356 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 357 | 358 | cross-spawn@7.0.5: 359 | resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} 360 | engines: {node: '>= 8'} 361 | 362 | css-tree@2.2.1: 363 | resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} 364 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} 365 | 366 | cssesc@3.0.0: 367 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 368 | engines: {node: '>=4'} 369 | hasBin: true 370 | 371 | csso@5.0.5: 372 | resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} 373 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} 374 | 375 | cuint@0.2.2: 376 | resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==} 377 | 378 | electron-to-chromium@1.4.829: 379 | resolution: {integrity: sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==} 380 | 381 | esbuild@0.21.5: 382 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 383 | engines: {node: '>=12'} 384 | hasBin: true 385 | 386 | escalade@3.1.2: 387 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 388 | engines: {node: '>=6'} 389 | 390 | escape-string-regexp@1.0.5: 391 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 392 | engines: {node: '>=0.8.0'} 393 | 394 | extend@3.0.2: 395 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 396 | 397 | fast-glob@3.3.2: 398 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 399 | engines: {node: '>=8.6.0'} 400 | 401 | fastq@1.15.0: 402 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 403 | 404 | fill-range@7.1.1: 405 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 406 | engines: {node: '>=8'} 407 | 408 | fraction.js@4.3.7: 409 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 410 | 411 | fsevents@2.3.3: 412 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 413 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 414 | os: [darwin] 415 | 416 | glob-parent@5.1.2: 417 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 418 | engines: {node: '>= 6'} 419 | 420 | globby@14.0.2: 421 | resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} 422 | engines: {node: '>=18'} 423 | 424 | ignore@5.3.1: 425 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 426 | engines: {node: '>= 4'} 427 | 428 | is-binary-path@2.1.0: 429 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 430 | engines: {node: '>=8'} 431 | 432 | is-extglob@2.1.1: 433 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 434 | engines: {node: '>=0.10.0'} 435 | 436 | is-glob@4.0.3: 437 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 438 | engines: {node: '>=0.10.0'} 439 | 440 | is-number@7.0.0: 441 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 442 | engines: {node: '>=0.12.0'} 443 | 444 | isexe@2.0.0: 445 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 446 | 447 | jiti@1.21.6: 448 | resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 449 | hasBin: true 450 | 451 | lilconfig@3.1.2: 452 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 453 | engines: {node: '>=14'} 454 | 455 | make-dir@3.1.0: 456 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 457 | engines: {node: '>=8'} 458 | 459 | mdn-data@2.0.28: 460 | resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} 461 | 462 | merge2@1.4.1: 463 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 464 | engines: {node: '>= 8'} 465 | 466 | micromatch@4.0.8: 467 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 468 | engines: {node: '>=8.6'} 469 | 470 | mime@2.5.2: 471 | resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} 472 | engines: {node: '>=4.0.0'} 473 | hasBin: true 474 | 475 | minimatch@3.0.8: 476 | resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} 477 | 478 | nanoid@3.3.8: 479 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 480 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 481 | hasBin: true 482 | 483 | nanoid@5.0.7: 484 | resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} 485 | engines: {node: ^18 || >=20} 486 | hasBin: true 487 | 488 | nanospinner@1.1.0: 489 | resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} 490 | 491 | node-releases@2.0.17: 492 | resolution: {integrity: sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==} 493 | 494 | normalize-path@3.0.0: 495 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 496 | engines: {node: '>=0.10.0'} 497 | 498 | normalize-range@0.1.2: 499 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 500 | engines: {node: '>=0.10.0'} 501 | 502 | path-key@3.1.1: 503 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 504 | engines: {node: '>=8'} 505 | 506 | path-type@5.0.0: 507 | resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} 508 | engines: {node: '>=12'} 509 | 510 | picocolors@1.0.0: 511 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 512 | 513 | picocolors@1.0.1: 514 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 515 | 516 | picomatch@2.3.1: 517 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 518 | engines: {node: '>=8.6'} 519 | 520 | postcss-calc@10.0.0: 521 | resolution: {integrity: sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==} 522 | engines: {node: ^18.12 || ^20.9 || >=22.0} 523 | peerDependencies: 524 | postcss: ^8.4.38 525 | 526 | postcss-css-variables@0.19.0: 527 | resolution: {integrity: sha512-Hr0WEYKLK9VCrY15anHXOd4RCvJy/xRvCnWdplGBeLInwEj6Z14hgzTb2W/39dYTCnS8hnHUfU4/F1zxX0IZuQ==} 528 | peerDependencies: 529 | postcss: ^8.2.6 530 | 531 | postcss-csso@6.0.1: 532 | resolution: {integrity: sha512-ZV4yEziMrx6CEiqabGLrDva0pMD7Fbw7yP+LzJvaynM4OJgTssGN6dHiMsJMJdpmNaLJltXVLsrb/5sxbFa8sA==} 533 | engines: {node: ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} 534 | peerDependencies: 535 | postcss: ^8.0.0 536 | 537 | postcss-selector-parser@6.1.1: 538 | resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} 539 | engines: {node: '>=4'} 540 | 541 | postcss-url@10.1.3: 542 | resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==} 543 | engines: {node: '>=10'} 544 | peerDependencies: 545 | postcss: ^8.0.0 546 | 547 | postcss-value-parser@4.2.0: 548 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 549 | 550 | postcss@8.4.39: 551 | resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} 552 | engines: {node: ^10 || ^12 || >=14} 553 | 554 | queue-microtask@1.2.3: 555 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 556 | 557 | readdirp@3.6.0: 558 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 559 | engines: {node: '>=8.10.0'} 560 | 561 | reusify@1.0.4: 562 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 563 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 564 | 565 | rollup@4.27.2: 566 | resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==} 567 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 568 | hasBin: true 569 | 570 | run-parallel@1.2.0: 571 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 572 | 573 | semver@6.3.1: 574 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 575 | hasBin: true 576 | 577 | shebang-command@2.0.0: 578 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 579 | engines: {node: '>=8'} 580 | 581 | shebang-regex@3.0.0: 582 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 583 | engines: {node: '>=8'} 584 | 585 | size-limit@11.1.4: 586 | resolution: {integrity: sha512-V2JAI/Z7h8sEuxU3V+Ig3XKA5FcYbI4CZ7sh6s7wvuy+TUwDZYqw7sAqrHhQ4cgcNfPKIAHAaH8VaqOdbcwJDA==} 587 | engines: {node: ^18.0.0 || >=20.0.0} 588 | hasBin: true 589 | 590 | slash@5.1.0: 591 | resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} 592 | engines: {node: '>=14.16'} 593 | 594 | source-map-js@1.0.2: 595 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 596 | engines: {node: '>=0.10.0'} 597 | 598 | source-map-js@1.2.0: 599 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 600 | engines: {node: '>=0.10.0'} 601 | 602 | to-regex-range@5.0.1: 603 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 604 | engines: {node: '>=8.0'} 605 | 606 | unicorn-magic@0.1.0: 607 | resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} 608 | engines: {node: '>=18'} 609 | 610 | update-browserslist-db@1.1.0: 611 | resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} 612 | hasBin: true 613 | peerDependencies: 614 | browserslist: '>= 4.21.0' 615 | 616 | util-deprecate@1.0.2: 617 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 618 | 619 | vite@5.3.4: 620 | resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} 621 | engines: {node: ^18.0.0 || >=20.0.0} 622 | hasBin: true 623 | peerDependencies: 624 | '@types/node': ^18.0.0 || >=20.0.0 625 | less: '*' 626 | lightningcss: ^1.21.0 627 | sass: '*' 628 | stylus: '*' 629 | sugarss: '*' 630 | terser: ^5.4.0 631 | peerDependenciesMeta: 632 | '@types/node': 633 | optional: true 634 | less: 635 | optional: true 636 | lightningcss: 637 | optional: true 638 | sass: 639 | optional: true 640 | stylus: 641 | optional: true 642 | sugarss: 643 | optional: true 644 | terser: 645 | optional: true 646 | 647 | which@2.0.2: 648 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 649 | engines: {node: '>= 8'} 650 | hasBin: true 651 | 652 | xxhashjs@0.2.2: 653 | resolution: {integrity: sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==} 654 | 655 | publishDirectory: package 656 | 657 | snapshots: 658 | 659 | '@esbuild/aix-ppc64@0.21.5': 660 | optional: true 661 | 662 | '@esbuild/android-arm64@0.21.5': 663 | optional: true 664 | 665 | '@esbuild/android-arm@0.21.5': 666 | optional: true 667 | 668 | '@esbuild/android-x64@0.21.5': 669 | optional: true 670 | 671 | '@esbuild/darwin-arm64@0.21.5': 672 | optional: true 673 | 674 | '@esbuild/darwin-x64@0.21.5': 675 | optional: true 676 | 677 | '@esbuild/freebsd-arm64@0.21.5': 678 | optional: true 679 | 680 | '@esbuild/freebsd-x64@0.21.5': 681 | optional: true 682 | 683 | '@esbuild/linux-arm64@0.21.5': 684 | optional: true 685 | 686 | '@esbuild/linux-arm@0.21.5': 687 | optional: true 688 | 689 | '@esbuild/linux-ia32@0.21.5': 690 | optional: true 691 | 692 | '@esbuild/linux-loong64@0.21.5': 693 | optional: true 694 | 695 | '@esbuild/linux-mips64el@0.21.5': 696 | optional: true 697 | 698 | '@esbuild/linux-ppc64@0.21.5': 699 | optional: true 700 | 701 | '@esbuild/linux-riscv64@0.21.5': 702 | optional: true 703 | 704 | '@esbuild/linux-s390x@0.21.5': 705 | optional: true 706 | 707 | '@esbuild/linux-x64@0.21.5': 708 | optional: true 709 | 710 | '@esbuild/netbsd-x64@0.21.5': 711 | optional: true 712 | 713 | '@esbuild/openbsd-x64@0.21.5': 714 | optional: true 715 | 716 | '@esbuild/sunos-x64@0.21.5': 717 | optional: true 718 | 719 | '@esbuild/win32-arm64@0.21.5': 720 | optional: true 721 | 722 | '@esbuild/win32-ia32@0.21.5': 723 | optional: true 724 | 725 | '@esbuild/win32-x64@0.21.5': 726 | optional: true 727 | 728 | '@nodelib/fs.scandir@2.1.5': 729 | dependencies: 730 | '@nodelib/fs.stat': 2.0.5 731 | run-parallel: 1.2.0 732 | 733 | '@nodelib/fs.stat@2.0.5': {} 734 | 735 | '@nodelib/fs.walk@1.2.8': 736 | dependencies: 737 | '@nodelib/fs.scandir': 2.1.5 738 | fastq: 1.15.0 739 | 740 | '@rollup/rollup-android-arm-eabi@4.27.2': 741 | optional: true 742 | 743 | '@rollup/rollup-android-arm64@4.27.2': 744 | optional: true 745 | 746 | '@rollup/rollup-darwin-arm64@4.27.2': 747 | optional: true 748 | 749 | '@rollup/rollup-darwin-x64@4.27.2': 750 | optional: true 751 | 752 | '@rollup/rollup-freebsd-arm64@4.27.2': 753 | optional: true 754 | 755 | '@rollup/rollup-freebsd-x64@4.27.2': 756 | optional: true 757 | 758 | '@rollup/rollup-linux-arm-gnueabihf@4.27.2': 759 | optional: true 760 | 761 | '@rollup/rollup-linux-arm-musleabihf@4.27.2': 762 | optional: true 763 | 764 | '@rollup/rollup-linux-arm64-gnu@4.27.2': 765 | optional: true 766 | 767 | '@rollup/rollup-linux-arm64-musl@4.27.2': 768 | optional: true 769 | 770 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': 771 | optional: true 772 | 773 | '@rollup/rollup-linux-riscv64-gnu@4.27.2': 774 | optional: true 775 | 776 | '@rollup/rollup-linux-s390x-gnu@4.27.2': 777 | optional: true 778 | 779 | '@rollup/rollup-linux-x64-gnu@4.27.2': 780 | optional: true 781 | 782 | '@rollup/rollup-linux-x64-musl@4.27.2': 783 | optional: true 784 | 785 | '@rollup/rollup-win32-arm64-msvc@4.27.2': 786 | optional: true 787 | 788 | '@rollup/rollup-win32-ia32-msvc@4.27.2': 789 | optional: true 790 | 791 | '@rollup/rollup-win32-x64-msvc@4.27.2': 792 | optional: true 793 | 794 | '@sindresorhus/merge-streams@2.3.0': {} 795 | 796 | '@size-limit/esbuild@11.1.4(size-limit@11.1.4)': 797 | dependencies: 798 | esbuild: 0.21.5 799 | nanoid: 5.0.7 800 | size-limit: 11.1.4 801 | 802 | '@size-limit/file@11.1.4(size-limit@11.1.4)': 803 | dependencies: 804 | size-limit: 11.1.4 805 | 806 | '@size-limit/preset-small-lib@11.1.4(size-limit@11.1.4)': 807 | dependencies: 808 | '@size-limit/esbuild': 11.1.4(size-limit@11.1.4) 809 | '@size-limit/file': 11.1.4(size-limit@11.1.4) 810 | size-limit: 11.1.4 811 | 812 | '@types/estree@1.0.6': {} 813 | 814 | anymatch@3.1.3: 815 | dependencies: 816 | normalize-path: 3.0.0 817 | picomatch: 2.3.1 818 | 819 | autoprefixer@10.4.19(postcss@8.4.39): 820 | dependencies: 821 | browserslist: 4.23.2 822 | caniuse-lite: 1.0.30001642 823 | fraction.js: 4.3.7 824 | normalize-range: 0.1.2 825 | picocolors: 1.0.0 826 | postcss: 8.4.39 827 | postcss-value-parser: 4.2.0 828 | 829 | balanced-match@1.0.2: {} 830 | 831 | binary-extensions@2.3.0: {} 832 | 833 | brace-expansion@1.1.11: 834 | dependencies: 835 | balanced-match: 1.0.2 836 | concat-map: 0.0.1 837 | 838 | braces@3.0.3: 839 | dependencies: 840 | fill-range: 7.1.1 841 | 842 | browserslist@4.23.2: 843 | dependencies: 844 | caniuse-lite: 1.0.30001642 845 | electron-to-chromium: 1.4.829 846 | node-releases: 2.0.17 847 | update-browserslist-db: 1.1.0(browserslist@4.23.2) 848 | 849 | bytes-iec@3.1.1: {} 850 | 851 | caniuse-lite@1.0.30001642: {} 852 | 853 | chokidar@3.6.0: 854 | dependencies: 855 | anymatch: 3.1.3 856 | braces: 3.0.3 857 | glob-parent: 5.1.2 858 | is-binary-path: 2.1.0 859 | is-glob: 4.0.3 860 | normalize-path: 3.0.0 861 | readdirp: 3.6.0 862 | optionalDependencies: 863 | fsevents: 2.3.3 864 | 865 | clean-publish@5.0.0: 866 | dependencies: 867 | cross-spawn: 7.0.5 868 | fast-glob: 3.3.2 869 | lilconfig: 3.1.2 870 | micromatch: 4.0.8 871 | 872 | concat-map@0.0.1: {} 873 | 874 | cross-spawn@7.0.5: 875 | dependencies: 876 | path-key: 3.1.1 877 | shebang-command: 2.0.0 878 | which: 2.0.2 879 | 880 | css-tree@2.2.1: 881 | dependencies: 882 | mdn-data: 2.0.28 883 | source-map-js: 1.0.2 884 | 885 | cssesc@3.0.0: {} 886 | 887 | csso@5.0.5: 888 | dependencies: 889 | css-tree: 2.2.1 890 | 891 | cuint@0.2.2: {} 892 | 893 | electron-to-chromium@1.4.829: {} 894 | 895 | esbuild@0.21.5: 896 | optionalDependencies: 897 | '@esbuild/aix-ppc64': 0.21.5 898 | '@esbuild/android-arm': 0.21.5 899 | '@esbuild/android-arm64': 0.21.5 900 | '@esbuild/android-x64': 0.21.5 901 | '@esbuild/darwin-arm64': 0.21.5 902 | '@esbuild/darwin-x64': 0.21.5 903 | '@esbuild/freebsd-arm64': 0.21.5 904 | '@esbuild/freebsd-x64': 0.21.5 905 | '@esbuild/linux-arm': 0.21.5 906 | '@esbuild/linux-arm64': 0.21.5 907 | '@esbuild/linux-ia32': 0.21.5 908 | '@esbuild/linux-loong64': 0.21.5 909 | '@esbuild/linux-mips64el': 0.21.5 910 | '@esbuild/linux-ppc64': 0.21.5 911 | '@esbuild/linux-riscv64': 0.21.5 912 | '@esbuild/linux-s390x': 0.21.5 913 | '@esbuild/linux-x64': 0.21.5 914 | '@esbuild/netbsd-x64': 0.21.5 915 | '@esbuild/openbsd-x64': 0.21.5 916 | '@esbuild/sunos-x64': 0.21.5 917 | '@esbuild/win32-arm64': 0.21.5 918 | '@esbuild/win32-ia32': 0.21.5 919 | '@esbuild/win32-x64': 0.21.5 920 | 921 | escalade@3.1.2: {} 922 | 923 | escape-string-regexp@1.0.5: {} 924 | 925 | extend@3.0.2: {} 926 | 927 | fast-glob@3.3.2: 928 | dependencies: 929 | '@nodelib/fs.stat': 2.0.5 930 | '@nodelib/fs.walk': 1.2.8 931 | glob-parent: 5.1.2 932 | merge2: 1.4.1 933 | micromatch: 4.0.8 934 | 935 | fastq@1.15.0: 936 | dependencies: 937 | reusify: 1.0.4 938 | 939 | fill-range@7.1.1: 940 | dependencies: 941 | to-regex-range: 5.0.1 942 | 943 | fraction.js@4.3.7: {} 944 | 945 | fsevents@2.3.3: 946 | optional: true 947 | 948 | glob-parent@5.1.2: 949 | dependencies: 950 | is-glob: 4.0.3 951 | 952 | globby@14.0.2: 953 | dependencies: 954 | '@sindresorhus/merge-streams': 2.3.0 955 | fast-glob: 3.3.2 956 | ignore: 5.3.1 957 | path-type: 5.0.0 958 | slash: 5.1.0 959 | unicorn-magic: 0.1.0 960 | 961 | ignore@5.3.1: {} 962 | 963 | is-binary-path@2.1.0: 964 | dependencies: 965 | binary-extensions: 2.3.0 966 | 967 | is-extglob@2.1.1: {} 968 | 969 | is-glob@4.0.3: 970 | dependencies: 971 | is-extglob: 2.1.1 972 | 973 | is-number@7.0.0: {} 974 | 975 | isexe@2.0.0: {} 976 | 977 | jiti@1.21.6: {} 978 | 979 | lilconfig@3.1.2: {} 980 | 981 | make-dir@3.1.0: 982 | dependencies: 983 | semver: 6.3.1 984 | 985 | mdn-data@2.0.28: {} 986 | 987 | merge2@1.4.1: {} 988 | 989 | micromatch@4.0.8: 990 | dependencies: 991 | braces: 3.0.3 992 | picomatch: 2.3.1 993 | 994 | mime@2.5.2: {} 995 | 996 | minimatch@3.0.8: 997 | dependencies: 998 | brace-expansion: 1.1.11 999 | 1000 | nanoid@3.3.8: {} 1001 | 1002 | nanoid@5.0.7: {} 1003 | 1004 | nanospinner@1.1.0: 1005 | dependencies: 1006 | picocolors: 1.0.1 1007 | 1008 | node-releases@2.0.17: {} 1009 | 1010 | normalize-path@3.0.0: {} 1011 | 1012 | normalize-range@0.1.2: {} 1013 | 1014 | path-key@3.1.1: {} 1015 | 1016 | path-type@5.0.0: {} 1017 | 1018 | picocolors@1.0.0: {} 1019 | 1020 | picocolors@1.0.1: {} 1021 | 1022 | picomatch@2.3.1: {} 1023 | 1024 | postcss-calc@10.0.0(postcss@8.4.39): 1025 | dependencies: 1026 | postcss: 8.4.39 1027 | postcss-selector-parser: 6.1.1 1028 | postcss-value-parser: 4.2.0 1029 | 1030 | postcss-css-variables@0.19.0(postcss@8.4.39): 1031 | dependencies: 1032 | balanced-match: 1.0.2 1033 | escape-string-regexp: 1.0.5 1034 | extend: 3.0.2 1035 | postcss: 8.4.39 1036 | 1037 | postcss-csso@6.0.1(postcss@8.4.39): 1038 | dependencies: 1039 | csso: 5.0.5 1040 | postcss: 8.4.39 1041 | 1042 | postcss-selector-parser@6.1.1: 1043 | dependencies: 1044 | cssesc: 3.0.0 1045 | util-deprecate: 1.0.2 1046 | 1047 | postcss-url@10.1.3(postcss@8.4.39): 1048 | dependencies: 1049 | make-dir: 3.1.0 1050 | mime: 2.5.2 1051 | minimatch: 3.0.8 1052 | postcss: 8.4.39 1053 | xxhashjs: 0.2.2 1054 | 1055 | postcss-value-parser@4.2.0: {} 1056 | 1057 | postcss@8.4.39: 1058 | dependencies: 1059 | nanoid: 3.3.8 1060 | picocolors: 1.0.1 1061 | source-map-js: 1.2.0 1062 | 1063 | queue-microtask@1.2.3: {} 1064 | 1065 | readdirp@3.6.0: 1066 | dependencies: 1067 | picomatch: 2.3.1 1068 | 1069 | reusify@1.0.4: {} 1070 | 1071 | rollup@4.27.2: 1072 | dependencies: 1073 | '@types/estree': 1.0.6 1074 | optionalDependencies: 1075 | '@rollup/rollup-android-arm-eabi': 4.27.2 1076 | '@rollup/rollup-android-arm64': 4.27.2 1077 | '@rollup/rollup-darwin-arm64': 4.27.2 1078 | '@rollup/rollup-darwin-x64': 4.27.2 1079 | '@rollup/rollup-freebsd-arm64': 4.27.2 1080 | '@rollup/rollup-freebsd-x64': 4.27.2 1081 | '@rollup/rollup-linux-arm-gnueabihf': 4.27.2 1082 | '@rollup/rollup-linux-arm-musleabihf': 4.27.2 1083 | '@rollup/rollup-linux-arm64-gnu': 4.27.2 1084 | '@rollup/rollup-linux-arm64-musl': 4.27.2 1085 | '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2 1086 | '@rollup/rollup-linux-riscv64-gnu': 4.27.2 1087 | '@rollup/rollup-linux-s390x-gnu': 4.27.2 1088 | '@rollup/rollup-linux-x64-gnu': 4.27.2 1089 | '@rollup/rollup-linux-x64-musl': 4.27.2 1090 | '@rollup/rollup-win32-arm64-msvc': 4.27.2 1091 | '@rollup/rollup-win32-ia32-msvc': 4.27.2 1092 | '@rollup/rollup-win32-x64-msvc': 4.27.2 1093 | fsevents: 2.3.3 1094 | 1095 | run-parallel@1.2.0: 1096 | dependencies: 1097 | queue-microtask: 1.2.3 1098 | 1099 | semver@6.3.1: {} 1100 | 1101 | shebang-command@2.0.0: 1102 | dependencies: 1103 | shebang-regex: 3.0.0 1104 | 1105 | shebang-regex@3.0.0: {} 1106 | 1107 | size-limit@11.1.4: 1108 | dependencies: 1109 | bytes-iec: 3.1.1 1110 | chokidar: 3.6.0 1111 | globby: 14.0.2 1112 | jiti: 1.21.6 1113 | lilconfig: 3.1.2 1114 | nanospinner: 1.1.0 1115 | picocolors: 1.0.1 1116 | 1117 | slash@5.1.0: {} 1118 | 1119 | source-map-js@1.0.2: {} 1120 | 1121 | source-map-js@1.2.0: {} 1122 | 1123 | to-regex-range@5.0.1: 1124 | dependencies: 1125 | is-number: 7.0.0 1126 | 1127 | unicorn-magic@0.1.0: {} 1128 | 1129 | update-browserslist-db@1.1.0(browserslist@4.23.2): 1130 | dependencies: 1131 | browserslist: 4.23.2 1132 | escalade: 3.1.2 1133 | picocolors: 1.0.1 1134 | 1135 | util-deprecate@1.0.2: {} 1136 | 1137 | vite@5.3.4: 1138 | dependencies: 1139 | esbuild: 0.21.5 1140 | postcss: 8.4.39 1141 | rollup: 4.27.2 1142 | optionalDependencies: 1143 | fsevents: 2.3.3 1144 | 1145 | which@2.0.2: 1146 | dependencies: 1147 | isexe: 2.0.0 1148 | 1149 | xxhashjs@0.2.2: 1150 | dependencies: 1151 | cuint: 0.2.2 1152 | -------------------------------------------------------------------------------- /script/fix: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | ROOT="$(dirname "$(dirname "$0")")" 6 | 7 | "$ROOT"/script/fmt 8 | "$ROOT"/script/lint --fix 9 | -------------------------------------------------------------------------------- /script/fmt: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | ROOT="$(dirname "$(dirname "$0")")" 6 | 7 | deno fmt "$@" "$ROOT" 8 | -------------------------------------------------------------------------------- /script/lint: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | ROOT="$(dirname "$(dirname "$0")")" 6 | 7 | deno lint "$@" "$ROOT" 8 | -------------------------------------------------------------------------------- /src/icons/bluesky.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/copy-url-done.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/copy-url.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/fediverse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/hackernews.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/linkedin-in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/linkedin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/lobsters.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/mastodon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/messenger.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/odnoklassniki.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/pinterest.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/pocket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/print.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/reddit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/teams.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/telegram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/tumblr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/viber.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/vkontakte.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/web-share.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/whatsapp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import { init } from "./shareon"; 2 | 3 | const s = document.currentScript; 4 | if (s && s.hasAttribute("init")) { 5 | init(); 6 | } 7 | 8 | export { init } from "./shareon"; 9 | -------------------------------------------------------------------------------- /src/shareon.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --button-size: 36px; 3 | --icon-size: 20px; 4 | 5 | --padding-ver: calc(0.3 * var(--icon-size)); 6 | --padding-hor: calc(var(--icon-size) / 2); 7 | --padding-icon: calc((var(--button-size) - var(--icon-size)) / 2); 8 | 9 | --height: calc(var(--button-size) - 2 * var(--padding-ver)); 10 | --width: calc(var(--button-size) - 2 * var(--padding-hor)); 11 | } 12 | 13 | .shareon { 14 | font-size: 0 !important; 15 | } 16 | 17 | .shareon > * { 18 | display: inline-block; 19 | position: relative; 20 | 21 | height: var(--height); 22 | min-width: var(--width); 23 | 24 | margin: calc(var(--padding-ver) / 2); 25 | padding: var(--padding-ver) var(--padding-hor); 26 | 27 | background-color: #333; 28 | border-radius: calc(var(--icon-size) / 6); 29 | border: none; 30 | box-sizing: content-box; 31 | color: white; 32 | line-height: 1.5; 33 | transition: opacity 300ms ease; 34 | vertical-align: middle; 35 | } 36 | 37 | .shareon > *:hover { 38 | border: none; 39 | cursor: pointer; 40 | opacity: 0.7; 41 | } 42 | 43 | .shareon > *:not(:empty) { 44 | font-size: calc(0.8 * var(--icon-size)); 45 | text-decoration: none; 46 | } 47 | 48 | .shareon > *:not(:empty)::before { 49 | position: relative; 50 | 51 | height: 100%; 52 | width: calc(var(--icon-size) + var(--padding-icon)); 53 | 54 | top: 0; 55 | left: 0; 56 | 57 | background-position: 0 50%; 58 | } 59 | 60 | .shareon > *::before { 61 | display: inline-block; 62 | position: absolute; 63 | 64 | height: var(--icon-size); 65 | width: var(--icon-size); 66 | 67 | top: var(--padding-icon); 68 | left: var(--padding-icon); 69 | 70 | background-repeat: no-repeat; 71 | background-size: var(--icon-size) var(--icon-size); 72 | content: ""; 73 | vertical-align: bottom; 74 | } 75 | 76 | .shareon > .bluesky { 77 | background-color: #0285ff; 78 | } 79 | .shareon > .bluesky:before { 80 | background-image: url("icons/bluesky.svg"); 81 | } 82 | 83 | .shareon > .copy-url:before { 84 | background-image: url("icons/copy-url.svg"); 85 | } 86 | 87 | .shareon > .copy-url.done:before { 88 | background-image: url("icons/copy-url-done.svg"); 89 | } 90 | 91 | .shareon > .email:before { 92 | background-image: url("icons/email.svg"); 93 | } 94 | 95 | .shareon > .facebook { 96 | background-color: #1877f2; 97 | } 98 | .shareon > .facebook:before { 99 | background-image: url("icons/facebook.svg"); 100 | } 101 | 102 | .shareon > .fediverse { 103 | background-color: #8a54af; 104 | } 105 | .shareon > .fediverse:before { 106 | background-image: url("icons/fediverse.svg"); 107 | } 108 | 109 | .shareon > .hackernews { 110 | background-color: #fb651e; 111 | } 112 | .shareon > .hackernews:before { 113 | background-image: url("icons/hackernews.svg"); 114 | } 115 | 116 | .shareon > .linkedin { 117 | background-color: #0a66c2; 118 | } 119 | .shareon > .linkedin:before { 120 | background-image: url("icons/linkedin-in.svg"); 121 | } 122 | .shareon > .linkedin:not(:empty):before { 123 | background-image: url("icons/linkedin.svg"); 124 | } 125 | 126 | .shareon > .lobsters { 127 | background-color: #ac130d; 128 | } 129 | .shareon > .lobsters:before { 130 | background-image: url("icons/lobsters.svg"); 131 | } 132 | 133 | .shareon > .mastodon { 134 | background-color: #6364ff; 135 | } 136 | .shareon > .mastodon:before { 137 | background-image: url("icons/mastodon.svg"); 138 | } 139 | 140 | .shareon > .messenger { 141 | background-color: #00b2ff; 142 | } 143 | .shareon > .messenger:before { 144 | background-image: url("icons/messenger.svg"); 145 | } 146 | 147 | .shareon > .odnoklassniki { 148 | background-color: #ee8208; 149 | } 150 | .shareon > .odnoklassniki:before { 151 | background-image: url("icons/odnoklassniki.svg"); 152 | } 153 | 154 | .shareon > .pinterest { 155 | background-color: #bd081c; 156 | } 157 | .shareon > .pinterest:before { 158 | background-image: url("icons/pinterest.svg"); 159 | } 160 | 161 | .shareon > .pocket { 162 | background-color: #ef3f56; 163 | } 164 | .shareon > .pocket:before { 165 | background-image: url("icons/pocket.svg"); 166 | } 167 | 168 | .shareon > .print:before { 169 | background-image: url("icons/print.svg"); 170 | } 171 | 172 | .shareon > .reddit { 173 | background-color: #ff4500; 174 | } 175 | .shareon > .reddit:before { 176 | background-image: url("icons/reddit.svg"); 177 | } 178 | 179 | .shareon > .teams { 180 | background-color: #6264a7; 181 | } 182 | .shareon > .teams:before { 183 | background-image: url("icons/teams.svg"); 184 | } 185 | 186 | .shareon > .telegram { 187 | background-color: #26a5e4; 188 | } 189 | .shareon > .telegram:before { 190 | background-image: url("icons/telegram.svg"); 191 | } 192 | 193 | .shareon > .tumblr { 194 | background-color: #36465d; 195 | } 196 | .shareon > .tumblr:before { 197 | background-image: url("icons/tumblr.svg"); 198 | } 199 | 200 | .shareon > .twitter { 201 | background-color: #1d9bf0; 202 | } 203 | .shareon > .twitter:before { 204 | background-image: url("icons/twitter.svg"); 205 | } 206 | 207 | .shareon > .viber { 208 | background-color: #7360f2; 209 | } 210 | .shareon > .viber:before { 211 | background-image: url("icons/viber.svg"); 212 | } 213 | 214 | .shareon > .vkontakte { 215 | background-color: #0077ff; 216 | } 217 | .shareon > .vkontakte:before { 218 | background-image: url("icons/vkontakte.svg"); 219 | } 220 | 221 | .shareon > .web-share:before { 222 | background-image: url("icons/web-share.svg"); 223 | } 224 | 225 | .shareon > .whatsapp { 226 | background-color: #25d366; 227 | } 228 | .shareon > .whatsapp:before { 229 | background-image: url("icons/whatsapp.svg"); 230 | } 231 | -------------------------------------------------------------------------------- /src/shareon.js: -------------------------------------------------------------------------------- 1 | import "./shareon.css"; 2 | 3 | // deno-fmt-ignore 4 | /** 5 | * Map of social networks to their respective URL builders. 6 | * 7 | * The `d` argument of each builder is the object with the page metadata, such 8 | * as page title, URL, author name, etc. 9 | * 10 | * @type {{ [network: string]: (d: { 11 | * url: string, 12 | * title?: string, 13 | * media?: string, 14 | * text?: string, 15 | * via?: string, 16 | * fbAppId?: string, 17 | * s2fInstance?: string, 18 | * }) => string}} 19 | */ 20 | const urlBuilderMap = { 21 | bluesky: (d) => `https://bsky.app/intent/compose?text=${d.text || d.title}%0A%0A${d.url}`, 22 | email: (d) => `mailto:?subject=${d.title}&body=${d.url}`, 23 | facebook: (d) => `https://www.facebook.com/sharer/sharer.php?u=${d.url}${d.hashtags ? `&hashtag=%23${d.hashtags.split('%2C')[0]}` : ''}`, 24 | fediverse: (d) => `https://${d.s2fInstance}/?text=${d.title}%0D%0A${d.url}${d.text ? `%0D%0A%0D%0A${d.text}` : ''}${d.via ? `%0D%0A%0D%0A${d.via}` : ''}`, 25 | hackernews: (d) => `https://news.ycombinator.com/submitlink?u=${d.url}&t=${d.title}`, 26 | linkedin: (d) => `https://www.linkedin.com/sharing/share-offsite/?url=${d.url}`, 27 | lobsters: (d) => `https://lobste.rs/stories/new?url=${d.url}&title=${d.title}`, 28 | mastodon: (d) => `https://toot.kytta.dev/?text=${d.title}%0D%0A${d.url}${d.text ? `%0D%0A%0D%0A${d.text}` : ''}${d.via ? `%0D%0A%0D%0A${d.via}` : ''}`, 29 | messenger: (d) => `https://www.facebook.com/dialog/send?app_id=${d.fbAppId}&link=${d.url}&redirect_uri=${d.url}`, 30 | odnoklassniki: (d) => `https://connect.ok.ru/offer?url=${d.url}&title=${d.title}${d.media ? `&imageUrl=${d.media}` : ''}`, 31 | pinterest: (d) => `https://pinterest.com/pin/create/button/?url=${d.url}&description=${d.title}${d.media ? `&media=${d.media}` : ''}`, 32 | pocket: (d) => `https://getpocket.com/edit.php?url=${d.url}`, 33 | reddit: (d) => `https://www.reddit.com/submit?title=${d.title}&url=${d.url}`, 34 | teams: (d) => `https://teams.microsoft.com/share?href=${d.url}${d.text ? `&msgText=${d.text}` : ''}`, 35 | telegram: (d) => `https://telegram.me/share/url?url=${d.url}${d.text ? `&text=${d.text}` : ''}`, 36 | tumblr: (d) => `https://www.tumblr.com/widgets/share/tool?posttype=link${d.hashtags ? `&tags=${d.hashtags}` : ''}&title=${d.title}&content=${d.url}&canonicalUrl=${d.url}${d.text ? `&caption=${d.text}` : ''}${d.via ? `&show-via=${d.via}` : ''}`, 37 | twitter: (d) => `https://twitter.com/intent/tweet?url=${d.url}&text=${d.title}${d.via ? `&via=${d.via}` : ''}${d.hashtags ? `&hashtags=${d.hashtags}` : ''}`, 38 | viber: (d) => `viber://forward?text=${d.title}%0D%0A${d.url}${d.text ? `%0D%0A%0D%0A${d.text}` : ''}`, 39 | vkontakte: (d) => `https://vk.com/share.php?url=${d.url}&title=${d.title}${d.media ? `&image=${d.media}` : ''}`, 40 | whatsapp: (d) => `https://wa.me/?text=${d.title}%0D%0A${d.url}${d.text ? `%0D%0A%0D%0A${d.text}` : ''}`, 41 | }; 42 | 43 | const openUrl = (buttonUrl) => () => { 44 | globalThis.open(buttonUrl, "_blank", "noopener,noreferrer"); 45 | }; 46 | 47 | const init = () => { 48 | const shareonContainers = document.querySelectorAll(".shareon"); 49 | 50 | // iterate over
51 | for (const container of shareonContainers) { 52 | // iterate over children of
53 | for (const child of container.children) { 54 | if (child) { 55 | const classListLength = child.classList.length; 56 | 57 | // iterate over classes of the child element 58 | for (let k = 0; k < classListLength; k += 1) { 59 | const cls = child.classList.item(k); 60 | 61 | // if it's "Copy URL" 62 | if (cls === "copy-url") { 63 | child.addEventListener("click", () => { 64 | const url = child.dataset.url || 65 | container.dataset.url || 66 | globalThis.location.href; 67 | navigator.clipboard.writeText(url); 68 | child.classList.add("done"); 69 | setTimeout(() => { 70 | child.classList.remove("done"); 71 | }, 1000); 72 | }); 73 | } 74 | 75 | // if it's "Print" 76 | if (cls === "print") { 77 | child.addEventListener("click", () => { 78 | globalThis.print(); 79 | }); 80 | } 81 | 82 | // if it's "Web Share" 83 | if (cls === "web-share") { 84 | const data = { 85 | title: child.dataset.title || 86 | container.dataset.title || 87 | document.title, 88 | text: child.dataset.text || container.dataset.text || "", 89 | url: child.dataset.url || 90 | container.dataset.url || 91 | globalThis.location.href, 92 | }; 93 | 94 | if (navigator.canShare && navigator.canShare(data)) { 95 | child.addEventListener("click", () => { 96 | navigator.share(data); 97 | }); 98 | } else { 99 | child.style.display = "none"; 100 | } 101 | } 102 | 103 | // if it's one of the networks 104 | if (Object.prototype.hasOwnProperty.call(urlBuilderMap, cls)) { 105 | const preset = { 106 | url: encodeURIComponent( 107 | child.dataset.url || 108 | container.dataset.url || 109 | globalThis.location.href, 110 | ), 111 | title: encodeURIComponent( 112 | child.dataset.title || 113 | container.dataset.title || 114 | document.title, 115 | ), 116 | media: encodeURIComponent( 117 | child.dataset.media || container.dataset.media || "", 118 | ), 119 | text: encodeURIComponent( 120 | child.dataset.text || container.dataset.text || "", 121 | ), 122 | via: encodeURIComponent( 123 | child.dataset.via || container.dataset.via || "", 124 | ), 125 | hashtags: encodeURIComponent( 126 | child.dataset.hashtags || container.dataset.hashtags || "", 127 | ), 128 | fbAppId: encodeURIComponent( 129 | child.dataset.fbAppId || container.dataset.fbAppId || "", 130 | ), 131 | s2fInstance: encodeURIComponent( 132 | child.dataset.s2fInstance || 133 | container.dataset.s2fInstance || 134 | "s2f.kytta.dev", 135 | ), 136 | }; 137 | const url = urlBuilderMap[cls](preset); 138 | 139 | if (child.tagName.toLowerCase() === "a") { 140 | child.setAttribute("href", url); 141 | child.setAttribute("rel", "noopener noreferrer"); 142 | child.setAttribute("target", "_blank"); 143 | } else { 144 | child.addEventListener("click", openUrl(url)); 145 | } 146 | 147 | break; // once a network is detected we don't want to check further 148 | } 149 | } 150 | } 151 | } 152 | } 153 | }; 154 | 155 | export { init }; 156 | -------------------------------------------------------------------------------- /svgo.config.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * SVGO configuration from simple-icons, modified. 3 | * 4 | * See: https://github.com/simple-icons/simple-icons/blob/4e36921e759278e83f2e6775e0fb78ba76131eec/svgo.config.mjs 5 | */ 6 | 7 | export default { 8 | multipass: true, 9 | eol: "lf", 10 | plugins: [ 11 | "cleanupAttrs", 12 | "mergeStyles", 13 | "minifyStyles", 14 | "inlineStyles", 15 | "removeDoctype", 16 | "removeXMLProcInst", 17 | "removeComments", 18 | "removeMetadata", 19 | "removeDesc", 20 | "removeUselessDefs", 21 | "removeEditorsNSData", 22 | "removeEmptyAttrs", 23 | "removeHiddenElems", 24 | "removeEmptyText", 25 | "removeEmptyContainers", 26 | "convertStyleToAttrs", 27 | "convertColors", 28 | "cleanupEnableBackground", 29 | { 30 | name: "convertPathData", 31 | params: { 32 | // 3 decimals of precision in floating point numbers 33 | floatPrecision: 3, 34 | }, 35 | }, 36 | "convertTransform", 37 | { 38 | name: "removeUnknownsAndDefaults", 39 | }, 40 | "removeUselessStrokeAndFill", 41 | "removeNonInheritableGroupAttrs", 42 | "removeUnusedNS", 43 | "cleanupIds", 44 | "cleanupNumericValues", 45 | "cleanupListOfValues", 46 | "collapseGroups", 47 | "removeRasterImages", 48 | { 49 | // Compound all s into one 50 | name: "mergePaths", 51 | params: { 52 | force: true, 53 | }, 54 | }, 55 | { 56 | // Convert basic shapes (such as ) to 57 | name: "convertShapeToPath", 58 | params: { 59 | // including 60 | convertArcs: true, 61 | }, 62 | }, 63 | "convertEllipseToCircle", 64 | { 65 | // Sort the attributes on the tag 66 | name: "sortAttrs", 67 | params: { 68 | order: ["fill", "stroke", "viewBox"], 69 | xmlnsOrder: "end", 70 | }, 71 | }, 72 | "sortDefsChildren", 73 | "removeDimensions", 74 | 75 | { 76 | name: "removeAttrs", 77 | params: { 78 | attrs: ["svg:(?!(role|xmlns))", "path:(?!d)"], 79 | }, 80 | }, 81 | { 82 | name: "addAttributesToSVGElement", 83 | params: { 84 | attributes: [{ xmlns: "http://www.w3.org/2000/svg" }], 85 | }, 86 | }, 87 | "removeOffCanvasPaths", 88 | "removeStyleElement", 89 | "removeScriptElement", 90 | "removeTitle", 91 | ], 92 | }; 93 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import * as path from "node:path"; 3 | 4 | export default defineConfig({ 5 | build: { 6 | lib: { 7 | entry: path.resolve("./src/index.js"), 8 | name: "Shareon", 9 | formats: ["es", "umd", "iife"], 10 | // Workaround to keep the old file names 11 | fileName: (format) => `shareon.${format}.js`, 12 | }, 13 | rollupOptions: { 14 | output: { 15 | // Workaround for a correct file name 16 | // See: https://github.com/vitejs/vite/issues/4863 17 | assetFileNames: (assetInfo) => { 18 | if (assetInfo.name === "style.css") return "shareon.min.css"; 19 | return assetInfo.name; 20 | }, 21 | }, 22 | }, 23 | }, 24 | css: { 25 | devSourcemap: true, 26 | }, 27 | }); 28 | --------------------------------------------------------------------------------