diff --git a/package.json b/package.json
index 5091889..486da57 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,7 @@
"design": "marked -o design.html < design.md",
"test": "node --expose-gc node_modules/mocha/bin/_mocha test/**/*.test.ts",
"repl": "node -r ts-node/register/transpile-only src/repl.ts",
+ "dev": "cd packages/web && yarn dev",
"bundle": "cd packages/web && yarn bundle"
},
"devDependencies": {
@@ -15,20 +16,20 @@
"@types/chai-as-promised": "^7.1.4",
"@types/fs-extra": "^9.0.13",
"@types/mocha": "github:whitecolor/mocha-types#da22474cf43f48a56c86f8c23a5a0ea36e295768",
- "@types/node": "^16.11.9",
+ "@types/node": "^17.0.6",
"@types/sinon": "^10.0.6",
- "@types/sinon-chai": "^3.2.6",
+ "@types/sinon-chai": "^3.2.8",
"@types/wicg-file-system-access": "^2020.9.4",
- "@typescript-eslint/eslint-plugin": "5.7.0",
- "@typescript-eslint/parser": "5.7.0",
+ "@typescript-eslint/eslint-plugin": "5.8.1",
+ "@typescript-eslint/parser": "5.8.1",
"chai": "^4.3.4",
"chai-as-promised": "^7.1.1",
"chalk": "^4.1.2",
- "eslint": "8.5.0",
+ "eslint": "8.6.0",
"eslint-config-prettier": "8.3.0",
"eslint-import-resolver-typescript": "2.5.0",
"eslint-plugin-import": "2.25.3",
- "eslint-plugin-react": "7.27.1",
+ "eslint-plugin-react": "7.28.0",
"eslint-plugin-react-hooks": "4.3.0",
"fs-extra": "^10.0.0",
"marked": "^4.0.8",
@@ -37,7 +38,7 @@
"prettier": "^2.5.1",
"react": "^17.0.2",
"react-dom": "^17.0.2",
- "sass": "^1.45.0",
+ "sass": "^1.45.2",
"sinon": "^12.0.1",
"sinon-chai": "^3.7.0",
"tslib": "^2.3.1",
diff --git a/packages/opvault.js/src/models/item.ts b/packages/opvault.js/src/models/item.ts
index 9734a67..7be6127 100644
--- a/packages/opvault.js/src/models/item.ts
+++ b/packages/opvault.js/src/models/item.ts
@@ -16,6 +16,7 @@ export interface EncryptedItem {
tx: integer // Unix seconds
updated: integer // Unix seconds
uuid: string // 32 chars
+ fave: number
trashed?: boolean
}
@@ -58,6 +59,9 @@ export class Item {
}
return this.#details!
}
+ get fave() {
+ return this.#data.fave
+ }
constructor(crypto: Crypto, data: EncryptedItem) {
this.#crypto = crypto
diff --git a/packages/web/.gitignore b/packages/web/.gitignore
index b5f4ba9..d25eb5f 100644
--- a/packages/web/.gitignore
+++ b/packages/web/.gitignore
@@ -1,6 +1,7 @@
+src/third-party-licenses.json
node_modules
.DS_Store
dist
bundle
*.local
-*.yml.d.ts
+*.yml.d.ts
\ No newline at end of file
diff --git a/packages/web/package.json b/packages/web/package.json
index 6a95c3b..8c4f12b 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -6,31 +6,38 @@
"license": "GPL-3.0-only",
"description": "OnePassword local vault viewer",
"scripts": {
- "dev": "vite",
+ "dev": "concurrently vite npm:start",
"build": "vite build",
"serve": "vite preview",
"start": "./esbuild.js && NODE_ENV=development electron --enable-transparent-visuals --disable-gpu ./dist/main/index.js",
"bundle": "./scripts/build.sh"
},
- "devDependencies": {
+ "dependencies": {
"@emotion/css": "^11.7.1",
"@emotion/react": "^11.7.1",
"@emotion/styled": "^11.6.0",
+ "buffer": "^6.0.3",
+ "path-browserify": "^1.0.1",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2",
+ "react-icons": "^4.3.1",
+ "react-idle-timer": "4.6.4"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.16.7",
+ "@emotion/babel-plugin": "^11.7.2",
"@rollup/plugin-yaml": "^3.1.0",
"@types/react": "^17.0.37",
"@types/react-dom": "^17.0.11",
"@vitejs/plugin-react": "^1.1.3",
- "buffer": "^6.0.3",
+ "@types/babel__core": "^7.1.18",
+ "concurrently": "^6.5.1",
"electron": "^16.0.5",
"electron-builder": "^22.14.5",
"esbuild": "^0.14.5",
"js-yaml": "^4.1.0",
+ "lodash": "^4.17.21",
"opvault.js": "*",
- "path-browserify": "^1.0.1",
- "react": "^17.0.2",
- "react-dom": "^17.0.2",
- "react-idle-timer": "4.6.4",
- "react-icons": "^4.3.1",
"sass": "^1.45.0",
"typescript": "^4.5.4",
"vite": "^2.7.3"
diff --git a/packages/web/scripts/build-third-party-license-info.js b/packages/web/scripts/build-third-party-license-info.js
new file mode 100755
index 0000000..96a9151
--- /dev/null
+++ b/packages/web/scripts/build-third-party-license-info.js
@@ -0,0 +1,42 @@
+#!/usr/bin/env node
+const fs = require("fs")
+const { resolve } = require("path")
+
+const root = resolve(__dirname, "../../..")
+const packages = [
+ root,
+ resolve(root, "packages/web"),
+ resolve(root, "packages/opvault.js"),
+]
+
+const readJSON = path => JSON.parse(fs.readFileSync(path, "utf-8"))
+const infoMap = Object.fromEntries(
+ packages.flatMap(dir => {
+ const rootPkg = readJSON(resolve(dir, "package.json"))
+ const dependencies = Object.keys(rootPkg.dependencies || {})
+ return dependencies.map(dependency => {
+ const pkgDir = resolve(dir, "node_modules", dependency)
+ const pkg = readJSON(resolve(pkgDir, "package.json"))
+ const licenseFile = fs
+ .readdirSync(pkgDir)
+ .filter(x => x.toLowerCase().startsWith("license"))
+ if (licenseFile.length !== 1) {
+ console.error(fs.readdirSync(pkgDir))
+ throw new Error(`Cannot determine license file for ${pkg.name}`)
+ }
+ return [
+ pkg.name,
+ {
+ name: pkg.name,
+ author: pkg.author?.name ?? pkg.author,
+ license: fs.readFileSync(resolve(pkgDir, licenseFile[0]), "utf-8"),
+ },
+ ]
+ })
+ })
+)
+
+fs.writeFileSync(
+ resolve(__dirname, "../src/third-party-licenses.json"),
+ JSON.stringify(infoMap, null, 2)
+)
diff --git a/packages/web/scripts/build.sh b/packages/web/scripts/build.sh
index 0d1d640..b09a40b 100755
--- a/packages/web/scripts/build.sh
+++ b/packages/web/scripts/build.sh
@@ -1,5 +1,7 @@
#!/bin/sh
npx vite build
NODE_ENV=production ./esbuild.js
+./scripts/build-i18n-yml-typedef.js
+./scripts/build-third-party-license.js
./scripts/build-package-json.js
./node_modules/.bin/electron-builder build
\ No newline at end of file
diff --git a/packages/web/scripts/vite-babel.ts b/packages/web/scripts/vite-babel.ts
new file mode 100644
index 0000000..0986098
--- /dev/null
+++ b/packages/web/scripts/vite-babel.ts
@@ -0,0 +1,41 @@
+import * as babel from "@babel/core"
+import type { PluginOption, TransformResult } from "vite"
+
+const sourceRegex = /\.(j|t)sx?$/
+
+export default function macrosPlugin(): PluginOption {
+ return {
+ name: "babel-macros",
+ enforce: "pre",
+ transform(source: string, filename: string) {
+ if (filename.includes("node_modules")) {
+ return undefined
+ }
+ if (!sourceRegex.test(filename)) {
+ return
+ }
+ const hasBabelMacro = source.includes('.macro"')
+ const hasEmotion = source.includes("@emotion")
+ if (!hasBabelMacro && !hasEmotion) {
+ return undefined
+ }
+ const result = babel.transformSync(source, {
+ filename,
+ parserOpts: {
+ plugins: ["jsx", "typescript", "decorators-legacy"],
+ },
+ plugins: [
+ hasBabelMacro && require.resolve("babel-plugin-macros"),
+ hasEmotion && require.resolve("@emotion/babel-plugin"),
+ ].filter(Boolean),
+ generatorOpts: {
+ decoratorsBeforeExport: true,
+ },
+ babelrc: false,
+ configFile: false,
+ sourceMaps: true,
+ })
+ return result as TransformResult | null
+ },
+ }
+}
diff --git a/packages/web/src/App.tsx b/packages/web/src/App.tsx
index 78e5646..4d166dd 100644
--- a/packages/web/src/App.tsx
+++ b/packages/web/src/App.tsx
@@ -48,9 +48,5 @@ export const App: React.FC = () => {
)
}
- return (
-
-
-
- )
+ return
}
diff --git a/packages/web/src/about/LicenseViewer.tsx b/packages/web/src/about/LicenseViewer.tsx
new file mode 100644
index 0000000..b404351
--- /dev/null
+++ b/packages/web/src/about/LicenseViewer.tsx
@@ -0,0 +1,65 @@
+import styled from "@emotion/styled"
+import { useEffect, useMemo, useState } from "react"
+import { ClickableContainer } from "../components/ItemFieldValue"
+import { scrollbar } from "../styles"
+
+const Container = styled.div`
+ display: flex;
+`
+const ListContainer = styled.div`
+ min-width: 150px;
+ ul {
+ list-style-type: none;
+ margin-block-start: 0;
+ padding-inline-start: 0;
+ }
+ li {
+ line-height: 1.6em;
+ }
+`
+const LicenseText = styled.div`
+ flex-grow: 1;
+ font-family: var(--monospace);
+ max-height: 575px;
+ overflow-y: scroll;
+ white-space: pre-wrap;
+`
+
+export const LicenseView = () => {
+ const [licenseInfo, setLicenseInfo] = useState<
+ typeof import("../third-party-licenses.json")
+ >(() => ({} as any))
+ const names = useMemo(() => Object.keys(licenseInfo), [licenseInfo])
+
+ const [selected, setSelected] = useState()
+
+ useEffect(() => {
+ import("../third-party-licenses.json").then(json => setLicenseInfo(json.default))
+ }, [])
+
+ useEffect(() => {
+ setSelected(names[0])
+ }, [names])
+
+ return (
+
+
+
+ {names.map(name => (
+ - setSelected(name)}
+ >
+ {name}
+
+ ))}
+
+
+
+
+ {licenseInfo[selected as any]?.license}
+
+
+ )
+}
diff --git a/packages/web/src/about/index.tsx b/packages/web/src/about/index.tsx
new file mode 100644
index 0000000..52cd1bb
--- /dev/null
+++ b/packages/web/src/about/index.tsx
@@ -0,0 +1,27 @@
+import styled from "@emotion/styled"
+import { Modal } from "../components/Modal"
+import { useTranslate } from "../i18n"
+import { LicenseView } from "./LicenseViewer"
+
+const Container = styled.div`
+ width: 800px;
+ min-height: 450px;
+`
+const LicenseSectionHeader = styled.h3`
+ margin-top: 0;
+`
+
+export const About: React.FC<{
+ show: boolean
+ onHide(): void
+}> = ({ show, onHide }) => {
+ const t = useTranslate()
+ return (
+
+
+ Licenses
+
+
+
+ )
+}
diff --git a/packages/web/src/components/FilteredVaultView.tsx b/packages/web/src/components/FilteredVaultView.tsx
new file mode 100644
index 0000000..544438a
--- /dev/null
+++ b/packages/web/src/components/FilteredVaultView.tsx
@@ -0,0 +1,198 @@
+import styled from "@emotion/styled"
+import { useEffect, useMemo, useState } from "react"
+import type { Item } from "opvault.js"
+import { Category } from "opvault.js"
+import { IoSearch } from "react-icons/io5"
+import { ItemList } from "../components/ItemList"
+import { ItemView } from "../components/Item"
+import { reactIconClass } from "../components/CategoryIcon"
+import { useTranslate } from "../i18n/index"
+import { scrollbar } from "../styles"
+
+const ListContainer = styled.div`
+ border-right: 1px solid var(--border-color);
+ width: 350px;
+ margin-right: 10px;
+ overflow-y: scroll;
+ overflow-y: overlay;
+ overflow-x: hidden;
+ @media (prefers-color-scheme: dark) {
+ background: #202020;
+ border-right-color: transparent;
+ }
+`
+const ItemContainer = styled.div`
+ width: calc(100% - 300px);
+ overflow: hidden;
+`
+const SearchContainer = styled.div`
+ text-align: center;
+ position: relative;
+ flex-grow: 1;
+ margin: 10px 0;
+ margin-right: 10px;
+`
+const SortContainer = styled.div`
+ display: flex;
+ margin: 10px 0;
+`
+const CategorySelect = styled.select`
+ width: 50%;
+ margin-left: 10px;
+ margin-right: 5px;
+`
+const SortSelect = styled.select`
+ width: calc(50% - 25px);
+`
+
+const SearchInput = styled.input`
+ --margin: 10px;
+ width: calc(100% - var(--margin) * 2 + 9px);
+ margin: 0 var(--margin);
+ padding-left: 2em !important;
+`
+const SearchIcon = styled(IoSearch)`
+ position: absolute;
+ top: 9px;
+ left: 20px;
+`
+
+const enum SortBy {
+ Name,
+ CreatedAt,
+ UpdatedAt,
+}
+
+export const FilteredVaultView: React.FC<{ items: Item[] }> = ({ items }) => {
+ const t = useTranslate()
+ const [item, setItem] = useState- ()
+ const [category, setCategory] = useState()
+ const [sortBy, setSortBy] = useState(SortBy.Name)
+ const [search, setSearch] = useState("")
+
+ useEffect(() => {
+ setItem(undefined)
+ }, [items])
+
+ const compareFn = useMemo((): ((a: Item, b: Item) => number) => {
+ switch (sortBy) {
+ case SortBy.Name:
+ return (a, b) => (a.overview.title ?? "").localeCompare(b?.overview.title ?? "")
+ case SortBy.CreatedAt:
+ return (a, b) => b.createdAt - a.createdAt
+ case SortBy.UpdatedAt:
+ return (a, b) => b.updatedAt - a.updatedAt
+ }
+ }, [sortBy])
+
+ const sortedItem = useMemo(() => items.slice().sort(compareFn), [items, compareFn])
+
+ const filtered = useMemo(() => {
+ let items = sortedItem.filter(x => x.category !== Category.Tombstone)
+ if (category != null) {
+ items = items.filter(x => x.category === category)
+ }
+
+ let res: Item[] = items
+ if (search) {
+ res = []
+ for (const x of items) {
+ const compare = Math.max(
+ stringCompare(search, x.overview.title),
+ stringCompare(search, x.overview.ainfo)
+ ) as CompareResult
+ switch (compare) {
+ case CompareResult.NoMatch:
+ continue
+ case CompareResult.Includes:
+ res.push(x)
+ break
+ case CompareResult.Equals:
+ res.unshift(x)
+ break
+ }
+ }
+ }
+ return res
+ }, [sortedItem, search, category])
+
+ const categoryMap = useMemo(
+ (): [Category | undefined, string][] => [
+ [undefined, t.label.category_all],
+ [Category.Login, t.label.category_login],
+ [Category.SecureNote, t.label.category_secure_note],
+ [Category.CreditCard, t.label.category_credit_card],
+ [Category.Identity, t.label.category_identity],
+ [Category.Password, t.label.category_password],
+ [Category.Membership, t.label.category_membership],
+ [Category.Database, t.label.category_database],
+ [Category.BankAccount, t.label.category_bank_account],
+ [Category.Email, t.label.category_email],
+ [Category.SoftwareLicense, t.label.category_software_license],
+ [Category.SSN, t.label.category_ssn],
+ [Category.Passport, t.label.category_passport],
+ [Category.OutdoorLicense, t.label.category_outdoor_license],
+ [Category.DriverLicense, t.label.category_driver_license],
+ [Category.Rewards, t.label.category_rewards],
+ [Category.Router, t.label.category_router],
+ [Category.Server, t.label.category_server],
+ ],
+ [t]
+ )
+
+ return (
+ <>
+
+
+ setSearch(e.currentTarget.value)}
+ />
+
+
+
+
+ setCategory((e.currentTarget.value as Category) || undefined)}
+ >
+ {categoryMap.map(([value, name]) => (
+
+ ))}
+
+
+ setSortBy(+e.currentTarget.value)}>
+
+
+
+
+
+
+
+
+ {item && }
+
+ >
+ )
+}
+
+enum CompareResult {
+ NoMatch,
+ Includes,
+ Equals,
+}
+
+function stringCompare(search: string, source?: string) {
+ if (!search) return CompareResult.Includes
+ if (!source) return CompareResult.NoMatch
+ source = source.toLocaleLowerCase()
+ search = search.toLocaleUpperCase()
+ const includes = source.includes(search.toLocaleLowerCase())
+ if (includes) {
+ return source.length === search.length ? CompareResult.Equals : CompareResult.Includes
+ }
+ return CompareResult.NoMatch
+}
diff --git a/packages/web/src/components/ItemDates.tsx b/packages/web/src/components/ItemDates.tsx
index 8a76f21..b1be1b4 100644
--- a/packages/web/src/components/ItemDates.tsx
+++ b/packages/web/src/components/ItemDates.tsx
@@ -8,6 +8,7 @@ const Container = styled.div`
font-size: 90%;
line-height: 1.5em;
opacity: 0.5;
+ user-select: none;
`
export const ItemDates = memo<{ item: Item }>(({ item }) => {
diff --git a/packages/web/src/components/ItemFieldContextMenu.tsx b/packages/web/src/components/ItemFieldContextMenu.tsx
index 55d4367..15d84f6 100644
--- a/packages/web/src/components/ItemFieldContextMenu.tsx
+++ b/packages/web/src/components/ItemFieldContextMenu.tsx
@@ -4,10 +4,11 @@ import styled from "@emotion/styled"
const Container = styled.menu`
background-color: #fff;
border-radius: 3px;
- box-shadow: #0004 0px 1px 4px;
+ box-shadow: rgb(15 15 15 / 5%) 0px 0px 0px 1px, rgb(15 15 15 / 10%) 0px 3px 6px,
+ rgb(15 15 15 / 20%) 0px 9px 24px;
left: 99%;
margin-block-start: 0;
- min-width: 180px;
+ min-width: 195px;
padding-inline-start: 0;
position: absolute;
top: 0;
@@ -33,17 +34,23 @@ const Separator = styled.div`
const Item = styled.div`
cursor: default;
- font-size: 13px;
+ font-size: 14px;
flex: 1 1 auto;
display: flex;
- height: 2.5em;
+ height: 2.3em;
align-items: center;
padding-left: 1em;
padding-right: 5px;
position: relative;
+ &:first-of-type {
+ border-radius: 3px 3px 0 0;
+ }
+ &:last-of-type {
+ border-radius: 0 0 3px 3px;
+ }
&:hover {
background-color: #ddd;
- border-radius: 3px;
+
.item-field-context-menu {
display: block;
}
diff --git a/packages/web/src/components/ItemFieldValue.tsx b/packages/web/src/components/ItemFieldValue.tsx
index 5312268..b75d32e 100644
--- a/packages/web/src/components/ItemFieldValue.tsx
+++ b/packages/web/src/components/ItemFieldValue.tsx
@@ -17,6 +17,8 @@ const Container = styled.div`
}
`
+export { Container as ClickableContainer }
+
function useCopy(text: string) {
const t = useTranslate()
return useCallback(() => {
diff --git a/packages/web/src/components/ItemList.tsx b/packages/web/src/components/ItemList.tsx
index aebe9fb..aa39b97 100644
--- a/packages/web/src/components/ItemList.tsx
+++ b/packages/web/src/components/ItemList.tsx
@@ -2,6 +2,7 @@ import { memo } from "react"
import styled from "@emotion/styled"
import { cx } from "@emotion/css"
import type { Item } from "opvault.js"
+import { AiFillStar } from "react-icons/ai"
import { CategoryIcon } from "./CategoryIcon"
import { useTranslate } from "../i18n"
import { ItemNoTitle } from "../styles"
@@ -18,13 +19,13 @@ const List = styled.ol`
padding: 0;
`
const ItemView = styled.li`
- border-radius: 5px;
- display: grid;
- padding: 5px 15px;
- transition: background-color 0.1s;
align-items: center;
cursor: default;
+ display: grid;
grid-template-columns: 35px 1fr;
+ padding: 5px 15px;
+ position: relative;
+ transition: background-color 0.1s;
user-select: none;
&:hover {
background-color: var(--hover-background);
@@ -47,10 +48,21 @@ const ItemDescription = styled.div`
overflow: hidden;
text-overflow: ellipsis;
max-width: 230px;
+ &.empty {
+ opacity: 0.4;
+ }
`
const Icon = styled(CategoryIcon)`
font-size: 1.5em;
`
+const Favorite = styled(AiFillStar)`
+ bottom: 10px;
+ display: inline-block;
+ fill: #fdcc0d;
+ left: 10px;
+ opacity: 0.9;
+ position: absolute;
+`
export const ItemList = memo(({ items, onSelect, selected }) => {
const t = useTranslate()
@@ -66,12 +78,17 @@ export const ItemList = memo(({ items, onSelect, selected }) => {
trashed: item.isDeleted,
})}
>
-
+
+
+ {!!item.fave && }
+
{item.overview.title || {t.label.no_title}}
- {item.overview.ainfo || " "}
+
+ {item.overview.ainfo || "-"}
+
))}
diff --git a/packages/web/src/components/Modal.tsx b/packages/web/src/components/Modal.tsx
index aaaae3d..1117fbc 100644
--- a/packages/web/src/components/Modal.tsx
+++ b/packages/web/src/components/Modal.tsx
@@ -25,7 +25,6 @@ const ModalContainer = styled.div`
background: var(--page-background);
box-shadow: rgba(0, 0, 0, 0.25) 0px 14px 28px, rgba(0, 0, 0, 0.22) 0px 10px 10px;
border-radius: 5px;
- max-width: 500px;
margin: 0 auto;
`
const ModalTitle = styled.div`
@@ -41,8 +40,9 @@ const ModalContent = styled.div`
export const Modal: React.FC<{
show: boolean
title: string
+ maxWidth?: number
onClose(): void
-}> = ({ show, children, title, onClose }) => {
+}> = ({ show, children, title, maxWidth = 700, onClose }) => {
const onBackgroundClick = useCallback(
e => {
if (e.currentTarget === e.target) {
@@ -61,7 +61,7 @@ export const Modal: React.FC<{
<>
-
+
{title}
{children}
diff --git a/packages/web/src/i18n/texts.yml b/packages/web/src/i18n/texts.yml
index ebde8a1..6aaf808 100644
--- a/packages/web/src/i18n/texts.yml
+++ b/packages/web/src/i18n/texts.yml
@@ -55,6 +55,106 @@ label:
fr: Langue
ja: 言語
+ about_app:
+ en: About
+ fr: À propos
+ ja: バーション情報
+
+ category_all:
+ en: All
+ fr: Tous
+ ja: すべて
+
+ category_login:
+ en: Login
+ fr: Connexion
+ ja: ログイン
+
+ category_credit_card:
+ en: Credit Card
+ fr: Carte de crédit
+ ja: クレジットカード
+
+ category_secure_note:
+ en: Secure Note
+ fr: Note sécurisée
+ ja: セキュアノート
+
+ category_identity:
+ en: Identity
+ fr: Identité
+ ja: 個人情報
+
+ category_password:
+ en: Password
+ fr: Mot de passe
+ ja: パスワード
+
+ category_tombstone:
+ en: Tombstone
+ fr: Corbeille
+ ja: ゴミ箱
+
+ category_software_license:
+ en: Software License
+ fr: Licence de logiciel
+ ja: ソフトウェアライセンス
+
+ category_bank_account:
+ en: BankAccount
+ fr: Compte bancaire
+ ja: 銀行口座
+
+ category_database:
+ en: Database
+ fr: Base de données
+ ja: データベース
+
+ category_driver_license:
+ en: Driver License
+ fr: Permis de conduire
+ ja: 運転免許
+
+ category_outdoor_license:
+ en: Outdoor License
+ fr: Permis de chasse ou pêche
+ ja: 遊漁券及び狩猟免許
+
+ category_membership:
+ en: Membership
+ fr: Adhésion
+ ja: 会員資格
+
+ category_passport:
+ en: Passport
+ fr: Passeport
+ ja: 旅券
+
+ category_rewards:
+ en: Rewards
+ fr: Programme de fidélité
+ ja: ポイントサービス
+
+ category_ssn:
+ en: Social Security Numbers
+ fr: N° de sécurité sociale
+ ja: 社会保障番号
+
+ category_router:
+ en: Router
+ fr: Routeur sans fil
+ ja: Wi-Fiルーター
+
+ category_server:
+ en: Server
+ fr: Serveur
+ ja: サーバー
+
+ category_email:
+ en: Email
+ fr: Courriel
+ ja: メール
+
options:
sort_by_name:
en: Sort by Name
@@ -133,6 +233,11 @@ action:
fr: Avancer
ja: 次に進む
+ clear_history:
+ en: Clear history
+ fr: Effacer l’historique
+ ja: 閲覧履歴を消す
+
tips:
automatically_lock_after_inactivity:
en: Automatically lock after inactivity
diff --git a/packages/web/src/index.scss b/packages/web/src/index.scss
index 39bfb49..0b23194 100644
--- a/packages/web/src/index.scss
+++ b/packages/web/src/index.scss
@@ -19,10 +19,10 @@ body {
--titlebar-height: 46px;
--titlebar-height: 0px;
--label-background: #ddd;
- --selected-background: #c9c9c9;
+ --selected-background: #d5d5d5;
--hover-background: #ddd;
- --border-color: #ddd;
- --monospace: D2Coding, source-code-pro, Menlo, Monaco, Consolas, "Courier New",
+ --border-color: #e3e3e3;
+ --monospace: D2Coding, "source-code-pro", Menlo, Monaco, Consolas, "Courier New",
monospace;
}
@@ -69,7 +69,7 @@ input {
@mixin input {
@include scheme(background-color, #fff, #2d2d2d);
border-radius: 6px;
- border: 1px solid;
+ border: 1px solid #fff;
@include scheme(border-color, #cdc7c2, #1b1b1b);
transition: 0.1s;
&:focus {
@@ -83,7 +83,6 @@ input[type="number"],
input[type="password"] {
@include input;
border-radius: 6px;
- border: 1px solid;
color: inherit;
outline: none;
padding: 7px 8px;
@@ -110,7 +109,8 @@ input[type="checkbox" i] {
}
button,
-select {
+select,
+.button {
@include scheme(background-color, #f6f5f4, #333);
border-radius: 4px;
border: 1px solid;
diff --git a/packages/web/src/pages/Vault.tsx b/packages/web/src/pages/Vault.tsx
index 7f842d6..0679931 100644
--- a/packages/web/src/pages/Vault.tsx
+++ b/packages/web/src/pages/Vault.tsx
@@ -1,17 +1,13 @@
import styled from "@emotion/styled"
import { useEffect, useMemo, useState } from "react"
import type { Vault, Item } from "opvault.js"
-import { Category } from "opvault.js"
+import { AiOutlineStar } from "react-icons/ai"
import { FiLock } from "react-icons/fi"
-import { IoSearch } from "react-icons/io5"
import { Si1Password } from "react-icons/si"
import { BsGear } from "react-icons/bs"
-import { ItemList } from "../components/ItemList"
-import { ItemView } from "../components/Item"
-import { reactIconClass } from "../components/CategoryIcon"
import { useTranslate } from "../i18n/index"
-import { scrollbar } from "../styles"
import { Settings } from "../settings"
+import { FilteredVaultView } from "../components/FilteredVaultView"
const Container = styled.div`
display: flex;
@@ -21,9 +17,9 @@ const TabContainer = styled.div`
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
- width: 55px;
overflow: hidden;
padding-bottom: 5px;
+ width: 54px;
@media (prefers-color-scheme: dark) {
background: #222;
border-right-color: transparent;
@@ -42,6 +38,7 @@ const TabButton = styled.button<{ active?: boolean }>`
margin-bottom: 5px;
font-size: 22px;
padding: 10px 14px;
+ ${p => p.active && "&:hover { background: var(--selected-background); }"}
@media (prefers-color-scheme: dark) {
--selected-background: #1c1c1c;
}
@@ -49,111 +46,30 @@ const TabButton = styled.button<{ active?: boolean }>`
const TabContainerMain = styled.div`
flex-grow: 1;
`
-const ListContainer = styled.div`
- border-right: 1px solid var(--border-color);
- width: 350px;
- margin-right: 10px;
- overflow-y: scroll;
- overflow-x: hidden;
- @media (prefers-color-scheme: dark) {
- background: #202020;
- border-right-color: transparent;
- }
-`
-const ItemContainer = styled.div`
- width: calc(100% - 300px);
- overflow: hidden;
-`
-const SearchContainer = styled.div`
- text-align: center;
- position: relative;
- flex-grow: 1;
- margin: 10px 0;
- margin-right: 10px;
-`
-const SortContainer = styled.div`
- margin: 10px 10px;
-`
-
-const SearchInput = styled.input`
- --margin: 10px;
- width: calc(100% - var(--margin) * 2 + 9px);
- margin: 0 var(--margin);
- padding-left: 2em !important;
-`
-const SearchIcon = styled(IoSearch)`
- position: absolute;
- top: 9px;
- left: 20px;
-`
-
-const enum SortBy {
- Name,
- CreatedAt,
- UpdatedAt,
-}
export const VaultView: React.FC<{ vault: Vault; onLock(): void }> = ({
vault,
onLock,
}) => {
+ const [tab, setTab] = useState(Tab.All)
+ const [items, setItems] = useState- (() => [])
const [showSettings, setShowSettings] = useState(false)
const t = useTranslate()
- const [items, setItems] = useState
- (() => [])
- const [item, setItem] = useState
- ()
- const [sortBy, setSortBy] = useState(SortBy.Name)
- const [search, setSearch] = useState("")
-
- const compareFn = useMemo((): ((a: Item, b: Item) => number) => {
- switch (sortBy) {
- case SortBy.Name:
- return (a, b) => (a.overview.title ?? "").localeCompare(b?.overview.title ?? "")
- case SortBy.CreatedAt:
- return (a, b) => b.createdAt - a.createdAt
- case SortBy.UpdatedAt:
- return (a, b) => b.updatedAt - a.updatedAt
- }
- }, [sortBy])
-
- const sortedItem = useMemo(() => items.slice().sort(compareFn), [items, compareFn])
useEffect(() => {
- setItem(undefined)
arrayFrom(vault.values()).then(setItems)
}, [vault])
- const filtered = useMemo(() => {
- const items = sortedItem.filter(x => x.category !== Category.Tombstone)
- let res: Item[] = items
- if (search) {
- res = []
- for (const x of items) {
- const compare = Math.max(
- stringCompare(search, x.overview.title),
- stringCompare(search, x.overview.ainfo)
- ) as CompareResult
- switch (compare) {
- case CompareResult.NoMatch:
- continue
- case CompareResult.Includes:
- res.push(x)
- break
- case CompareResult.Equals:
- res.unshift(x)
- break
- }
- }
- }
- return res
- }, [sortedItem, search])
-
return (
-
+ setTab(Tab.All)}>
+ setTab(Tab.Favorites)}>
+
+
@@ -163,38 +79,25 @@ export const VaultView: React.FC<{ vault: Vault; onLock(): void }> = ({
-
-
- setSearch(e.currentTarget.value)}
- />
-
-
-
-
-
-
-
-
-
- {item && }
-
+ {tab === Tab.All ? (
+
+ ) : tab === Tab.Favorites ? (
+
+ ) : null}
setShowSettings(false)} />
)
}
+const FavoriteItemsView: React.FC<{ items: Item[] }> = ({ items }) => {
+ const favorites = useMemo(
+ () => items.filter(x => x.fave).sort((a, b) => a.fave - b.fave),
+ [items]
+ )
+ return
+}
+
async function arrayFrom(generator: AsyncGenerator) {
const list: T[] = []
for await (const value of generator) {
@@ -203,20 +106,7 @@ async function arrayFrom(generator: AsyncGenerator) {
return list
}
-enum CompareResult {
- NoMatch,
- Includes,
- Equals,
-}
-
-function stringCompare(search: string, source?: string) {
- if (!search) return CompareResult.Includes
- if (!source) return CompareResult.NoMatch
- source = source.toLocaleLowerCase()
- search = search.toLocaleUpperCase()
- const includes = source.includes(search.toLocaleLowerCase())
- if (includes) {
- return source.length === search.length ? CompareResult.Equals : CompareResult.Includes
- }
- return CompareResult.NoMatch
+enum Tab {
+ All,
+ Favorites,
}
diff --git a/packages/web/src/pages/VaultPicker/Picker.tsx b/packages/web/src/pages/VaultPicker/Picker.tsx
new file mode 100644
index 0000000..ceec625
--- /dev/null
+++ b/packages/web/src/pages/VaultPicker/Picker.tsx
@@ -0,0 +1,148 @@
+import styled from "@emotion/styled"
+import { css } from "@emotion/css"
+import { useCallback, useMemo, memo, useState } from "react"
+import { Si1Password } from "react-icons/si"
+import { FaFolderOpen } from "react-icons/fa"
+import { ImCross } from "react-icons/im"
+import { MdClearAll } from "react-icons/md"
+import { BsGear, BsInfoCircle } from "react-icons/bs"
+import { openDirectory } from "../../utils/ipc-adapter"
+import { useTranslate } from "../../i18n"
+import { Key, useStorage } from "../../utils/localStorage"
+import { Settings } from "../../settings"
+import { About } from "../../about"
+
+const Container = styled.div`
+ padding: 100px;
+ max-width: 600px;
+ margin: 0 auto;
+`
+const List = styled.ul`
+ list-style-type: none;
+ padding-inline-start: 0;
+`
+const Item = styled.li`
+ align-items: center;
+ cursor: default;
+ display: flex;
+ padding: 8px 10px;
+ user-select: none;
+ &:not(:hover):not(:active) {
+ background: transparent;
+ border-color: transparent;
+ }
+`
+const icon = css`
+ font-size: 1.5em;
+ margin-right: 10px;
+`
+const Text = styled.div`
+ flex-grow: 1;
+`
+const Hr = styled.hr`
+ border: none;
+ border-top: 1px solid var(--border-color);
+`
+const DeleteItem = styled(ImCross)`
+ text-align: right;
+ font-size: 0.7em;
+ opacity: 0;
+ ${Item}:hover & {
+ opacity: 1;
+ }
+`
+const NonCriticalPath = styled.span`
+ opacity: 0.4;
+`
+
+const Path = memo(({ children }: { children: string }) => {
+ const segments = useMemo(() => children.split("/"), [children])
+ return (
+
+ {segments.map((seg, i, { length }) =>
+ i < length - 1 ? (
+ {seg}/
+ ) : (
+ {seg}
+ )
+ )}
+
+ )
+})
+
+const enum Modal {
+ None,
+ Settings,
+ About,
+}
+
+export const PickOPVault: React.FC<{
+ setPath(path: string): void
+}> = ({ setPath }) => {
+ const t = useTranslate()
+ const [modal, setModal] = useState(Modal.None)
+ const [list, $setList] = useStorage(Key.RECENTLY_OPENED_VAULTS)
+
+ const clearHistory = useCallback(() => {
+ $setList([])
+ }, [$setList])
+
+ const setList = useCallback(
+ (fn: (value: Set) => void) => {
+ $setList(list => {
+ const set = new Set(list)
+ fn(set)
+ return Array.from(set)
+ })
+ },
+ [$setList]
+ )
+
+ const onClick = useCallback(async () => {
+ const path = await openDirectory()
+ if (path) {
+ setPath(path)
+ setList(set => set.add(path))
+ }
+ }, [setPath, setList])
+
+ return (
+
+
+ -
+
+ {t.label.choose_a_vault}…
+
+ {list.map((item, i) => (
+ - setPath(item)} key={i}>
+
+
+ {item}
+
+ setList(list => list.delete(item))} />
+
+ ))}
+ {list.length > 0 && (
+ <>
+
+ - clearHistory()}>
+
+ {t.action.clear_history}
+
+ >
+ )}
+ - setModal(Modal.Settings)}>
+
+ {t.label.settings}
+
+ - setModal(Modal.About)}>
+
+ {t.label.about_app}
+
+
+
+ setModal(Modal.None)} />
+ setModal(Modal.None)} />
+
+ )
+}
diff --git a/packages/web/src/pages/Unlock.tsx b/packages/web/src/pages/VaultPicker/Unlock.tsx
similarity index 91%
rename from packages/web/src/pages/Unlock.tsx
rename to packages/web/src/pages/VaultPicker/Unlock.tsx
index d7710b8..787e9d5 100644
--- a/packages/web/src/pages/Unlock.tsx
+++ b/packages/web/src/pages/VaultPicker/Unlock.tsx
@@ -3,7 +3,7 @@ import styled from "@emotion/styled"
import React, { useCallback, useEffect, useState } from "react"
import { IoMdArrowRoundBack } from "react-icons/io"
import { FaUnlock } from "react-icons/fa"
-import { useTranslate } from "../i18n"
+import { useTranslate } from "../../i18n"
const Container = styled.div`
padding: 20px;
@@ -61,12 +61,20 @@ const Submit = styled.button`
top: 8px;
right: 5px;
`
+const VaultPath = styled.div`
+ margin-top: 15px;
+ opacity: 0.7;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+`
export const Unlock: React.FC<{
instance: OnePassword
+ vaultPath: string
onUnlock(profile: string, password: string): void
onReturn(): void
-}> = ({ onUnlock, onReturn, instance }) => {
+}> = ({ onUnlock, onReturn, instance, vaultPath }) => {
const t = useTranslate()
const [profiles, setProfiles] = useState(() => [])
const [profile, setProfile] = useState()
@@ -134,6 +142,7 @@ export const Unlock: React.FC<{
+ {vaultPath}
)
}
diff --git a/packages/web/src/pages/VaultPicker.tsx b/packages/web/src/pages/VaultPicker/index.tsx
similarity index 59%
rename from packages/web/src/pages/VaultPicker.tsx
rename to packages/web/src/pages/VaultPicker/index.tsx
index 36b0822..69a9bc9 100644
--- a/packages/web/src/pages/VaultPicker.tsx
+++ b/packages/web/src/pages/VaultPicker/index.tsx
@@ -1,11 +1,10 @@
-import styled from "@emotion/styled"
import { useCallback, useEffect, useState } from "react"
import type { Vault } from "opvault.js"
import { OnePassword } from "opvault.js"
import { Unlock } from "./Unlock"
-import { electronAdapter, openDirectory } from "../utils/ipc-adapter"
-import { get, remove, set, Key } from "../utils/localStorage"
-import { useTranslate } from "../i18n"
+import { electronAdapter } from "../../utils/ipc-adapter"
+import { get, remove, set, Key } from "../../utils/localStorage"
+import { PickOPVault } from "./Picker"
interface VaultPickerProps {
instance: OnePassword | undefined
@@ -28,13 +27,13 @@ export const VaultPicker: React.FC = ({
await vault.unlock(password)
setVault(vault)
},
- [instance]
+ [instance, setVault]
)
const clearInstance = useCallback(() => {
setVaultPath("")
setInstance(undefined)
- }, [])
+ }, [setInstance])
useEffect(() => {
const existingPath = get(Key.LAST_VAULT_PATH)
@@ -55,40 +54,20 @@ export const VaultPicker: React.FC = ({
setInstance(undefined)
remove(Key.LAST_VAULT_PATH)
}
- }, [vaultPath])
+ }, [vaultPath, setInstance])
if (!instance) {
return
}
if (!vault) {
- return
+ return (
+
+ )
}
return null
}
-
-const PickOPVaultContainer = styled.div`
- padding: 100px;
- text-align: center;
-`
-const PickOPVaultInfo = styled.div`
- margin: 10px;
-`
-const PickOPVault: React.FC<{
- setPath(path: string): void
-}> = ({ setPath }) => {
- const t = useTranslate()
-
- const onClick = useCallback(async () => {
- const path = await openDirectory()
- if (path) {
- setPath(path)
- }
- }, [setPath])
-
- return (
-
-
- {t.label.no_vault_selected}
-
- )
-}
diff --git a/packages/web/src/settings/index.tsx b/packages/web/src/settings/index.tsx
index 6672329..dfbcc78 100644
--- a/packages/web/src/settings/index.tsx
+++ b/packages/web/src/settings/index.tsx
@@ -36,7 +36,7 @@ const GhostLabel = styled.div`
export const Settings: React.FC<{
show: boolean
onHide(): void
-}> = ({ show = true, onHide }) => {
+}> = ({ show, onHide }) => {
const { locale, setLocale } = useLocaleContext()
const t = useTranslate()
diff --git a/packages/web/src/utils/localStorage.ts b/packages/web/src/utils/localStorage.ts
index 176584e..6a2fe3f 100644
--- a/packages/web/src/utils/localStorage.ts
+++ b/packages/web/src/utils/localStorage.ts
@@ -2,6 +2,7 @@ import { useCallback, useEffect, useState } from "react"
export enum Key {
LAST_VAULT_PATH = "app.state.last_vault_path",
+ RECENTLY_OPENED_VAULTS = "app.state.recently_opened_vaults",
PREFERRED_LOCALE = "app.config.locale",
ENABLE_AUTO_LOCK = "app.config.enable_auto_lock",
AUTO_LOCK_AFTER = "app.config.auto_lock_after",
@@ -9,6 +10,7 @@ export enum Key {
interface StoredData {
[Key.LAST_VAULT_PATH]: string
+ [Key.RECENTLY_OPENED_VAULTS]: string[]
[Key.PREFERRED_LOCALE]: string
[Key.ENABLE_AUTO_LOCK]: boolean
[Key.AUTO_LOCK_AFTER]: number
@@ -27,7 +29,7 @@ export function useStorage(key: K) {
}
}, [key])
const setState2 = useCallback(
- (value: StoredData[K]) => {
+ (value: ((value: StoredData[K]) => StoredData[K]) | StoredData[K]) => {
set(key, value)
},
[key]
@@ -43,10 +45,16 @@ export function get(key: K): StoredData[K] | undefined {
} catch {}
}
-export function set(key: K, value: StoredData[K]) {
+export function set(
+ key: K,
+ value: ((value: StoredData[K]) => StoredData[K]) | StoredData[K]
+) {
try {
+ if (typeof value === "function") {
+ value = value(get(key)!)
+ }
localStorage.setItem(key, JSON.stringify(value))
- events.get(key).forEach(fn => fn(value))
+ events.get(key).forEach(fn => fn(value as StoredData[K]))
} catch (e) {
console.error(e)
}
@@ -64,4 +72,5 @@ const defaults: typeof set = (key, value) => {
}
}
defaults(Key.ENABLE_AUTO_LOCK, true)
-defaults(Key.AUTO_LOCK_AFTER, 120)
+defaults(Key.AUTO_LOCK_AFTER, 180)
+defaults(Key.RECENTLY_OPENED_VAULTS, [])
diff --git a/packages/web/src/vite-env.d.ts b/packages/web/src/vite-env.d.ts
index 11f02fe..8ac6702 100644
--- a/packages/web/src/vite-env.d.ts
+++ b/packages/web/src/vite-env.d.ts
@@ -1 +1,5 @@
///
+
+interface Array {
+ filter(predicate: BooleanConstructor): Exclude[]
+}
diff --git a/packages/web/vite.config.ts b/packages/web/vite.config.ts
index 44e99de..c2b19f5 100644
--- a/packages/web/vite.config.ts
+++ b/packages/web/vite.config.ts
@@ -1,11 +1,12 @@
import { defineConfig } from "vite"
import react from "@vitejs/plugin-react"
import yaml from "@rollup/plugin-yaml"
+import babel from "./scripts/vite-babel"
// https://vitejs.dev/config/
export default defineConfig({
base: "./",
- plugins: [react(), yaml()],
+ plugins: [babel(), react(), yaml()],
define: {
global: "globalThis",
"process.browser": "true",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5dcf2ac..80000c9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,20 +8,20 @@ importers:
'@types/chai-as-promised': ^7.1.4
'@types/fs-extra': ^9.0.13
'@types/mocha': github:whitecolor/mocha-types#da22474cf43f48a56c86f8c23a5a0ea36e295768
- '@types/node': ^16.11.9
+ '@types/node': ^17.0.6
'@types/sinon': ^10.0.6
- '@types/sinon-chai': ^3.2.6
+ '@types/sinon-chai': ^3.2.8
'@types/wicg-file-system-access': ^2020.9.4
- '@typescript-eslint/eslint-plugin': 5.7.0
- '@typescript-eslint/parser': 5.7.0
+ '@typescript-eslint/eslint-plugin': 5.8.1
+ '@typescript-eslint/parser': 5.8.1
chai: ^4.3.4
chai-as-promised: ^7.1.1
chalk: ^4.1.2
- eslint: 8.5.0
+ eslint: 8.6.0
eslint-config-prettier: 8.3.0
eslint-import-resolver-typescript: 2.5.0
eslint-plugin-import: 2.25.3
- eslint-plugin-react: 7.27.1
+ eslint-plugin-react: 7.28.0
eslint-plugin-react-hooks: 4.3.0
fs-extra: ^10.0.0
marked: ^4.0.8
@@ -30,7 +30,7 @@ importers:
prettier: ^2.5.1
react: ^17.0.2
react-dom: ^17.0.2
- sass: ^1.45.0
+ sass: ^1.45.2
sinon: ^12.0.1
sinon-chai: ^3.7.0
ts-node: ^10.4.0
@@ -42,21 +42,21 @@ importers:
'@types/chai-as-promised': 7.1.4
'@types/fs-extra': 9.0.13
'@types/mocha': github.com/whitecolor/mocha-types/da22474cf43f48a56c86f8c23a5a0ea36e295768
- '@types/node': 16.11.9
+ '@types/node': 17.0.6
'@types/sinon': 10.0.6
- '@types/sinon-chai': 3.2.6
+ '@types/sinon-chai': 3.2.8
'@types/wicg-file-system-access': 2020.9.4
- '@typescript-eslint/eslint-plugin': 5.7.0_a6f6159640504abdd3de077f8bcadb33
- '@typescript-eslint/parser': 5.7.0_eslint@8.5.0+typescript@4.5.4
+ '@typescript-eslint/eslint-plugin': 5.8.1_13039593e64cd539d0b4c5c2da390958
+ '@typescript-eslint/parser': 5.8.1_eslint@8.6.0+typescript@4.5.4
chai: 4.3.4
chai-as-promised: 7.1.1_chai@4.3.4
chalk: 4.1.2
- eslint: 8.5.0
- eslint-config-prettier: 8.3.0_eslint@8.5.0
- eslint-import-resolver-typescript: 2.5.0_f385d671d5f1c72a868db745a891bc1f
- eslint-plugin-import: 2.25.3_eslint@8.5.0
- eslint-plugin-react: 7.27.1_eslint@8.5.0
- eslint-plugin-react-hooks: 4.3.0_eslint@8.5.0
+ eslint: 8.6.0
+ eslint-config-prettier: 8.3.0_eslint@8.6.0
+ eslint-import-resolver-typescript: 2.5.0_b54597effeb7d09a84a334cc3c3dadae
+ eslint-plugin-import: 2.25.3_eslint@8.6.0
+ eslint-plugin-react: 7.28.0_eslint@8.6.0
+ eslint-plugin-react-hooks: 4.3.0_eslint@8.6.0
fs-extra: 10.0.0
marked: 4.0.8
mocha: 9.1.3
@@ -64,10 +64,10 @@ importers:
prettier: 2.5.1
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
- sass: 1.45.0
+ sass: 1.45.2
sinon: 12.0.1
sinon-chai: 3.7.0_chai@4.3.4+sinon@12.0.1
- ts-node: 10.4.0_6cc1060505bd4c6ac58c4b67188c6af9
+ ts-node: 10.4.0_646584a8d620b4d6f5eb4525e8655565
tsconfig-paths: 3.12.0
tslib: 2.3.1
typescript: 4.5.4
@@ -103,18 +103,23 @@ importers:
packages/web:
specifiers:
+ '@babel/core': ^7.16.7
+ '@emotion/babel-plugin': ^11.7.2
'@emotion/css': ^11.7.1
'@emotion/react': ^11.7.1
'@emotion/styled': ^11.6.0
'@rollup/plugin-yaml': ^3.1.0
+ '@types/babel__core': ^7.1.18
'@types/react': ^17.0.37
'@types/react-dom': ^17.0.11
'@vitejs/plugin-react': ^1.1.3
buffer: ^6.0.3
+ concurrently: ^6.5.1
electron: ^16.0.5
electron-builder: ^22.14.5
esbuild: ^0.14.5
js-yaml: ^4.1.0
+ lodash: ^4.17.21
opvault.js: '*'
path-browserify: ^1.0.1
react: ^17.0.2
@@ -124,25 +129,31 @@ importers:
sass: ^1.45.0
typescript: ^4.5.4
vite: ^2.7.3
- devDependencies:
- '@emotion/css': 11.7.1
- '@emotion/react': 11.7.1_cfedea9b3ed0faf0dded75c187406c5e
- '@emotion/styled': 11.6.0_f08cba2053577b4854d3e19df4a0b904
- '@rollup/plugin-yaml': 3.1.0
- '@types/react': 17.0.37
- '@types/react-dom': 17.0.11
- '@vitejs/plugin-react': 1.1.3
+ dependencies:
+ '@emotion/css': 11.7.1_@babel+core@7.16.7
+ '@emotion/react': 11.7.1_3627eec4441387a0f7e4646204b78d89
+ '@emotion/styled': 11.6.0_9a6cf50b6d3b112e53e6e562c396e2af
buffer: 6.0.3
- electron: 16.0.5
- electron-builder: 22.14.5
- esbuild: 0.14.5
- js-yaml: 4.1.0
- opvault.js: link:../opvault.js
path-browserify: 1.0.1
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
react-icons: 4.3.1_react@17.0.2
react-idle-timer: 4.6.4_react-dom@17.0.2+react@17.0.2
+ devDependencies:
+ '@babel/core': 7.16.7
+ '@emotion/babel-plugin': 11.7.2_@babel+core@7.16.7
+ '@rollup/plugin-yaml': 3.1.0
+ '@types/babel__core': 7.1.18
+ '@types/react': 17.0.37
+ '@types/react-dom': 17.0.11
+ '@vitejs/plugin-react': 1.1.3
+ concurrently: 6.5.1
+ electron: 16.0.5
+ electron-builder: 22.14.5
+ esbuild: 0.14.5
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+ opvault.js: link:../opvault.js
sass: 1.45.0
typescript: 4.5.4
vite: 2.7.3_sass@1.45.0
@@ -156,38 +167,30 @@ packages:
resolution: {integrity: sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==}
dev: true
- /@babel/code-frame/7.14.5:
- resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==}
+ /@babel/code-frame/7.16.7:
+ resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/highlight': 7.14.5
- dev: true
-
- /@babel/code-frame/7.16.0:
- resolution: {integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/highlight': 7.16.0
- dev: true
+ '@babel/highlight': 7.16.7
/@babel/compat-data/7.16.4:
resolution: {integrity: sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==}
engines: {node: '>=6.9.0'}
dev: true
- /@babel/core/7.16.0:
- resolution: {integrity: sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==}
+ /@babel/core/7.16.7:
+ resolution: {integrity: sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.16.0
- '@babel/generator': 7.16.0
- '@babel/helper-compilation-targets': 7.16.3_@babel+core@7.16.0
- '@babel/helper-module-transforms': 7.16.0
- '@babel/helpers': 7.16.3
- '@babel/parser': 7.16.4
- '@babel/template': 7.16.0
- '@babel/traverse': 7.16.3
- '@babel/types': 7.16.0
+ '@babel/code-frame': 7.16.7
+ '@babel/generator': 7.16.7
+ '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.16.7
+ '@babel/helper-module-transforms': 7.16.7
+ '@babel/helpers': 7.16.7
+ '@babel/parser': 7.16.7
+ '@babel/template': 7.16.7
+ '@babel/traverse': 7.16.7
+ '@babel/types': 7.16.7
convert-source-map: 1.8.0
debug: 4.3.2
gensync: 1.0.0-beta.2
@@ -198,11 +201,11 @@ packages:
- supports-color
dev: true
- /@babel/generator/7.16.0:
- resolution: {integrity: sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==}
+ /@babel/generator/7.16.7:
+ resolution: {integrity: sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.16.0
+ '@babel/types': 7.16.7
jsesc: 2.5.2
source-map: 0.5.7
dev: true
@@ -211,116 +214,97 @@ packages:
resolution: {integrity: sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.16.0
+ '@babel/types': 7.16.7
dev: true
- /@babel/helper-compilation-targets/7.16.3_@babel+core@7.16.0:
- resolution: {integrity: sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==}
+ /@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7:
+ resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
'@babel/compat-data': 7.16.4
- '@babel/core': 7.16.0
- '@babel/helper-validator-option': 7.14.5
+ '@babel/core': 7.16.7
+ '@babel/helper-validator-option': 7.16.7
browserslist: 4.18.1
semver: 6.3.0
dev: true
- /@babel/helper-function-name/7.16.0:
- resolution: {integrity: sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==}
+ /@babel/helper-environment-visitor/7.16.7:
+ resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-get-function-arity': 7.16.0
- '@babel/template': 7.16.0
- '@babel/types': 7.16.0
+ '@babel/types': 7.16.7
dev: true
- /@babel/helper-get-function-arity/7.16.0:
- resolution: {integrity: sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==}
+ /@babel/helper-function-name/7.16.7:
+ resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.16.0
+ '@babel/helper-get-function-arity': 7.16.7
+ '@babel/template': 7.16.7
+ '@babel/types': 7.16.7
dev: true
- /@babel/helper-hoist-variables/7.16.0:
- resolution: {integrity: sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==}
+ /@babel/helper-get-function-arity/7.16.7:
+ resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.16.0
+ '@babel/types': 7.16.7
dev: true
- /@babel/helper-member-expression-to-functions/7.16.0:
- resolution: {integrity: sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==}
+ /@babel/helper-hoist-variables/7.16.7:
+ resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.16.0
+ '@babel/types': 7.16.7
dev: true
/@babel/helper-module-imports/7.16.0:
resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.16.0
- dev: true
+ '@babel/types': 7.16.7
- /@babel/helper-module-transforms/7.16.0:
- resolution: {integrity: sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==}
+ /@babel/helper-module-imports/7.16.7:
+ resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-module-imports': 7.16.0
- '@babel/helper-replace-supers': 7.16.0
- '@babel/helper-simple-access': 7.16.0
- '@babel/helper-split-export-declaration': 7.16.0
- '@babel/helper-validator-identifier': 7.15.7
- '@babel/template': 7.16.0
- '@babel/traverse': 7.16.3
- '@babel/types': 7.16.0
+ '@babel/types': 7.16.7
+ dev: true
+
+ /@babel/helper-module-transforms/7.16.7:
+ resolution: {integrity: sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-environment-visitor': 7.16.7
+ '@babel/helper-module-imports': 7.16.7
+ '@babel/helper-simple-access': 7.16.7
+ '@babel/helper-split-export-declaration': 7.16.7
+ '@babel/helper-validator-identifier': 7.16.7
+ '@babel/template': 7.16.7
+ '@babel/traverse': 7.16.7
+ '@babel/types': 7.16.7
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/helper-optimise-call-expression/7.16.0:
- resolution: {integrity: sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.16.0
- dev: true
-
/@babel/helper-plugin-utils/7.14.5:
resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-replace-supers/7.16.0:
- resolution: {integrity: sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==}
+ /@babel/helper-simple-access/7.16.7:
+ resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-member-expression-to-functions': 7.16.0
- '@babel/helper-optimise-call-expression': 7.16.0
- '@babel/traverse': 7.16.3
- '@babel/types': 7.16.0
- transitivePeerDependencies:
- - supports-color
+ '@babel/types': 7.16.7
dev: true
- /@babel/helper-simple-access/7.16.0:
- resolution: {integrity: sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==}
+ /@babel/helper-split-export-declaration/7.16.7:
+ resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.16.0
- dev: true
-
- /@babel/helper-split-export-declaration/7.16.0:
- resolution: {integrity: sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.16.0
- dev: true
-
- /@babel/helper-validator-identifier/7.14.5:
- resolution: {integrity: sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==}
- engines: {node: '>=6.9.0'}
+ '@babel/types': 7.16.7
dev: true
/@babel/helper-validator-identifier/7.15.7:
@@ -328,39 +312,33 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helper-validator-option/7.14.5:
- resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==}
+ /@babel/helper-validator-identifier/7.16.7:
+ resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-option/7.16.7:
+ resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==}
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helpers/7.16.3:
- resolution: {integrity: sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==}
+ /@babel/helpers/7.16.7:
+ resolution: {integrity: sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/template': 7.16.0
- '@babel/traverse': 7.16.3
- '@babel/types': 7.16.0
+ '@babel/template': 7.16.7
+ '@babel/traverse': 7.16.7
+ '@babel/types': 7.16.7
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/highlight/7.14.5:
- resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==}
+ /@babel/highlight/7.16.7:
+ resolution: {integrity: sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.14.5
+ '@babel/helper-validator-identifier': 7.16.7
chalk: 2.4.2
js-tokens: 4.0.0
- dev: true
-
- /@babel/highlight/7.16.0:
- resolution: {integrity: sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-validator-identifier': 7.15.7
- chalk: 2.4.2
- js-tokens: 4.0.0
- dev: true
/@babel/parser/7.16.4:
resolution: {integrity: sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==}
@@ -368,66 +346,62 @@ packages:
hasBin: true
dev: true
- /@babel/plugin-syntax-jsx/7.16.0:
+ /@babel/parser/7.16.7:
+ resolution: {integrity: sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dev: true
+
+ /@babel/plugin-syntax-jsx/7.16.0_@babel+core@7.16.7:
resolution: {integrity: sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
+ '@babel/core': 7.16.7
'@babel/helper-plugin-utils': 7.14.5
- dev: true
- /@babel/plugin-syntax-jsx/7.16.0_@babel+core@7.16.0:
- resolution: {integrity: sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.16.0
- '@babel/helper-plugin-utils': 7.14.5
- dev: true
-
- /@babel/plugin-transform-react-jsx-development/7.16.0_@babel+core@7.16.0:
+ /@babel/plugin-transform-react-jsx-development/7.16.0_@babel+core@7.16.7:
resolution: {integrity: sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.16.0
- '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0
+ '@babel/core': 7.16.7
+ '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.7
dev: true
- /@babel/plugin-transform-react-jsx-self/7.16.0_@babel+core@7.16.0:
+ /@babel/plugin-transform-react-jsx-self/7.16.0_@babel+core@7.16.7:
resolution: {integrity: sha512-97yCFY+2GvniqOThOSjPor8xUoDiQ0STVWAQMl3pjhJoFVe5DuXDLZCRSZxu9clx+oRCbTiXGgKEG/Yoyo6Y+w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.16.0
+ '@babel/core': 7.16.7
'@babel/helper-plugin-utils': 7.14.5
dev: true
- /@babel/plugin-transform-react-jsx-source/7.16.0_@babel+core@7.16.0:
+ /@babel/plugin-transform-react-jsx-source/7.16.0_@babel+core@7.16.7:
resolution: {integrity: sha512-8yvbGGrHOeb/oyPc9tzNoe9/lmIjz3HLa9Nc5dMGDyNpGjfFrk8D2KdEq9NRkftZzeoQEW6yPQ29TMZtrLiUUA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.16.0
+ '@babel/core': 7.16.7
'@babel/helper-plugin-utils': 7.14.5
dev: true
- /@babel/plugin-transform-react-jsx/7.16.0_@babel+core@7.16.0:
+ /@babel/plugin-transform-react-jsx/7.16.0_@babel+core@7.16.7:
resolution: {integrity: sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.16.0
+ '@babel/core': 7.16.7
'@babel/helper-annotate-as-pure': 7.16.0
'@babel/helper-module-imports': 7.16.0
'@babel/helper-plugin-utils': 7.14.5
- '@babel/plugin-syntax-jsx': 7.16.0_@babel+core@7.16.0
+ '@babel/plugin-syntax-jsx': 7.16.0_@babel+core@7.16.7
'@babel/types': 7.16.0
dev: true
@@ -436,28 +410,28 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.13.7
- dev: true
- /@babel/template/7.16.0:
- resolution: {integrity: sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==}
+ /@babel/template/7.16.7:
+ resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.16.0
- '@babel/parser': 7.16.4
- '@babel/types': 7.16.0
+ '@babel/code-frame': 7.16.7
+ '@babel/parser': 7.16.7
+ '@babel/types': 7.16.7
dev: true
- /@babel/traverse/7.16.3:
- resolution: {integrity: sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==}
+ /@babel/traverse/7.16.7:
+ resolution: {integrity: sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.16.0
- '@babel/generator': 7.16.0
- '@babel/helper-function-name': 7.16.0
- '@babel/helper-hoist-variables': 7.16.0
- '@babel/helper-split-export-declaration': 7.16.0
- '@babel/parser': 7.16.4
- '@babel/types': 7.16.0
+ '@babel/code-frame': 7.16.7
+ '@babel/generator': 7.16.7
+ '@babel/helper-environment-visitor': 7.16.7
+ '@babel/helper-function-name': 7.16.7
+ '@babel/helper-hoist-variables': 7.16.7
+ '@babel/helper-split-export-declaration': 7.16.7
+ '@babel/parser': 7.16.7
+ '@babel/types': 7.16.7
debug: 4.3.2
globals: 11.12.0
transitivePeerDependencies:
@@ -472,6 +446,13 @@ packages:
to-fast-properties: 2.0.0
dev: true
+ /@babel/types/7.16.7:
+ resolution: {integrity: sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.16.7
+ to-fast-properties: 2.0.0
+
/@cspotcode/source-map-consumer/0.8.0:
resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==}
engines: {node: '>= 12'}
@@ -523,32 +504,14 @@ packages:
- supports-color
dev: true
- /@emotion/babel-plugin/11.3.0:
- resolution: {integrity: sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA==}
+ /@emotion/babel-plugin/11.7.2_@babel+core@7.16.7:
+ resolution: {integrity: sha512-6mGSCWi9UzXut/ZAN6lGFu33wGR3SJisNl3c0tvlmb8XChH1b2SUvxvnOh7hvLpqyRdHHU9AiazV3Cwbk5SXKQ==}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
+ '@babel/core': 7.16.7
'@babel/helper-module-imports': 7.16.0
- '@babel/plugin-syntax-jsx': 7.16.0
- '@babel/runtime': 7.15.4
- '@emotion/hash': 0.8.0
- '@emotion/memoize': 0.7.5
- '@emotion/serialize': 1.0.2
- babel-plugin-macros: 2.8.0
- convert-source-map: 1.8.0
- escape-string-regexp: 4.0.0
- find-root: 1.1.0
- source-map: 0.5.7
- stylis: 4.0.10
- dev: true
-
- /@emotion/babel-plugin/11.7.1:
- resolution: {integrity: sha512-K3/6Y+J/sIAjplf3uIteWLhPuOyuMNnE+iyYnTF/m294vc6IL90kTHp7y8ldZYbpKlP17rpOWDKM9DvTcrOmNQ==}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/helper-module-imports': 7.16.0
- '@babel/plugin-syntax-jsx': 7.16.0
+ '@babel/plugin-syntax-jsx': 7.16.0_@babel+core@7.16.7
'@babel/runtime': 7.15.4
'@emotion/hash': 0.8.0
'@emotion/memoize': 0.7.5
@@ -559,7 +522,6 @@ packages:
find-root: 1.1.0
source-map: 0.5.7
stylis: 4.0.13
- dev: true
/@emotion/cache/11.7.1:
resolution: {integrity: sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==}
@@ -569,9 +531,9 @@ packages:
'@emotion/utils': 1.0.0
'@emotion/weak-memoize': 0.2.5
stylis: 4.0.13
- dev: true
+ dev: false
- /@emotion/css/11.7.1:
+ /@emotion/css/11.7.1_@babel+core@7.16.7:
resolution: {integrity: sha512-RUUgPlMZunlc7SE5A6Hg+VWRzb2cU6O9xlV78KCFgcnl25s7Qz/20oQg71iKudpLqk7xj0vhbJlwcJJMT0BOZg==}
peerDependencies:
'@babel/core': ^7.0.0
@@ -579,28 +541,27 @@ packages:
'@babel/core':
optional: true
dependencies:
- '@emotion/babel-plugin': 11.7.1
+ '@babel/core': 7.16.7
+ '@emotion/babel-plugin': 11.7.2_@babel+core@7.16.7
'@emotion/cache': 11.7.1
'@emotion/serialize': 1.0.2
'@emotion/sheet': 1.1.0
'@emotion/utils': 1.0.0
- dev: true
+ dev: false
/@emotion/hash/0.8.0:
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
- dev: true
/@emotion/is-prop-valid/1.1.1:
resolution: {integrity: sha512-bW1Tos67CZkOURLc0OalnfxtSXQJMrAMV0jZTVGJUPSOd4qgjF3+tTD5CwJM13PHA8cltGW1WGbbvV9NpvUZPw==}
dependencies:
'@emotion/memoize': 0.7.5
- dev: true
+ dev: false
/@emotion/memoize/0.7.5:
resolution: {integrity: sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==}
- dev: true
- /@emotion/react/11.7.1_cfedea9b3ed0faf0dded75c187406c5e:
+ /@emotion/react/11.7.1_3627eec4441387a0f7e4646204b78d89:
resolution: {integrity: sha512-DV2Xe3yhkF1yT4uAUoJcYL1AmrnO5SVsdfvu+fBuS7IbByDeTVx9+wFmvx9Idzv7/78+9Mgx2Hcmr7Fex3tIyw==}
peerDependencies:
'@babel/core': ^7.0.0
@@ -612,6 +573,7 @@ packages:
'@types/react':
optional: true
dependencies:
+ '@babel/core': 7.16.7
'@babel/runtime': 7.15.4
'@emotion/cache': 11.7.1
'@emotion/serialize': 1.0.2
@@ -621,7 +583,7 @@ packages:
'@types/react': 17.0.37
hoist-non-react-statics: 3.3.2
react: 17.0.2
- dev: true
+ dev: false
/@emotion/serialize/1.0.2:
resolution: {integrity: sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==}
@@ -631,13 +593,12 @@ packages:
'@emotion/unitless': 0.7.5
'@emotion/utils': 1.0.0
csstype: 3.0.9
- dev: true
/@emotion/sheet/1.1.0:
resolution: {integrity: sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==}
- dev: true
+ dev: false
- /@emotion/styled/11.6.0_f08cba2053577b4854d3e19df4a0b904:
+ /@emotion/styled/11.6.0_9a6cf50b6d3b112e53e6e562c396e2af:
resolution: {integrity: sha512-mxVtVyIOTmCAkFbwIp+nCjTXJNgcz4VWkOYQro87jE2QBTydnkiYusMrRGFtzuruiGK4dDaNORk4gH049iiQuw==}
peerDependencies:
'@babel/core': ^7.0.0
@@ -650,27 +611,26 @@ packages:
'@types/react':
optional: true
dependencies:
+ '@babel/core': 7.16.7
'@babel/runtime': 7.15.4
- '@emotion/babel-plugin': 11.3.0
+ '@emotion/babel-plugin': 11.7.2_@babel+core@7.16.7
'@emotion/is-prop-valid': 1.1.1
- '@emotion/react': 11.7.1_cfedea9b3ed0faf0dded75c187406c5e
+ '@emotion/react': 11.7.1_3627eec4441387a0f7e4646204b78d89
'@emotion/serialize': 1.0.2
'@emotion/utils': 1.0.0
'@types/react': 17.0.37
react: 17.0.2
- dev: true
+ dev: false
/@emotion/unitless/0.7.5:
resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
- dev: true
/@emotion/utils/1.0.0:
resolution: {integrity: sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==}
- dev: true
/@emotion/weak-memoize/0.2.5:
resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==}
- dev: true
+ dev: false
/@eslint/eslintrc/1.0.5:
resolution: {integrity: sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==}
@@ -678,7 +638,7 @@ packages:
dependencies:
ajv: 6.12.6
debug: 4.3.2
- espree: 9.2.0
+ espree: 9.3.0
globals: 13.9.0
ignore: 4.0.6
import-fresh: 3.2.1
@@ -867,6 +827,35 @@ packages:
resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==}
dev: true
+ /@types/babel__core/7.1.18:
+ resolution: {integrity: sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==}
+ dependencies:
+ '@babel/parser': 7.16.4
+ '@babel/types': 7.16.0
+ '@types/babel__generator': 7.6.4
+ '@types/babel__template': 7.4.1
+ '@types/babel__traverse': 7.14.2
+ dev: true
+
+ /@types/babel__generator/7.6.4:
+ resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
+ dependencies:
+ '@babel/types': 7.16.7
+ dev: true
+
+ /@types/babel__template/7.4.1:
+ resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
+ dependencies:
+ '@babel/parser': 7.16.7
+ '@babel/types': 7.16.7
+ dev: true
+
+ /@types/babel__traverse/7.14.2:
+ resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==}
+ dependencies:
+ '@babel/types': 7.16.7
+ dev: true
+
/@types/chai-as-promised/7.1.4:
resolution: {integrity: sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==}
dependencies:
@@ -890,7 +879,7 @@ packages:
/@types/fs-extra/9.0.13:
resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
dependencies:
- '@types/node': 16.11.9
+ '@types/node': 17.0.6
dev: true
/@types/glob/7.2.0:
@@ -927,19 +916,22 @@ packages:
resolution: {integrity: sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==}
dev: true
+ /@types/node/17.0.6:
+ resolution: {integrity: sha512-+XBAjfZmmivILUzO0HwBJoYkAyyySSLg5KCGBDFLomJo0sV6szvVLAf4ANZZ0pfWzgEds5KmGLG9D5hfEqOhaA==}
+ dev: true
+
/@types/object-path/0.11.1:
resolution: {integrity: sha512-219LSCO9HPcoXcRTC6DbCs0FRhZgBnEMzf16RRqkT40WbkKx3mOeQuz3e2XqbfhOz/AHfbru0kzB1n1RCAsIIg==}
dev: true
/@types/parse-json/4.0.0:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
- dev: true
/@types/plist/3.0.2:
resolution: {integrity: sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==}
requiresBuild: true
dependencies:
- '@types/node': 16.11.9
+ '@types/node': 17.0.6
xmlbuilder: 15.1.1
dev: true
optional: true
@@ -970,8 +962,8 @@ packages:
resolution: {integrity: sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==}
dev: true
- /@types/sinon-chai/3.2.6:
- resolution: {integrity: sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==}
+ /@types/sinon-chai/3.2.8:
+ resolution: {integrity: sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==}
dependencies:
'@types/chai': 4.3.0
'@types/sinon': 10.0.6
@@ -1007,8 +999,8 @@ packages:
'@types/yargs-parser': 20.2.1
dev: true
- /@typescript-eslint/eslint-plugin/5.7.0_a6f6159640504abdd3de077f8bcadb33:
- resolution: {integrity: sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==}
+ /@typescript-eslint/eslint-plugin/5.8.1_13039593e64cd539d0b4c5c2da390958:
+ resolution: {integrity: sha512-wTZ5oEKrKj/8/366qTM366zqhIKAp6NCMweoRONtfuC07OAU9nVI2GZZdqQ1qD30WAAtcPdkH+npDwtRFdp4Rw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@@ -1018,11 +1010,11 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/experimental-utils': 5.7.0_eslint@8.5.0+typescript@4.5.4
- '@typescript-eslint/parser': 5.7.0_eslint@8.5.0+typescript@4.5.4
- '@typescript-eslint/scope-manager': 5.7.0
+ '@typescript-eslint/experimental-utils': 5.8.1_eslint@8.6.0+typescript@4.5.4
+ '@typescript-eslint/parser': 5.8.1_eslint@8.6.0+typescript@4.5.4
+ '@typescript-eslint/scope-manager': 5.8.1
debug: 4.3.2
- eslint: 8.5.0
+ eslint: 8.6.0
functional-red-black-tree: 1.0.1
ignore: 5.1.8
regexpp: 3.2.0
@@ -1033,26 +1025,26 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/experimental-utils/5.7.0_eslint@8.5.0+typescript@4.5.4:
- resolution: {integrity: sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==}
+ /@typescript-eslint/experimental-utils/5.8.1_eslint@8.6.0+typescript@4.5.4:
+ resolution: {integrity: sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
- eslint: '*'
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
'@types/json-schema': 7.0.9
- '@typescript-eslint/scope-manager': 5.7.0
- '@typescript-eslint/types': 5.7.0
- '@typescript-eslint/typescript-estree': 5.7.0_typescript@4.5.4
- eslint: 8.5.0
+ '@typescript-eslint/scope-manager': 5.8.1
+ '@typescript-eslint/types': 5.8.1
+ '@typescript-eslint/typescript-estree': 5.8.1_typescript@4.5.4
+ eslint: 8.6.0
eslint-scope: 5.1.1
- eslint-utils: 3.0.0_eslint@8.5.0
+ eslint-utils: 3.0.0_eslint@8.6.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/parser/5.7.0_eslint@8.5.0+typescript@4.5.4:
- resolution: {integrity: sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==}
+ /@typescript-eslint/parser/5.8.1_eslint@8.6.0+typescript@4.5.4:
+ resolution: {integrity: sha512-K1giKHAjHuyB421SoXMXFHHVI4NdNY603uKw92++D3qyxSeYvC10CBJ/GE5Thpo4WTUvu1mmJI2/FFkz38F2Gw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -1061,31 +1053,31 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 5.7.0
- '@typescript-eslint/types': 5.7.0
- '@typescript-eslint/typescript-estree': 5.7.0_typescript@4.5.4
+ '@typescript-eslint/scope-manager': 5.8.1
+ '@typescript-eslint/types': 5.8.1
+ '@typescript-eslint/typescript-estree': 5.8.1_typescript@4.5.4
debug: 4.3.2
- eslint: 8.5.0
+ eslint: 8.6.0
typescript: 4.5.4
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/scope-manager/5.7.0:
- resolution: {integrity: sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==}
+ /@typescript-eslint/scope-manager/5.8.1:
+ resolution: {integrity: sha512-DGxJkNyYruFH3NIZc3PwrzwOQAg7vvgsHsHCILOLvUpupgkwDZdNq/cXU3BjF4LNrCsVg0qxEyWasys5AiJ85Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- '@typescript-eslint/types': 5.7.0
- '@typescript-eslint/visitor-keys': 5.7.0
+ '@typescript-eslint/types': 5.8.1
+ '@typescript-eslint/visitor-keys': 5.8.1
dev: true
- /@typescript-eslint/types/5.7.0:
- resolution: {integrity: sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==}
+ /@typescript-eslint/types/5.8.1:
+ resolution: {integrity: sha512-L/FlWCCgnjKOLefdok90/pqInkomLnAcF9UAzNr+DSqMC3IffzumHTQTrINXhP1gVp9zlHiYYjvozVZDPleLcA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /@typescript-eslint/typescript-estree/5.7.0_typescript@4.5.4:
- resolution: {integrity: sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==}
+ /@typescript-eslint/typescript-estree/5.8.1_typescript@4.5.4:
+ resolution: {integrity: sha512-26lQ8l8tTbG7ri7xEcCFT9ijU5Fk+sx/KRRyyzCv7MQ+rZZlqiDPtMKWLC8P7o+dtCnby4c+OlxuX1tp8WfafQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
typescript: '*'
@@ -1093,8 +1085,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/types': 5.7.0
- '@typescript-eslint/visitor-keys': 5.7.0
+ '@typescript-eslint/types': 5.8.1
+ '@typescript-eslint/visitor-keys': 5.8.1
debug: 4.3.2
globby: 11.0.4
is-glob: 4.0.3
@@ -1105,11 +1097,11 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/visitor-keys/5.7.0:
- resolution: {integrity: sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==}
+ /@typescript-eslint/visitor-keys/5.8.1:
+ resolution: {integrity: sha512-SWgiWIwocK6NralrJarPZlWdr0hZnj5GXHIgfdm8hNkyKvpeQuFyLP6YjSIe9kf3YBIfU6OHSZLYkQ+smZwtNg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- '@typescript-eslint/types': 5.7.0
+ '@typescript-eslint/types': 5.8.1
eslint-visitor-keys: 3.1.0
dev: true
@@ -1121,11 +1113,11 @@ packages:
resolution: {integrity: sha512-xv8QujX/uR4ti8qpt0hMriM2bdpxX4jm4iU6GAZfCwHjh/ewkX/8DJgnmQpE0HSJmgz8dixyUnRJKi2Pf1nNoQ==}
engines: {node: '>=12.0.0'}
dependencies:
- '@babel/core': 7.16.0
- '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.0
- '@babel/plugin-transform-react-jsx-development': 7.16.0_@babel+core@7.16.0
- '@babel/plugin-transform-react-jsx-self': 7.16.0_@babel+core@7.16.0
- '@babel/plugin-transform-react-jsx-source': 7.16.0_@babel+core@7.16.0
+ '@babel/core': 7.16.7
+ '@babel/plugin-transform-react-jsx': 7.16.0_@babel+core@7.16.7
+ '@babel/plugin-transform-react-jsx-development': 7.16.0_@babel+core@7.16.7
+ '@babel/plugin-transform-react-jsx-self': 7.16.0_@babel+core@7.16.7
+ '@babel/plugin-transform-react-jsx-source': 7.16.0_@babel+core@7.16.7
'@rollup/pluginutils': 4.1.1
react-refresh: 0.11.0
resolve: 1.20.0
@@ -1138,12 +1130,12 @@ packages:
engines: {node: '>=8.0.0'}
dev: true
- /acorn-jsx/5.3.1_acorn@8.6.0:
+ /acorn-jsx/5.3.1_acorn@8.7.0:
resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- acorn: 8.6.0
+ acorn: 8.7.0
dev: true
/acorn-walk/8.2.0:
@@ -1157,8 +1149,8 @@ packages:
hasBin: true
dev: true
- /acorn/8.6.0:
- resolution: {integrity: sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==}
+ /acorn/8.7.0:
+ resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
@@ -1208,7 +1200,6 @@ packages:
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
- dev: true
/ansi-styles/4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -1358,7 +1349,6 @@ packages:
'@babel/runtime': 7.15.4
cosmiconfig: 6.0.0
resolve: 1.20.0
- dev: true
/balanced-match/1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1489,6 +1479,7 @@ packages:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
+ dev: false
/builder-util-runtime/8.9.1:
resolution: {integrity: sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==}
@@ -1545,7 +1536,6 @@ packages:
/callsites/3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- dev: true
/camelcase/6.2.0:
resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==}
@@ -1584,7 +1574,6 @@ packages:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
- dev: true
/chalk/4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1658,7 +1647,6 @@ packages:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
- dev: true
/color-convert/2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@@ -1669,7 +1657,6 @@ packages:
/color-name/1.1.3:
resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
- dev: true
/color-name/1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
@@ -1728,6 +1715,21 @@ packages:
typedarray: 0.0.6
dev: true
+ /concurrently/6.5.1:
+ resolution: {integrity: sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+ dependencies:
+ chalk: 4.1.2
+ date-fns: 2.28.0
+ lodash: 4.17.21
+ rxjs: 6.6.7
+ spawn-command: 0.0.2-1
+ supports-color: 8.1.1
+ tree-kill: 1.2.2
+ yargs: 16.2.0
+ dev: true
+
/config-chain/1.1.13:
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
dependencies:
@@ -1752,7 +1754,6 @@ packages:
resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
dependencies:
safe-buffer: 5.1.2
- dev: true
/core-js/3.18.3:
resolution: {integrity: sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==}
@@ -1779,7 +1780,6 @@ packages:
parse-json: 5.2.0
path-type: 4.0.0
yaml: 1.10.2
- dev: true
/crc/3.8.0:
resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==}
@@ -1816,6 +1816,10 @@ packages:
/csstype/3.0.9:
resolution: {integrity: sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==}
+
+ /date-fns/2.28.0:
+ resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==}
+ engines: {node: '>=0.11'}
dev: true
/dateformat/4.6.3:
@@ -2108,7 +2112,6 @@ packages:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
is-arrayish: 0.2.1
- dev: true
/es-abstract/1.19.1:
resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==}
@@ -2487,20 +2490,18 @@ packages:
/escape-string-regexp/1.0.5:
resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
engines: {node: '>=0.8.0'}
- dev: true
/escape-string-regexp/4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- dev: true
- /eslint-config-prettier/8.3.0_eslint@8.5.0:
+ /eslint-config-prettier/8.3.0_eslint@8.6.0:
resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.5.0
+ eslint: 8.6.0
dev: true
/eslint-import-resolver-node/0.3.6:
@@ -2510,7 +2511,7 @@ packages:
resolve: 1.20.0
dev: true
- /eslint-import-resolver-typescript/2.5.0_f385d671d5f1c72a868db745a891bc1f:
+ /eslint-import-resolver-typescript/2.5.0_b54597effeb7d09a84a334cc3c3dadae:
resolution: {integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==}
engines: {node: '>=4'}
peerDependencies:
@@ -2518,8 +2519,8 @@ packages:
eslint-plugin-import: '*'
dependencies:
debug: 4.3.2
- eslint: 8.5.0
- eslint-plugin-import: 2.25.3_eslint@8.5.0
+ eslint: 8.6.0
+ eslint-plugin-import: 2.25.3_eslint@8.6.0
glob: 7.1.7
is-glob: 4.0.1
resolve: 1.20.0
@@ -2537,7 +2538,7 @@ packages:
pkg-dir: 2.0.0
dev: true
- /eslint-plugin-import/2.25.3_eslint@8.5.0:
+ /eslint-plugin-import/2.25.3_eslint@8.6.0:
resolution: {integrity: sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==}
engines: {node: '>=4'}
peerDependencies:
@@ -2547,7 +2548,7 @@ packages:
array.prototype.flat: 1.2.5
debug: 2.6.9
doctrine: 2.1.0
- eslint: 8.5.0
+ eslint: 8.6.0
eslint-import-resolver-node: 0.3.6
eslint-module-utils: 2.7.1
has: 1.0.3
@@ -2559,17 +2560,17 @@ packages:
tsconfig-paths: 3.12.0
dev: true
- /eslint-plugin-react-hooks/4.3.0_eslint@8.5.0:
+ /eslint-plugin-react-hooks/4.3.0_eslint@8.6.0:
resolution: {integrity: sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
- eslint: 8.5.0
+ eslint: 8.6.0
dev: true
- /eslint-plugin-react/7.27.1_eslint@8.5.0:
- resolution: {integrity: sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==}
+ /eslint-plugin-react/7.28.0_eslint@8.6.0:
+ resolution: {integrity: sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
@@ -2577,7 +2578,7 @@ packages:
array-includes: 3.1.4
array.prototype.flatmap: 1.2.5
doctrine: 2.1.0
- eslint: 8.5.0
+ eslint: 8.6.0
estraverse: 5.3.0
jsx-ast-utils: 3.1.0
minimatch: 3.0.4
@@ -2607,13 +2608,13 @@ packages:
estraverse: 5.3.0
dev: true
- /eslint-utils/3.0.0_eslint@8.5.0:
+ /eslint-utils/3.0.0_eslint@8.6.0:
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
peerDependencies:
eslint: '>=5'
dependencies:
- eslint: 8.5.0
+ eslint: 8.6.0
eslint-visitor-keys: 2.0.0
dev: true
@@ -2627,8 +2628,8 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /eslint/8.5.0:
- resolution: {integrity: sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==}
+ /eslint/8.6.0:
+ resolution: {integrity: sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
@@ -2642,9 +2643,9 @@ packages:
enquirer: 2.3.6
escape-string-regexp: 4.0.0
eslint-scope: 7.1.0
- eslint-utils: 3.0.0_eslint@8.5.0
+ eslint-utils: 3.0.0_eslint@8.6.0
eslint-visitor-keys: 3.1.0
- espree: 9.2.0
+ espree: 9.3.0
esquery: 1.4.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -2674,12 +2675,12 @@ packages:
- supports-color
dev: true
- /espree/9.2.0:
- resolution: {integrity: sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==}
+ /espree/9.3.0:
+ resolution: {integrity: sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- acorn: 8.6.0
- acorn-jsx: 5.3.1_acorn@8.6.0
+ acorn: 8.7.0
+ acorn-jsx: 5.3.1_acorn@8.7.0
eslint-visitor-keys: 3.1.0
dev: true
@@ -2801,7 +2802,6 @@ packages:
/find-root/1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
- dev: true
/find-up/2.1.0:
resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=}
@@ -2890,7 +2890,6 @@ packages:
/function-bind/1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
- dev: true
/functional-red-black-tree/1.0.1:
resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=}
@@ -3083,7 +3082,6 @@ packages:
/has-flag/3.0.0:
resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
engines: {node: '>=4'}
- dev: true
/has-flag/4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -3112,7 +3110,6 @@ packages:
engines: {node: '>= 0.4.0'}
dependencies:
function-bind: 1.1.1
- dev: true
/he/1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
@@ -3128,7 +3125,7 @@ packages:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
dependencies:
react-is: 16.13.1
- dev: true
+ dev: false
/hosted-git-info/4.0.2:
resolution: {integrity: sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==}
@@ -3182,7 +3179,6 @@ packages:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
- dev: true
/import-lazy/2.1.0:
resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=}
@@ -3225,7 +3221,6 @@ packages:
/is-arrayish/0.2.1:
resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
- dev: true
/is-bigint/1.0.2:
resolution: {integrity: sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==}
@@ -3268,7 +3263,6 @@ packages:
resolution: {integrity: sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==}
dependencies:
has: 1.0.3
- dev: true
/is-core-module/2.8.0:
resolution: {integrity: sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==}
@@ -3441,7 +3435,6 @@ packages:
/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- dev: true
/js-yaml/3.14.0:
resolution: {integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==}
@@ -3470,7 +3463,6 @@ packages:
/json-parse-even-better-errors/2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: true
/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -3556,7 +3548,6 @@ packages:
/lines-and-columns/1.1.6:
resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=}
- dev: true
/locate-path/2.0.0:
resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=}
@@ -3614,7 +3605,6 @@ packages:
hasBin: true
dependencies:
js-tokens: 4.0.0
- dev: true
/lowercase-keys/1.0.1:
resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
@@ -3870,7 +3860,6 @@ packages:
/object-assign/4.1.1:
resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
engines: {node: '>=0.10.0'}
- dev: true
/object-inspect/1.11.0:
resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==}
@@ -4012,21 +4001,19 @@ packages:
engines: {node: '>=6'}
dependencies:
callsites: 3.1.0
- dev: true
/parse-json/5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
dependencies:
- '@babel/code-frame': 7.14.5
+ '@babel/code-frame': 7.16.7
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.1.6
- dev: true
/path-browserify/1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
- dev: true
+ dev: false
/path-exists/3.0.0:
resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=}
@@ -4050,7 +4037,6 @@ packages:
/path-parse/1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
/path-to-regexp/1.8.0:
resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==}
@@ -4061,7 +4047,6 @@ packages:
/path-type/4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
- dev: true
/pathval/1.1.1:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
@@ -4192,7 +4177,6 @@ packages:
object-assign: 4.1.1
react: 17.0.2
scheduler: 0.20.2
- dev: true
/react-icons/4.3.1_react@17.0.2:
resolution: {integrity: sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==}
@@ -4200,7 +4184,7 @@ packages:
react: '*'
dependencies:
react: 17.0.2
- dev: true
+ dev: false
/react-idle-timer/4.6.4_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-iq61dPud8fgj7l1KOJEY5pyiD532fW0KcIe/5XUe/0lB/4Vytoy4tZBlLGSiYodPzKxTL6HyKoOmG6tyzjD7OQ==}
@@ -4211,11 +4195,10 @@ packages:
dependencies:
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
- dev: true
+ dev: false
/react-is/16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
- dev: true
/react-refresh/0.11.0:
resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==}
@@ -4228,7 +4211,6 @@ packages:
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
- dev: true
/read-config-file/6.2.0:
resolution: {integrity: sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==}
@@ -4262,7 +4244,6 @@ packages:
/regenerator-runtime/0.13.7:
resolution: {integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==}
- dev: true
/regexp.prototype.flags/1.3.1:
resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==}
@@ -4299,14 +4280,12 @@ packages:
/resolve-from/4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
- dev: true
/resolve/1.20.0:
resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==}
dependencies:
is-core-module: 2.7.0
path-parse: 1.0.7
- dev: true
/resolve/2.0.0-next.3:
resolution: {integrity: sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==}
@@ -4398,9 +4377,15 @@ packages:
resolution: {integrity: sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==}
dev: true
+ /rxjs/6.6.7:
+ resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
+ engines: {npm: '>=2.0.0'}
+ dependencies:
+ tslib: 1.14.1
+ dev: true
+
/safe-buffer/5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
- dev: true
/safe-buffer/5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@@ -4426,6 +4411,16 @@ packages:
source-map-js: 0.6.2
dev: true
+ /sass/1.45.2:
+ resolution: {integrity: sha512-cKfs+F9AMPAFlbbTXNsbGvg3y58nV0mXA3E94jqaySKcC8Kq3/8983zVKQ0TLMUrHw7hF9Tnd3Bz9z5Xgtrl9g==}
+ engines: {node: '>=8.9.0'}
+ hasBin: true
+ dependencies:
+ chokidar: 3.5.2
+ immutable: 4.0.0
+ source-map-js: 0.6.2
+ dev: true
+
/sax/1.2.4:
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
dev: true
@@ -4435,7 +4430,6 @@ packages:
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
- dev: true
/semver-compare/1.0.0:
resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=}
@@ -4565,7 +4559,6 @@ packages:
/source-map/0.5.7:
resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=}
engines: {node: '>=0.10.0'}
- dev: true
/source-map/0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
@@ -4576,6 +4569,10 @@ packages:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
dev: true
+ /spawn-command/0.0.2-1:
+ resolution: {integrity: sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=}
+ dev: true
+
/sprintf-js/1.0.3:
resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=}
dev: true
@@ -4673,13 +4670,8 @@ packages:
engines: {node: '>=8'}
dev: true
- /stylis/4.0.10:
- resolution: {integrity: sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==}
- dev: true
-
/stylis/4.0.13:
resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==}
- dev: true
/sumchecker/3.0.1:
resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
@@ -4695,7 +4687,6 @@ packages:
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
- dev: true
/supports-color/7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
@@ -4752,7 +4743,6 @@ packages:
/to-fast-properties/2.0.0:
resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
engines: {node: '>=4'}
- dev: true
/to-readable-stream/1.0.0:
resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==}
@@ -4771,6 +4761,11 @@ packages:
engines: {node: '>=0.4.0'}
dev: true
+ /tree-kill/1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+ dev: true
+
/truncate-utf8-bytes/1.0.2:
resolution: {integrity: sha1-QFkjkJWS1W94pYGENLC3hInKXys=}
dependencies:
@@ -4787,7 +4782,7 @@ packages:
typescript: 4.5.4
dev: true
- /ts-node/10.4.0_6cc1060505bd4c6ac58c4b67188c6af9:
+ /ts-node/10.4.0_646584a8d620b4d6f5eb4525e8655565:
resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==}
hasBin: true
peerDependencies:
@@ -4806,7 +4801,7 @@ packages:
'@tsconfig/node12': 1.0.9
'@tsconfig/node14': 1.0.1
'@tsconfig/node16': 1.0.2
- '@types/node': 16.11.9
+ '@types/node': 17.0.6
acorn: 8.5.0
acorn-walk: 8.2.0
arg: 4.1.3
@@ -5123,7 +5118,6 @@ packages:
/yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
- dev: true
/yargs-parser/20.2.4:
resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}