├── .gitignore
├── src
├── Globals.d.ts
├── index.module.css
├── types
│ └── index.ts
└── index.ts
├── assets
└── demo.png
├── .npmignore
├── .github
├── dependabot.yml
└── workflows
│ ├── npm-publish.yml
│ └── bump-version.yml
├── package.json
├── vite.config.js
├── LICENSE
├── README.md
├── index.html
├── tsconfig.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
--------------------------------------------------------------------------------
/src/Globals.d.ts:
--------------------------------------------------------------------------------
1 | declare module "*.module.css";
--------------------------------------------------------------------------------
/src/index.module.css:
--------------------------------------------------------------------------------
1 | .opensea-tool {
2 | margin: 1em auto;
3 | }
--------------------------------------------------------------------------------
/assets/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/editor-js/opensea/master/assets/demo.png
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .github/
2 | assets/
3 | src/
4 | index.html
5 | LICENSE
6 | tsconfig.json
7 | vite.config.js
8 | yarn.lock
9 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "npm"
4 | directory: "/template"
5 | schedule:
6 | interval: "daily"
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@editorjs/opensea",
3 | "description": "OpenSea Tool for Editor.js",
4 | "version": "1.0.2",
5 | "main": "dist/OpenseaTool.umd.js",
6 | "module": "dist/OpenseaTool.mjs",
7 | "license": "MIT",
8 | "repository": "https://github.com/editor-js/opensea",
9 | "scripts": {
10 | "dev": "vite",
11 | "build": "vite build"
12 | },
13 | "devDependencies": {
14 | "@editorjs/editorjs": "^2.26.0",
15 | "@types/node": "^16.3.3",
16 | "vite": "^3.1.0",
17 | "vite-plugin-css-injected-by-js": "^2.1.1"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/types/index.ts:
--------------------------------------------------------------------------------
1 | import { BlockToolData, ToolConfig } from '@editorjs/editorjs';
2 |
3 | /**
4 | * OpenseaTool Tool's input and output data format
5 | */
6 | export interface OpenseaToolData extends BlockToolData {
7 | /**
8 | * Coin
9 | */
10 | coin: string;
11 |
12 | /**
13 | * The token's contract address
14 | */
15 | contractAddress: string;
16 |
17 | /**
18 | * The token Id of the asset.
19 | */
20 | tokenId: string;
21 | }
22 |
23 | /**
24 | * OpenseaTool Tool's configuration object that passed through the initial Editor config
25 | */
26 | export interface OpenseaToolConfig extends ToolConfig {}
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js';
2 | import path from 'path';
3 |
4 | /**
5 | * Trick to use Vite server.open option on macOS
6 | * @see https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768
7 | */
8 | process.env.BROWSER = 'open';
9 |
10 | export default {
11 | build: {
12 | lib: {
13 | entry: path.resolve(__dirname, 'src', 'index.ts'),
14 | name: 'OpenseaTool',
15 | formats: ['umd', 'es'],
16 | fileName: 'OpenseaTool'
17 | },
18 | },
19 |
20 | server: {
21 | port: 3300,
22 | open: true,
23 | },
24 |
25 | plugins: [
26 | cssInjectedByJsPlugin(),
27 | ]
28 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 CodeX
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.github/workflows/npm-publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish package to NPM
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | - master
8 |
9 | jobs:
10 | publish:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@v2
14 | - uses: actions/setup-node@v1
15 | with:
16 | node-version: 18
17 | registry-url: https://registry.npmjs.org/
18 |
19 | - run: yarn
20 | - run: yarn build
21 | - run: yarn publish --access=public --tag=next
22 | env:
23 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
24 |
25 | - name: Get package info
26 | id: package
27 | uses: codex-team/action-nodejs-package-info@v1.1
28 |
29 | - name: Add LATEST tag for the published package if this is not a -rc version
30 | if: steps.package.outputs.is-release-candidate == 'false'
31 | run: npm dist-tag add ${{ steps.package.outputs.name }}@${{ steps.package.outputs.version }} latest
32 | env:
33 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
34 |
35 | notify:
36 | needs: publish
37 | runs-on: ubuntu-latest
38 | steps:
39 | - uses: actions/checkout@v2
40 | - name: Get package info
41 | id: package
42 | uses: codex-team/action-nodejs-package-info@v1
43 | - name: Send a message
44 | uses: codex-team/action-codexbot-notify@v1
45 | with:
46 | webhook: ${{ secrets.CODEX_BOT_NOTIFY_EDITORJS_PUBLIC_CHAT }}
47 | message: '📦 [${{ steps.package.outputs.name }}](${{ steps.package.outputs.npmjs-link }}) ${{ steps.package.outputs.version }} was published'
48 | parse_mode: 'markdown'
49 | disable_web_page_preview: true
50 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # OpenSea Tool for Editor.js
2 |
3 | Parses the pasted link to OpenSea item and inserts the embed block.
4 |
5 | 
6 |
7 | ## Installation
8 |
9 | Use your package manager to install the `@editorjs/opensea` package.
10 |
11 | ```
12 | npm install -D @editorjs/opensea
13 |
14 | yarn add -D @editorjs/opensea
15 | ```
16 |
17 | ## Usage
18 |
19 | Import and add the Tool to Editor.js tools config.
20 |
21 | ```javascript
22 | import OpenseaTool from '@editorjs/opensea';
23 |
24 | const editor = new EditorJS({
25 | tools: {
26 | opensea: {
27 | class: OpenseaTool
28 | },
29 | },
30 |
31 | // ...
32 | });
33 | ```
34 |
35 | Check out the [example page](./index.html).
36 |
37 | ## Output Data
38 |
39 | Check the `OpenseaToolData` interface in [src/types/index.ts](./src/types/index.ts) file with types.
40 |
41 | ## Render Template
42 |
43 | Use the following HTML to render the block.
44 |
45 | ```html
46 |
47 |
48 |
49 | ```
50 |
51 | ## Development
52 |
53 | This tool uses [Vite](https://vitejs.dev/) as builder.
54 |
55 | `npm run dev` — run development environment with hot reload
56 |
57 | `npm run build` — build the tool for production to the `dist` folder
58 |
59 | ## Links
60 |
61 | [Editor.js](https://editorjs.io) • [Create Tool](https://github.com/editor-js/create-tool)
62 |
63 | ## About CodeX
64 |
65 |
66 |
67 | CodeX is a team of digital specialists around the world interested in building high-quality open source products on a global market. We are [open](https://codex.so/join) for young people who want to constantly improve their skills and grow professionally with experiments in cutting-edge technologies.
68 |
69 | | 🌐 | Join 👋 | Twitter | Instagram |
70 | | -- | -- | -- | -- |
71 | | [codex.so](https://codex.so) | [codex.so/join](https://codex.so/join) |[@codex_team](http://twitter.com/codex_team) | [@codex_team](http://instagram.com/codex_team/) |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Editor.js example page
4 |
5 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/.github/workflows/bump-version.yml:
--------------------------------------------------------------------------------
1 | name: Auto bump version
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 | - master
8 |
9 | jobs:
10 | # If pull request was merged then we should check for a package version update
11 | check-for-no-version-changing:
12 | runs-on: ubuntu-latest
13 | steps:
14 | # Checkout to target branch
15 | - uses: actions/checkout@v2
16 | with:
17 | fetch-depth: 0
18 |
19 | # Get package new version name
20 | - name: Get package info
21 | id: packageNew
22 | uses: codex-team/action-nodejs-package-info@v1
23 |
24 | # Checkout to the base commit before merge
25 | - name: Checkout to the base commit before merge
26 | run: git checkout ${{ github.event.pull_request.base.sha }}
27 |
28 | # Get package old version name
29 | - name: Get package info
30 | id: packageOld
31 | uses: codex-team/action-nodejs-package-info@v1
32 |
33 | # Stop workflow and do not bump version if it was changed already
34 | - name: Stop workflow and do not bump version if it was changed already
35 | uses: actions/github-script@v3
36 | if: steps.packageOld.outputs.version != steps.packageNew.outputs.version
37 | with:
38 | script: |
39 | core.setFailed('Version was changed! ${{ steps.packageOld.outputs.version }} -> ${{ steps.packageNew.outputs.version }}')
40 |
41 | bump-version:
42 | needs: check-for-no-version-changing
43 | runs-on: ubuntu-latest
44 | steps:
45 | # Checkout to target branch
46 | - uses: actions/checkout@v2
47 |
48 | # Setup node environment
49 | - uses: actions/setup-node@v1
50 | with:
51 | node-version: 18
52 |
53 | # Bump version to the next prerelease (patch) with rc suffix
54 | - name: Suggest the new version
55 | run: yarn version --prerelease --preid rc --no-git-tag-version
56 |
57 | # Get package new version name
58 | - name: Get package info
59 | id: package
60 | uses: codex-team/action-nodejs-package-info@v1
61 |
62 | # Commit and push changes
63 | - uses: EndBug/add-and-commit@v7
64 | with:
65 | author_name: github-actions
66 | author_email: 41898282+github-actions[bot]@users.noreply.github.com
67 | message: "Bump version up to ${{ steps.package.outputs.version }}"
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Import styles library
3 | */
4 | import styles from './index.module.css';
5 |
6 | /**
7 | * Import types
8 | */
9 | import { OpenseaToolData, OpenseaToolConfig } from './types';
10 | import { API, BlockTool, PasteConfig, PatternPasteEvent } from '@editorjs/editorjs';
11 |
12 | /**
13 | * opensea Tool for Editor.js
14 | */
15 | export default class OpenseaTool implements BlockTool {
16 | /**
17 | * Code API — public methods to work with Editor
18 | *
19 | * @link https://editorjs.io/api
20 | */
21 | private readonly api: API;
22 |
23 | /**
24 | * Read-only mode flag
25 | */
26 | private readonly readOnly: boolean;
27 |
28 | /**
29 | * Tool data for input and output
30 | */
31 | private data: OpenseaToolData;
32 |
33 | /**
34 | * Configuration object that passed through the initial Editor configuration.
35 | */
36 | private config: OpenseaToolConfig;
37 |
38 | /**
39 | * Tool's HTML nodes
40 | */
41 | private nodes: {[key: string]: HTMLElement|null};
42 |
43 | /**
44 | * Class constructor
45 | */
46 | constructor({ data, config, api, readOnly }: { data: OpenseaToolData, config: OpenseaToolConfig, api: API, readOnly: boolean }) {
47 | this.data = data;
48 | this.config = config;
49 | this.api = api;
50 | this.readOnly = readOnly;
51 |
52 | /**
53 | * Declare Tool's nodes
54 | */
55 | this.nodes = {
56 | wrapper: null,
57 | nftCard: null,
58 | };
59 | }
60 |
61 | /**
62 | * Before usage of the Tool, it should be prepared
63 | */
64 | static prepare(): void {
65 | /**
66 | * Script URL for an embeddable NFT card
67 | * Required only in this method
68 | */
69 | const scriptUrl = 'https://unpkg.com/embeddable-nfts/dist/nft-card.min.js';
70 |
71 | /**
72 | * Add script file only once
73 | */
74 | const scriptElement = document.querySelector(`script[src="${scriptUrl}"]`);
75 |
76 | if (!scriptElement) {
77 | const script = document.createElement('script');
78 |
79 | script.src = scriptUrl;
80 |
81 | document.head.appendChild(script);
82 | }
83 | }
84 |
85 | /**
86 | * Creates UI of a Block
87 | */
88 | render(): HTMLElement {
89 | this.nodes.wrapper = document.createElement('div');
90 | this.nodes.wrapper.classList.add(styles['opensea-tool']);
91 |
92 | /**
93 | * If data is passed, render NFT card
94 | */
95 | if (this.data.contractAddress && this.data.tokenId) {
96 | this.renderNftCard();
97 | }
98 |
99 | return this.nodes.wrapper;
100 | }
101 |
102 | /**
103 | * Extracts Block data from the UI
104 | */
105 | save(): OpenseaToolData {
106 | return this.data;
107 | }
108 |
109 | /**
110 | * Handle content pasted by ways that described by pasteConfig static getter
111 | */
112 | onPaste(event: PatternPasteEvent) {
113 | const { data } = event.detail;
114 | const groups = data.match(OpenseaTool.regexp);
115 |
116 | /**
117 | * If data is not a valid link, show message and do nothing
118 | */
119 | if (!groups || groups.length < 4) {
120 | this.api.notifier.show({
121 | message: 'Bad opensea item URL',
122 | style: 'error',
123 | });
124 | return;
125 | }
126 |
127 | /**
128 | * Save data to the Tool's data
129 | */
130 | this.data = {
131 | coin: groups[1],
132 | contractAddress: groups[2],
133 | tokenId: groups[3],
134 | };
135 |
136 | this.renderNftCard();
137 | }
138 |
139 | /**
140 | * Process pasted content before appending to the Editor
141 | */
142 | static get pasteConfig(): PasteConfig {
143 | return {
144 | patterns: {
145 | opensea: OpenseaTool.regexp,
146 | }
147 | };
148 | }
149 |
150 | /**
151 | * Notify core that read-only mode is suppoorted
152 | */
153 | static get isReadOnlySupported(): boolean {
154 | return true;
155 | }
156 |
157 | /**
158 | * Regexp for a opensea link
159 | */
160 | private static get regexp(): RegExp {
161 | return /^https:\/\/opensea\.io\/assets\/([a-zA-Z]+)\/([A-Za-z0-9]+)\/([A-Za-z0-9]+)$/i;
162 | }
163 |
164 | /**
165 | * Render NFT card into the wrapper
166 | */
167 | private renderNftCard(): void {
168 | /**
169 | * Create NFT card element
170 | */
171 | this.nodes.nftCard = document.createElement('nft-card');
172 | this.nodes.nftCard.setAttribute('contractAddress', this.data.contractAddress);
173 | this.nodes.nftCard.setAttribute('tokenId', this.data.tokenId);
174 |
175 | /**
176 | * Append NFT card to the wrapper
177 | */
178 | if (this.nodes.wrapper) {
179 | this.nodes.wrapper.innerHTML = '';
180 | this.nodes.wrapper.appendChild(this.nodes.nftCard);
181 | } else {
182 | this.api.notifier.show({
183 | message: 'Wrapper is not initialized',
184 | style: 'error',
185 | });
186 | }
187 | }
188 | };
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Basic Options */
6 | // "incremental": true, /* Enable incremental compilation */
7 | "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
8 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
9 | "lib": ["ES2020", "dom"], /* Specify library files to be included in the compilation. */
10 | // "allowJs": true, /* Allow javascript files to be compiled. */
11 | // "checkJs": true, /* Report errors in .js files. */
12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */
14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
15 | // "sourceMap": true, /* Generates corresponding '.map' file. */
16 | // "outFile": "./", /* Concatenate and emit output to single file. */
17 | // "outDir": "./", /* Redirect output structure to the directory. */
18 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
19 | // "composite": true, /* Enable project compilation */
20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
21 | // "removeComments": true, /* Do not emit comments to output. */
22 | // "noEmit": true, /* Do not emit outputs. */
23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
26 |
27 | /* Strict Type-Checking Options */
28 | "strict": true, /* Enable all strict type-checking options. */
29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
30 | // "strictNullChecks": true, /* Enable strict null checks. */
31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
36 |
37 | /* Additional Checks */
38 | // "noUnusedLocals": true, /* Report errors on unused locals. */
39 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
40 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
42 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
43 | // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */
44 |
45 | /* Module Resolution Options */
46 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
47 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
48 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
49 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
50 | // "typeRoots": [], /* List of folders to include type definitions from. */
51 | // "types": [], /* Type declaration files to be included in compilation. */
52 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
53 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
54 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
55 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
56 |
57 | /* Source Map Options */
58 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
60 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
61 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
62 |
63 | /* Experimental Options */
64 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
65 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
66 |
67 | /* Advanced Options */
68 | "skipLibCheck": true, /* Skip type checking of declaration files. */
69 | "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
70 |
71 | "plugins": [{
72 | "name": "typescript-plugin-css-modules"
73 | }]
74 | }
75 | }
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@codexteam/icons@0.1.0":
6 | version "0.1.0"
7 | resolved "https://registry.yarnpkg.com/@codexteam/icons/-/icons-0.1.0.tgz#a02885fe8699f69902d05b077b5f1cd48a2ca6b9"
8 | integrity sha512-jW1fWnwtWzcP4FBGsaodbJY3s1ZaRU+IJy1pvJ7ygNQxkQinybJcwXoyt0a5mWwu/4w30A42EWhCrZn8lp4fdw==
9 |
10 | "@editorjs/editorjs@^2.26.0":
11 | version "2.26.4"
12 | resolved "https://registry.yarnpkg.com/@editorjs/editorjs/-/editorjs-2.26.4.tgz#097e29341501d81cd1721604a74da1530f5ff74f"
13 | integrity sha512-yuJ2NM1Y5+8DDNWr4C00tHMVHKy0uCqK1HS4pwFPVcXUawgJnU2Li2vKGvPLuf0Jj2ir7MVgADO6oC1TbYBOYQ==
14 | dependencies:
15 | "@codexteam/icons" "0.1.0"
16 | codex-notifier "^1.1.2"
17 | codex-tooltip "^1.0.5"
18 | html-janitor "^2.0.4"
19 | nanoid "^3.1.22"
20 |
21 | "@esbuild/android-arm@0.15.18":
22 | version "0.15.18"
23 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80"
24 | integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==
25 |
26 | "@esbuild/linux-loong64@0.15.18":
27 | version "0.15.18"
28 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239"
29 | integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==
30 |
31 | "@types/node@^16.3.3":
32 | version "16.18.9"
33 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.9.tgz#47c491cfbc10460571d766c16526748fa9ad96a1"
34 | integrity sha512-nhrqXYxiQ+5B/tPorWum37VgAiefi/wmfJ1QZKGKKecC8/3HqcTTJD0O+VABSPwtseMMF7NCPVT9uGgwn0YqsQ==
35 |
36 | codex-notifier@^1.1.2:
37 | version "1.1.2"
38 | resolved "https://registry.yarnpkg.com/codex-notifier/-/codex-notifier-1.1.2.tgz#a733079185f4c927fa296f1d71eb8753fe080895"
39 | integrity sha512-DCp6xe/LGueJ1N5sXEwcBc3r3PyVkEEDNWCVigfvywAkeXcZMk9K41a31tkEFBW0Ptlwji6/JlAb49E3Yrxbtg==
40 |
41 | codex-tooltip@^1.0.5:
42 | version "1.0.5"
43 | resolved "https://registry.yarnpkg.com/codex-tooltip/-/codex-tooltip-1.0.5.tgz#ba25fd5b3a58ba2f73fd667c2b46987ffd1edef2"
44 | integrity sha512-IuA8LeyLU5p1B+HyhOsqR6oxyFQ11k3i9e9aXw40CrHFTRO2Y1npNBVU3W1SvhKAbUU7R/YikUBdcYFP0RcJag==
45 |
46 | esbuild-android-64@0.15.18:
47 | version "0.15.18"
48 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5"
49 | integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==
50 |
51 | esbuild-android-arm64@0.15.18:
52 | version "0.15.18"
53 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04"
54 | integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==
55 |
56 | esbuild-darwin-64@0.15.18:
57 | version "0.15.18"
58 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410"
59 | integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==
60 |
61 | esbuild-darwin-arm64@0.15.18:
62 | version "0.15.18"
63 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337"
64 | integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==
65 |
66 | esbuild-freebsd-64@0.15.18:
67 | version "0.15.18"
68 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2"
69 | integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==
70 |
71 | esbuild-freebsd-arm64@0.15.18:
72 | version "0.15.18"
73 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635"
74 | integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==
75 |
76 | esbuild-linux-32@0.15.18:
77 | version "0.15.18"
78 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce"
79 | integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==
80 |
81 | esbuild-linux-64@0.15.18:
82 | version "0.15.18"
83 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c"
84 | integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==
85 |
86 | esbuild-linux-arm64@0.15.18:
87 | version "0.15.18"
88 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d"
89 | integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==
90 |
91 | esbuild-linux-arm@0.15.18:
92 | version "0.15.18"
93 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc"
94 | integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==
95 |
96 | esbuild-linux-mips64le@0.15.18:
97 | version "0.15.18"
98 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb"
99 | integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==
100 |
101 | esbuild-linux-ppc64le@0.15.18:
102 | version "0.15.18"
103 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507"
104 | integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==
105 |
106 | esbuild-linux-riscv64@0.15.18:
107 | version "0.15.18"
108 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6"
109 | integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==
110 |
111 | esbuild-linux-s390x@0.15.18:
112 | version "0.15.18"
113 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb"
114 | integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==
115 |
116 | esbuild-netbsd-64@0.15.18:
117 | version "0.15.18"
118 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998"
119 | integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==
120 |
121 | esbuild-openbsd-64@0.15.18:
122 | version "0.15.18"
123 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8"
124 | integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==
125 |
126 | esbuild-sunos-64@0.15.18:
127 | version "0.15.18"
128 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971"
129 | integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==
130 |
131 | esbuild-windows-32@0.15.18:
132 | version "0.15.18"
133 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3"
134 | integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==
135 |
136 | esbuild-windows-64@0.15.18:
137 | version "0.15.18"
138 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0"
139 | integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==
140 |
141 | esbuild-windows-arm64@0.15.18:
142 | version "0.15.18"
143 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7"
144 | integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==
145 |
146 | esbuild@^0.15.9:
147 | version "0.15.18"
148 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d"
149 | integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==
150 | optionalDependencies:
151 | "@esbuild/android-arm" "0.15.18"
152 | "@esbuild/linux-loong64" "0.15.18"
153 | esbuild-android-64 "0.15.18"
154 | esbuild-android-arm64 "0.15.18"
155 | esbuild-darwin-64 "0.15.18"
156 | esbuild-darwin-arm64 "0.15.18"
157 | esbuild-freebsd-64 "0.15.18"
158 | esbuild-freebsd-arm64 "0.15.18"
159 | esbuild-linux-32 "0.15.18"
160 | esbuild-linux-64 "0.15.18"
161 | esbuild-linux-arm "0.15.18"
162 | esbuild-linux-arm64 "0.15.18"
163 | esbuild-linux-mips64le "0.15.18"
164 | esbuild-linux-ppc64le "0.15.18"
165 | esbuild-linux-riscv64 "0.15.18"
166 | esbuild-linux-s390x "0.15.18"
167 | esbuild-netbsd-64 "0.15.18"
168 | esbuild-openbsd-64 "0.15.18"
169 | esbuild-sunos-64 "0.15.18"
170 | esbuild-windows-32 "0.15.18"
171 | esbuild-windows-64 "0.15.18"
172 | esbuild-windows-arm64 "0.15.18"
173 |
174 | fsevents@~2.3.2:
175 | version "2.3.2"
176 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
177 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
178 |
179 | function-bind@^1.1.1:
180 | version "1.1.1"
181 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
182 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
183 |
184 | has@^1.0.3:
185 | version "1.0.3"
186 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
187 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
188 | dependencies:
189 | function-bind "^1.1.1"
190 |
191 | html-janitor@^2.0.4:
192 | version "2.0.4"
193 | resolved "https://registry.yarnpkg.com/html-janitor/-/html-janitor-2.0.4.tgz#ae5a115cdf3331cd5501edd7b5471b18ea44cdbb"
194 | integrity sha512-92J5h9jNZRk30PMHapjHEJfkrBWKCOy0bq3oW2pBungky6lzYSoboBGPMvxl1XRKB2q+kniQmsLsPbdpY7RM2g==
195 |
196 | is-core-module@^2.9.0:
197 | version "2.11.0"
198 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
199 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
200 | dependencies:
201 | has "^1.0.3"
202 |
203 | nanoid@^3.1.22, nanoid@^3.3.4:
204 | version "3.3.4"
205 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
206 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
207 |
208 | path-parse@^1.0.7:
209 | version "1.0.7"
210 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
211 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
212 |
213 | picocolors@^1.0.0:
214 | version "1.0.0"
215 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
216 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
217 |
218 | postcss@^8.4.18:
219 | version "8.4.20"
220 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56"
221 | integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==
222 | dependencies:
223 | nanoid "^3.3.4"
224 | picocolors "^1.0.0"
225 | source-map-js "^1.0.2"
226 |
227 | resolve@^1.22.1:
228 | version "1.22.1"
229 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
230 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
231 | dependencies:
232 | is-core-module "^2.9.0"
233 | path-parse "^1.0.7"
234 | supports-preserve-symlinks-flag "^1.0.0"
235 |
236 | rollup@^2.79.1:
237 | version "2.79.1"
238 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
239 | integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
240 | optionalDependencies:
241 | fsevents "~2.3.2"
242 |
243 | source-map-js@^1.0.2:
244 | version "1.0.2"
245 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
246 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
247 |
248 | supports-preserve-symlinks-flag@^1.0.0:
249 | version "1.0.0"
250 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
251 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
252 |
253 | vite-plugin-css-injected-by-js@^2.1.1:
254 | version "2.1.1"
255 | resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-2.1.1.tgz#a79275241c61f1c8d55d228f5b2dded450a580e4"
256 | integrity sha512-gjIG6iFWde32oRr/bK9CsfN+jdbura2y4GlDzeOiEm6py38ud8dXzFl9zwmHjOjZdr8XEgQ9TovzVGNzp47esw==
257 |
258 | vite@^3.1.0:
259 | version "3.2.5"
260 | resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.5.tgz#dee5678172a8a0ab3e547ad4148c3d547f90e86a"
261 | integrity sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==
262 | dependencies:
263 | esbuild "^0.15.9"
264 | postcss "^8.4.18"
265 | resolve "^1.22.1"
266 | rollup "^2.79.1"
267 | optionalDependencies:
268 | fsevents "~2.3.2"
269 |
--------------------------------------------------------------------------------