diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 49d272a76..812632a20 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -175,7 +175,7 @@ jobs: - name: Upload package.json uses: actions/upload-artifact@v2 with: - name: lucide-vue-package-json + name: lucide-vue-next-package-json path: packages/lucide-vue-next/package.json lucide-angular: @@ -212,12 +212,50 @@ jobs: - name: Upload package.json uses: actions/upload-artifact@v2 with: + name: lucide-angular-package-json path: packages/lucide-angular/package.json + lucide-preact: + if: github.repository == 'lucide-icons/lucide' + runs-on: ubuntu-latest + needs: pre-build + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install dependencies + run: yarn --pure-lockfile + + - name: Set Auth Token + run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }} + + - name: Set package.json version lucide + run: yarn workspace lucide-preact version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version + + - name: Build + run: yarn workspace lucide-preact build + + - name: Test + run: yarn workspace lucide-preact test + + - name: Publish + run: yarn workspace lucide-preact publish + + - name: Upload package.json + uses: actions/upload-artifact@v2 + with: + name: lucide-preact-package-json + path: packages/lucide-preact/package.json + upload-package-jsons: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest - needs: [pre-build, lucide, lucide-react, lucide-vue, lucide-vue-next, lucide-angular] + needs: [pre-build, lucide, lucide-react, lucide-vue, lucide-vue-next, lucide-angular, lucide-preact] steps: - uses: actions/checkout@v2 @@ -228,7 +266,8 @@ jobs: mv lucide-package-json/package.json packages/lucide/package.json mv lucide-react-package-json/package.json packages/lucide-react/package.json mv lucide-vue-package-json/package.json packages/lucide-vue/package.json - mv lucide-vue-package-json/package.json packages/lucide-vue-next/package.json + mv lucide-preact-package-json/package.json packages/lucide-preact/package.json + mv lucide-vue-next-package-json/package.json packages/lucide-vue-next/package.json mv lucide-angular-json/package.json packages/lucide-angular/package.json - name: Commit package.jsons diff --git a/README.md b/README.md index 9e2c3b906..dae447b28 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ We're trying to expanding the icon set as much as possible while keeping it nice * [Vue 2](#vue-2) * [Vue 3](#vue-3) * [Angular](#angular) + * [Preact](#preact) * [Figma](#figma) * [Contributing](#contributing) * [Community](#community) @@ -110,6 +111,20 @@ npm install lucide-angular For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/packages/lucide-angular#lucide-angular). +### Preact + +Implementation of the lucide icon library for preact applications. + +```sh +yarn add lucide-preact + +# or + +npm install lucide-preact +``` + +For more details, see the [documentation](https://github.com/lucide-icons/lucide/tree/master/packages/lucide-preact#lucide-preact). + ### Figma The lucide figma plugin. diff --git a/babel.config.js b/babel.config.js index a0bf9d9b7..8a4f0eaad 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,5 +1,6 @@ module.exports = { presets: ['@babel/env'], + // babelrcRoots: ['.', './packages/*'], env: { test: { presets: ['@babel/env'], diff --git a/icons/bell-ring.svg b/icons/bell-ring.svg index f0a3e64bc..fc06a8b7f 100644 --- a/icons/bell-ring.svg +++ b/icons/bell-ring.svg @@ -1,7 +1,7 @@ diff --git a/icons/vibrate.svg b/icons/vibrate.svg index c8097577f..cdd4b0110 100644 --- a/icons/vibrate.svg +++ b/icons/vibrate.svg @@ -9,7 +9,7 @@ stroke-linecap="round" stroke-linejoin="round" > - - + + diff --git a/packages/lucide-preact/.npmignore b/packages/lucide-preact/.npmignore new file mode 100644 index 000000000..ffd9d70de --- /dev/null +++ b/packages/lucide-preact/.npmignore @@ -0,0 +1,9 @@ +stats +node_modules +tests +scripts +build +src +babel.config.js +jest.config.js +rollup.config.js diff --git a/packages/lucide-preact/LICENSE b/packages/lucide-preact/LICENSE new file mode 100644 index 000000000..66cc02207 --- /dev/null +++ b/packages/lucide-preact/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2020, Lucide Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/packages/lucide-preact/README.md b/packages/lucide-preact/README.md new file mode 100644 index 000000000..81d1f01ba --- /dev/null +++ b/packages/lucide-preact/README.md @@ -0,0 +1,77 @@ +# Lucide Preact + +Implementation of the lucide icon library for preact applications. + +> What is lucide? Read it [here](https://github.com/lucide-icons/lucide#what-is-lucide). + +## Installation + +```sh +yarn add lucide-preact + +# or + +npm install lucide-preact +``` + +## How to use + +It's build with ESmodules so it's completely threeshakable. +Each icon can be imported as a preact component. + +### Example + +You can pass additional props to adjust the icon. + +``` js +import { Camera } from 'lucide-preact'; +// Returns PreactComponent + +// Usage +const App = () => { + return +}; + +export default App; +``` + +### Props + +| name | type | default +| ------------ | -------- | -------- +| `size` | *Number* | 24 +| `color` | *String* | currentColor +| `strokeWidth`| *Number* | 2 + +### Custom props / svg attributes + +You can also pass custom props that will be added in the as attributes. With that you can modify the icons look by passing svg attributes. + +``` js +// Usage +const App = () => { + return +}; +``` + +> svg attributes in preact aren't transformed, so if want to change e.g. the `stroke-linejoin` you need to pass it in kebabcase, the way svg spec is written so. See this topic in the [preact documentation](https://preactjs.com/guide/v10/differences-to-react/#svg-inside-jsx). + +### One generic icon component + +It is possible to create one generic icon component to load icons. + +> :warning: Example below importing all EsModules, caution using this example, not recommended when you using bundlers, your application build size will grow strongly. + +#### Icon Component Example + +``` js +import * as icons from 'lucide-preact'; + +const Icon = ({name, color, size}) => { + const LucideIcon = icons[name]; + + return +}; + +export default Icon; +``` diff --git a/packages/lucide-preact/babel.config.js b/packages/lucide-preact/babel.config.js new file mode 100644 index 000000000..0577cf4f0 --- /dev/null +++ b/packages/lucide-preact/babel.config.js @@ -0,0 +1,6 @@ +const mainConfig = require('../../babel.config'); + +module.exports = { + presets: ['preact'], + env: mainConfig.env, +}; diff --git a/packages/lucide-preact/jest.config.js b/packages/lucide-preact/jest.config.js new file mode 100644 index 000000000..f28b72f89 --- /dev/null +++ b/packages/lucide-preact/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + verbose: true, + roots: ['/src/', '/tests/'], + moduleFileExtensions: ['js'], + transformIgnorePatterns: [`/node_modules`], + transform: { + '^.+\\.js$': 'babel-jest', + }, +}; diff --git a/packages/lucide-preact/package.json b/packages/lucide-preact/package.json new file mode 100644 index 000000000..759f8a437 --- /dev/null +++ b/packages/lucide-preact/package.json @@ -0,0 +1,38 @@ +{ + "name": "lucide-preact", + "description": "Lucide Preact package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.", + "version": "0.15.10-beta.7", + "license": "ISC", + "homepage": "https://lucide.dev", + "bugs": "https://github.com/lucide-icons/lucide/issues", + "repository": { + "type": "git", + "url": "https://github.com/lucide-icons/lucide.git", + "directory": "packages/lucide-preact" + }, + "author": "Eric Fennis", + "amdName": "lucide-preact", + "main": "dist/cjs/lucide-preact.js", + "main:umd": "dist/umd/lucide-preact.js", + "module": "dist/esm/lucide-preact.js", + "unpkg": "dist/umd/lucide-preact.min.js", + "typings": "dist/lucide-preact.d.ts", + "scripts": { + "build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles", + "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js", + "build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-preact/src --templateSrc=../packages/lucide-preact/scripts/exportTemplate --renderUniqueKey", + "build:es": "babel src -d dist/esm", + "build:types": "yarn --cwd ../../ babel-node packages/lucide-preact/scripts/buildTypes.js", + "build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-preact/rollup.config.js", + "test": "jest" + }, + "devDependencies": { + "@testing-library/preact": "^2.0.1", + "babel-preset-preact": "^2.0.0", + "jest": "^26.6.3", + "preact": "^10.5.13" + }, + "peerDependencies": { + "preact": "^10.5.13" + } +} diff --git a/packages/lucide-preact/rollup.config.js b/packages/lucide-preact/rollup.config.js new file mode 100644 index 000000000..c7bc50b7c --- /dev/null +++ b/packages/lucide-preact/rollup.config.js @@ -0,0 +1,48 @@ +import plugins from '../../rollup.plugins'; +import pkg from './package.json'; + +const packageName = 'LucidePreact'; +const outputFileName = 'lucide-preact'; +const rootDir = 'packages/lucide-preact'; // It runs from the root +const outputDir = `${rootDir}/dist`; +const inputs = [`${rootDir}/src/lucide-preact.js`]; +const bundles = [ + { + format: 'umd', + inputs, + outputDir, + minify: true, + }, + { + format: 'umd', + inputs, + outputDir, + }, + { + format: 'cjs', + inputs, + outputDir, + }, +]; + +const configs = bundles + .map(({ inputs, outputDir, format, minify }) => + inputs.map(input => ({ + input, + plugins: plugins(pkg, minify), + external: ['preact', 'prop-types', 'lucide'], + output: { + name: packageName, + file: `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.js`, + format, + sourcemap: true, + globals: { + preact: 'preact', + 'prop-types': 'PropTypes', + }, + }, + })), + ) + .flat(); + +export default configs; diff --git a/packages/lucide-preact/scripts/buildTypes.js b/packages/lucide-preact/scripts/buildTypes.js new file mode 100644 index 000000000..0abb3ae96 --- /dev/null +++ b/packages/lucide-preact/scripts/buildTypes.js @@ -0,0 +1,43 @@ +import path from 'path'; +import { + writeFile, + readSvgDirectory, + resetFile, + toPascalCase, + appendFile, +} from '../../../scripts/helpers'; + +const srcDirectory = path.join(__dirname, '../dist'); + +// Declare type definitions +const typeDefinitions = `\ +/// +import { JSX, RefObject } from 'preact' + +interface LucideProps extends Partial> { + key?: string | number; + ref?: string | ((component: any) => any) | RefObject; + color?: string + size?: string | number +} + +// Generated icons +`; + +const ICONS_DIR = path.resolve(__dirname, '../../../icons'); +const TYPES_FILE = 'lucide-preact.d.ts'; + +resetFile(TYPES_FILE, srcDirectory); +writeFile(typeDefinitions, TYPES_FILE, srcDirectory); + +const svgFiles = readSvgDirectory(ICONS_DIR); + +svgFiles.forEach(svgFile => { + const iconName = path.basename(svgFile, '.svg'); + const componentName = toPascalCase(iconName); + + const exportTypeString = `export declare const ${componentName}: (props: LucideProps) => JSX.Element;\n`; + appendFile(exportTypeString, TYPES_FILE, srcDirectory); +}); + +console.log(`Generated ${TYPES_FILE} file with`, svgFiles.length, 'icons'); diff --git a/packages/lucide-preact/scripts/exportTemplate.js b/packages/lucide-preact/scripts/exportTemplate.js new file mode 100644 index 000000000..580bcf2f1 --- /dev/null +++ b/packages/lucide-preact/scripts/exportTemplate.js @@ -0,0 +1,7 @@ +export default ({ componentName, children }) => ` +import createPreactComponent from '../createPreactComponent'; + +const ${componentName} = createPreactComponent('${componentName}', ${JSON.stringify(children)}); + +export default ${componentName}; +`; diff --git a/packages/lucide-preact/src/createPreactComponent.js b/packages/lucide-preact/src/createPreactComponent.js new file mode 100644 index 000000000..5940b4e47 --- /dev/null +++ b/packages/lucide-preact/src/createPreactComponent.js @@ -0,0 +1,22 @@ +import { h } from 'preact'; +import defaultAttributes from './defaultAttributes'; + +export default (iconName, iconNode) => { + const Component = ({ color = 'currentColor', size = 24, strokeWidth = 2, ...rest }) => + h( + 'svg', + { + ...defaultAttributes, + width: size, + height: size, + stroke: color, + 'stroke-width': strokeWidth, + ...rest, + }, + iconNode.map(([tag, attrs]) => h(tag, attrs)), + ); + + Component.displayName = `${iconName}`; + + return Component; +}; diff --git a/packages/lucide-preact/src/defaultAttributes.js b/packages/lucide-preact/src/defaultAttributes.js new file mode 100644 index 000000000..8ae7d46ea --- /dev/null +++ b/packages/lucide-preact/src/defaultAttributes.js @@ -0,0 +1,11 @@ +export default { + xmlns: 'http://www.w3.org/2000/svg', + width: 24, + height: 24, + viewBox: '0 0 24 24', + fill: 'none', + stroke: 'currentColor', + 'stroke-width': 2, + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', +}; diff --git a/packages/lucide-preact/src/icons/.gitkeep b/packages/lucide-preact/src/icons/.gitkeep new file mode 100644 index 000000000..e3d85f774 --- /dev/null +++ b/packages/lucide-preact/src/icons/.gitkeep @@ -0,0 +1 @@ +Folder for generated icons diff --git a/packages/lucide-preact/src/lucide-preact.js b/packages/lucide-preact/src/lucide-preact.js new file mode 100644 index 000000000..838008a0b --- /dev/null +++ b/packages/lucide-preact/src/lucide-preact.js @@ -0,0 +1 @@ +export * from './icons'; diff --git a/packages/lucide-preact/tests/__snapshots__/lucide-preact.spec.js.snap b/packages/lucide-preact/tests/__snapshots__/lucide-preact.spec.js.snap new file mode 100644 index 000000000..2504abcf3 --- /dev/null +++ b/packages/lucide-preact/tests/__snapshots__/lucide-preact.spec.js.snap @@ -0,0 +1,5 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = `""`; + +exports[`Using lucide icon components should render an component 1`] = `""`; diff --git a/packages/lucide-preact/tests/lucide-preact.spec.js b/packages/lucide-preact/tests/lucide-preact.spec.js new file mode 100644 index 000000000..531f1eb1b --- /dev/null +++ b/packages/lucide-preact/tests/lucide-preact.spec.js @@ -0,0 +1,30 @@ +import { h } from 'preact' +import { render } from '@testing-library/preact' +import { Grid } from '../src/icons' + +describe('Using lucide icon components', () => { + it('should render an component', () => { + const { container } = render( ); + + expect( container.innerHTML ).toMatchSnapshot(); + }); + + it('should adjust the size, stroke color and stroke width', () => { + const testId = 'grid-icon'; + const { container, getByTestId } = render( + , + ); + + const { attributes } = getByTestId(testId); + expect(attributes.stroke.value).toBe('red'); + expect(attributes.width.value).toBe('48'); + expect(attributes.height.value).toBe('48'); + expect(attributes['stroke-width'].value).toBe('4'); + expect( container.innerHTML ).toMatchSnapshot(); + }); +}) diff --git a/packages/lucide-react/babel.config.js b/packages/lucide-react/babel.config.js index 5f1b64295..691a1ba45 100644 --- a/packages/lucide-react/babel.config.js +++ b/packages/lucide-react/babel.config.js @@ -1,6 +1,19 @@ const mainConfig = require('../../babel.config'); module.exports = { - presets: ['react-app'], - env: mainConfig.env, + presets: [ + [ + '@babel/env', + { + loose: true, + modules: false, + }, + ], + ], + env: { + ...mainConfig.env, + test: { + presets: ['react-app'], + }, + }, }; diff --git a/packages/lucide-react/package.json b/packages/lucide-react/package.json index 61056b9c7..3564c8a49 100644 --- a/packages/lucide-react/package.json +++ b/packages/lucide-react/package.json @@ -21,19 +21,18 @@ "build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles", "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js", "build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-react/src --templateSrc=../packages/lucide-react/scripts/exportTemplate --renderUniqueKey", - "build:es": "yarn --cwd ../../ babel packages/lucide-react/src -d packages/lucide-react/dist/esm", + "build:es": "babel src -d dist/esm", "build:types": "yarn --cwd ../../ babel-node packages/lucide-react/scripts/buildTypes.js", "build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-react/rollup.config.js", "test": "jest" }, - "dependencies": { - "prop-types": "^15.7.2", - "react": "^16.5.1" - }, "devDependencies": { + "@testing-library/react": "^11.2.6", "babel-preset-react-app": "^10.0.0", "jest": "^26.6.3", - "react-test-renderer": "^16.5.1" + "prop-types": "^15.7.2", + "react": "^16.5.1", + "react-dom": "^17.0.2" }, "peerDependencies": { "prop-types": "^15.7.2", diff --git a/packages/lucide-react/tests/__snapshots__/lucide-react.spec.js.snap b/packages/lucide-react/tests/__snapshots__/lucide-react.spec.js.snap index ff6b8bd90..2504abcf3 100644 --- a/packages/lucide-react/tests/__snapshots__/lucide-react.spec.js.snap +++ b/packages/lucide-react/tests/__snapshots__/lucide-react.spec.js.snap @@ -1,95 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = ` - - - - - - - -`; +exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = `""`; -exports[`Using lucide icon components should render an component 1`] = ` - - - - - - - -`; +exports[`Using lucide icon components should render an component 1`] = `""`; diff --git a/packages/lucide-react/tests/lucide-react.spec.js b/packages/lucide-react/tests/lucide-react.spec.js index 02a082e28..8fbf86239 100644 --- a/packages/lucide-react/tests/lucide-react.spec.js +++ b/packages/lucide-react/tests/lucide-react.spec.js @@ -1,27 +1,31 @@ import React from 'react'; -import renderer from 'react-test-renderer'; +import { render } from '@testing-library/react' import { Grid } from '../src/icons' describe('Using lucide icon components', () => { it('should render an component', () => { - const component = renderer.create( - , - ); + const { container } = render( ); - let tree = component.toJSON(); - expect(tree).toMatchSnapshot(); + expect( container.innerHTML ).toMatchSnapshot(); }); it('should adjust the size, stroke color and stroke width', () => { - const component = renderer.create( + const testId = 'grid-icon'; + const { container, getByTestId } = render( , ); - let tree = component.toJSON(); - expect(tree).toMatchSnapshot(); + const { attributes } = getByTestId(testId); + expect(attributes.stroke.value).toBe('red'); + expect(attributes.width.value).toBe('48'); + expect(attributes.height.value).toBe('48'); + expect(attributes['stroke-width'].value).toBe('4'); + + expect( container.innerHTML ).toMatchSnapshot(); }); }) diff --git a/yarn.lock b/yarn.lock index 9fc393d9f..67f448272 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1252,6 +1252,17 @@ "@babel/plugin-syntax-jsx" "^7.12.13" "@babel/types" "^7.12.17" +"@babel/plugin-transform-react-jsx@^7.3.0": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" + integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/types" "^7.13.12" + "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" @@ -1626,6 +1637,14 @@ pirates "^4.0.0" source-map-support "^0.5.16" +"@babel/runtime-corejs3@^7.10.2": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz#6bf5fbc0b961f8e3202888cb2cd0fb7a0a9a3f66" + integrity sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + "@babel/runtime@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" @@ -1640,6 +1659,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" + integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" @@ -2244,11 +2270,59 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@testing-library/dom@^7.16.2": + version "7.30.3" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.30.3.tgz#779ea9bbb92d63302461800a388a5a890ac22519" + integrity sha512-7JhIg2MW6WPwyikH2iL3o7z+FTVgSOd2jqCwTAHqK7Qal2gRRYiUQyURAxtbK9VXm/UTyG9bRihv8C5Tznr2zw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.4" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/dom@^7.28.1": + version "7.30.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.30.0.tgz#53697851f7708a1448cc30b74a2ea056dd709cd6" + integrity sha512-v4GzWtltaiDE0yRikLlcLAfEiiK8+ptu6OuuIebm9GdC2XlZTNDPGEfM2UkEtnH7hr9TRq2sivT5EA9P1Oy7bw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.4" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/preact@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@testing-library/preact/-/preact-2.0.1.tgz#c69200b16c4eda58986c8d65e1043ad9cbe409d3" + integrity sha512-79kwVOY+3caoLgaPbiPzikjgY0Aya7Fc7TvGtR1upCnz2wrtmPDnN2t9vO7I7vDP2zoA+feSwOH5Q0BFErhaaQ== + dependencies: + "@testing-library/dom" "^7.16.2" + +"@testing-library/react@^11.2.6": + version "11.2.6" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.6.tgz#586a23adc63615985d85be0c903f374dab19200b" + integrity sha512-TXMCg0jT8xmuU8BkKMtp8l7Z50Ykew5WNX8UoIKTaLFwKkP2+1YDhOLA2Ga3wY4x29jyntk7EWfum0kjlYiSjQ== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.28.1" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@types/aria-query@^4.2.0": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" + integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.13" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.13.tgz#bc6eea53975fdf163aff66c086522c6f293ae4cf" @@ -3050,6 +3124,14 @@ aria-query@^3.0.0: ast-types-flow "0.0.7" commander "^2.11.0" +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + arity-n@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" @@ -3423,6 +3505,13 @@ babel-preset-jest@^26.6.2: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" +babel-preset-preact@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-preact/-/babel-preset-preact-2.0.0.tgz#3437b713a03b1d2031740b06b19c9115964ae619" + integrity sha512-gqJCALE4XXEienLkzgAQ351XyoVHTIiZRAKjEJupK7cTVhFyovEuSrVoNrTNrUu3R78vAarjxkrR6j0vr+Rg8Q== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.3.0" + babel-preset-react-app@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045" @@ -4613,6 +4702,11 @@ core-js-compat@^3.8.0: browserslist "^4.16.3" semver "7.0.0" +core-js-pure@^3.0.0: + version "3.12.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.12.1.tgz#934da8b9b7221e2a2443dc71dfa5bd77a7ea00b8" + integrity sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ== + core-js@3, core-js@^3.2.1: version "3.9.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae" @@ -5329,6 +5423,11 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" + integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== + dom-converter@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -8797,6 +8896,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + lucide-react@0.15.11: version "0.15.11" resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.15.11.tgz#34f2d76d1e7fda978f4a8b2d0538b84ecbecf106" @@ -10617,6 +10721,11 @@ postcss@^8.1.4, postcss@^8.2.4: nanoid "^3.1.22" source-map "^0.6.1" +preact@^10.5.13: + version "10.5.13" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.5.13.tgz#85f6c9197ecd736ce8e3bec044d08fd1330fa019" + integrity sha512-q/vlKIGNwzTLu+jCcvywgGrt+H/1P/oIRSD6mV4ln3hmlC+Aa34C7yfPI4+5bzW8pONyVXYS7SvXosy2dKKtWQ== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -10929,7 +11038,16 @@ react-dom@^16.8.6: prop-types "^15.6.2" scheduler "^0.19.1" -react-is@^16.8.1, react-is@^16.8.6: +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -10939,16 +11057,6 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-test-renderer@^16.5.1: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae" - integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg== - dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.8.6" - scheduler "^0.19.1" - react@^16.5.1, react@^16.8.6: version "16.14.0" resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" @@ -11640,6 +11748,14 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"