diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ff30c44 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.tabSize": 2 +} \ No newline at end of file diff --git a/assets/global.css b/assets/global.css new file mode 100644 index 0000000..ddfefb2 --- /dev/null +++ b/assets/global.css @@ -0,0 +1,55 @@ +* { + box-sizing: border-box; +} + +body { + margin: 0; +} + +h1, h2, h3, h4, h5, h6, p { + margin: 0; +} + +h2 { + font-size: 1.2em; + font-weight: inherit; +} + +button { + padding: 0; + border: none; + cursor: pointer; + background-color: transparent; +} + +img { + max-width: 100%; +} + +img, svg { + vertical-align: middle; +} + +select, input, textarea, form button { + display: block; + padding: .75em; + width: 100%; + border-radius: .5em; + border: 1px solid #eee; +} + +button { + color: inherit; +} + +button, input, textarea { + font: inherit; +} + +form button { + background-color: #eee; +} + +textarea { + resize: vertical; +} diff --git a/assets/icon.png b/assets/icon.png index cfd931b..e58becc 100644 Binary files a/assets/icon.png and b/assets/icon.png differ diff --git a/assets/icons.tsx b/assets/icons.tsx new file mode 100644 index 0000000..cae10b6 --- /dev/null +++ b/assets/icons.tsx @@ -0,0 +1,35 @@ +export function IconPaul() { + return ( + + ); +} + +export function IconRead() { + return ( + + ); +} + +export function IconBili() { + return ( + + ); +} + +export function IconBack() { + return ( + + ); +} + +export function IconSetting() { + return ( + + ); +} + +export function IconSad() { + return ( + + ); +} diff --git a/background/messages/read.ts b/background/messages/read.ts new file mode 100644 index 0000000..ad469fa --- /dev/null +++ b/background/messages/read.ts @@ -0,0 +1,26 @@ +import type { PlasmoMessaging } from "@plasmohq/messaging"; + +const handler: PlasmoMessaging.MessageHandler = async (req, res) => { + const { token, siteUrl } = await chrome.storage.local.get(["token", "siteUrl"]); + + if (req.body.action === "submitAddForm") { + const { values } = req.body; + const formData = new FormData(); + + Object.keys(values).forEach((item) => { + formData.append(item, String(values[item])); + }); + + const addReq = await fetch(`${siteUrl}/api/read/add`, { + method: "POST", + body: formData, + headers: { + "paul-token-code": token, + }, + }).then((res) => res.json()); + + res.send(addReq); + } +} + +export default handler; diff --git a/background/messages/test.ts b/background/messages/test.ts deleted file mode 100644 index 83cb0d5..0000000 --- a/background/messages/test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { PlasmoMessaging } from "@plasmohq/messaging" - -const handler: PlasmoMessaging.MessageHandler = async (req, res) => { - const message = await fetch('https://paul.ren/api/note').then((res) => res.json()); - - console.log(message); - - res.send({ - message - }) -} - -export default handler \ No newline at end of file diff --git a/components/ui/form/form.module.less b/components/ui/form/form.module.less new file mode 100644 index 0000000..3edbe3f --- /dev/null +++ b/components/ui/form/form.module.less @@ -0,0 +1,13 @@ +.form { + flex: 1; + gap: 1em; + display: flex; + flex-direction: column; + + label { + opacity: .6; + display: block; + text-align: left; + margin-bottom: .5em; + } +} diff --git a/components/ui/form/index.tsx b/components/ui/form/index.tsx new file mode 100644 index 0000000..209766c --- /dev/null +++ b/components/ui/form/index.tsx @@ -0,0 +1,17 @@ +import type { FormHTMLAttributes } from "react"; +import { clsn } from "~utils"; +import styles from "./form.module.less"; + +interface FormProps extends FormHTMLAttributes { + +} + +function Form({ children, className, ...props }: FormProps) { + return ( + + {children} + + ); +} + +export default Form; diff --git a/components/ui/message/index.tsx b/components/ui/message/index.tsx new file mode 100644 index 0000000..1f5f63c --- /dev/null +++ b/components/ui/message/index.tsx @@ -0,0 +1,44 @@ +import { useEffect, useState } from "react"; +import { createPortal } from "react-dom"; +import { type MessageItem, addFn, removeFn } from "./utils"; + +import styles from "./message.module.less"; + +function Message() { + const [message, setMessage] = useState(); + + useEffect(() => { + const fn = (nextMessage: MessageItem) => { + const key = `${Math.ceil(performance.now())}-${Math.round(Math.random() * 100)}`; + + setMessage({ ...nextMessage, key }); + + setTimeout(() => { + onClose(); + }, nextMessage.duration || 5000); + }; + + addFn(fn); + + return () => { + removeFn(fn); + }; + }, []); + + const onClose = () => { + setMessage(undefined); + } + + return createPortal(( + + {message && ( + + {message.content} + onClose()}>× + + )} + + ), document.body); +} + +export default Message; diff --git a/components/ui/message/message.module.less b/components/ui/message/message.module.less new file mode 100644 index 0000000..7bd3626 --- /dev/null +++ b/components/ui/message/message.module.less @@ -0,0 +1,34 @@ +.message { + left: 0; + right: 0; + bottom: 5em; + z-index: 2; + margin: 0 1em; + display: flex; + position: fixed; + align-items: flex-end; + flex-direction: column; +} + +.item { + color: #fff; + padding: 1em; + margin: 0 auto; + max-width: 50em; + overflow: hidden; + position: relative; + border-radius: .5em; + background-color: rgba(0, 0, 0, .6); + box-shadow: 0 0 5em rgba(0, 0, 0, .1); + + .content, .close { + vertical-align: middle; + } + + .close { + line-height: 1; + cursor: pointer; + font-size: 1.5em; + margin-left: 1em; + } +} diff --git a/components/ui/message/utils.ts b/components/ui/message/utils.ts new file mode 100644 index 0000000..e19317b --- /dev/null +++ b/components/ui/message/utils.ts @@ -0,0 +1,27 @@ +export interface MessageItem { + key?: string; + content: React.ReactNode; + duration?: number; +} + +type MessageFn = (Message: MessageItem) => void; + +const addMessageFn: MessageFn[] = []; + +export const add = (Message: MessageItem) => { + addMessageFn.forEach((item) => { + item(Message); + }); +} + +export const addFn = (fn: MessageFn) => { + return addMessageFn.push(fn) - 1; +} + +export const removeFn = (fn: MessageFn) => { + const index = addMessageFn.indexOf(fn); + + if (index > -1) { + addMessageFn.splice(index, 1); + } +} diff --git a/components/ui/placeholder/index.tsx b/components/ui/placeholder/index.tsx new file mode 100644 index 0000000..1258a16 --- /dev/null +++ b/components/ui/placeholder/index.tsx @@ -0,0 +1,28 @@ +import { IconSad } from "~assets/icons"; +import type { PropsWithChildren } from "react"; +import styles from "./placeholder.module.less"; + +interface PlaceholderProps extends PropsWithChildren { + className?: string; + show?: boolean; + value: string; +} + +function Placeholder({ className, show, value, children }: PlaceholderProps) { + if (show === undefined || show) { + return ( + + + {value} + + ); + } + + return ( + + {children} + + ); +} + +export default Placeholder; diff --git a/components/ui/placeholder/placeholder.module.less b/components/ui/placeholder/placeholder.module.less new file mode 100644 index 0000000..73d4689 --- /dev/null +++ b/components/ui/placeholder/placeholder.module.less @@ -0,0 +1,13 @@ +.placeholder { + margin: 2em 0; + text-align: center; + + svg { + width: 4em; + margin-bottom: 1em; + } + + p { + opacity: .6; + } +} diff --git a/contents/bili.ts b/contents/bili.ts new file mode 100644 index 0000000..0c4f92d --- /dev/null +++ b/contents/bili.ts @@ -0,0 +1,44 @@ +import type { PlasmoCSConfig } from "plasmo"; + +export const config: PlasmoCSConfig = { + matches: ["https://mall.bilibili.com/*"] +}; + +chrome.runtime.onMessage.addListener((req, sender, send) => { + if (req.type === "toolbox:getBiliToy") { + const item = document.querySelectorAll(".silde-item"); + + if (item.length) { + const project = document.querySelector(".tagC-ip .tagC-ip-con").innerText; + const made = document.querySelector(".tagC-ip .tagC-ip-con-brand").innerText; + + const projectExp = new RegExp(`\s?${project}\s?`); + const madeExp = new RegExp(`\s?${made}\s?`); + const name = document.querySelector(".title-text-wrap") + .innerText.replace(/\[\S+\]/, "") + .replace(projectExp, "") + .replace(madeExp, "") + .replaceAll(/\s?Q版手办\s?|\s?粘土人\s?/g, "") + .trim(); + + const images = []; + + item.forEach((item) => { + images.push( + item.style.backgroundImage.replace("url(\"", "").replace("\")", "").replace("//", "https://") + ); + }); + + send({ + name, + project, + made: document.querySelector(".tagC-ip .tagC-ip-con-brand").innerText, + sale: document.querySelector(".item-complex:nth-child(4) .item-complex-value").innerText.replace("-", "/"), + images, + }); + } + else { + send(false); + } + } +}); diff --git a/contents/read.ts b/contents/read.ts new file mode 100644 index 0000000..f32a112 --- /dev/null +++ b/contents/read.ts @@ -0,0 +1,91 @@ +const getAuthor = () => { + const metaAuthor = document.querySelector(`meta[name="author"]`); + const metaOgAuthor = document.querySelector(`meta[property="og:article:author"]`); + + if (metaAuthor) { + return metaAuthor.getAttribute("content"); + } + + if (metaOgAuthor) { + return metaOgAuthor.getAttribute("content"); + } + + return ""; +} + +const getImage = () => { + const metaOgImage = document.querySelector(`meta[property="og:image"]`); + + if (metaOgImage) { + return metaOgImage.getAttribute("content"); + } + + return ""; +} + +const getDesc = () => { + const articleFirstParagraph = document.querySelector("article p") || document.querySelector("p"); + const metaDescription = document.querySelector(`meta[name="description"]`); + const metaOgDescription = document.querySelector(`meta[property="og:description"]`); + + if (metaOgDescription) { + return metaOgDescription.getAttribute("content"); + } + + if (metaDescription) { + return metaDescription.getAttribute("content"); + } + + if (articleFirstParagraph) { + return articleFirstParagraph.innerText; + } + + return ""; +} + +const getSiteName = () => { + const title = document.title; + const metaSiteName = document.querySelector(`meta[property="og:site_name"]`); + + if (metaSiteName) { + return metaSiteName.getAttribute("content"); + } + + if (title.includes(" - ")) { + const start = title.lastIndexOf(" - ") + 3; + + return title.substring(start); + } + + if (title.includes(" | ")) { + const start = title.lastIndexOf(" | ") + 3; + + return title.substring(start); + } + + return ""; +} + +const getFrom = () => { + if (location.host === "mp.weixin.qq.com") { + return "wechat"; + } + + return "web"; +} + +chrome.runtime.onMessage.addListener((req, sender, send) => { + console.log(req); + + if (req.type === "toolbox:getInfo") { + send({ + title: document.title, + link: `${location.origin}${location.pathname}`, + desc: getDesc(), + from: getFrom(), + author: getAuthor(), + image: getImage(), + sitename: getSiteName(), + }); + } +}); diff --git a/hooks/useForm.ts b/hooks/useForm.ts new file mode 100644 index 0000000..de71f8f --- /dev/null +++ b/hooks/useForm.ts @@ -0,0 +1,95 @@ +import { useEffect, useRef, type FormEvent } from "react"; + +type Values = Record; + +interface Props { + initialValues?: Values; + onSubmit?: (values: Values) => void; +} + +type a = (values: Values) => void; + +interface UseFormReturns { + getValue: () => Values; + setValue: (name: string, value: string | number) => void; + setValues: (values: Values) => void; + bindInput: (name: string) => any; + onSubmit: (a: a) => (ev: FormEvent) => void; +} + +function useForm({ initialValues }: Props) { + const formRef = useRef(); + const inputs = useRef({}); + const values = useRef({ ...initialValues }); + const inst = useRef(); + + if (!inst.current) { + const getValue = () => { + return values.current; + } + + const setValue = (name, value) => { + console.log(inputs.current[name]); + + if (inputs.current[name]) { + values.current[name] = value; + inputs.current[name].value = value; + } + } + + const setValues = (values: Values) => { + Object.keys(values).forEach((key) => { + setValue(key, values[key]); + }); + } + + const bindInput = (name: string) => { + console.log('bindinput') + + return { + name, + id: name, + ref: (target) => { + console.log('ref', target); + + if (target) { + inputs.current[name] = target; + } + + return undefined; + }, + defaultValue: initialValues[name], + onChange: (ev) => { + values.current[ev.target.name] = ev.target.value; + }, + } + } + + const onSubmit = (fn) => (ev: SubmitEvent) => { + ev.preventDefault(); + fn(getValue()); + } + + inst.current = { + getValue, + setValue, + setValues, + bindInput, + onSubmit, + }; + } + + useEffect(() => { + console.log('form', formRef.current); + + // formRef.current.onsubmit = (ev: SubmitEvent) => { + // ev.preventDefault(); + // console.log(t.current?.getValue()); + // console.log(inputs); + // } + }, []); + + return inst.current; +} + +export default useForm; diff --git a/options/index.tsx b/options/index.tsx new file mode 100644 index 0000000..039c743 --- /dev/null +++ b/options/index.tsx @@ -0,0 +1,72 @@ +import { useState, type ChangeEvent, type FormEvent, useEffect } from "react"; +import Form from "~components/ui/form"; +import { IconPaul } from "~assets/icons"; +import Message from "~components/ui/message"; +import { add } from "~components/ui/message/utils"; +import "~assets/global.css"; +import styles from "./options.module.less"; + +function Options() { + const [state, setState] = useState({ + token: "", + siteUrl: "", + }); + + useEffect(() => { + chrome.storage.local.get(["token", "siteUrl"]).then((res) => { + setState((prevState) => ({ ...prevState, ...(res as any)})); + }); + }, []); + + const onChange = (ev: ChangeEvent) => { + const { name, value } = ev.target; + + if (!name) { + return; + } + + setState((prevState) => ({ + ...prevState, + [name]: value, + })); + } + + const onSubmit = (ev: FormEvent) => { + ev.preventDefault(); + + chrome.storage.local.set(state); + + add({ + content: "保存成功", + }); + } + + return ( + <> + + + + 小窝工具箱 设置面板 + + + + 后端通信 Token + + + + 后端 API 地址 + + + + 保存 + + + + > + ); +} + +export default Options; diff --git a/options/options.module.less b/options/options.module.less new file mode 100644 index 0000000..3e9bb65 --- /dev/null +++ b/options/options.module.less @@ -0,0 +1,17 @@ +.options { + padding: 0 1em; + max-width: 40em; + margin: 3em auto; + + .title { + display: flex; + align-items: center; + margin-bottom: 1.5em; + + svg { + width: 2em; + color: #28b9be; + margin-right: .5em; + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index 6e9c0a0..2e9a592 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { - "name": "give-blue-newt", - "displayName": "Give blue newt", + "name": "home-toolbox", + "displayName": "小窝工具箱", "version": "0.0.1", - "description": "A basic Plasmo extension.", - "author": "Plasmo Corp. ", + "description": "一个借助浏览器插件特性与小窝后端快速交互的方式", + "author": "Dreamer-Paul. ", "scripts": { "dev": "plasmo dev", "build": "plasmo build", @@ -11,7 +11,7 @@ }, "dependencies": { "@plasmohq/messaging": "^0.5.0", - "plasmo": "0.82.1", + "plasmo": "0.84.1", "react": "18.2.0", "react-dom": "18.2.0" }, @@ -21,10 +21,14 @@ "@types/node": "20.5.0", "@types/react": "18.2.20", "@types/react-dom": "18.2.7", + "less": "^4.2.0", "prettier": "3.0.2", "typescript": "5.1.6" }, "manifest": { + "permissions": [ + "tabs", "storage" + ], "host_permissions": [ "https://*/*" ] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0964d4..490c2b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,12 +1,16 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + dependencies: '@plasmohq/messaging': specifier: ^0.5.0 version: 0.5.0(react@18.2.0) plasmo: - specifier: 0.82.1 - version: 0.82.1(react-dom@18.2.0)(react@18.2.0) + specifier: 0.84.1 + version: 0.84.1(react-dom@18.2.0)(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -30,6 +34,9 @@ devDependencies: '@types/react-dom': specifier: 18.2.7 version: 18.2.7 + less: + specifier: ^4.2.0 + version: 4.2.0 prettier: specifier: 3.0.2 version: 3.0.2 @@ -483,11 +490,21 @@ packages: '@lezer/common': 0.15.12 dev: false - /@ljharb/through@2.3.9: - resolution: {integrity: sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==} + /@ljharb/through@2.3.11: + resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 dev: false + /@lmdb/lmdb-darwin-arm64@2.5.2: + resolution: {integrity: sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@lmdb/lmdb-darwin-arm64@2.7.11: resolution: {integrity: sha512-r6+vYq2vKzE+vgj/rNVRMwAevq0+ZR9IeMFIqcSga+wMtMdXQ27KqQ7uS99/yXASg29bos7yHP3yk4x6Iio0lw==} cpu: [arm64] @@ -496,6 +513,14 @@ packages: dev: false optional: true + /@lmdb/lmdb-darwin-x64@2.5.2: + resolution: {integrity: sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@lmdb/lmdb-darwin-x64@2.7.11: resolution: {integrity: sha512-jhj1aB4K8ycRL1HOQT5OtzlqOq70jxUQEWRN9Gqh3TIDN30dxXtiHi6EWF516tzw6v2+3QqhDMJh8O6DtTGG8Q==} cpu: [x64] @@ -504,6 +529,14 @@ packages: dev: false optional: true + /@lmdb/lmdb-linux-arm64@2.5.2: + resolution: {integrity: sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@lmdb/lmdb-linux-arm64@2.7.11: resolution: {integrity: sha512-7xGEfPPbmVJWcY2Nzqo11B9Nfxs+BAsiiaY/OcT4aaTDdykKeCjvKMQJA3KXCtZ1AtiC9ljyGLi+BfUwdulY5A==} cpu: [arm64] @@ -512,6 +545,14 @@ packages: dev: false optional: true + /@lmdb/lmdb-linux-arm@2.5.2: + resolution: {integrity: sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@lmdb/lmdb-linux-arm@2.7.11: resolution: {integrity: sha512-dHfLFVSrw/v5X5lkwp0Vl7+NFpEeEYKfMG2DpdFJnnG1RgHQZngZxCaBagFoaJGykRpd2DYF1AeuXBFrAUAXfw==} cpu: [arm] @@ -520,6 +561,14 @@ packages: dev: false optional: true + /@lmdb/lmdb-linux-x64@2.5.2: + resolution: {integrity: sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@lmdb/lmdb-linux-x64@2.7.11: resolution: {integrity: sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng==} cpu: [x64] @@ -528,6 +577,14 @@ packages: dev: false optional: true + /@lmdb/lmdb-win32-x64@2.5.2: + resolution: {integrity: sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@lmdb/lmdb-win32-x64@2.7.11: resolution: {integrity: sha512-BJwkHlSUgtB+Ei52Ai32M1AOMerSlzyIGA/KC4dAGL+GGwVMdwG8HGCOA2TxP3KjhbgDPMYkv7bt/NmOmRIFng==} cpu: [x64] @@ -628,6 +685,19 @@ packages: - '@parcel/core' dev: false + /@parcel/cache@2.8.3(@parcel/core@2.9.3): + resolution: {integrity: sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.9.3 + '@parcel/fs': 2.8.3(@parcel/core@2.9.3) + '@parcel/logger': 2.8.3 + '@parcel/utils': 2.8.3 + lmdb: 2.5.2 + dev: false + /@parcel/cache@2.9.3(@parcel/core@2.9.3): resolution: {integrity: sha512-Bj/H2uAJJSXtysG7E/x4EgTrE2hXmm7td/bc97K8M9N7+vQjxf7xb0ebgqe84ePVMkj4MVQSMEJkEucXVx4b0Q==} engines: {node: '>= 12.0.0'} @@ -641,6 +711,13 @@ packages: lmdb: 2.7.11 dev: false + /@parcel/codeframe@2.8.3: + resolution: {integrity: sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==} + engines: {node: '>= 12.0.0'} + dependencies: + chalk: 4.1.2 + dev: false + /@parcel/codeframe@2.9.3: resolution: {integrity: sha512-z7yTyD6h3dvduaFoHpNqur74/2yDWL++33rjQjIjCaXREBN6dKHoMGMizzo/i4vbiI1p9dDox2FIDEHCMQxqdA==} engines: {node: '>= 12.0.0'} @@ -735,6 +812,14 @@ packages: semver: 7.5.4 dev: false + /@parcel/diagnostic@2.8.3: + resolution: {integrity: sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@mischnic/json-sourcemap': 0.1.0 + nullthrows: 1.1.1 + dev: false + /@parcel/diagnostic@2.9.3: resolution: {integrity: sha512-6jxBdyB3D7gP4iE66ghUGntWt2v64E6EbD4AetZk+hNJpgudOOPsKTovcMi/i7I4V0qD7WXSF4tvkZUoac0jwA==} engines: {node: '>= 12.0.0'} @@ -743,16 +828,42 @@ packages: nullthrows: 1.1.1 dev: false + /@parcel/events@2.8.3: + resolution: {integrity: sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==} + engines: {node: '>= 12.0.0'} + dev: false + /@parcel/events@2.9.3: resolution: {integrity: sha512-K0Scx+Bx9f9p1vuShMzNwIgiaZUkxEnexaKYHYemJrM7pMAqxIuIqhnvwurRCsZOVLUJPDDNJ626cWTc5vIq+A==} engines: {node: '>= 12.0.0'} dev: false + /@parcel/fs-search@2.8.3: + resolution: {integrity: sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==} + engines: {node: '>= 12.0.0'} + dependencies: + detect-libc: 1.0.3 + dev: false + /@parcel/fs-search@2.9.3: resolution: {integrity: sha512-nsNz3bsOpwS+jphcd+XjZL3F3PDq9lik0O8HPm5f6LYkqKWT+u/kgQzA8OkAHCR3q96LGiHxUywHPEBc27vI4Q==} engines: {node: '>= 12.0.0'} dev: false + /@parcel/fs@2.8.3(@parcel/core@2.9.3): + resolution: {integrity: sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.9.3 + '@parcel/fs-search': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + '@parcel/watcher': 2.2.0 + '@parcel/workers': 2.8.3(@parcel/core@2.9.3) + dev: false + /@parcel/fs@2.9.3(@parcel/core@2.9.3): resolution: {integrity: sha512-/PrRKgCRw22G7rNPSpgN3Q+i2nIkZWuvIOAdMG4KWXC4XLp8C9jarNaWd5QEQ75amjhQSl3oUzABzkdCtkKrgg==} engines: {node: '>= 12.0.0'} @@ -774,6 +885,14 @@ packages: nullthrows: 1.1.1 dev: false + /@parcel/hash@2.8.3: + resolution: {integrity: sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==} + engines: {node: '>= 12.0.0'} + dependencies: + detect-libc: 1.0.3 + xxhash-wasm: 0.4.2 + dev: false + /@parcel/hash@2.9.3: resolution: {integrity: sha512-qlH5B85XLzVAeijgKPjm1gQu35LoRYX/8igsjnN8vOlbc3O8BYAUIutU58fbHbtE8MJPbxQQUw7tkTjeoujcQQ==} engines: {node: '>= 12.0.0'} @@ -781,6 +900,14 @@ packages: xxhash-wasm: 0.4.2 dev: false + /@parcel/logger@2.8.3: + resolution: {integrity: sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/diagnostic': 2.8.3 + '@parcel/events': 2.8.3 + dev: false + /@parcel/logger@2.9.3: resolution: {integrity: sha512-5FNBszcV6ilGFcijEOvoNVG6IUJGsnMiaEnGQs7Fvc1dktTjEddnoQbIYhcSZL63wEmzBZOgkT5yDMajJ/41jw==} engines: {node: '>= 12.0.0'} @@ -789,6 +916,13 @@ packages: '@parcel/events': 2.9.3 dev: false + /@parcel/markdown-ansi@2.8.3: + resolution: {integrity: sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==} + engines: {node: '>= 12.0.0'} + dependencies: + chalk: 4.1.2 + dev: false + /@parcel/markdown-ansi@2.9.3: resolution: {integrity: sha512-/Q4X8F2aN8UNjAJrQ5NfK2OmZf6shry9DqetUSEndQ0fHonk78WKt6LT0zSKEBEW/bB/bXk6mNMsCup6L8ibjQ==} engines: {node: '>= 12.0.0'} @@ -908,6 +1042,22 @@ packages: - '@swc/helpers' dev: false + /@parcel/package-manager@2.8.3(@parcel/core@2.9.3): + resolution: {integrity: sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.9.3) + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3(@parcel/core@2.9.3) + semver: 5.7.2 + dev: false + /@parcel/package-manager@2.9.3(@parcel/core@2.9.3): resolution: {integrity: sha512-NH6omcNTEupDmW4Lm1e4NUYBjdqkURxgZ4CNESESInHJe6tblVhNB8Rpr1ar7zDar7cly9ILr8P6N3Ei7bTEjg==} engines: {node: '>= 12.0.0'} @@ -987,6 +1137,15 @@ packages: - '@parcel/core' dev: false + /@parcel/plugin@2.8.3(@parcel/core@2.9.3): + resolution: {integrity: sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + transitivePeerDependencies: + - '@parcel/core' + dev: false + /@parcel/plugin@2.9.3(@parcel/core@2.9.3): resolution: {integrity: sha512-qN85Gqr2GMuxX1dT1mnuO9hOcvlEv1lrYrCxn7CJN2nUhbwcfG+LEvcrCzCOJ6XtIHm+ZBV9h9p7FfoPLvpw+g==} engines: {node: '>= 12.0.0'} @@ -1044,6 +1203,17 @@ packages: - '@parcel/core' dev: false + /@parcel/runtime-js@2.8.3(@parcel/core@2.9.3): + resolution: {integrity: sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} + dependencies: + '@parcel/plugin': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@parcel/core' + dev: false + /@parcel/runtime-js@2.9.3(@parcel/core@2.9.3): resolution: {integrity: sha512-EvIy+qXcKnB5qxHhe96zmJpSAViNVXHfQI5RSdZ2a7CPwORwhTI+zPNT9sb7xb/WwFw/WuTTgzT40b41DceU6Q==} engines: {node: '>= 12.0.0', parcel: ^2.9.3} @@ -1308,6 +1478,20 @@ packages: - '@parcel/core' dev: false + /@parcel/types@2.8.3(@parcel/core@2.9.3): + resolution: {integrity: sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==} + dependencies: + '@parcel/cache': 2.8.3(@parcel/core@2.9.3) + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3(@parcel/core@2.9.3) + '@parcel/package-manager': 2.8.3(@parcel/core@2.9.3) + '@parcel/source-map': 2.1.1 + '@parcel/workers': 2.8.3(@parcel/core@2.9.3) + utility-types: 3.10.0 + transitivePeerDependencies: + - '@parcel/core' + dev: false + /@parcel/types@2.9.3(@parcel/core@2.9.3): resolution: {integrity: sha512-NSNY8sYtRhvF1SqhnIGgGvJocyWt1K8Tnw5cVepm0g38ywtX6mwkBvMkmeehXkII4mSUn+frD9wGsydTunezvA==} dependencies: @@ -1322,6 +1506,19 @@ packages: - '@parcel/core' dev: false + /@parcel/utils@2.8.3: + resolution: {integrity: sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==} + engines: {node: '>= 12.0.0'} + dependencies: + '@parcel/codeframe': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/markdown-ansi': 2.8.3 + '@parcel/source-map': 2.1.1 + chalk: 4.1.2 + dev: false + /@parcel/utils@2.9.3: resolution: {integrity: sha512-cesanjtj/oLehW8Waq9JFPmAImhoiHX03ihc3JTWkrvJYSbD7wYKCDgPAM3JiRAqvh1LZ6P699uITrYWNoRLUg==} engines: {node: '>= 12.0.0'} @@ -1426,17 +1623,6 @@ packages: dev: false optional: true - /@parcel/watcher@2.1.0: - resolution: {integrity: sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==} - engines: {node: '>= 10.0.0'} - requiresBuild: true - dependencies: - is-glob: 4.0.3 - micromatch: 4.0.5 - node-addon-api: 3.2.1 - node-gyp-build: 4.6.0 - dev: false - /@parcel/watcher@2.2.0: resolution: {integrity: sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg==} engines: {node: '>= 10.0.0'} @@ -1458,6 +1644,21 @@ packages: '@parcel/watcher-win32-x64': 2.2.0 dev: false + /@parcel/workers@2.8.3(@parcel/core@2.9.3): + resolution: {integrity: sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@parcel/core': ^2.8.3 + dependencies: + '@parcel/core': 2.9.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3(@parcel/core@2.9.3) + '@parcel/utils': 2.8.3 + chrome-trace-event: 1.0.3 + nullthrows: 1.1.1 + dev: false + /@parcel/workers@2.9.3(@parcel/core@2.9.3): resolution: {integrity: sha512-zRrDuZJzTevrrwElYosFztgldhqW6G9q5zOeQXfVQFkkEJCNfg36ixeiofKRU8uu2x+j+T6216mhMNB6HiuY+w==} engines: {node: '>= 12.0.0'} @@ -1660,8 +1861,8 @@ packages: - '@parcel/core' dev: false - /@plasmohq/parcel-config@0.39.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-z7mtSJt+ta7r3nxCWkwZLrbi+5osSBJ9WVAfuDCVYnvHakfcE0BPQCF491r0/oFF7HCN6Ilm8Q6HPAiYcQnsbw==} + /@plasmohq/parcel-config@0.40.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-80zXQHVsIGlEqwbfIUpgiuIv049taaJNJ3aRYg6DT93F6Yc9C2JaJe75N6Qa4O5lLaEEG2PF52Ca9LiSghiuOQ==} dependencies: '@parcel/compressor-raw': 2.9.3(@parcel/core@2.9.3) '@parcel/config-default': 2.9.3(@parcel/core@2.9.3) @@ -1669,7 +1870,7 @@ packages: '@parcel/optimizer-data-url': 2.9.3(@parcel/core@2.9.3) '@parcel/reporter-bundle-buddy': 2.9.3(@parcel/core@2.9.3) '@parcel/resolver-default': 2.9.3(@parcel/core@2.9.3) - '@parcel/runtime-js': 2.9.3(@parcel/core@2.9.3) + '@parcel/runtime-js': 2.8.3(@parcel/core@2.9.3) '@parcel/runtime-service-worker': 2.9.3(@parcel/core@2.9.3) '@parcel/source-map': 2.1.1 '@parcel/transformer-babel': 2.9.3(@parcel/core@2.9.3) @@ -1688,14 +1889,14 @@ packages: '@plasmohq/parcel-compressor-utf8': 0.0.6(@parcel/core@2.9.3) '@plasmohq/parcel-namer-manifest': 0.3.12 '@plasmohq/parcel-optimizer-encapsulate': 0.0.7 - '@plasmohq/parcel-optimizer-es': 0.3.5 + '@plasmohq/parcel-optimizer-es': 0.4.0 '@plasmohq/parcel-packager': 0.6.14 '@plasmohq/parcel-resolver': 0.13.1 - '@plasmohq/parcel-resolver-post': 0.4.1 - '@plasmohq/parcel-runtime': 0.21.1 + '@plasmohq/parcel-resolver-post': 0.4.2 + '@plasmohq/parcel-runtime': 0.23.0 '@plasmohq/parcel-transformer-inject-env': 0.2.11 - '@plasmohq/parcel-transformer-inline-css': 0.3.8 - '@plasmohq/parcel-transformer-manifest': 0.17.7 + '@plasmohq/parcel-transformer-inline-css': 0.3.10 + '@plasmohq/parcel-transformer-manifest': 0.17.8 '@plasmohq/parcel-transformer-svelte': 0.5.2 '@plasmohq/parcel-transformer-vue': 0.5.0(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: @@ -1758,8 +1959,8 @@ packages: - whiskers dev: false - /@plasmohq/parcel-core@0.1.6: - resolution: {integrity: sha512-x6lbPIKHeTL8e1VdJ6J7lDlymPs1Yt0abDfe0y/UAdILG6ZH3zQIwdPE/D99cP9+DPfF9S0AbRKVoCIc9qAVwg==} + /@plasmohq/parcel-core@0.1.8: + resolution: {integrity: sha512-kMWuazvf925ZAn2yHzzrb4Zsje1titFmvi/C5cXrI0TH58eT7n6GUiRXiOYP4JgGDHs/pEygx3WPuyWVTNF2HQ==} engines: {parcel: '>= 2.7.0'} dependencies: '@parcel/cache': 2.9.3(@parcel/core@2.9.3) @@ -1775,7 +1976,7 @@ packages: '@parcel/source-map': 2.1.1 '@parcel/types': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 - '@parcel/watcher': 2.1.0 + '@parcel/watcher': 2.2.0 '@parcel/workers': 2.9.3(@parcel/core@2.9.3) abortcontroller-polyfill: 1.7.5 nullthrows: 1.1.1 @@ -1801,15 +2002,15 @@ packages: '@parcel/types': 2.9.3(@parcel/core@2.9.3) dev: false - /@plasmohq/parcel-optimizer-es@0.3.5: - resolution: {integrity: sha512-JrpFR/QCNp06ZkaDlN+ZoxkDWbTuqx4OPZl4tH6gO2OuqgLNBHIKK+wmrwTrTF9JGDhpHeJIS2gsWBWJGQo8Mg==} + /@plasmohq/parcel-optimizer-es@0.4.0: + resolution: {integrity: sha512-Iz1cTuw38wEbSQ36/dVKh5MyRA12/Ecrx90pqaIkoqA9ZSZuxuWWa7rPa3bVMFkzi28BpVHW1z9EnhVN4188kQ==} engines: {parcel: '>= 2.8.0'} dependencies: '@parcel/core': 2.9.3 '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.9.3 - '@swc/core': 1.3.66 + '@swc/core': 1.3.82 nullthrows: 1.1.1 transitivePeerDependencies: - '@swc/helpers' @@ -1826,8 +2027,8 @@ packages: nullthrows: 1.1.1 dev: false - /@plasmohq/parcel-resolver-post@0.4.1: - resolution: {integrity: sha512-oJrHEEY7Fb9wcZG6DIWd/j3L0yV+5zVL3wF28lKLhngzrGbprZApc0v9AUs9ogoWv1WFIrwKF9ObicnQLIyuZg==} + /@plasmohq/parcel-resolver-post@0.4.2: + resolution: {integrity: sha512-dbrwjUQEhKqKBEgVJjL5ls1p6bpQ3VlDXI5REoaSpwoPcB7TRAcUfTwV4oNGE4eTnw4ElF08JkyslYvKgxosAw==} engines: {parcel: '>= 2.7.0'} dependencies: '@parcel/core': 2.9.3 @@ -1835,8 +2036,8 @@ packages: '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) '@parcel/types': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 - tsup: 7.2.0(typescript@5.1.6) - typescript: 5.1.6 + tsup: 7.2.0(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - '@swc/core' - postcss @@ -1857,8 +2058,8 @@ packages: got: 13.0.0 dev: false - /@plasmohq/parcel-runtime@0.21.1: - resolution: {integrity: sha512-Y2O9ZUh2O+TTpT41COLX1LJ1lbqqSQd5jrkZVEAkdSeCRcVpjtqZf/pz3+mdKZpethvxM9O8uU8TIWPhzL3ihA==} + /@plasmohq/parcel-runtime@0.23.0: + resolution: {integrity: sha512-+ZqH9XksSbWPC6pnvjmvmykxh1SfyYkSKyOeNQSeHsPFo40fADUKOda8Hw/vm/g5p8GIlv5YSb2iYZzCWmKs1g==} engines: {parcel: '>= 2.7.0'} dependencies: '@parcel/core': 2.9.3 @@ -1875,19 +2076,19 @@ packages: '@parcel/types': 2.9.3(@parcel/core@2.9.3) dev: false - /@plasmohq/parcel-transformer-inline-css@0.3.8: - resolution: {integrity: sha512-a2DRyIL/cMP5qWni4EzGjhxhIxXSx/M7GsVZZUY/uPDbyWktupRZTfWrs0YCtBn+VCq2WuiHNyvkn30Kj7p/nw==} + /@plasmohq/parcel-transformer-inline-css@0.3.10: + resolution: {integrity: sha512-SN8r+pW3k0MOxGqBRA4FM+YkNrUL0wXjdmBD8JzzNDjdmHfNmPAfMnLwpsbjjJUuUIjnG6fJ7OAq31rxwoHFhA==} engines: {parcel: '>= 2.7.0'} dependencies: '@parcel/core': 2.9.3 '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 - browserslist: 4.21.9 - lightningcss: 1.21.1 + browserslist: 4.22.1 + lightningcss: 1.21.8 dev: false - /@plasmohq/parcel-transformer-manifest@0.17.7: - resolution: {integrity: sha512-lnszdDYmt7NwDetGhA0hNxn7RhsaOeks4qlEVyKYgbdf3wBeauEixs8I7pieKvZeYP7fmTyX8JQ15x3VSefkwQ==} + /@plasmohq/parcel-transformer-manifest@0.17.8: + resolution: {integrity: sha512-G6XISWddf900Q/4ABlFLBJcqvN1VTYF06NytTOMSDO4dOraxGhgZ0CyC990b+LJEa7nc5xf4xhHQxf3mkjALPQ==} engines: {parcel: '>= 2.7.0'} dependencies: '@mischnic/json-sourcemap': 0.1.0 @@ -1898,7 +2099,7 @@ packages: '@parcel/types': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 content-security-policy-parser: 0.4.1 - json-schema-to-ts: 2.9.1 + json-schema-to-ts: 2.9.2 nullthrows: 1.1.1 dev: false @@ -2141,15 +2342,6 @@ packages: svgo: 2.8.0 dev: false - /@swc/core-darwin-arm64@1.3.66: - resolution: {integrity: sha512-UijJsvuLy73vxeVYEy7urIHksXS+3BdvJ9s9AY+bRMSQW483NO7RLp8g4FdTyJbRaN0BH15SQnY0dcjQBkVuHw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@swc/core-darwin-arm64@1.3.78: resolution: {integrity: sha512-596KRua/d5Gx1buHKKchSyHuwoIL4S1BRD/wCvYNLNZ3xOzcuBBmXOjrDVigKi1ztNDeS07p30RO5UyYur0XAA==} engines: {node: '>=10'} @@ -2159,10 +2351,10 @@ packages: dev: false optional: true - /@swc/core-darwin-x64@1.3.66: - resolution: {integrity: sha512-xGsHKvViQnwTNLF30Y/5OqWdnN6RsiyUI8awZXfz1sHcXCEaLe+v+WLQ+/E8sgw0YUkYVHzzfV/sAN2CezJK5Q==} + /@swc/core-darwin-arm64@1.3.82: + resolution: {integrity: sha512-JfsyDW34gVKD3uE0OUpUqYvAD3yseEaicnFP6pB292THtLJb0IKBBnK50vV/RzEJtc1bR3g1kNfxo2PeurZTrA==} engines: {node: '>=10'} - cpu: [x64] + cpu: [arm64] os: [darwin] requiresBuild: true dev: false @@ -2177,11 +2369,11 @@ packages: dev: false optional: true - /@swc/core-linux-arm-gnueabihf@1.3.66: - resolution: {integrity: sha512-gNbLcSIV2pq90BkMSpzvK4xPXOl8GEF3YR4NaqF0CYSzQsVXXTTqMuX/r26xNYudBKzH0345S1MpoRk2qricnA==} + /@swc/core-darwin-x64@1.3.82: + resolution: {integrity: sha512-ogQWgNMq7qTpITjcP3dnzkFNj7bh6SwMr859GvtOTrE75H7L7jDWxESfH4f8foB/LGxBKiDNmxKhitCuAsZK4A==} engines: {node: '>=10'} - cpu: [arm] - os: [linux] + cpu: [x64] + os: [darwin] requiresBuild: true dev: false optional: true @@ -2195,10 +2387,10 @@ packages: dev: false optional: true - /@swc/core-linux-arm64-gnu@1.3.66: - resolution: {integrity: sha512-cJSQ0oplyWbJqy4rzVcnBYLAi6z1QT3QCcR7iAey0aAmCvfRBZJfXlyjggMjn4iosuadkauwCZR1xYNhBDRn7w==} + /@swc/core-linux-arm-gnueabihf@1.3.82: + resolution: {integrity: sha512-7TMXG1lXlNhD0kUiEqs+YlGV4irAdBa2quuy+XI3oJf2fBK6dQfEq4xBy65B3khrorzQS3O0oDGQ+cmdpHExHA==} engines: {node: '>=10'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: false @@ -2213,8 +2405,8 @@ packages: dev: false optional: true - /@swc/core-linux-arm64-musl@1.3.66: - resolution: {integrity: sha512-GDQZpcB9aGxG9PTA2shdIkoMZlGK5omJ8NR49uoBTtLBVYiGeXAwV0U1Uaw8kXEZj9i7wZDkvjzjSaNH3evRsg==} + /@swc/core-linux-arm64-gnu@1.3.82: + resolution: {integrity: sha512-26JkOujbzcItPAmIbD5vHJxQVy5ihcSu3YHTKwope1h28sApZdtE7S3e2G3gsZRTIdsCQkXUtAQeqHxGWWR3pw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2231,10 +2423,10 @@ packages: dev: false optional: true - /@swc/core-linux-x64-gnu@1.3.66: - resolution: {integrity: sha512-lg8E4O/Pd9KfK0lajdinVMuGME8dSv7V9arhEpmlfGE2eXSDCWqDn5Htk5QVBstt9lt1lsRhWHJ/YYc2eQY30Q==} + /@swc/core-linux-arm64-musl@1.3.82: + resolution: {integrity: sha512-8Izj9tuuMpoc3cqiPBRtwqpO1BZ/+sfZVsEhLxrbOFlcSb8LnKyMle1g3JMMUwI4EU75RGVIzZMn8A6GOKdJbA==} engines: {node: '>=10'} - cpu: [x64] + cpu: [arm64] os: [linux] requiresBuild: true dev: false @@ -2249,8 +2441,8 @@ packages: dev: false optional: true - /@swc/core-linux-x64-musl@1.3.66: - resolution: {integrity: sha512-lo8ZcAO/zL2pZWH+LZIyge8u2MklaeuT6+FpVVpBFktMVdYXbaVtzpvWbgRFBZHvL3SRDF+u8jxjtkXhvGUpTw==} + /@swc/core-linux-x64-gnu@1.3.82: + resolution: {integrity: sha512-0GSrIBScQwTaPv46T2qB7XnDYxndRCpwH4HMjh6FN+I+lfPUhTSJKW8AonqrqT1TbpFIgvzQs7EnTsD7AnSCow==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2267,11 +2459,11 @@ packages: dev: false optional: true - /@swc/core-win32-arm64-msvc@1.3.66: - resolution: {integrity: sha512-cQoVwBuJY5WkHbfpCOlndNwYr1ZThatRjQQvKy540NUIeAEk9Fa6ozlDBtU75UdaWKtUG6YQ/bWz+KTemheVxw==} + /@swc/core-linux-x64-musl@1.3.82: + resolution: {integrity: sha512-KJUnaaepDKNzrEbwz4jv0iC3/t9x0NSoe06fnkAlhh2+NFKWKKJhVCOBTrpds8n7eylBDIXUlK34XQafjVMUdg==} engines: {node: '>=10'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [linux] requiresBuild: true dev: false optional: true @@ -2285,10 +2477,10 @@ packages: dev: false optional: true - /@swc/core-win32-ia32-msvc@1.3.66: - resolution: {integrity: sha512-y/FrAIINK4UBeUQQknGlWXEyjo+MBvjF7WkUf2KP7sNr9EHHy8+dXohAGd5Anz0eJrqOM1ZXR/GEjxRp7bGQ1Q==} + /@swc/core-win32-arm64-msvc@1.3.82: + resolution: {integrity: sha512-TR3MHKhDYIyGyFcyl2d/p1ftceXcubAhX5wRSOdtOyr5+K/v3jbyCCqN7bbqO5o43wQVCwwR/drHleYyDZvg8Q==} engines: {node: '>=10'} - cpu: [ia32] + cpu: [arm64] os: [win32] requiresBuild: true dev: false @@ -2303,10 +2495,10 @@ packages: dev: false optional: true - /@swc/core-win32-x64-msvc@1.3.66: - resolution: {integrity: sha512-yI64ACzS14qFLrfyO12qW+f/UROTotzDeEbuyJAaPD2IZexoT1cICznI3sBmIfrSt33mVuW8eF5m3AG/NUImzw==} + /@swc/core-win32-ia32-msvc@1.3.82: + resolution: {integrity: sha512-ZX4HzVVt6hs84YUg70UvyBJnBOIspmQQM0iXSzBvOikk3zRoN7BnDwQH4GScvevCEBuou60+i4I6d5kHLOfh8Q==} engines: {node: '>=10'} - cpu: [x64] + cpu: [ia32] os: [win32] requiresBuild: true dev: false @@ -2321,27 +2513,14 @@ packages: dev: false optional: true - /@swc/core@1.3.66: - resolution: {integrity: sha512-Hpf91kH5ly7fHkWnApwryTQryT+TO4kMMPH3WyciUSQOWLE3UuQz1PtETHQQk7PZ/b1QF0qQurJrgfBr5bSKUA==} + /@swc/core-win32-x64-msvc@1.3.82: + resolution: {integrity: sha512-4mJMnex21kbQoaHeAmHnVwQN9/XAfPszJ6n9HI7SVH+aAHnbBIR0M59/b50/CJMjTj5niUGk7EwQ3nhVNOG32g==} engines: {node: '>=10'} + cpu: [x64] + os: [win32] requiresBuild: true - peerDependencies: - '@swc/helpers': ^0.5.0 - peerDependenciesMeta: - '@swc/helpers': - optional: true - optionalDependencies: - '@swc/core-darwin-arm64': 1.3.66 - '@swc/core-darwin-x64': 1.3.66 - '@swc/core-linux-arm-gnueabihf': 1.3.66 - '@swc/core-linux-arm64-gnu': 1.3.66 - '@swc/core-linux-arm64-musl': 1.3.66 - '@swc/core-linux-x64-gnu': 1.3.66 - '@swc/core-linux-x64-musl': 1.3.66 - '@swc/core-win32-arm64-msvc': 1.3.66 - '@swc/core-win32-ia32-msvc': 1.3.66 - '@swc/core-win32-x64-msvc': 1.3.66 dev: false + optional: true /@swc/core@1.3.78: resolution: {integrity: sha512-y6DQP571v7fbUUY7nz5G4lNIRGofuO48K5pGhD9VnuOCTuptfooCdi8wnigIrIhM/M4zQ53m/YCMDCbOtDgEww==} @@ -2365,12 +2544,40 @@ packages: '@swc/core-win32-x64-msvc': 1.3.78 dev: false + /@swc/core@1.3.82: + resolution: {integrity: sha512-jpC1a18HMH67018Ij2jh+hT7JBFu7ZKcQVfrZ8K6JuEY+kjXmbea07P9MbQUZbAe0FB+xi3CqEVCP73MebodJQ==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/types': 0.1.5 + optionalDependencies: + '@swc/core-darwin-arm64': 1.3.82 + '@swc/core-darwin-x64': 1.3.82 + '@swc/core-linux-arm-gnueabihf': 1.3.82 + '@swc/core-linux-arm64-gnu': 1.3.82 + '@swc/core-linux-arm64-musl': 1.3.82 + '@swc/core-linux-x64-gnu': 1.3.82 + '@swc/core-linux-x64-musl': 1.3.82 + '@swc/core-win32-arm64-msvc': 1.3.82 + '@swc/core-win32-ia32-msvc': 1.3.82 + '@swc/core-win32-x64-msvc': 1.3.82 + dev: false + /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: tslib: 2.6.2 dev: false + /@swc/types@0.1.5: + resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + dev: false + /@szmarczak/http-timer@5.0.1: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -2660,15 +2867,15 @@ packages: node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001522 - electron-to-chromium: 1.4.499 + caniuse-lite: 1.0.30001579 + electron-to-chromium: 1.4.643 node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: false /buffer@5.7.1: @@ -2718,18 +2925,19 @@ packages: responselike: 3.0.0 dev: false + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.2.0 + dev: false + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: false - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.2 - dev: false - /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -2738,12 +2946,8 @@ packages: /caniuse-lite@1.0.30001522: resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==} - /capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - upper-case-first: 2.0.2 + /caniuse-lite@1.0.30001579: + resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} dev: false /chalk@2.4.2: @@ -2767,21 +2971,8 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false - /change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - dependencies: - camel-case: 4.1.2 - capital-case: 1.0.4 - constant-case: 3.0.4 - dot-case: 3.0.4 - header-case: 2.0.4 - no-case: 3.0.4 - param-case: 3.0.4 - pascal-case: 3.1.2 - path-case: 3.0.4 - sentence-case: 3.0.4 - snake-case: 3.0.4 - tslib: 2.6.2 + /change-case@5.1.2: + resolution: {integrity: sha512-CAtbGEDulyjzs05RXy3uKcwqeztz/dMEuAc1Xu9NQBsbrhuGMneL0u9Dj5SoutLKBFYun8txxYIwhjtLNfUmCA==} dev: false /chardet@0.7.0: @@ -2904,14 +3095,6 @@ packages: proto-list: 1.2.4 dev: false - /constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - upper-case: 2.0.2 - dev: false - /content-security-policy-parser@0.4.1: resolution: {integrity: sha512-NNJS8XPnx3OKr/CUOSwDSJw+lWTrZMYnclLKj0Y9CYOfJNJTWLFGPg3u2hYgbXMXKVRkZR2fbyReNQ1mUff/Qg==} engines: {node: '>=8.0.0'} @@ -2924,7 +3107,6 @@ packages: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} dependencies: is-what: 3.14.1 - dev: false /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} @@ -3006,6 +3188,7 @@ packages: /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + requiresBuild: true peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -3013,7 +3196,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: false optional: true /debug@4.3.4: @@ -3055,6 +3237,15 @@ packages: engines: {node: '>=10'} dev: false + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -3105,13 +3296,6 @@ packages: domhandler: 4.3.1 dev: false - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: false - /dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} @@ -3134,6 +3318,10 @@ packages: /electron-to-chromium@1.4.499: resolution: {integrity: sha512-0NmjlYBLKVHva4GABWAaHuPJolnDuL0AhV3h1hES6rcLCWEIbRL6/8TghfsVwkx6TEroQVdliX7+aLysUpKvjw==} + /electron-to-chromium@1.4.643: + resolution: {integrity: sha512-QHscvvS7gt155PtoRC0dR2ilhL8E9LHhfTQEq1uD5AL0524rBLAwpAREFH06f87/e45B9XkR6Ki5dbhbCsVEIg==} + dev: false + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false @@ -3164,7 +3352,6 @@ packages: requiresBuild: true dependencies: prr: 1.0.1 - dev: false optional: true /error-ex@1.3.2: @@ -3275,8 +3462,8 @@ packages: micromatch: 4.0.5 dev: false - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3292,8 +3479,8 @@ packages: reusify: 1.0.4 dev: false - /fflate@0.8.0: - resolution: {integrity: sha512-FAdS4qMuFjsJj6XHbBaZeXOgaypXp8iw/Tpyuq/w3XA41jjLHT8NPA+n7czH/DDhdncq0nAyDZmPeWXh2qmdIg==} + /fflate@0.8.1: + resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==} dev: false /figures@5.0.0: @@ -3341,10 +3528,23 @@ packages: dev: false optional: true + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: false + /get-port@7.0.0: resolution: {integrity: sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==} engines: {node: '>=16'} @@ -3394,12 +3594,18 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: false + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -3440,7 +3646,6 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: false /graphql-import-macro@1.0.0: resolution: {integrity: sha512-YK4g6iP60H++MpP93tb0VwOg7aM5iIC0hdSQKTrEDANeLWf0KFAT9dwlBeMDrhY+jcW7qsAEDtaw58cgVnQXAw==} @@ -3462,11 +3667,27 @@ packages: engines: {node: '>=8'} dev: false - /header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - capital-case: 1.0.4 - tslib: 2.6.2 + get-intrinsic: 1.2.2 + dev: false + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 dev: false /htmlnano@2.0.4(svgo@2.8.0): @@ -3540,9 +3761,9 @@ packages: /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: safer-buffer: 2.1.2 - dev: false optional: true /ieee754@1.2.1: @@ -3559,7 +3780,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true requiresBuild: true - dev: false optional: true /immutable@4.3.2: @@ -3589,11 +3809,11 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: false - /inquirer@9.2.10: - resolution: {integrity: sha512-tVVNFIXU8qNHoULiazz612GFl+yqNfjMTbLuViNJE/d860Qxrd3NMrse8dm40VUQLOQeULvaQF8lpAhvysjeyA==} + /inquirer@9.2.12: + resolution: {integrity: sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==} engines: {node: '>=14.18.0'} dependencies: - '@ljharb/through': 2.3.9 + '@ljharb/through': 2.3.11 ansi-escapes: 4.3.2 chalk: 5.3.0 cli-cursor: 3.1.0 @@ -3689,7 +3909,6 @@ packages: /is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - dev: false /isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} @@ -3728,8 +3947,8 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false - /json-schema-to-ts@2.9.1: - resolution: {integrity: sha512-8MNpRGERlCUWYeJwsWkMrJ0MWzBz49dfqpG+n9viiIlP4othaahbiaNQZuBzmPxRLUhOv1QJMCzW5WE8nHFGIQ==} + /json-schema-to-ts@2.9.2: + resolution: {integrity: sha512-h9WqLkTVpBbiaPb5OmeUpz/FBLS/kvIJw4oRCPiEisIu2WjMh+aai0QIY2LoOhRFx5r92taGLcerIrzxKBAP6g==} engines: {node: '>=16'} dependencies: '@babel/runtime': 7.22.10 @@ -3774,16 +3993,6 @@ packages: source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: false - - /lightningcss-darwin-arm64@1.21.1: - resolution: {integrity: sha512-dljpsZ15RN4AxI958n9qO7sAv29FRuUMCB10CSDBGmDOW+oDDbNLs1k5/7MlYg5FXnZqznUSTtHBFHFyo1Rs2Q==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true /lightningcss-darwin-arm64@1.21.7: resolution: {integrity: sha512-tt7hIsFio9jZofTVHtCACz6rB6c9RyABMXfA9A/VcKOjS3sq+koX/QkRJWY06utwOImbJIXBC5hbg9t3RkPUAQ==} @@ -3794,10 +4003,10 @@ packages: dev: false optional: true - /lightningcss-darwin-x64@1.21.1: - resolution: {integrity: sha512-e/dAKKOcLe2F/A5a89gh03ABxZHn4yjGapGimCFxnCpg68iIdtoPrJTFAyxPV3Jty4djLYRlitoIWNidOK35zA==} + /lightningcss-darwin-arm64@1.21.8: + resolution: {integrity: sha512-BOMoGfcgkk2f4ltzsJqmkjiqRtlZUK+UdwhR+P6VgIsnpQBV3G01mlL6GzYxYqxq+6/3/n/D+4oy2NeknmADZw==} engines: {node: '>= 12.0.0'} - cpu: [x64] + cpu: [arm64] os: [darwin] requiresBuild: true dev: false @@ -3812,6 +4021,15 @@ packages: dev: false optional: true + /lightningcss-darwin-x64@1.21.8: + resolution: {integrity: sha512-YhF64mcVDPKKufL4aNFBnVH7uvzE0bW3YUsPXdP4yUcT/8IXChypOZ/PE1pmt2RlbmsyVuuIIeZU4zTyZe5Amw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /lightningcss-freebsd-x64@1.21.7: resolution: {integrity: sha512-RMfNzJWXCSfPnL55fcLWEAadcY6QUFT0S8NceNKYzp1KiCZtkJIy6RQ5SaVxPzRqd3iMsahUf5sfnG8N1UQSNQ==} engines: {node: '>= 12.0.0'} @@ -3821,11 +4039,11 @@ packages: dev: false optional: true - /lightningcss-linux-arm-gnueabihf@1.21.1: - resolution: {integrity: sha512-Ak12ti7D4Q9Tk3tX9fktCJVe+spP12/dOcebw67DBeZ3EQ4meIGTkFpl2ryZK8Z7kbIJNUsscVsz3zXW21/25A==} + /lightningcss-freebsd-x64@1.21.8: + resolution: {integrity: sha512-CV6A/vTG2Ryd3YpChEgfWWv4TXCAETo9TcHSNx0IP0dnKcnDEiAko4PIKhCqZL11IGdN1ZLBCVPw+vw5ZYwzfA==} engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] + cpu: [x64] + os: [freebsd] requiresBuild: true dev: false optional: true @@ -3839,10 +4057,10 @@ packages: dev: false optional: true - /lightningcss-linux-arm64-gnu@1.21.1: - resolution: {integrity: sha512-ggCX0iyG/h2C1MfDfmfhB0zpEUTTP+kG9XBbwHRFKrQsmb3b7WC5QiyVuGYkzoGiHy1JNuyi27qR9cNVLCR8FQ==} + /lightningcss-linux-arm-gnueabihf@1.21.8: + resolution: {integrity: sha512-9PMbqh8n/Xq0F4/j2NR/hHM2HRDiFXFSF0iOvV67pNWKJkHIO6mR8jBw/88Aro5Ye/ILsX5OuWsxIVJDFv0NXA==} engines: {node: '>= 12.0.0'} - cpu: [arm64] + cpu: [arm] os: [linux] requiresBuild: true dev: false @@ -3857,8 +4075,8 @@ packages: dev: false optional: true - /lightningcss-linux-arm64-musl@1.21.1: - resolution: {integrity: sha512-vGaVLju7Zhus/sl5Oz/1YbV7L/Mr/bfjHbThj/DJcFggZPj1wfSeWc6gAAISqK3bIAUMVlcUEm2UnIDGj0tsOQ==} + /lightningcss-linux-arm64-gnu@1.21.8: + resolution: {integrity: sha512-JTM/TuMMllkzaXV7/eDjG4IJKLlCl+RfYZwtsVmC82gc0QX0O37csGAcY2OGleiuA4DnEo/Qea5WoFfZUNC6zg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] @@ -3875,10 +4093,10 @@ packages: dev: false optional: true - /lightningcss-linux-x64-gnu@1.21.1: - resolution: {integrity: sha512-W6b+ndCCO/SeIT4s7kJhkJGXZVz96uwb7eY61SwCAibs5HirzRMrIyuMY3JKcRESg9/jysHo4YWrr1icbzWiXw==} + /lightningcss-linux-arm64-musl@1.21.8: + resolution: {integrity: sha512-01gWShXrgoIb8urzShpn1RWtZuaSyKSzF2hfO+flzlTPoACqcO3rgcu/3af4Cw54e8vKzL5hPRo4kROmgaOMLg==} engines: {node: '>= 12.0.0'} - cpu: [x64] + cpu: [arm64] os: [linux] requiresBuild: true dev: false @@ -3893,8 +4111,8 @@ packages: dev: false optional: true - /lightningcss-linux-x64-musl@1.21.1: - resolution: {integrity: sha512-eA2ygIg/IbjglRq/QRCDTgnR8mtmXJ65t/1C1QUUvvexWfr0iiTKJj3iozgUKZmupfomrPIhF3Qya0el9PqjUA==} + /lightningcss-linux-x64-gnu@1.21.8: + resolution: {integrity: sha512-yVB5vYJjJb/Aku0V9QaGYIntvK/1TJOlNB9GmkNpXX5bSSP2pYW4lWW97jxFMHO908M0zjEt1qyOLMyqojHL+Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] @@ -3911,11 +4129,11 @@ packages: dev: false optional: true - /lightningcss-win32-x64-msvc@1.21.1: - resolution: {integrity: sha512-2PKZvhrMxr7TjceUkkAtNQtDOEozcbp8GdcOKCrhNmrQ1OT8Mm5p4sMp7bzT0QytT7W5EuhIteWQFW/qI64Wtw==} + /lightningcss-linux-x64-musl@1.21.8: + resolution: {integrity: sha512-TYi+KNtBVK0+FZvxTX/d5XJb+tw3Jq+2Rr9hW359wp1afsi1Vkg+uVGgbn+m2dipa5XwpCseQq81ylMlXuyfPw==} engines: {node: '>= 12.0.0'} cpu: [x64] - os: [win32] + os: [linux] requiresBuild: true dev: false optional: true @@ -3929,21 +4147,14 @@ packages: dev: false optional: true - /lightningcss@1.21.1: - resolution: {integrity: sha512-TKkVZzKnJVtGLI+8QMXLH2JdNcxjodA06So+uXA5qelvuReKvPyCJBX/6ZznADA76zNijmDc3OhjxvTBmNtCoA==} + /lightningcss-win32-x64-msvc@1.21.8: + resolution: {integrity: sha512-mww+kqbPx0/C44l2LEloECtRUuOFDjq9ftp+EHTPiCp2t+avy0sh8MaFwGsrKkj2XfZhaRhi4CPVKBoqF1Qlwg==} engines: {node: '>= 12.0.0'} - dependencies: - detect-libc: 1.0.3 - optionalDependencies: - lightningcss-darwin-arm64: 1.21.1 - lightningcss-darwin-x64: 1.21.1 - lightningcss-linux-arm-gnueabihf: 1.21.1 - lightningcss-linux-arm64-gnu: 1.21.1 - lightningcss-linux-arm64-musl: 1.21.1 - lightningcss-linux-x64-gnu: 1.21.1 - lightningcss-linux-x64-musl: 1.21.1 - lightningcss-win32-x64-msvc: 1.21.1 + cpu: [x64] + os: [win32] + requiresBuild: true dev: false + optional: true /lightningcss@1.21.7: resolution: {integrity: sha512-xITZyh5sLFwRPYUSw15T00Rm7gcQ1qOPuQwNOcvHsTm6nLWTQ723w7zl42wrC5t+xtdg6FPmnXHml1nZxxvp1w==} @@ -3962,6 +4173,23 @@ packages: lightningcss-win32-x64-msvc: 1.21.7 dev: false + /lightningcss@1.21.8: + resolution: {integrity: sha512-jEqaL7m/ZckZJjlMAfycr1Kpz7f93k6n7KGF5SJjuPSm6DWI6h3ayLZmgRHgy1OfrwoCed6h4C/gHYPOd1OFMA==} + engines: {node: '>= 12.0.0'} + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.21.8 + lightningcss-darwin-x64: 1.21.8 + lightningcss-freebsd-x64: 1.21.8 + lightningcss-linux-arm-gnueabihf: 1.21.8 + lightningcss-linux-arm64-gnu: 1.21.8 + lightningcss-linux-arm64-musl: 1.21.8 + lightningcss-linux-x64-gnu: 1.21.8 + lightningcss-linux-x64-musl: 1.21.8 + lightningcss-win32-x64-msvc: 1.21.8 + dev: false + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -3971,6 +4199,24 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: false + /lmdb@2.5.2: + resolution: {integrity: sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==} + requiresBuild: true + dependencies: + msgpackr: 1.9.7 + node-addon-api: 4.3.0 + node-gyp-build-optional-packages: 5.0.3 + ordered-binary: 1.4.1 + weak-lru-cache: 1.2.2 + optionalDependencies: + '@lmdb/lmdb-darwin-arm64': 2.5.2 + '@lmdb/lmdb-darwin-x64': 2.5.2 + '@lmdb/lmdb-linux-arm': 2.5.2 + '@lmdb/lmdb-linux-arm64': 2.5.2 + '@lmdb/lmdb-linux-x64': 2.5.2 + '@lmdb/lmdb-win32-x64': 2.5.2 + dev: false + /lmdb@2.7.11: resolution: {integrity: sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw==} hasBin: true @@ -4022,12 +4268,6 @@ packages: js-tokens: 4.0.0 dev: false - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.2 - dev: false - /lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4058,7 +4298,6 @@ packages: dependencies: pify: 4.0.1 semver: 5.7.2 - dev: false optional: true /mdn-data@2.0.14: @@ -4091,7 +4330,6 @@ packages: engines: {node: '>=4'} hasBin: true requiresBuild: true - dev: false optional: true /mime@2.6.0: @@ -4138,7 +4376,7 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false + requiresBuild: true optional: true /msgpackr-extract@3.0.2: @@ -4209,16 +4447,8 @@ packages: sax: 1.2.4 transitivePeerDependencies: - supports-color - dev: false optional: true - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 - dev: false - /node-abi@3.47.0: resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==} engines: {node: '>=10'} @@ -4226,10 +4456,6 @@ packages: semver: 7.5.4 dev: false - /node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - dev: false - /node-addon-api@4.3.0: resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} dev: false @@ -4242,6 +4468,11 @@ packages: resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} dev: false + /node-gyp-build-optional-packages@5.0.3: + resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==} + hasBin: true + dev: false + /node-gyp-build-optional-packages@5.0.6: resolution: {integrity: sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw==} hasBin: true @@ -4250,14 +4481,10 @@ packages: /node-gyp-build-optional-packages@5.0.7: resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} hasBin: true + requiresBuild: true dev: false optional: true - /node-gyp-build@4.6.0: - resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} - hasBin: true - dev: false - /node-object-hash@3.0.0: resolution: {integrity: sha512-jLF6tlyletktvSAawuPmH1SReP0YfZQ+tBrDiTCK+Ai7eXPMS9odi5xW/iKC7ZhrWJJ0Z5xYcW/x+1fVMn1Qvw==} engines: {node: '>=16', pnpm: '>=8'} @@ -4350,13 +4577,6 @@ packages: semver: 7.5.4 dev: false - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: false - /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4377,21 +4597,6 @@ packages: /parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} - dev: false - - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: false - - /path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: false /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -4427,7 +4632,7 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - dev: false + requiresBuild: true optional: true /pirates@4.0.6: @@ -4435,8 +4640,8 @@ packages: engines: {node: '>= 6'} dev: false - /plasmo@0.82.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-gXOl+8YsTLrvvsYGnEUXcjzlbkhhfZJ4+ql70azv9nBPZn6d0ajjLiQvRZVvTSlM+bN4EN3Hreszgbvq2IU5uQ==} + /plasmo@0.84.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-87U0ryQGhefBQ8aBRGiRB4l3MShbLQtXpv5aVO90q4e/7fhW6hcRc2Y+XzW1ukK6y65RWwzTGVN6HKwGQze55g==} hasBin: true dependencies: '@expo/spawn-async': 1.7.2 @@ -4445,20 +4650,20 @@ packages: '@parcel/package-manager': 2.9.3(@parcel/core@2.9.3) '@parcel/watcher': 2.2.0 '@plasmohq/init': 0.7.0 - '@plasmohq/parcel-config': 0.39.1(react-dom@18.2.0)(react@18.2.0) - '@plasmohq/parcel-core': 0.1.6 + '@plasmohq/parcel-config': 0.40.1(react-dom@18.2.0)(react@18.2.0) + '@plasmohq/parcel-core': 0.1.8 buffer: 6.0.3 chalk: 5.3.0 - change-case: 4.1.2 + change-case: 5.1.2 dotenv: 16.3.1 dotenv-expand: 10.0.0 events: 3.3.0 - fast-glob: 3.3.1 - fflate: 0.8.0 + fast-glob: 3.3.2 + fflate: 0.8.1 get-port: 7.0.0 got: 13.0.0 ignore: 5.2.4 - inquirer: 9.2.10 + inquirer: 9.2.12 is-path-inside: 4.0.0 json5: 2.2.3 mnemonic-id: 3.2.7 @@ -4466,9 +4671,9 @@ packages: package-json: 8.1.1 process: 0.11.10 semver: 7.5.4 - sharp: 0.32.5 + sharp: 0.32.6 tempy: 3.1.0 - typescript: 5.1.6 + typescript: 5.2.2 transitivePeerDependencies: - '@swc/core' - '@swc/helpers' @@ -4623,7 +4828,7 @@ packages: /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - dev: false + requiresBuild: true optional: true /pump@3.0.0: @@ -4795,7 +5000,6 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false /sass@1.66.1: resolution: {integrity: sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==} @@ -4809,7 +5013,7 @@ packages: /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: false + requiresBuild: true optional: true /scheduler@0.23.0: @@ -4821,8 +5025,6 @@ packages: /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - dev: false - optional: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -4835,16 +5037,19 @@ packages: dependencies: lru-cache: 6.0.0 - /sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + engines: {node: '>= 0.4'} dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - upper-case-first: 2.0.2 + define-data-property: 1.1.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 dev: false - /sharp@0.32.5: - resolution: {integrity: sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ==} + /sharp@0.32.6: + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} engines: {node: '>=14.15.0'} requiresBuild: true dependencies: @@ -4897,13 +5102,6 @@ packages: engines: {node: '>=8'} dev: false - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: false - /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -4912,7 +5110,6 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: false /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} @@ -5141,9 +5338,8 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - /tsup@7.2.0(typescript@5.1.6): + /tsup@7.2.0(typescript@5.2.2): resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} engines: {node: '>=16.14'} hasBin: true @@ -5173,7 +5369,7 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.34.0 tree-kill: 1.2.2 - typescript: 5.1.6 + typescript: 5.2.2 transitivePeerDependencies: - supports-color - ts-node @@ -5209,6 +5405,13 @@ packages: resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} engines: {node: '>=14.17'} hasBin: true + dev: true + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: false /unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} @@ -5232,29 +5435,17 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.9 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 dev: false - /upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} - dependencies: - tslib: 2.6.2 - dev: false - - /upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - dependencies: - tslib: 2.6.2 - dev: false - /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false diff --git a/popup.tsx b/popup.tsx deleted file mode 100644 index 6e698ef..0000000 --- a/popup.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useEffect, useState } from "react" -import { sendToBackground } from "@plasmohq/messaging" - -function IndexPopup() { - const [data, setData] = useState("") - - useEffect(() => { - const resp = sendToBackground({ - name: "test", - body: { - id: 123 - } - }).then((res) => { - console.log(res); - }) - - console.log(resp) - }, []); - - return ( - - - Welcome to your test - - {" "} - Plasmo - {" "} - Extension! - - setData(e.target.value)} value={data} /> - - View Docs - - - ) -} - -export default IndexPopup diff --git a/popup/bili.module.less b/popup/bili.module.less new file mode 100644 index 0000000..8fd02dc --- /dev/null +++ b/popup/bili.module.less @@ -0,0 +1,22 @@ +.bili { + gap: 1em; + display: flex; + + .image { + flex: 0 0 40%; + } + + .selector { + gap: 1em; + display: flex; + flex-wrap: wrap; + margin-top: 1em; + + img { + width: 3em; + height: 3em; + cursor: pointer; + border: 1px solid #eee; + } + } +} diff --git a/popup/bili.tsx b/popup/bili.tsx new file mode 100644 index 0000000..6afb018 --- /dev/null +++ b/popup/bili.tsx @@ -0,0 +1,126 @@ +import { useEffect, useState, type FormEvent } from "react"; +import Placeholder from "~components/ui/placeholder"; +import Form from "~components/ui/form"; +import { IconBack } from "~assets/icons"; +import styles from "./popup.module.less"; +import stylesB from "./bili.module.less"; +import useForm from "~hooks/useForm"; + +interface ReadProps { + onBack: () => void; +} + +interface FormValue { + name: string; + ename: string; + project: string; + made: string; + sale: string; + type: number; + desc: string; +} + +const getInfo = async () => { + let tab: chrome.tabs.Tab; + + [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true }); + + if (tab && !tab.url.includes("chrome")) { + const a = await chrome.tabs.sendMessage(tab.id, { type: 'toolbox:getBiliToy' }); + + console.log('get toy:', a); + + return a; + } +} + +function Toy({ onBack }: ReadProps) { + const { bindInput, setValues, onSubmit } = useForm({ + initialValues: { + type: 3, + }, + onSubmit: (values) => { + console.log(values); + }, + }); + + const [imgs, setImgs] = useState([]); + const [currentImg, setCurrentImg] = useState(0); + const [failed, setFailed] = useState(false); + + useEffect(() => { + getInfo().then((res) => { + if (!res) { + setFailed(true); + return; + } + + const { image, ...othors } = res; + + setValues(othors); + setImgs(res.images); + setCurrentImg(0); + }) + }, []); + + return ( + + + + + + 添加手办 + + + + + + + {imgs.map((item, index) => ( + setCurrentImg(index)} /> + ))} + + + console.log(data))}> + + 中文名 + + + + 英文名 + + + + 作品 + + + + 制作 + + + + 发售日期 + + + + 状态 + + 已到货 + 已预订 + 想要但没钱 + + + + 描述 + + + + 提交 + + + + + ); +} + +export default Toy; diff --git a/popup/index.tsx b/popup/index.tsx new file mode 100644 index 0000000..fcb94ed --- /dev/null +++ b/popup/index.tsx @@ -0,0 +1,49 @@ +import { useState } from "react"; +import Menu from "./menu"; +import Read from "./read"; +import Toy from "./bili"; +import Message from "~components/ui/message"; +import { clsn } from "~utils"; +import "assets/global.css"; +import styles from "./popup.module.less"; + +function IndexPopup() { + const [data, setData] = useState("") + + const [tab, setTab] = useState(); + + const onBack = () => { + setTab(undefined); + } + + const onClickMenu = (value: string) => { + if (value === "options") { + chrome.runtime.openOptionsPage(); + return; + } + + setTab(value); + } + + const renderBody = () => { + if (tab === "read") { + return ; + } + if (tab === "toy") { + return ; + } + + return ; + } + + return ( + <> + + {renderBody()} + + + > + ); +} + +export default IndexPopup; diff --git a/popup/menu.tsx b/popup/menu.tsx new file mode 100644 index 0000000..73e53af --- /dev/null +++ b/popup/menu.tsx @@ -0,0 +1,39 @@ +import { IconBili, IconRead, IconSetting } from "~assets/icons"; +import styles from "./popup.module.less"; + +const items = [ + { + name: "在看", + icon: , + value: "read", + }, + { + name: "增加手办", + icon: , + value: "toy", + }, + { + name: "插件设置", + icon: , + value: "options", + } +]; + +interface MenuProps { + onClick: (value: string) => void; +} + +function Menu({ onClick }: MenuProps) { + return ( + + {items.map((item) => ( + onClick(item.value)}> + {item.icon && item.icon} + {item.name} + + ))} + + ); +} + +export default Menu; diff --git a/popup/popup.module.less b/popup/popup.module.less new file mode 100644 index 0000000..01501f9 --- /dev/null +++ b/popup/popup.module.less @@ -0,0 +1,60 @@ +.root { + color: #333; + font-size: 14px; + min-width: 200px; + + &.hasTab { + min-width: 300px; + } +} + +.menu { + .item { + display: flex; + cursor: pointer; + padding: .75em 1em; + border-bottom: 1px solid #eee; + transition: background-color .3s; + + svg { + width: 1em; + color: #28b9be; + margin-right: .5em; + } + } + + .item:hover { + background-color: #eee; + } +} + +.tab { + .header { + padding: .75em; + position: relative; + text-align: center; + border-bottom: 1px solid #eee; + + .back { + top: 0; + left: 0; + bottom: 0; + width: 2em; + font-size: 1.3em; + position: absolute; + transition: background-color .3s; + + &:hover { + background-color: #eee; + } + + svg { + width: 1em; + } + } + } + + .body { + padding: 1em; + } +} diff --git a/popup/read.tsx b/popup/read.tsx new file mode 100644 index 0000000..4ced8ad --- /dev/null +++ b/popup/read.tsx @@ -0,0 +1,115 @@ +import { sendToBackground } from "@plasmohq/messaging"; +import { useEffect, useState } from "react"; +import Form from "~components/ui/form"; +import { IconBack } from "~assets/icons"; +import styles from "./popup.module.less"; +import useForm from "~hooks/useForm"; +import { add } from "~components/ui/message/utils"; + +interface ReadProps { + onBack: () => void; +} + +interface FormValue { + title: string; + link: string; + desc: string; + tips: string; +} + +const getInfo = async () => { + const [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true }); + + if (tab) { + return await chrome.tabs.sendMessage(tab.id, { type: 'toolbox:getInfo' }); + } +} + +const submitForm = (body: FormValue) => { + sendToBackground({ + name: "read", + body: { + action: "submitAddForm", + values: body, + }, + }).then((res) => { + if (res.status === "Success") { + add({ + content: "提交成功", + }); + } + else { + add({ + content: res.msg, + }); + } + }); +} + +function Read({ onBack }: ReadProps) { + const [count, setCount] = useState(0); + const { bindInput, setValues, onSubmit } = useForm({ + initialValues: { + test: 'test', + }, + onSubmit: (values) => { + submitForm(values); + }, + }); + + useEffect(() => { + getInfo().then((res) => { + if (!res) { + return; + } + + setValues(res); + }) + }, []); + + return ( + + + + + + 在看 + + + + + + + 概括 + + + + 评论 / 推荐理由 + + + + 作者 + + + + 插图 + + + + 站点名称 + + + + 标签 + + + 提交 + + {count} + setCount(prevCount => prevCount + 1)}>add + + + ); +} + +export default Read; diff --git a/utils/index.ts b/utils/index.ts new file mode 100644 index 0000000..7a86661 --- /dev/null +++ b/utils/index.ts @@ -0,0 +1,4 @@ +// Classnames +export const clsn = (...clsn: (string | undefined | null | false)[]) => { + return clsn.filter(item => item).join(" "); +}
{value}