diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bf6e0a39..02005ae2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,3 +23,4 @@ jobs: run: | npm install npm run build + npm run test diff --git a/.gitignore b/.gitignore index df11c919..a6ce7ff2 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,3 @@ public # packages /packages/**/dist -# storybook -.storybook -storybook-static diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 00000000..ba67733d --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,36 @@ +import type { StorybookConfig } from "@storybook/react-vite"; +import { stylexPlugin } from "vite-plugin-stylex-dev"; + +const config: StorybookConfig = { + stories: [ + "../src/**/*.mdx", + "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)", + ], + addons: [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@storybook/addon-onboarding", + "@storybook/addon-interactions", + ], + framework: { + name: "@storybook/react-vite", + options: {}, + }, + staticDirs: ['../examples/nextjs/public'], + docs: { + autodocs: "tag", + }, + async viteFinal(config) { + const { plugins = [] } = config; + plugins.push( + stylexPlugin({ + unstable_moduleResolution: { + type: 'commonJS', + rootDir: process.cwd() + } + }) + ) + return config + }, +}; +export default config; diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 00000000..ff58bbda --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,15 @@ +import type { Preview } from "@storybook/react"; + +const preview: Preview = { + parameters: { + actions: { argTypesRegex: "^on[A-Z].*" }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, +}; + +export default preview; diff --git a/examples/nextjs/package-lock.json b/examples/nextjs/package-lock.json index c174129d..b4a153dc 100644 --- a/examples/nextjs/package-lock.json +++ b/examples/nextjs/package-lock.json @@ -13,7 +13,7 @@ "prismjs": "^1.29.0", "react": "^18", "react-dom": "^18", - "rotion": "^0.0.8" + "rotion": "^0.0.10" }, "devDependencies": { "@types/node": "^20", @@ -1432,6 +1432,16 @@ "node": ">=4" } }, + "node_modules/cdate": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/cdate/-/cdate-0.0.7.tgz", + "integrity": "sha512-11EnUjVX6hwL0FcDNE2F0wh+0KnQieTfPUdPHNdQHbrvFdEbqfRULkA8nMcfT2tXCGw/ABRdYLqQ0SmbeWawTA==" + }, + "node_modules/cdate-schedule": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/cdate-schedule/-/cdate-schedule-0.0.1.tgz", + "integrity": "sha512-rP6nydghUh/t+J1TQtT31RwZiNeXzkEAtpVzNjHQsf6n655dHeQD0LTxSZeR1QvKWajGvJ/W+TE5sdpch6+zqg==" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5999,11 +6009,13 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/rotion": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/rotion/-/rotion-0.0.8.tgz", - "integrity": "sha512-AH2RxjkrV2hA/SRAlRM4w4g1faXlgWxXGPuSDwNTycchNy1fXiZDhF3xwsto3sD4yxn/J9m+fIJqnOsTE0VT+A==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/rotion/-/rotion-0.0.10.tgz", + "integrity": "sha512-SIIevufk/XHjT2pL4qyMk9pVy6v3xM19qDv2RJEJERNV+sslz9NHx6rnZZlsBD++i3dkW7VQZHbz8+1RZH9eRQ==", "dependencies": { "@notionhq/client": "^2.2.14", + "cdate": "^0.0.7", + "cdate-schedule": "^0.0.1", "file-type": "^18.7.0", "imagemin": "^8.0.1", "imagemin-webp": "^8.0.0", diff --git a/examples/nextjs/package.json b/examples/nextjs/package.json index a492dfc2..c0d65a3f 100644 --- a/examples/nextjs/package.json +++ b/examples/nextjs/package.json @@ -14,7 +14,7 @@ "prismjs": "^1.29.0", "react": "^18", "react-dom": "^18", - "rotion": "^0.0.8" + "rotion": "^0.0.10" }, "devDependencies": { "@types/node": "^20", diff --git a/examples/nextjs/pages/_app.tsx b/examples/nextjs/pages/_app.tsx index 6a6bd5ab..917ee816 100644 --- a/examples/nextjs/pages/_app.tsx +++ b/examples/nextjs/pages/_app.tsx @@ -1,8 +1,7 @@ import '@/styles/globals.css' import type { AppProps } from 'next/app' import Head from 'next/head' -import 'rotion/styles/notionate.css' -import 'rotion/styles/notionate-dark.css' +import 'rotion/style.css' import styles from '@/styles/App.module.css' export default function App({ Component, pageProps }: AppProps) { diff --git a/examples/nextjs/pages/block.tsx b/examples/nextjs/pages/block.tsx index e232b438..0d8133eb 100644 --- a/examples/nextjs/pages/block.tsx +++ b/examples/nextjs/pages/block.tsx @@ -1,12 +1,13 @@ import type { GetStaticProps, NextPage } from 'next' import Image from 'next/image' import Link from 'next/link' -import { useState, useEffect } from 'react' import Header from '@/components/Header' import Head from 'next/head' import styles from '@/styles/Page.module.css' -import mermaid from 'mermaid' import prism from 'prismjs' +import mermaid from 'mermaid' + +import 'prismjs/themes/prism.min.css' import 'prismjs/components/prism-bash' import 'prismjs/components/prism-go' import 'prismjs/components/prism-typescript' @@ -57,11 +58,6 @@ export const getStaticProps: GetStaticProps = async (context) => { } const BlocksPage: NextPage = ({ title, icon, blocks, breadcrumbs }) => { - const [exModules, setExModules] = useState({ mermaid, prism }) - useEffect(() => { - mermaid.initialize({ theme: window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'neutral' }) - setExModules({ mermaid, prism }) - }, []) const hrefs = ['/', '/[name]'] return ( @@ -86,7 +82,7 @@ const BlocksPage: NextPage = ({ title, icon, blocks, breadcrumbs }) => {
- +
diff --git a/package-lock.json b/package-lock.json index 2d1e39a5..8add1871 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,17 @@ { "name": "rotion", - "version": "0.0.8", + "version": "0.0.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rotion", - "version": "0.0.8", + "version": "0.0.10", "license": "MIT", "dependencies": { "@notionhq/client": "^2.2.14", + "cdate": "^0.0.7", + "cdate-schedule": "^0.0.1", "file-type": "^18.7.0", "imagemin": "^8.0.1", "imagemin-webp": "^8.0.0", @@ -24,14 +26,16 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/addon-essentials": "^7.6.7", - "@storybook/addon-interactions": "^7.6.7", - "@storybook/addon-links": "^7.6.7", - "@storybook/addon-onboarding": "^1.0.10", - "@storybook/blocks": "^7.6.7", - "@storybook/react": "^7.6.7", - "@storybook/react-vite": "^7.6.7", - "@storybook/test": "^7.6.7", + "@storybook/addon-essentials": "^7.6.12", + "@storybook/addon-interactions": "^7.6.12", + "@storybook/addon-links": "^7.6.12", + "@storybook/addon-onboarding": "^1.0.11", + "@storybook/blocks": "^7.6.12", + "@storybook/react": "^7.6.12", + "@storybook/react-vite": "^7.6.12", + "@storybook/test": "^7.6.12", + "@stylexjs/rollup-plugin": "^0.4.1", + "@stylexjs/stylex": "^0.4.1", "@tsconfig/node-lts-strictest-esm": "^18.12.1", "@types/imagemin": "^8.0.5", "@types/imagemin-webp": "^7.0.3", @@ -51,7 +55,6 @@ "eslint-plugin-promise": "^6.0.0", "eslint-plugin-react": "^7.33.2", "eslint-plugin-storybook": "^0.6.15", - "exporter": "file:../exporter", "http-cache-semantics": ">=4.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -60,23 +63,20 @@ "rollup-plugin-dts": "^6.1.0", "rollup-plugin-import-css": "^3.3.5", "rollup-plugin-peer-deps-external": "^2.2.4", - "storybook": "^7.6.7", - "storybook-dark-mode": "^3.0.3", + "storybook": "^7.6.12", "testdouble": "^3.20.1", "ts-node": "^10.9.2", "tslib": "^2.6.2", "tsm": "^2.3.0", "typescript": "^5.3.3", - "uvu": "^0.5.6" + "uvu": "^0.5.6", + "vite-plugin-stylex-dev": "^0.2.5" }, "peerDependencies": { "react": "^17.0.2 || ^18.0.0-0", "react-dom": "^17.0.2 || ^18.0.0-0" } }, - "../exporter": { - "dev": true - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -87,9 +87,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", - "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", "dev": true }, "node_modules/@ampproject/remapping": { @@ -171,6 +171,15 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/code-frame/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -202,9 +211,9 @@ } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -212,11 +221,11 @@ "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -246,16 +255,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", - "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", @@ -297,9 +296,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", - "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -562,14 +561,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -630,6 +629,15 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -652,9 +660,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1019,9 +1027,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", - "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -1393,9 +1401,9 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", - "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", @@ -1840,9 +1848,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", - "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", @@ -1872,7 +1880,7 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.7", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", "@babel/plugin-transform-block-scoping": "^7.23.4", @@ -1894,7 +1902,7 @@ "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", @@ -1920,9 +1928,9 @@ "@babel/plugin-transform-unicode-regex": "^7.23.3", "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.7", - "babel-plugin-polyfill-corejs3": "^0.8.7", - "babel-plugin-polyfill-regenerator": "^0.5.4", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -2118,9 +2126,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2130,23 +2138,23 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", @@ -2155,8 +2163,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2165,9 +2173,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.23.4", @@ -2211,6 +2219,16 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2230,9 +2248,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ "arm" ], @@ -2390,9 +2408,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ "loong64" ], @@ -2711,31 +2729,31 @@ "dev": true }, "node_modules/@floating-ui/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", - "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", "dev": true, "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.1" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", - "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", + "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", "dev": true, "dependencies": { - "@floating-ui/core": "^1.5.3", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.1" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", - "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", "dev": true, "dependencies": { - "@floating-ui/dom": "^1.5.4" + "@floating-ui/dom": "^1.6.1" }, "peerDependencies": { "react": ">=16.8.0", @@ -2985,16 +3003,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", - "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -3033,6 +3041,55 @@ } } }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, + "peerDependencies": { + "glob": "^7.1.6" + } + }, "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/magic-string": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", @@ -3045,6 +3102,18 @@ "node": ">=12" } }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -3094,13 +3163,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@juggle/resize-observer": { @@ -3879,37 +3948,6 @@ } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@rollup/plugin-json": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", @@ -4026,9 +4064,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", "cpu": [ "arm" ], @@ -4039,9 +4077,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", "cpu": [ "arm64" ], @@ -4052,9 +4090,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", "cpu": [ "arm64" ], @@ -4065,9 +4103,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", "cpu": [ "x64" ], @@ -4078,9 +4116,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", "cpu": [ "arm" ], @@ -4091,9 +4129,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", "cpu": [ "arm64" ], @@ -4104,9 +4142,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", "cpu": [ "arm64" ], @@ -4117,9 +4155,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", "cpu": [ "riscv64" ], @@ -4130,9 +4168,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", "cpu": [ "x64" ], @@ -4143,9 +4181,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", "cpu": [ "x64" ], @@ -4156,9 +4194,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", "cpu": [ "arm64" ], @@ -4169,9 +4207,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", "cpu": [ "ia32" ], @@ -4182,9 +4220,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", "cpu": [ "x64" ], @@ -4209,12 +4247,12 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.10.tgz", - "integrity": "sha512-pcKmf0H/caGzKDy8cz1adNSjv+KOBWLJ11RzGExrWm+Ad5ACifwlsQPykJ3TQ/21sTd9IXVrE9uuq4LldEnPbg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.12.tgz", + "integrity": "sha512-vK/H6K+AJ4ZSsCu/+MapYYI/xrynB6JoCOejt//flTigZOhwTWv7WXbmEeqGIIToXy0LA2IUZ1/kCjFXR0lEdQ==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.10", + "@storybook/core-events": "7.6.12", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -4227,9 +4265,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.10.tgz", - "integrity": "sha512-kGzsN1QkfyI8Cz7TErEx9OCB3PMzpCFGLd/iy7FreXwbMbeAQ3/9fYgKUsNOYgOhuTz7S09koZUWjS/WJuZGFA==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.12.tgz", + "integrity": "sha512-G14uN5lDXUtXw+dmEPaB6lpDpR9K25ssYuWWn8yYR44B1WMuD4kDgw0QGb0g+xYQj9R1TsalKEJHA4AuSYkVGQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -4242,12 +4280,12 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.10.tgz", - "integrity": "sha512-LjwCQRMWq1apLtFwDi6U8MI6ITUr+KhxJucZ60tfc58RgB2v8ayozyDAonFEONsx9YSR1dNIJ2Z/e2rWTBJeYA==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.12.tgz", + "integrity": "sha512-NX4KajscOsuXyYE3hhniF+y0E59E6rM0FgIaZ48P9c0DD+wDo8bAISHjZvmKXtDVajLk4/JySvByx1eN6V3hmA==", "dev": true, "dependencies": { - "@storybook/blocks": "7.6.10", + "@storybook/blocks": "7.6.12", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -4257,26 +4295,26 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.10.tgz", - "integrity": "sha512-GtyQ9bMx1AOOtl6ZS9vwK104HFRK+tqzxddRRxhXkpyeKu3olm9aMgXp35atE/3fJSqyyDm2vFtxxH8mzBA20A==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.12.tgz", + "integrity": "sha512-AzMgnGYfEg+Z1ycJh8MEp44x1DfjRijKCVYNaPFT6o+TjN/9GBaAkV4ydxmQzMEMnnnh/0E9YeHO+ivBVSkNog==", "dev": true, "dependencies": { "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.6.10", - "@storybook/client-logger": "7.6.10", - "@storybook/components": "7.6.10", - "@storybook/csf-plugin": "7.6.10", - "@storybook/csf-tools": "7.6.10", + "@storybook/blocks": "7.6.12", + "@storybook/client-logger": "7.6.12", + "@storybook/components": "7.6.12", + "@storybook/csf-plugin": "7.6.12", + "@storybook/csf-tools": "7.6.12", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.6.10", - "@storybook/postinstall": "7.6.10", - "@storybook/preview-api": "7.6.10", - "@storybook/react-dom-shim": "7.6.10", - "@storybook/theming": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/node-logger": "7.6.12", + "@storybook/postinstall": "7.6.12", + "@storybook/preview-api": "7.6.12", + "@storybook/react-dom-shim": "7.6.12", + "@storybook/theming": "7.6.12", + "@storybook/types": "7.6.12", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -4292,24 +4330,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.10.tgz", - "integrity": "sha512-cjbuCCK/3dtUity0Uqi5LwbkgfxqCCE5x5mXZIk9lTMeDz5vB9q6M5nzncVDy8F8przF3NbDLLgxKlt8wjiICg==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.6.10", - "@storybook/addon-backgrounds": "7.6.10", - "@storybook/addon-controls": "7.6.10", - "@storybook/addon-docs": "7.6.10", - "@storybook/addon-highlight": "7.6.10", - "@storybook/addon-measure": "7.6.10", - "@storybook/addon-outline": "7.6.10", - "@storybook/addon-toolbars": "7.6.10", - "@storybook/addon-viewport": "7.6.10", - "@storybook/core-common": "7.6.10", - "@storybook/manager-api": "7.6.10", - "@storybook/node-logger": "7.6.10", - "@storybook/preview-api": "7.6.10", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.12.tgz", + "integrity": "sha512-Pl6n+19QC/T+cuU8DZjCwILXVxrdRTivNxPOiy8SEX+jjR4H0uAfXC9+RXCPjRFn64t4j1K7oIyoNokEn39cNw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.6.12", + "@storybook/addon-backgrounds": "7.6.12", + "@storybook/addon-controls": "7.6.12", + "@storybook/addon-docs": "7.6.12", + "@storybook/addon-highlight": "7.6.12", + "@storybook/addon-measure": "7.6.12", + "@storybook/addon-outline": "7.6.12", + "@storybook/addon-toolbars": "7.6.12", + "@storybook/addon-viewport": "7.6.12", + "@storybook/core-common": "7.6.12", + "@storybook/manager-api": "7.6.12", + "@storybook/node-logger": "7.6.12", + "@storybook/preview-api": "7.6.12", "ts-dedent": "^2.0.0" }, "funding": { @@ -4322,9 +4360,9 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.10.tgz", - "integrity": "sha512-dIuS5QmoT1R+gFOcf6CoBa6D9UR5/wHCfPqPRH8dNNcCLtIGSHWQ4v964mS5OCq1Huj7CghmR15lOUk7SaYwUA==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.12.tgz", + "integrity": "sha512-rWNEyBhwncXEDd9z7l67BLBIPqn0SRI/CJpZvCSF5KLWrVaoSEDF8INavmbikd1JBMcajJ28Ur6NsGj+eJjJiw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -4335,13 +4373,13 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.10.tgz", - "integrity": "sha512-lEsAdP/PrOZK/KmRbZ/fU4RjEqDP+e/PBlVVVJT2QvHniWK/xxkjCD0axsHU/XuaeQRFhmg0/KR342PC/cIf9A==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.12.tgz", + "integrity": "sha512-D8NX2xu9WiqPInoN842DU+KAFVC8HscGczqkDGEiWCAqq0DfXtW/0ClMSaE6d2+twhGv6uiPfeJ2IdynSZolXg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.10", + "@storybook/types": "7.6.12", "jest-mock": "^27.0.6", "polished": "^4.2.2", "ts-dedent": "^2.2.0" @@ -4352,9 +4390,9 @@ } }, "node_modules/@storybook/addon-links": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.10.tgz", - "integrity": "sha512-s/WkSYHpr2pb9p57j6u/xDBg3TKJhBq55YMl0GB5gXgkRPIeuGbPhGJhm2yTGVFLvXgr/aHHnOxb/R/W8PiRhA==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.12.tgz", + "integrity": "sha512-rGwPYpZAANPrf2GaNi5t9zAjLF8PgzKizyBPltIXUtplxDg88ziXlDA1dhsuGDs4Kf0oXECyAHPw79JjkJQziA==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.2", @@ -4375,9 +4413,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.10.tgz", - "integrity": "sha512-OVfTI56+kc4hLWfZ/YPV3WKj/aA9e4iKXYxZyPdhfX4Z8TgZdD1wv9Z6e8DKS0H5kuybYrHKHaID5ki6t7qz3w==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.12.tgz", + "integrity": "sha512-K3aKErr84V0eVK7t+wco5cSYDdeotwoXi4e7VLSa2cdUz0wanOb4R7v3kf6vxucUyp05Lv+yHkz9zsbwuezepA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -4389,9 +4427,9 @@ } }, "node_modules/@storybook/addon-onboarding": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-1.0.10.tgz", - "integrity": "sha512-tK7JjJYIpOM4LowBoIM/8ymYQ70qVRmu7pGqSOQ82AW15ob5u36HJ753y0hVH/KPj6k7J1aSgAEgVGXLmgwvKw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-1.0.11.tgz", + "integrity": "sha512-0Sa7PJDsM6AANOWZX7vq3kgCbS9AZFjr3tfr3bLGfXviwIBKjoZDDdIErJkS3D4mNcDa78lYQvp3PTCKwLIJ9A==", "dev": true, "dependencies": { "@storybook/telemetry": "^7.1.0", @@ -4403,9 +4441,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.10.tgz", - "integrity": "sha512-RVJrEoPArhI6zAIMNl1Gz0zrj84BTfEWYYz0yDWOTVgvN411ugsoIk1hw0671MOneXJ2RcQ9MFIeV/v6AVDQYg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.12.tgz", + "integrity": "sha512-r6eO4EKh+zwGUNjxe8v/44BhyV+JD3Dl9GYMutsFqbwYsoWHJaZmzHuyqeFBXwx2MEoixdWdIzNMP71+srQqvw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -4417,9 +4455,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.10.tgz", - "integrity": "sha512-PaXY/oj9yxF7/H0CNdQKcioincyCkfeHpISZriZbZqhyqsjn3vca7RFEmsB88Q+ou6rMeqyA9st+6e2cx/Ct6A==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.12.tgz", + "integrity": "sha512-TSwq8xO7fmS6GRTgJJa31OBzm+5zlgDYK2Q42jxFo/Vm10uMzCpjYJE6mIHpUDyjyBVQk6xxMMEcvo6no2eAWg==", "dev": true, "funding": { "type": "opencollective", @@ -4427,9 +4465,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.10.tgz", - "integrity": "sha512-+bA6juC/lH4vEhk+w0rXakaG8JgLG4MOYrIudk5vJKQaC6X58LIM9N4kzIS2KSExRhkExXBPrWsnMfCo7uxmKg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.12.tgz", + "integrity": "sha512-51zsBeoaEzq699SKDCe+GG/2PDAJKKJtpjqxIc4lDskogaCJSb3Ie8LyookHAKYgbi2qealVgK8zaP27KUj3Pg==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -4439,38 +4477,23 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/addons": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.6.10.tgz", - "integrity": "sha512-lv/oT4ZGMKfXh6bB7LbuRP85bwRprBPYuMMl+e1Ikvu5WTfqVoJRYjc7mvXaIHGCI6DZ/nFcbRjra6q8ZhoDgw==", - "dev": true, - "dependencies": { - "@storybook/manager-api": "7.6.10", - "@storybook/preview-api": "7.6.10", - "@storybook/types": "7.6.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, "node_modules/@storybook/blocks": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.10.tgz", - "integrity": "sha512-oSIukGC3yuF8pojABC/HLu5tv2axZvf60TaUs8eDg7+NiiKhzYSPoMQxs5uMrKngl+EJDB92ESgWT9vvsfvIPg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.12.tgz", + "integrity": "sha512-T47KOAjgZmhV+Ov59A70inE5edInh1Jh5w/5J5cjpk9a2p4uhd337SnK4B8J5YLhcM2lbKRWJjzIJ0nDZQTdnQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.10", - "@storybook/client-logger": "7.6.10", - "@storybook/components": "7.6.10", - "@storybook/core-events": "7.6.10", + "@storybook/channels": "7.6.12", + "@storybook/client-logger": "7.6.12", + "@storybook/components": "7.6.12", + "@storybook/core-events": "7.6.12", "@storybook/csf": "^0.1.2", - "@storybook/docs-tools": "7.6.10", + "@storybook/docs-tools": "7.6.12", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.6.10", - "@storybook/preview-api": "7.6.10", - "@storybook/theming": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/manager-api": "7.6.12", + "@storybook/preview-api": "7.6.12", + "@storybook/theming": "7.6.12", + "@storybook/types": "7.6.12", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -4494,15 +4517,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.10.tgz", - "integrity": "sha512-f+YrjZwohGzvfDtH8BHzqM3xW0p4vjjg9u7uzRorqUiNIAAKHpfNrZ/WvwPlPYmrpAHt4xX/nXRJae4rFSygPw==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.12.tgz", + "integrity": "sha512-AJFrtBj0R11OFwwz+2j+ivRzttWXT6LesSGoLnxown24EV9uLQoHtGb7GOA2GyzY5wjUJS9gQBPGHXjvQEfLJA==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.6.10", - "@storybook/manager": "7.6.10", - "@storybook/node-logger": "7.6.10", + "@storybook/core-common": "7.6.12", + "@storybook/manager": "7.6.12", + "@storybook/node-logger": "7.6.12", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", @@ -4521,89 +4544,20 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-manager/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/builder-manager/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, "node_modules/@storybook/builder-vite": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.10.tgz", - "integrity": "sha512-qxe19axiNJVdIKj943e1ucAmADwU42fTGgMSdBzzrvfH3pSOmx2057aIxRzd8YtBRnj327eeqpgCHYIDTunMYQ==", - "dev": true, - "dependencies": { - "@storybook/channels": "7.6.10", - "@storybook/client-logger": "7.6.10", - "@storybook/core-common": "7.6.10", - "@storybook/csf-plugin": "7.6.10", - "@storybook/node-logger": "7.6.10", - "@storybook/preview": "7.6.10", - "@storybook/preview-api": "7.6.10", - "@storybook/types": "7.6.10", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.12.tgz", + "integrity": "sha512-VJIn+XYVVhdJHHMEtYDnEyQQU4fRupugSFpP9XLYTRYgXPN9PSVey4vI/IyuHcHYINPba39UY2+8PW+5NgShxQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.12", + "@storybook/client-logger": "7.6.12", + "@storybook/core-common": "7.6.12", + "@storybook/csf-plugin": "7.6.12", + "@storybook/node-logger": "7.6.12", + "@storybook/preview": "7.6.12", + "@storybook/preview-api": "7.6.12", + "@storybook/types": "7.6.12", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^0.9.3", @@ -4652,13 +4606,13 @@ } }, "node_modules/@storybook/channels": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.10.tgz", - "integrity": "sha512-ITCLhFuDBKgxetuKnWwYqMUWlU7zsfH3gEKZltTb+9/2OAWR7ez0iqU7H6bXP1ridm0DCKkt2UMWj2mmr9iQqg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.12.tgz", + "integrity": "sha512-TaPl5Y3lOoVi5kTLgKNRX8xh2sUPekH0Id1l4Ymw+lpgriEY6r60bmkZLysLG1GhlskpQ/da2+S2ap2ht8P2TQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.10", - "@storybook/core-events": "7.6.10", + "@storybook/client-logger": "7.6.12", + "@storybook/core-events": "7.6.12", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -4670,23 +4624,23 @@ } }, "node_modules/@storybook/cli": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.10.tgz", - "integrity": "sha512-pK1MEseMm73OMO2OVoSz79QWX8ymxgIGM8IeZTCo9gImiVRChMNDFYcv8yPWkjuyesY8c15CoO48aR7pdA1OjQ==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.12.tgz", + "integrity": "sha512-x4sG1oIVERxp+WnWUexVlgaJCFmML0kGi7a5qfx7z4vHMxCV/WG7g1q7mPS/kqStCGEiQdTciCqOEFqlMh9MLw==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.6.10", - "@storybook/core-common": "7.6.10", - "@storybook/core-events": "7.6.10", - "@storybook/core-server": "7.6.10", - "@storybook/csf-tools": "7.6.10", - "@storybook/node-logger": "7.6.10", - "@storybook/telemetry": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/codemod": "7.6.12", + "@storybook/core-common": "7.6.12", + "@storybook/core-events": "7.6.12", + "@storybook/core-server": "7.6.12", + "@storybook/csf-tools": "7.6.12", + "@storybook/node-logger": "7.6.12", + "@storybook/telemetry": "7.6.12", + "@storybook/types": "7.6.12", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -4734,57 +4688,10 @@ "node": ">= 6" } }, - "node_modules/@storybook/cli/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@storybook/cli/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/cli/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@storybook/cli/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" @@ -4793,18 +4700,6 @@ "node": ">=10" } }, - "node_modules/@storybook/cli/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/cli/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -4827,9 +4722,9 @@ "dev": true }, "node_modules/@storybook/client-logger": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.10.tgz", - "integrity": "sha512-U7bbpu21ntgePMz/mKM18qvCSWCUGCUlYru8mgVlXLCKqFqfTeP887+CsPEQf29aoE3cLgDrxqbRJ1wxX9kL9A==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.12.tgz", + "integrity": "sha512-hiRv6dXsOttMPqm9SxEuFoAtDe9rs7TUS8XcO5rmJ9BgfwBJsYlHzAxXkazxmvlyZtKL7gMx6m8OYbCdZgUqtA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -4840,18 +4735,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.10.tgz", - "integrity": "sha512-pzFR0nocBb94vN9QCJLC3C3dP734ZigqyPmd0ZCDj9Xce2ytfHK3v1lKB6TZWzKAZT8zztauECYxrbo4LVuagw==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.12.tgz", + "integrity": "sha512-4EI4Ah1cvz6gFkXOS/LGf23oN8LO6ABGpWwPQoMHpIV3wUkFWBwrKFUe/UAQZGptnM0VZRYx4grS82Hluw4XJA==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.10", - "@storybook/node-logger": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/csf-tools": "7.6.12", + "@storybook/node-logger": "7.6.12", + "@storybook/types": "7.6.12", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^11.0.2", @@ -4866,18 +4761,18 @@ } }, "node_modules/@storybook/components": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.10.tgz", - "integrity": "sha512-H5hF8pxwtbt0LxV24KMMsPlbYG9Oiui3ObvAQkvGu6q62EYxRPeNSrq3GBI5XEbI33OJY9bT24cVaZx18dXqwQ==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.12.tgz", + "integrity": "sha512-PCijPqmlZd7qyTzNr+vD0Kf8sAI9vWJIaxbSjXwn/De3e63m4fsEcIf8FaUT8cMZ46AWZvaxaxX5km2u0UISJQ==", "dev": true, "dependencies": { "@radix-ui/react-select": "^1.2.2", "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.6.10", + "@storybook/client-logger": "7.6.12", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/theming": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/theming": "7.6.12", + "@storybook/types": "7.6.12", "memoizerific": "^1.11.3", "use-resize-observer": "^9.1.0", "util-deprecate": "^1.0.2" @@ -4892,13 +4787,13 @@ } }, "node_modules/@storybook/core-client": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.10.tgz", - "integrity": "sha512-DjnzSzSNDmZyxyg6TxugzWQwOsW+n/iWVv6sHNEvEd5STr0mjuJjIEELmv58LIr5Lsre5+LEddqHsyuLyt8ubg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.12.tgz", + "integrity": "sha512-VzVp32tMZsCzM4UIqfvCoJF7N9mBf6dsAxh1/ZgViy75Fht78pGo3JwZXW8osMbFSRpmWD7fxlUM5S7TQOYQug==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.10", - "@storybook/preview-api": "7.6.10" + "@storybook/client-logger": "7.6.12", + "@storybook/preview-api": "7.6.12" }, "funding": { "type": "opencollective", @@ -4906,14 +4801,14 @@ } }, "node_modules/@storybook/core-common": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.10.tgz", - "integrity": "sha512-K3YWqjCKMnpvYsWNjOciwTH6zWbuuZzmOiipziZaVJ+sB1XYmH52Y3WGEm07TZI8AYK9DRgwA13dR/7W0nw72Q==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.12.tgz", + "integrity": "sha512-kM9YiBBMM2x5v/oylL7gdO1PS4oehgJC21MivS9p5QZ8uuXKtCQ6UQvI3rzaV+1ZzUA4n+I8MyaMrNIQk8KDbw==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.10", - "@storybook/node-logger": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/core-events": "7.6.12", + "@storybook/node-logger": "7.6.12", + "@storybook/types": "7.6.12", "@types/find-cache-dir": "^3.2.1", "@types/node": "^18.0.0", "@types/node-fetch": "^2.6.4", @@ -4940,84 +4835,15 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-common/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/core-common/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "18.19.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz", - "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==", + "version": "18.19.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", + "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, - "node_modules/@storybook/core-common/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, "node_modules/@storybook/core-common/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -5041,9 +4867,9 @@ } }, "node_modules/@storybook/core-events": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.10.tgz", - "integrity": "sha512-yccDH67KoROrdZbRKwxgTswFMAco5nlCyxszCDASCLygGSV2Q2e+YuywrhchQl3U6joiWi3Ps1qWu56NeNafag==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.12.tgz", + "integrity": "sha512-IO4cwk7bBCKH6lLnnIlHO9FwQXt/9CzLUAoZSY9msWsdPppCdKlw8ynJI5YarSNKDBUn8ArIfnRf0Mve0KQr9Q==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -5054,26 +4880,26 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.10.tgz", - "integrity": "sha512-2icnqJkn3vwq0eJPP0rNaHd7IOvxYf5q4lSVl2AWTxo/Ae19KhokI6j/2vvS2XQJMGQszwshlIwrZUNsj5p0yw==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.12.tgz", + "integrity": "sha512-tjWifKsDnIc8pvbjVyQrOHef70Gcp93Bg3WwuysB8PGk7lcX2RD9zv44HNIyjxdOLSSv66IGKrOldEBL3hab4w==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.6.10", - "@storybook/channels": "7.6.10", - "@storybook/core-common": "7.6.10", - "@storybook/core-events": "7.6.10", + "@storybook/builder-manager": "7.6.12", + "@storybook/channels": "7.6.12", + "@storybook/core-common": "7.6.12", + "@storybook/core-events": "7.6.12", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.10", + "@storybook/csf-tools": "7.6.12", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.6.10", - "@storybook/node-logger": "7.6.10", - "@storybook/preview-api": "7.6.10", - "@storybook/telemetry": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/manager": "7.6.12", + "@storybook/node-logger": "7.6.12", + "@storybook/preview-api": "7.6.12", + "@storybook/telemetry": "7.6.12", + "@storybook/types": "7.6.12", "@types/detect-port": "^1.3.0", "@types/node": "^18.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -5107,9 +4933,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz", - "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==", + "version": "18.19.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", + "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -5158,12 +4984,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.10.tgz", - "integrity": "sha512-Sc+zZg/BnPH2X28tthNaQBnDiFfO0QmfjVoOx0fGYM9SvY3P5ehzWwp5hMRBim6a/twOTzePADtqYL+t6GMqqg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.12.tgz", + "integrity": "sha512-fe/84AyctJcrpH1F/tTBxKrbjv0ilmG3ZTwVcufEiAzupZuYjQ/0P+Pxs8m8VxiGJZZ1pWofFFDbYi+wERjamQ==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.6.10", + "@storybook/csf-tools": "7.6.12", "unplugin": "^1.3.1" }, "funding": { @@ -5172,9 +4998,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.10.tgz", - "integrity": "sha512-TnDNAwIALcN6SA4l00Cb67G02XMOrYU38bIpFJk5VMDX2dvgPjUtJNBuLmEbybGcOt7nPyyFIHzKcY5FCVGoWA==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.12.tgz", + "integrity": "sha512-MdhkYYxSW5I6Jpk34gTkAZsuj9sxe0xdyeUQpNa8CgJxG43F+ehZ6scW/IPjoSG9gCXBUJMekq26UrmbVfsLCQ==", "dev": true, "dependencies": { "@babel/generator": "^7.23.0", @@ -5182,7 +5008,7 @@ "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.10", + "@storybook/types": "7.6.12", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -5199,14 +5025,14 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.10.tgz", - "integrity": "sha512-UgbikducoXzqQHf2TozO0f2rshaeBNnShVbL5Ai4oW7pDymBmrfzdjGbF/milO7yxNKcoIByeoNmu384eBamgQ==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.12.tgz", + "integrity": "sha512-nY2lqEDTd/fR/D91ZLlIp+boSuJtkb8DqHW7pECy61rJqzGq4QpepRaWjQDKnGTgPItrsPfTPOu6iXvXNK07Ow==", "dev": true, "dependencies": { - "@storybook/core-common": "7.6.10", - "@storybook/preview-api": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/core-common": "7.6.12", + "@storybook/preview-api": "7.6.12", + "@storybook/types": "7.6.12", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -5224,16 +5050,16 @@ "dev": true }, "node_modules/@storybook/instrumenter": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.6.10.tgz", - "integrity": "sha512-9FYXW1CKXnZ7yYmy2A6U0seqJMe1F7g55J28Vslk3ZLoGATFJ2BR0eoQS+cgfBly6djehjaVeuV3IcUYGnQ/6Q==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.6.12.tgz", + "integrity": "sha512-BK+hCz2tuUSDPvN0kACR+Ev7lQj4SLlMdXiJgRGdnKWR7zr1OFEg9MEIwPHNC+Ywny1x7YOwrbNJ9sdISNIh0g==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.10", - "@storybook/client-logger": "7.6.10", - "@storybook/core-events": "7.6.10", + "@storybook/channels": "7.6.12", + "@storybook/client-logger": "7.6.12", + "@storybook/core-events": "7.6.12", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.6.10", + "@storybook/preview-api": "7.6.12", "@vitest/utils": "^0.34.6", "util": "^0.12.4" }, @@ -5243,9 +5069,9 @@ } }, "node_modules/@storybook/manager": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.10.tgz", - "integrity": "sha512-Co3sLCbNYY6O4iH2ggmRDLCPWLj03JE5s/DOG8OVoXc6vBwTc/Qgiyrsxxp6BHQnPpM0mxL6aKAxE3UjsW/Nog==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.12.tgz", + "integrity": "sha512-WMWvswJHGiqJFJb98WQMQfZQhLuVtmci4y/VJGQ/Jnq1nJQs76BCtaeGiHcsYmRaAP1HMI4DbzuTSEgca146xw==", "dev": true, "funding": { "type": "opencollective", @@ -5253,19 +5079,19 @@ } }, "node_modules/@storybook/manager-api": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.10.tgz", - "integrity": "sha512-8eGVpRlpunuFScDtc7nxpPJf/4kJBAAZlNdlhmX09j8M3voX6GpcxabBamSEX5pXZqhwxQCshD4IbqBmjvadlw==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.12.tgz", + "integrity": "sha512-XA5KQpY44d6mlqt0AlesZ7fsPpm1PCpoV+nRGFBR0YtF6RdPFvrPyHhlGgLkJC4xSyb2YJmLKn8cERSluAcEgQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.10", - "@storybook/client-logger": "7.6.10", - "@storybook/core-events": "7.6.10", + "@storybook/channels": "7.6.12", + "@storybook/client-logger": "7.6.12", + "@storybook/core-events": "7.6.12", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/router": "7.6.10", - "@storybook/theming": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/router": "7.6.12", + "@storybook/theming": "7.6.12", + "@storybook/types": "7.6.12", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -5285,9 +5111,9 @@ "dev": true }, "node_modules/@storybook/node-logger": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.10.tgz", - "integrity": "sha512-ZBuqrv4bjJzKXyfRGFkVIi+z6ekn6rOPoQao4KmsfLNQAUUsEdR8Baw/zMnnU417zw5dSEaZdpuwx75SCQAeOA==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.12.tgz", + "integrity": "sha512-iS44/EjfF6hLecKzICmcpQoB9bmVi4tXx5gVXnbI5ZyziBibRQcg/U191Njl7wY2ScN/RCQOr8lh5k57rI3Prg==", "dev": true, "funding": { "type": "opencollective", @@ -5295,9 +5121,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.10.tgz", - "integrity": "sha512-SMdXtednPCy3+SRJ7oN1OPN1oVFhj3ih+ChOEX8/kZ5J3nfmV3wLPtsZvFGUCf0KWQEP1xL+1Urv48mzMKcV/w==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.12.tgz", + "integrity": "sha512-uR0mDPxLzPaouCNrLp8vID8lATVTOtG7HB6lfjjzMdE3sN6MLmK9n2z2nXjb5DRRxOFWMeE1/4Age1/Ml2tnmA==", "dev": true, "funding": { "type": "opencollective", @@ -5305,9 +5131,9 @@ } }, "node_modules/@storybook/preview": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.10.tgz", - "integrity": "sha512-F07BzVXTD3byq+KTWtvsw3pUu3fQbyiBNLFr2CnfU4XSdLKja5lDt8VqDQq70TayVQOf5qfUTzRd4M6pQkjw1w==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.12.tgz", + "integrity": "sha512-7vbeqQY3X+FCt/ccgCuBmj4rkbQebLHGEBAt8elcX0E2pr7SGW57lWhnasU3jeMaz7tNrkcs0gfl4hyVRWUHDg==", "dev": true, "funding": { "type": "opencollective", @@ -5315,17 +5141,17 @@ } }, "node_modules/@storybook/preview-api": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.10.tgz", - "integrity": "sha512-5A3etoIwZCx05yuv3KSTv1wynN4SR4rrzaIs/CTBp3BC4q1RBL+Or/tClk0IJPXQMlx/4Y134GtNIBbkiDofpw==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.12.tgz", + "integrity": "sha512-uSzeMSLnCRROjiofJP0F0niLWL+sboQ5ktHW6BAYoPwprumXduPxKBUVEZNxMbVYoAz9v/kEZmaLauh8LRP2Hg==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.10", - "@storybook/client-logger": "7.6.10", - "@storybook/core-events": "7.6.10", + "@storybook/channels": "7.6.12", + "@storybook/client-logger": "7.6.12", + "@storybook/core-events": "7.6.12", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.10", + "@storybook/types": "7.6.12", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -5341,18 +5167,18 @@ } }, "node_modules/@storybook/react": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.10.tgz", - "integrity": "sha512-wwBn1cg2uZWW4peqqBjjU7XGmFq8HdkVUtWwh6dpfgmlY1Aopi+vPgZt7pY9KkWcTOq5+DerMdSfwxukpc3ajQ==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.12.tgz", + "integrity": "sha512-ITDRGi79Qg+z1kGYv+yyJESz/5AsJVdBTMO7tr1qV7gmHElkASt6UR8SBSqKgePOnYgy3k/1PLfbzOs6G4OgYQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.10", - "@storybook/core-client": "7.6.10", - "@storybook/docs-tools": "7.6.10", + "@storybook/client-logger": "7.6.12", + "@storybook/core-client": "7.6.12", + "@storybook/docs-tools": "7.6.12", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.6.10", - "@storybook/react-dom-shim": "7.6.10", - "@storybook/types": "7.6.10", + "@storybook/preview-api": "7.6.12", + "@storybook/react-dom-shim": "7.6.12", + "@storybook/types": "7.6.12", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^18.0.0", @@ -5387,9 +5213,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.10.tgz", - "integrity": "sha512-M+N/h6ximacaFdIDjMN2waNoWwApeVYTpFeoDppiFTvdBTXChyIuiPgYX9QSg7gDz92OaA52myGOot4wGvXVzg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.12.tgz", + "integrity": "sha512-P8eu/s/RQlc/7Yvr260lqNa6rttxIYiPUuHQBu9oCacwkpB3Xep2R/PUY2CifRHqlDhaOINO/Z79oGZl4EBQRQ==", "dev": true, "funding": { "type": "opencollective", @@ -5401,15 +5227,15 @@ } }, "node_modules/@storybook/react-vite": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.6.10.tgz", - "integrity": "sha512-YE2+J1wy8nO+c6Nv/hBMu91Edew3K184L1KSnfoZV8vtq2074k1Me/8pfe0QNuq631AncpfCYNb37yBAXQ/80w==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-7.6.12.tgz", + "integrity": "sha512-kQjCWmTcHuZM1Mlt1QjpYNXP1TxfkSDFWC36fSEUC0q48wzyjUEZs6YraxZu0YE+zXK+X4tmaZhz8pUPgV3gLw==", "dev": true, "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.3.0", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "7.6.10", - "@storybook/react": "7.6.10", + "@storybook/builder-vite": "7.6.12", + "@storybook/react": "7.6.12", "@vitejs/plugin-react": "^3.0.1", "magic-string": "^0.30.0", "react-docgen": "^7.0.0" @@ -5434,42 +5260,21 @@ "dev": true }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz", - "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==", + "version": "18.19.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", + "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, - "node_modules/@storybook/react/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@storybook/react/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@storybook/router": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.10.tgz", - "integrity": "sha512-G/H4Jn2+y8PDe8Zbq4DVxF/TPn0/goSItdILts39JENucHiuGBCjKjSWGBe1rkwKi1tUbB3yhxJVrLagxFEPpQ==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.12.tgz", + "integrity": "sha512-1fqscJbePFJXhapqiv7fAIIqAvouSsdPnqWjJGJrUMR6JBtRYMcrb3MnDeqi9OYnU73r65BrQBPtSzWM8nP0LQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.10", + "@storybook/client-logger": "7.6.12", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -5479,14 +5284,14 @@ } }, "node_modules/@storybook/telemetry": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.10.tgz", - "integrity": "sha512-p3mOSUtIyy2tF1z6pQXxNh1JzYFcAm97nUgkwLzF07GfEdVAPM+ftRSLFbD93zVvLEkmLTlsTiiKaDvOY/lQWg==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.12.tgz", + "integrity": "sha512-eBG3sLb9CZ05pyK2JXBvnaAsxDzbZH57VyhtphhuZmx0DqF/78qIoHs9ebRJpJWV0sL5rtT9vIq8QXpQhDHLWg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.10", - "@storybook/core-common": "7.6.10", - "@storybook/csf-tools": "7.6.10", + "@storybook/client-logger": "7.6.12", + "@storybook/core-common": "7.6.12", + "@storybook/csf-tools": "7.6.12", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -5499,15 +5304,15 @@ } }, "node_modules/@storybook/test": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-7.6.10.tgz", - "integrity": "sha512-dn/T+HcWOBlVh3c74BHurp++BaqBoQgNbSIaXlYDpJoZ+DzNIoEQVsWFYm5gCbtKK27iFd4n52RiQI3f6Vblqw==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-7.6.12.tgz", + "integrity": "sha512-kOkgr9EJqeitoN3ubbVRrAysHCqxpAFAyKzWCGuic9ynxvfTOc5prup0e05/GJmbHYqkWsOyaordXgcHvy8JaQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.10", - "@storybook/core-events": "7.6.10", - "@storybook/instrumenter": "7.6.10", - "@storybook/preview-api": "7.6.10", + "@storybook/client-logger": "7.6.12", + "@storybook/core-events": "7.6.12", + "@storybook/instrumenter": "7.6.12", + "@storybook/preview-api": "7.6.12", "@testing-library/dom": "^9.3.1", "@testing-library/jest-dom": "^6.1.3", "@testing-library/user-event": "14.3.0", @@ -5523,13 +5328,13 @@ } }, "node_modules/@storybook/theming": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.10.tgz", - "integrity": "sha512-f5tuy7yV3TOP3fIboSqpgLHy0wKayAw/M8HxX0jVET4Z4fWlFK0BiHJabQ+XEdAfQM97XhPFHB2IPbwsqhCEcQ==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.12.tgz", + "integrity": "sha512-P4zoMKlSYbNrWJjQROuz+DZSDEpdf3TUvk203EqBRdElqw2EMHcqZ8+0HGPFfVHpqEj05+B9Mr6R/Z/BURj0lw==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.10", + "@storybook/client-logger": "7.6.12", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -5543,12 +5348,12 @@ } }, "node_modules/@storybook/types": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.10.tgz", - "integrity": "sha512-hcS2HloJblaMpCAj2axgGV+53kgSRYPT0a1PG1IHsZaYQILfHSMmBqM8XzXXYTsgf9250kz3dqFX1l0n3EqMlQ==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.12.tgz", + "integrity": "sha512-Wsbd+NS10/2yMHQ/26rXHflXam0hm2qufTFiHOX6VXZWxij3slRU88Fnwzp+1QSyjXb0qkEr8dOx7aG00+ItVw==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.10", + "@storybook/channels": "7.6.12", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -5558,6 +5363,54 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@stylexjs/babel-plugin": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@stylexjs/babel-plugin/-/babel-plugin-0.4.1.tgz", + "integrity": "sha512-usG7HFvq04ELD44BAukQlTzKwmw3B0isOgsYzO97iGTkHMi7CJN4hniag7Fj96hrTob8Kq6MBbbQkLeKzbjqIg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.6", + "@babel/helper-module-imports": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6", + "@stylexjs/shared": "0.4.1", + "@stylexjs/stylex": "0.4.1" + } + }, + "node_modules/@stylexjs/rollup-plugin": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@stylexjs/rollup-plugin/-/rollup-plugin-0.4.1.tgz", + "integrity": "sha512-EQ0QZobYiaOUwscJ5z05OBqn0kwi3xZYXrinoxUXM0PWzHMBjisKIP/6TAG88xlAvrWYxGaGKFI7HBEm1IEqaA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.6", + "@babel/plugin-syntax-flow": "^7.23.3", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-syntax-typescript": "^7.23.3", + "@stylexjs/babel-plugin": "0.4.1" + } + }, + "node_modules/@stylexjs/shared": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@stylexjs/shared/-/shared-0.4.1.tgz", + "integrity": "sha512-4h1rVuwE9iPN0yor0kvtHhMo7XjWrG3DdPYWZI9c6V4AquAbh53KxN6v6X9woM2HKUbt0GzjyCsEjc6Ci6Lo4w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0" + } + }, + "node_modules/@stylexjs/stylex": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@stylexjs/stylex/-/stylex-0.4.1.tgz", + "integrity": "sha512-xc3hjEtqpluoZ1RcJZ1c59bdMITMHPh0FmCNi/01amaPhEw040WqgR/KGFHIqxIer9wt5mOeED3iM9tSrljeaQ==", + "dev": true, + "dependencies": { + "css-mediaquery": "^0.1.2", + "invariant": "^2.2.4", + "styleq": "0.1.3", + "utility-types": "^3.10.0" + } + }, "node_modules/@testing-library/dom": { "version": "9.3.4", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", @@ -5578,9 +5431,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.2.0.tgz", - "integrity": "sha512-+BVQlJ9cmEn5RDMUS8c2+TU6giLvzaHZ8sU/x0Jj7fk+6/46wPdwlgOPcpxS17CjcanBi/3VmGMqVr2rmbUmNw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.1.tgz", + "integrity": "sha512-Z7qMM3J2Zw5H/nC2/5CYx5YcuaD56JmDFKNIozZ89VIo6o6Y9FMhssics4e2madEKYDNEpZz3+glPGz0yWMOag==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.3.2", @@ -5599,6 +5452,7 @@ }, "peerDependencies": { "@jest/globals": ">= 28", + "@types/bun": "latest", "@types/jest": ">= 28", "jest": ">= 28", "vitest": ">= 0.32" @@ -5607,6 +5461,9 @@ "@jest/globals": { "optional": true }, + "@types/bun": { + "optional": true + }, "@types/jest": { "optional": true }, @@ -5842,9 +5699,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", "dev": true, "dependencies": { "@types/node": "*", @@ -5959,9 +5816,9 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz", - "integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.11.tgz", + "integrity": "sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==", "dev": true }, "node_modules/@types/mime": { @@ -5988,17 +5845,17 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "version": "20.11.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", + "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/node-fetch": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.10.tgz", - "integrity": "sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" @@ -6041,9 +5898,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.48", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", - "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "version": "18.2.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.52.tgz", + "integrity": "sha512-E/YjWh3tH+qsLKaUzgpZb5AY0ChVa+ZJzF7ogehVILrFpdQk6nC/WXOv0bfFEABbXbgNxLBGU7IIZByPKb6eBw==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -6140,9 +5997,9 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, "node_modules/@types/uuid": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", "dev": true }, "node_modules/@types/yargs": { @@ -6161,16 +6018,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz", - "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", + "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.19.0", - "@typescript-eslint/type-utils": "6.19.0", - "@typescript-eslint/utils": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/type-utils": "6.20.0", + "@typescript-eslint/utils": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -6229,15 +6086,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz", - "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", + "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.19.0", - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/typescript-estree": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4" }, "engines": { @@ -6257,13 +6114,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz", - "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", + "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6274,13 +6131,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz", - "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", + "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.19.0", - "@typescript-eslint/utils": "6.19.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/utils": "6.20.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -6301,9 +6158,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz", - "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", + "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6314,13 +6171,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz", - "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", + "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/visitor-keys": "6.19.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6375,17 +6232,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", - "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", + "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.19.0", - "@typescript-eslint/types": "6.19.0", - "@typescript-eslint/typescript-estree": "6.19.0", + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", "semver": "^7.5.4" }, "engines": { @@ -6433,12 +6290,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz", - "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.19.0", + "@typescript-eslint/types": "6.20.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -6625,9 +6482,9 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -6646,9 +6503,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -7015,9 +6872,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", "dev": true, "engines": { "node": ">= 0.4" @@ -7066,29 +6923,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", - "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7166,59 +7007,271 @@ "node": ">=4" } }, - "node_modules/bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "node_modules/bin-build/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dependencies": { - "execa": "^0.7.0", - "executable": "^4.1.0" - }, - "engines": { - "node": ">=4" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "node_modules/bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "node_modules/bin-build/node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dependencies": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", - "dependencies": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" - }, + "node_modules/bin-build/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/bin-version-check/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" + "node_modules/bin-build/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/bin-version/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/bin-build/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/bin-build/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/bin-build/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/bin-check": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "dependencies": { + "execa": "^0.7.0", + "executable": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/bin-check/node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-check/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/bin-check/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-check/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-check/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-check/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/bin-check/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "dependencies": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "dependencies": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/bin-version-check/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/bin-version/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" }, @@ -7254,6 +7307,25 @@ "node": ">=6" } }, + "node_modules/bin-version/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-version/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/bin-version/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -7475,44 +7547,14 @@ } }, "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bl/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/bl/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "node_modules/body-parser": { @@ -7548,18 +7590,6 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7629,9 +7659,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, "funding": [ { @@ -7648,8 +7678,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -7873,9 +7903,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001579", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", - "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "version": "1.0.30001583", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz", + "integrity": "sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==", "dev": true, "funding": [ { @@ -7906,6 +7936,16 @@ "node": ">=4" } }, + "node_modules/cdate": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/cdate/-/cdate-0.0.7.tgz", + "integrity": "sha512-11EnUjVX6hwL0FcDNE2F0wh+0KnQieTfPUdPHNdQHbrvFdEbqfRULkA8nMcfT2tXCGw/ABRdYLqQ0SmbeWawTA==" + }, + "node_modules/cdate-schedule": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/cdate-schedule/-/cdate-schedule-0.0.1.tgz", + "integrity": "sha512-rP6nydghUh/t+J1TQtT31RwZiNeXzkEAtpVzNjHQsf6n655dHeQD0LTxSZeR1QvKWajGvJ/W+TE5sdpch6+zqg==" + }, "node_modules/chai": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", @@ -7988,6 +8028,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -8331,9 +8383,9 @@ "dev": true }, "node_modules/core-js-compat": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", - "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", + "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", "dev": true, "dependencies": { "browserslist": "^4.22.2" @@ -8385,6 +8437,12 @@ "node": ">=8" } }, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==", + "dev": true + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -8439,30 +8497,6 @@ "cytoscape": "^3.2.0" } }, - "node_modules/cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "dependencies": { - "cose-base": "^2.2.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "dependencies": { - "layout-base": "^2.0.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - }, "node_modules/d3": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", @@ -8630,6 +8664,17 @@ "node": ">= 10" } }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/d3-ease": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", @@ -8976,6 +9021,14 @@ "node": ">=4" } }, + "node_modules/decompress-tar/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decompress-tarbz2": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", @@ -8999,6 +9052,14 @@ "node": ">=4" } }, + "node_modules/decompress-tarbz2/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decompress-targz": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", @@ -9020,6 +9081,14 @@ "node": ">=4" } }, + "node_modules/decompress-targz/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decompress-unzip": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", @@ -9042,6 +9111,18 @@ "node": ">=0.10.0" } }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decompress-unzip/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -9229,6 +9310,36 @@ "node": ">=8" } }, + "node_modules/del/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/del/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/del/node_modules/globby": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", @@ -9248,12 +9359,24 @@ "node": ">=8" } }, + "node_modules/del/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", "dependencies": { - "robust-predicates": "^3.0.0" + "robust-predicates": "^3.0.2" } }, "node_modules/delayed-stream": { @@ -9318,65 +9441,6 @@ "node": ">=12" } }, - "node_modules/detect-package-manager/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/detect-package-manager/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/detect-package-manager/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/detect-package-manager/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-port": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", @@ -9439,14 +9503,14 @@ "dev": true }, "node_modules/dompurify": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.8.tgz", + "integrity": "sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==" }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", "dev": true, "engines": { "node": ">=12" @@ -9601,15 +9665,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.639", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz", - "integrity": "sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==", + "version": "1.4.656", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz", + "integrity": "sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q==", "dev": true }, "node_modules/elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.1.tgz", + "integrity": "sha512-JWKDyqAdltuUcyxaECtYG6H4sqysXSLeoXuGUBfRNESMTkj+w+qdb0jya8Z/WI0jVd03WQtCGhS6FOFtlhD5FQ==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -9635,9 +9699,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -9797,9 +9861,9 @@ } }, "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, "hasInstallScript": true, "bin": { @@ -9809,28 +9873,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, "node_modules/esbuild-android-64": { @@ -10187,11 +10251,15 @@ "dev": true }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -10963,40 +11031,16 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint/node_modules/globals": { @@ -11067,6 +11111,18 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/espree/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -11152,26 +11208,26 @@ "node": ">=4" } }, - "node_modules/exec-buffer/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" + "node_modules/exec-buffer/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/exec-buffer/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/exec-buffer/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "node_modules/execa": { + "node_modules/exec-buffer/node_modules/execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", @@ -11188,17 +11244,7 @@ "node": ">=4" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/execa/node_modules/get-stream": { + "node_modules/exec-buffer/node_modules/get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", @@ -11206,7 +11252,34 @@ "node": ">=4" } }, - "node_modules/execa/node_modules/lru-cache": { + "node_modules/exec-buffer/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/exec-buffer/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-buffer/node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", @@ -11215,7 +11288,56 @@ "yallist": "^2.1.2" } }, - "node_modules/execa/node_modules/shebang-command": { + "node_modules/exec-buffer/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/exec-buffer/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/exec-buffer/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/exec-buffer/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", @@ -11226,7 +11348,7 @@ "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/shebang-regex": { + "node_modules/exec-buffer/node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", @@ -11234,7 +11356,7 @@ "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/which": { + "node_modules/exec-buffer/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", @@ -11245,11 +11367,34 @@ "which": "bin/which" } }, - "node_modules/execa/node_modules/yallist": { + "node_modules/exec-buffer/node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/executable": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", @@ -11269,10 +11414,6 @@ "node": ">=0.10.0" } }, - "node_modules/exporter": { - "resolved": "../exporter", - "link": true - }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -11425,6 +11566,17 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -11438,9 +11590,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", "dependencies": { "reusify": "^1.0.4" } @@ -11714,14 +11866,6 @@ "node": ">=6" } }, - "node_modules/find-versions/node_modules/semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "engines": { - "node": ">=6" - } - }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -11743,9 +11887,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.227.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.227.0.tgz", - "integrity": "sha512-nOygtGKcX/siZK/lFzpfdHEfOkfGcTW7rNroR1Zsz6T/JxSahPALXVt5qVHq/fgvMJuv096BTKbgxN3PzVBaDA==", + "version": "0.228.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.228.0.tgz", + "integrity": "sha512-xPWkzCO07AnS8X+fQFpWm+tJ+C7aeaiVzJ+rSepbkCXUvUJ6l6squEl63axoMcixyH4wLjmypOzq/+zTD0O93w==", "dev": true, "engines": { "node": ">=0.4.0" @@ -12048,15 +12192,15 @@ } }, "node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { @@ -12114,52 +12258,34 @@ "dev": true }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", - "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "@types/glob": "^7.1.3" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/ahmadnassri" - }, - "peerDependencies": { - "glob": "^7.1.6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { @@ -12168,24 +12294,16 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/globals": { @@ -12276,6 +12394,14 @@ "node": ">=4" } }, + "node_modules/got/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -12399,12 +12525,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -12493,11 +12619,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -12523,9 +12650,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { "node": ">= 4" } @@ -12815,14 +12942,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13231,11 +13360,15 @@ } }, "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { @@ -13269,12 +13402,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -13779,9 +13912,10 @@ } }, "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, "engines": { "node": ">=6" } @@ -13934,9 +14068,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.6", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.6.tgz", + "integrity": "sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -13982,9 +14116,9 @@ "dev": true }, "node_modules/markdown-to-jsx": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.0.tgz", - "integrity": "sha512-zilc+MIkVVXPyTb4iIUTIz9yyqfcWjszGXnwF9K/aiBWcHXFcmdEMTkG01/oQhwSCH7SY1BnG6+ev5BzWmbPrg==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz", + "integrity": "sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==", "dev": true, "engines": { "node": ">= 10" @@ -14080,22 +14214,21 @@ } }, "node_modules/mermaid": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.6.1.tgz", - "integrity": "sha512-Hky0/RpOw/1il9X8AvzOEChfJtVvmXm+y7JML5C//ePYMy0/9jCEmW1E1g86x9oDfW9+iVEdTV/i+M6KWRNs4A==", + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.8.0.tgz", + "integrity": "sha512-9CzfSreRjdDJxX796+jW4zjEq0DVw5xVF0nWsqff8OTbrt+ml0TZ5PyYUjjUZJa2NYxYJZZXewEquxGiM8qZEA==", "dependencies": { "@braintree/sanitize-url": "^6.0.1", "@types/d3-scale": "^4.0.3", "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.23.0", + "cytoscape": "^3.28.1", "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", "d3": "^7.4.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.10", "dayjs": "^1.11.7", "dompurify": "^3.0.5", - "elkjs": "^0.8.2", + "elkjs": "^0.9.0", "khroma": "^2.0.0", "lodash-es": "^4.17.21", "mdast-util-from-markdown": "^1.3.0", @@ -14904,33 +15037,26 @@ } }, "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "dependencies": { - "path-key": "^2.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/nypm": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.4.tgz", - "integrity": "sha512-1JLkp/zHBrkS3pZ692IqOaIKSYHmQXgqfELk6YTOfVBnwealAmPA1q2kKK7PHJAHSMBozerThEFZXP3G6o7Ukg==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.6.tgz", + "integrity": "sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==", "dev": true, "dependencies": { "citty": "^0.1.5", "execa": "^8.0.1", - "pathe": "^1.1.1", + "pathe": "^1.1.2", "ufo": "^1.3.2" }, "bin": { @@ -15314,17 +15440,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/os-filter-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", @@ -15557,9 +15672,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -15688,9 +15803,9 @@ } }, "node_modules/polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", "dev": true, "dependencies": { "@babel/runtime": "^7.17.8" @@ -15728,6 +15843,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15839,15 +15960,6 @@ "node": ">= 6" } }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -15954,6 +16066,36 @@ "node": ">=8.16.0" } }, + "node_modules/puppeteer-core/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/puppeteer-core/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/puppeteer-core/node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -15966,6 +16108,18 @@ "node": ">=4.0.0" } }, + "node_modules/puppeteer-core/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/puppeteer-core/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -16090,18 +16244,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -16737,15 +16879,57 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/robust-predicates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -16758,19 +16942,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, @@ -16964,6 +17148,14 @@ "semver": "bin/semver.js" } }, + "node_modules/semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "engines": { + "node": ">=6" + } + }, "node_modules/semver-truncate": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", @@ -17232,9 +17424,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", + "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -17287,12 +17479,12 @@ "dev": true }, "node_modules/storybook": { - "version": "7.6.10", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.10.tgz", - "integrity": "sha512-ypFeGhQTUBBfqSUVZYh7wS5ghn3O2wILCiQc4459SeUpvUn+skcqw/TlrwGSoF5EWjDA7gtRrWDxO3mnlPt5Cw==", + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.12.tgz", + "integrity": "sha512-zcH9CwIsE8N4PX3he5vaJ3mTTWGxu7cxJ/ag9oja/k3N5/IvQjRyIU1TLkRVb28BB8gaLyorpnc4C4aLVGy4WQ==", "dev": true, "dependencies": { - "@storybook/cli": "7.6.10" + "@storybook/cli": "7.6.12" }, "bin": { "sb": "index.js", @@ -17303,34 +17495,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/storybook-dark-mode": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/storybook-dark-mode/-/storybook-dark-mode-3.0.3.tgz", - "integrity": "sha512-ZLBLVpkuKTdtUv3DTuOjeP/bE7DHhOxVpDROKc0NtEYq9JHLUu6z05LLZinE3v6QPXQZ9TMQPm3Xe/0BcLEZlw==", - "dev": true, - "dependencies": { - "@storybook/addons": "^7.0.0", - "@storybook/components": "^7.0.0", - "@storybook/core-events": "^7.0.0", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "^7.0.0", - "@storybook/theming": "^7.0.0", - "fast-deep-equal": "^3.1.3", - "memoizerific": "^1.11.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", @@ -17557,6 +17721,14 @@ "node": ">=0.10.0" } }, + "node_modules/strip-outer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/strtok3": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", @@ -17573,6 +17745,12 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/styleq": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/styleq/-/styleq-0.1.3.tgz", + "integrity": "sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==", + "dev": true + }, "node_modules/stylis": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", @@ -17637,17 +17815,6 @@ "tar-stream": "^2.1.4" } }, - "node_modules/tar-fs/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/tar-fs/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -17687,6 +17854,15 @@ "node": ">= 0.8.0" } }, + "node_modules/tar-stream/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "node_modules/tar-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -17752,18 +17928,60 @@ "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dev": true, "dependencies": { - "rimraf": "~2.6.2" + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/temp/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "node_modules/temp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=4" + "node": "*" } }, "node_modules/temp/node_modules/rimraf": { @@ -17840,18 +18058,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tempy/node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -17906,6 +18112,18 @@ "node": ">=10" } }, + "node_modules/terser/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -17936,6 +18154,26 @@ "concat-map": "0.0.1" } }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -18127,6 +18365,14 @@ "node": ">=0.10.0" } }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/ts-api-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", @@ -18190,6 +18436,27 @@ } } }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -18235,6 +18502,75 @@ "node": ">=12" } }, + "node_modules/tsm/node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsm/node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsm/node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", @@ -18584,6 +18920,18 @@ "webpack-virtual-modules": "^0.6.1" } }, + "node_modules/unplugin/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -18725,6 +19073,15 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -18771,6 +19128,14 @@ "node": ">=0.3.1" } }, + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -18797,9 +19162,9 @@ } }, "node_modules/vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, "peer": true, "dependencies": { @@ -18852,77 +19217,26 @@ } } }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], + "node_modules/vite-plugin-stylex-dev": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vite-plugin-stylex-dev/-/vite-plugin-stylex-dev-0.2.5.tgz", + "integrity": "sha512-FGx4HZSjIenZIpJOmvule1sS3OcXmaVOv9E5nNK/0sXunsAqQuAiJ7UJQwb+FI53FtEgGpuum5rpDn6v2LpNnQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "@babel/core": "^7.23.6", + "@babel/plugin-syntax-flow": "^7.23.3", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-syntax-typescript": "^7.23.3", + "@stylexjs/babel-plugin": "^0.4.1", + "es-module-lexer": "^1.4.1", + "magic-string": "^0.30.5" } }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } + "node_modules/vite-plugin-stylex-dev/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true }, "node_modules/vite/node_modules/rollup": { "version": "3.29.4", @@ -18973,9 +19287,9 @@ } }, "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", + "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==" }, "node_modules/webidl-conversions": { "version": "3.0.1", @@ -19079,16 +19393,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index 4ec6b365..8ed8d72a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rotion", - "version": "0.0.8", + "version": "0.0.10", "license": "MIT", "repository": "linyows/rotion", "description": "This is react components that uses the notion API to display the notion's database and page.", @@ -15,6 +15,7 @@ "import": "./dist/ui/esm/index.js", "require": "./dist/ui/cjs/index.js" }, + "./style.css": "./dist/ui/esm/style.css", "./styles/*": "./dist/ui/styles/*", "./package.json": "./package.json", "./README.md": "./README.md", @@ -40,22 +41,19 @@ ], "scripts": { "build": "npm run exporter:build && npm run ui:build", - "test": "npm run exporter:test && npm run ui:test", - + "test": "npm run exporter:test", "exporter:build": "npm run exporter:clean && tsc -p tsconfig.exporter.json", "exporter:clean": "rm -rf dist/exporter/*", "exporter:test": "tsm node_modules/uvu/bin.js ./src/exporter", - "ui:build": "npm run ui:lint && npm run ui:typecheck && npm run ui:rollup && npm run ui:styles", "ui:rollup": "rollup --config rollup.config.ts --configPlugin typescript", "ui:typecheck": "tsc -p src/ui/tsconfig.typecheck.json", "ui:styles": "cp -r ./src/ui/styles ./dist/ui/", "ui:lint": "eslint ./src/ui/components --ext .js,.jsx,.ts,.tsx -c ./src/ui/.eslintrc.json", - "ui:test": "npm run ui:lint && npm run ui:typecheck", - "ui:story": "storybook dev -p 6006", - "ui:build-story": "storybook build", - - "prepublishOnly": "npm install && npm run exporter:build && npm run exporter:test && npm run ui:build" + "ui:test": "uvu -r tsm ./src/ui/components", + "story": "storybook dev -p 6006", + "build-story": "storybook build", + "prepublishOnly": "npm install && npm run test && npm run build" }, "peerDependencies": { "react": "^17.0.2 || ^18.0.0-0", @@ -63,45 +61,41 @@ }, "dependencies": { "@notionhq/client": "^2.2.14", + "cdate": "^0.0.7", + "cdate-schedule": "^0.0.1", "file-type": "^18.7.0", "imagemin": "^8.0.1", "imagemin-webp": "^8.0.0", - "replace-ext": "^2.0.0", - - "mermaid": "^10.6.1", "katex": "^0.16.9", - "prismjs": "^1.25.0" + "mermaid": "^10.6.1", + "prismjs": "^1.25.0", + "replace-ext": "^2.0.0" }, "devDependencies": { - "@types/node": "^20.10.5", - "@types/imagemin": "^8.0.5", - "@types/imagemin-webp": "^7.0.3", - "@types/replace-ext": "^2.0.2", - "@tsconfig/node-lts-strictest-esm": "^18.12.1", - "testdouble": "^3.20.1", - "ts-node": "^10.9.2", - "tslib": "^2.6.2", - "tsm": "^2.3.0", - "typescript": "^5.3.3", - "uvu": "^0.5.6", - "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/addon-essentials": "^7.6.7", - "@storybook/addon-interactions": "^7.6.7", - "@storybook/addon-links": "^7.6.7", - "@storybook/addon-onboarding": "^1.0.10", - "@storybook/blocks": "^7.6.7", - "@storybook/react": "^7.6.7", - "@storybook/react-vite": "^7.6.7", - "@storybook/test": "^7.6.7", + "@storybook/addon-essentials": "^7.6.12", + "@storybook/addon-interactions": "^7.6.12", + "@storybook/addon-links": "^7.6.12", + "@storybook/addon-onboarding": "^1.0.11", + "@storybook/blocks": "^7.6.12", + "@storybook/react": "^7.6.12", + "@storybook/react-vite": "^7.6.12", + "@storybook/test": "^7.6.12", + "@stylexjs/rollup-plugin": "^0.4.1", + "@stylexjs/stylex": "^0.4.1", + "@tsconfig/node-lts-strictest-esm": "^18.12.1", + "@types/imagemin": "^8.0.5", + "@types/imagemin-webp": "^7.0.3", "@types/katex": "^0.16.7", + "@types/node": "^20.10.5", "@types/prismjs": "^1.26.3", "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", + "@types/replace-ext": "^2.0.2", "@types/rollup-plugin-peer-deps-external": "^2.2.4", "@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/parser": "^6.14.0", @@ -112,7 +106,6 @@ "eslint-plugin-promise": "^6.0.0", "eslint-plugin-react": "^7.33.2", "eslint-plugin-storybook": "^0.6.15", - "exporter": "file:../exporter", "http-cache-semantics": ">=4.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -121,8 +114,14 @@ "rollup-plugin-dts": "^6.1.0", "rollup-plugin-import-css": "^3.3.5", "rollup-plugin-peer-deps-external": "^2.2.4", - "storybook": "^7.6.7", - "storybook-dark-mode": "^3.0.3" + "storybook": "^7.6.12", + "testdouble": "^3.20.1", + "ts-node": "^10.9.2", + "tslib": "^2.6.2", + "tsm": "^2.3.0", + "typescript": "^5.3.3", + "uvu": "^0.5.6", + "vite-plugin-stylex-dev": "^0.2.5" }, "extends": "@tsconfig/node-lts-strictest-esm", "ts-node": { diff --git a/rollup.config.ts b/rollup.config.ts index 1e115360..c73dff64 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -2,10 +2,11 @@ import resolve from '@rollup/plugin-node-resolve' import commonjs from '@rollup/plugin-commonjs' import typescript from '@rollup/plugin-typescript' import json from '@rollup/plugin-json' -// import terser from '@rollup/plugin-terser' +import terser from '@rollup/plugin-terser' import peerDepsExternal from 'rollup-plugin-peer-deps-external' import del from 'rollup-plugin-delete' import dts from 'rollup-plugin-dts' +import stylexPlugin from '@stylexjs/rollup-plugin' export default [ { @@ -16,14 +17,14 @@ export default [ file: './dist/ui/cjs/index.js', format: 'cjs', sourcemap: true, - globals: { react: 'React' }, + globals: { react: 'React', mermaid: 'mermaid', prismjs: 'prism' }, }, { intro: "'use client';", file: './dist/ui/esm/index.js', format: 'esm', sourcemap: true, - globals: { react: 'React' }, + globals: { react: 'React', mermaid: 'mermaid', prismjs: 'prism' }, }, { intro: "'use client';", @@ -31,7 +32,7 @@ export default [ format: 'umd', name: 'NotionateUI', sourcemap: true, - globals: { react: 'React' }, + globals: { react: 'React', mermaid: 'mermaid', prismjs: 'prism' }, }, ], plugins: [ @@ -41,11 +42,14 @@ export default [ json(), commonjs(), typescript(), - // terser(), + terser(), + stylexPlugin({ fileName: 'style.css' }), ], external: [ 'react', 'react-dom', + 'prismjs', + 'mermaid', ], }, { diff --git a/src/exporter/blocks.ts b/src/exporter/blocks.ts index 6f00231f..f4832cc1 100644 --- a/src/exporter/blocks.ts +++ b/src/exporter/blocks.ts @@ -12,6 +12,7 @@ import { FetchPage } from './page.js' import { createDirWhenNotfound, saveImage, + saveFile, readCache, writeCache, getHtmlMeta, @@ -204,6 +205,30 @@ export const FetchBlocks = async ({ block_id, last_edited_time }: FetchBlocksArg } } break + case 'file': { + const url = block.file.type === 'external' ? block.file.external.url : block.file.file.url + const { src, size } = await saveFile(url, `block-${block.id}`) + block.file.src = src + block.file.size = size + break + } + case 'pdf': { + const url = block.pdf.type === 'external' ? block.pdf.external.url : block.pdf.file.url + const { src, size } = await saveFile(url, `block-${block.id}`) + block.pdf.src = src + block.pdf.size = size + break + } + case 'synced_block': + if (block.has_children) { + if (block.synced_block.synced_from === null) { + block.children = await FetchBlocks({ block_id: block.id, last_edited_time: block.last_edited_time }) + } else if (block.synced_block.synced_from.type === 'block_id') { + const block_id = block.synced_block.synced_from.block_id + block.children = await FetchBlocks({ block_id, last_edited_time: block.last_edited_time }) + } + } + break case 'table': block.children = await FetchBlocks({ block_id: block.id, last_edited_time: block.last_edited_time }) break @@ -220,15 +245,12 @@ export const FetchBlocks = async ({ block_id, last_edited_time }: FetchBlocksArg case 'column': case 'divider': case 'equation': - case 'file': case 'heading_1': case 'heading_2': case 'heading_3': case 'link_to_page': case 'link_preview': - case 'pdf': case 'quote': - case 'synced_block': case 'table_of_contents': case 'table_row': case 'template': diff --git a/src/exporter/files.test.ts b/src/exporter/files.test.ts index 9d9cd0f0..c1435f48 100644 --- a/src/exporter/files.test.ts +++ b/src/exporter/files.test.ts @@ -60,8 +60,8 @@ test('getHtmlMeta returns title and desc', async () => { ], [ 'https://www.businesswire.com/', - 'Press release distribution, EDGAR filing, XBRL, regulatory filings | Business Wire', - 'The global leader in press release distribution and regulatory disclosure. Public relations and investor relations professionals rely on Business Wire for broad-based and targeted market reach.', + 'Global Press Release & Newswire Distribution Services | Business Wire', + 'Explore Business Wire for premium press release & newswire distribution services, offering global reach and tailored solutions for businesses worldwide. Expand your reach today.', '/images/html-image-1ebfeb4b204984939ca889895f01fad24a9e0848.webp', '/images/html-icon-65fbfcdf2d131a1bd29acc6b5377073a0b10a76f-2ba3a0d7878316de5aaa6eed7faed9e4ba4e9f09.ico', ], diff --git a/src/exporter/files.ts b/src/exporter/files.ts index 0dd14b97..3db053da 100644 --- a/src/exporter/files.ts +++ b/src/exporter/files.ts @@ -12,6 +12,7 @@ import replaceExt from 'replace-ext' import { docRoot, imageDir, + fileDir, timeout, webpQuality, httpOptions, @@ -210,6 +211,52 @@ const sleep = (m: number) => { return new Promise((resolve) => setTimeout(resolve, m)) } +export async function saveFile (fileUrl: string, prefix: string) { + const urlWithoutQuerystring = fileUrl.split('?').shift() || '' + const { ext, name } = path.parse(urlWithoutQuerystring) + const basename = `${atoh(name)}${ext}` + const urlPath = `/${fileDir}/${prefix}-${basename}` + const filePath = `${docRoot}${urlPath}` + const dirPath = `${docRoot}/${fileDir}` + + await createDirWhenNotfound(dirPath) + + if (fs.existsSync(filePath)) { + const stats = await stat(filePath) + return { + src: urlPath, + size: stats.size, + } + + /* Download file */ + } else { + try { + let res: HttpGetResponse + res = await httpsGetWithFollowRedirects(fileUrl) + if (res.statusCode >= 400 && res.statusCode < 500 && imageDir !== urlWithoutQuerystring) { + res = await httpsGetWithFollowRedirects(urlWithoutQuerystring) + if (res.statusCode >= 400 && res.statusCode < 500) { + throw new Error(`retry download to ${urlWithoutQuerystring} but failed`) + } + } + res.pipe(fs.createWriteStream(filePath)) + await res.end + // This fix that for fileType do not returns undefined + await sleep(10) + } catch (e) { + if (debug) { + console.log(`saveFile download error -- path: ${filePath}, url: ${fileUrl}, message: ${e}`) + } + } + } + + const stats = await stat(filePath) + return { + src: urlPath, + size: stats.size, + } +} + export const saveImage = async (imageUrl: string, prefix: string): Promise => { const urlWithoutQuerystring = imageUrl.split('?').shift() || '' const { ext, name } = path.parse(urlWithoutQuerystring) diff --git a/src/exporter/types.ts b/src/exporter/types.ts index 515848df..0275d553 100644 --- a/src/exporter/types.ts +++ b/src/exporter/types.ts @@ -235,6 +235,55 @@ export type BreadcrumbBlockObjectResponseEx = BreadcrumbBlockObjectResponse & { list: Breadcrumb[] } +/* Add src and size */ +export type FileBlockObjectResponseEx = FileBlockObjectResponse & { + file: { + type: "external", + external: { + url: TextRequest, + }, + caption: Array, + src: string, + size: number, + } | { + type: 'file', + file: { + url: string, + expiry_time: string, + }, + caption: Array, + src: string, + size: number, + } +} + +/* Add src and size */ +export type PdfBlockObjectResponseEx = PdfBlockObjectResponse & { + pdf: { + type: "external", + external: { + url: TextRequest, + }, + caption: Array, + src: string, + size: number, + } | { + type: 'file', + file: { + url: string, + expiry_time: string, + }, + caption: Array, + src: string, + size: number, + } +} + +/* Add children */ +export type SyncedBlockBlockObjectResponseEx = SyncedBlockBlockObjectResponse & { + children?: ListBlockChildrenResponseEx +} + export type BlockObjectResponse = | ParagraphBlockObjectResponseEx | Heading1BlockObjectResponse @@ -246,7 +295,7 @@ export type BlockObjectResponse = | ToDoBlockObjectResponse | ToggleBlockObjectResponseEx | TemplateBlockObjectResponse - | SyncedBlockBlockObjectResponse + | SyncedBlockBlockObjectResponseEx | ChildPageBlockObjectResponseEx | ChildDatabaseBlockObjectResponseEx | EquationBlockObjectResponse @@ -264,8 +313,8 @@ export type BlockObjectResponse = | BookmarkBlockObjectResponseEx | ImageBlockObjectResponseEx | VideoBlockObjectResponseEx - | PdfBlockObjectResponse - | FileBlockObjectResponse + | PdfBlockObjectResponseEx + | FileBlockObjectResponseEx | AudioBlockObjectResponse | LinkPreviewBlockObjectResponse | UnsupportedBlockObjectResponse diff --git a/src/exporter/variables.ts b/src/exporter/variables.ts index aa1bf5dd..d764fd23 100644 --- a/src/exporter/variables.ts +++ b/src/exporter/variables.ts @@ -7,6 +7,7 @@ export const incrementalCache = process.env.ROTION_INCREMENTAL_CACHE === 'true' export const auth = process.env.NOTION_TOKEN export const docRoot = process.env.ROTION_DOCROOT || 'public' export const imageDir = process.env.ROTION_IMAGEDIR || 'images' +export const fileDir = process.env.ROTION_FILEDIR || 'files' export const timeout = process.env.ROTION_TIMEOUT ? parseInt(process.env.ROTION_TIMEOUT) : 1500 export const webpQuality = process.env.ROTION_WEBP_QUALITY ? parseInt(process.env.ROTION_WEBP_QUALITY) : 95 export const debug = process.env.ROTION_DEBUG === 'true' diff --git a/src/ui/components/Gallery/Gallery.stories.tsx b/src/ui/components/Gallery/Gallery.stories.tsx new file mode 100644 index 00000000..9238796e --- /dev/null +++ b/src/ui/components/Gallery/Gallery.stories.tsx @@ -0,0 +1,25 @@ +import type { Meta, StoryObj } from '@storybook/react' +import type { FetchDatabaseRes } from '../../../exporter' +import Gallery from './Gallery' +import response from '../../fixtures/fetch_database_response.json' + +const meta = { + title: 'Database/Gallery', + component: Gallery, + args: { + keys: ['Name', 'Born', 'Date', 'Published', 'Url', 'Note', 'Tags'], + db: response as FetchDatabaseRes, + href: '/blog/[id]', + link: undefined, + query: undefined, + preview: 'cover', + size: undefined, + fit: true, + }, + tags: ['autodocs'], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} diff --git a/src/ui/components/Gallery/Gallery.tsx b/src/ui/components/Gallery/Gallery.tsx index b5516f37..a2f30f4f 100644 --- a/src/ui/components/Gallery/Gallery.tsx +++ b/src/ui/components/Gallery/Gallery.tsx @@ -2,15 +2,46 @@ import React from 'react' import type { PageObjectResponseEx } from '../../../exporter' import GalleryCard from './GalleryCard/GalleryCard' import type { GalleryProps } from './Gallery.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../tokens.stylex' -const Gallery = ({ keys, db, href, link, query, preview, size, fit }: GalleryProps) => { - const fitClass = `${fit ? ' notionate-gallery-fit' : ''}` - const sizeClass = ` notionate-gallery-${size || 'medium'}` +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + }, + inner: { + position: 'relative', + paddingBottom: '1rem', + display: 'grid', + gap: '16px', + }, + small: { + gridTemplateColumns: 'repeat(auto-fill, minmax(180px, 1fr))', + }, + medium: { + gridTemplateColumns: 'repeat(auto-fill, minmax(260px, 1fr))', + }, + large: { + gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))', + }, +}) + +const Gallery = ({ keys, db, href, link, query, preview, size = 'medium', fit = true }: GalleryProps) => { return ( -
-
+
+
{db.results.map((v) => ( - + ))}
diff --git a/src/ui/components/Gallery/Gallery.types.ts b/src/ui/components/Gallery/Gallery.types.ts index 0ef6765b..b62b737b 100644 --- a/src/ui/components/Gallery/Gallery.types.ts +++ b/src/ui/components/Gallery/Gallery.types.ts @@ -1,10 +1,10 @@ -import type { QueryDatabaseResponseEx } from '../../../exporter' +import type { FetchDatabaseRes } from '../../../exporter' import type { ParsedUrlQueryInput } from 'node:querystring' import type { Link } from '../types' export interface GalleryProps { keys: string[] - db: QueryDatabaseResponseEx + db: FetchDatabaseRes href?: string link?: Link query?: ParsedUrlQueryInput diff --git a/src/ui/components/Gallery/GalleryCard/GalleryCard.tsx b/src/ui/components/Gallery/GalleryCard/GalleryCard.tsx index bfb0253e..30b41fdf 100644 --- a/src/ui/components/Gallery/GalleryCard/GalleryCard.tsx +++ b/src/ui/components/Gallery/GalleryCard/GalleryCard.tsx @@ -8,8 +8,48 @@ import { getLinkPathAndLinkKey } from '../../lib' import GalleryLinkedCard from './GalleryLinkedCard' import GalleryPreview from './GalleryPreview' import type { GalleryCardProps } from './GalleryCard.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' -const getSlug = (key: string, page: GetPageResponse): string => { +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + display: 'block', + color: 'inherit', + textDecoration: 'none', + boxShadow: 'rgb(15 15 15 / 10%) 0px 0px 0px 1px, rgb(15 15 15 / 10%) 0px 2px 4px', + borderRadius: '3px', + background: { + default: 'white', + ':hover': 'rgba(55, 53, 47, 0.03)', + }, + overflow: 'hidden', + transition: 'background 100ms ease-out 0s', + position: 'static', + height: '100%', + cursor: 'pointer', + }, + inner: { + position: 'relative', + paddingBottom: '1rem', + display: 'grid', + gap: '16px', + }, + small: { + gridTemplateColumns: 'repeat(auto-fill, minmax(180px, 1fr))', + }, + medium: { + gridTemplateColumns: 'repeat(auto-fill, minmax(260px, 1fr))', + }, + large: { + gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))', + }, + text: { + paddingBottom: '10px', + }, +}) + +function getSlug (key: string, page: GetPageResponse) { if (!('properties' in page)) { return 'not-found-properties' } @@ -27,8 +67,8 @@ const getSlug = (key: string, page: GetPageResponse): string => { return p.rich_text.map(v => v.text.content).join(',') } -const buildHref = (page: PageObjectResponseEx, link?: string) => { - if (link === undefined) { +function buildHref (page: PageObjectResponseEx, link?: string) { + if (!link) { return '' } const [path, slugKey] = getLinkPathAndLinkKey(link) @@ -36,26 +76,27 @@ const buildHref = (page: PageObjectResponseEx, link?: string) => { return `${path}${slug}` } -const GalleryCard = ({ keys, page, href, link, query, preview }: GalleryCardProps) => { - const findItems = (name: string, page: PageObjectResponseEx) => { - let propertyId = '' - for (const [k, v] of Object.entries(page.properties)) { - if (k === name) { - propertyId = v.id - } +function findItems (name: string, page: PageObjectResponseEx) { + let propertyId = '' + for (const [k, v] of Object.entries(page.properties)) { + if (k === name) { + propertyId = v.id } - return page.property_items.find(v => ((v.object === 'property_item' && v.id === propertyId) || (v.object === 'list' && v.property_item.id === propertyId))) } + return page.property_items.find(v => ((v.object === 'property_item' && v.id === propertyId) || (v.object === 'list' && v.property_item.id === propertyId))) +} + +const GalleryCard = ({ keys, page, href, link, query, preview, size, fit }: GalleryCardProps) => { const path = getLinkPathAndLinkKey(href)[0] return ( -
- - {preview && } -
+
+ + {preview && } +
{keys.map((name, i) => (
- {GalleryHandler({ items: findItems(name, page), path })} +
))}
diff --git a/src/ui/components/Gallery/GalleryCard/GalleryCard.types.ts b/src/ui/components/Gallery/GalleryCard/GalleryCard.types.ts index 2a43e051..9912907e 100644 --- a/src/ui/components/Gallery/GalleryCard/GalleryCard.types.ts +++ b/src/ui/components/Gallery/GalleryCard/GalleryCard.types.ts @@ -9,4 +9,6 @@ export interface GalleryCardProps { link?: Link query?: ParsedUrlQueryInput preview?: 'cover' | 'content' + size: 'small' | 'medium' | 'large' + fit: boolean } diff --git a/src/ui/components/Gallery/GalleryCard/GalleryHandler.tsx b/src/ui/components/Gallery/GalleryCard/GalleryHandler.tsx index 7e64a3c1..59253e04 100644 --- a/src/ui/components/Gallery/GalleryCard/GalleryHandler.tsx +++ b/src/ui/components/Gallery/GalleryCard/GalleryHandler.tsx @@ -10,8 +10,8 @@ import GalleryCheckboxField from '../GalleryCheckboxField/GalleryCheckboxField' import GalleryNumberField from '../GalleryNumberField/GalleryNumberField' import type { GalleryHandlerProps } from './GalleryHandler.types' -const GalleryHandler = ({ items, path }: GalleryHandlerProps) => { - if (items === undefined) { +const GalleryHandler = ({ items, path, link, query, size }: GalleryHandlerProps) => { + if (!items) { return <> } @@ -23,9 +23,9 @@ const GalleryHandler = ({ items, path }: GalleryHandlerProps) => { const target = items.results[0] switch (target.type) { case 'title': - return GalleryTitleField({ payload: items.results as Array }) + return } /> case 'rich_text': - return GalleryRichTextField({ payload: target }) + return case 'people': case 'relation': case 'rollup': @@ -36,17 +36,17 @@ const GalleryHandler = ({ items, path }: GalleryHandlerProps) => { } else { switch (items.type) { case 'date': - return GalleryDateField({ payload: items.date }) + return case 'rich_text': - return GalleryRichTextField({ payload: items }) + return case 'multi_select': - return GalleryMultiSelectField({ payload: items, path }) + return case 'url': - return GalleryUrlField({ payload: items.url }) + return case 'checkbox': - return GalleryCheckboxField({ payload: items.checkbox }) + return case 'number': - return GalleryNumberField({ payload: items }) + return case 'select': case 'status': case 'email': @@ -65,6 +65,8 @@ const GalleryHandler = ({ items, path }: GalleryHandlerProps) => { break } } + + return <> } export default GalleryHandler diff --git a/src/ui/components/Gallery/GalleryCard/GalleryHandler.types.ts b/src/ui/components/Gallery/GalleryCard/GalleryHandler.types.ts index 54988d75..cfaa6001 100644 --- a/src/ui/components/Gallery/GalleryCard/GalleryHandler.types.ts +++ b/src/ui/components/Gallery/GalleryCard/GalleryHandler.types.ts @@ -1,6 +1,11 @@ import type { GetPagePropertyResponse } from '../../../../exporter' +import type { ParsedUrlQueryInput } from 'node:querystring' +import type { Link } from '../../types' export interface GalleryHandlerProps { items: GetPagePropertyResponse|undefined path: string + size: 'small' | 'medium' | 'large' + link?: Link + query?: ParsedUrlQueryInput } diff --git a/src/ui/components/Gallery/GalleryCard/GalleryLinkedCard.tsx b/src/ui/components/Gallery/GalleryCard/GalleryLinkedCard.tsx index 9301da63..ee7d9d06 100644 --- a/src/ui/components/Gallery/GalleryCard/GalleryLinkedCard.tsx +++ b/src/ui/components/Gallery/GalleryCard/GalleryLinkedCard.tsx @@ -6,27 +6,23 @@ const GalleryLinkedCard = ({ children, link, query, href }: GalleryLinkedCardPro if (link && query) { const Link = link as unknown as Link return ( - -
- {children} -
+ + {children} ) } else if (link) { const Link = link return ( - -
- {children} -
+ + {children} ) } return ( - <> +
{children} - +
) } diff --git a/src/ui/components/Gallery/GalleryCard/GalleryPreview.tsx b/src/ui/components/Gallery/GalleryCard/GalleryPreview.tsx index 0bd07464..bdf0eda9 100644 --- a/src/ui/components/Gallery/GalleryCard/GalleryPreview.tsx +++ b/src/ui/components/Gallery/GalleryCard/GalleryPreview.tsx @@ -1,13 +1,50 @@ import React from 'react' +import Stylex from '@stylexjs/stylex' + +const style = Stylex.create({ + wrapper: { + aspectRatio: '16 / 9', + overflow: 'hidden', + }, + fit: { + objectFit: 'contain', + objectPosition: 'center 50%', + borderBottom: '1px solid rgba(55, 53, 47, 0.09)', + }, + nofit: { + objectFit: 'cover', + objectPosition: 'top 50%', + }, + small: { + height: '101.25px', + width: '100%', + }, + medium: { + height: '146.25px', + width: '100%', + }, + large: { + height: '180px', + width: '100%', + }, +}) export interface GalleryPreviewProps { src?: string + size: 'small' | 'medium' | 'large' + fit: boolean } -const GalleryPreview = ({ src }: GalleryPreviewProps) => { +const GalleryPreview = ({ src, size, fit }: GalleryPreviewProps) => { + const classArray = [Stylex(style[size])] + if (fit) { + classArray.push(Stylex(style.fit)) + } else { + classArray.push(Stylex(style.nofit)) + } return ( -
- {src && } +
+ {src && }
) } diff --git a/src/ui/components/Gallery/GalleryCheckboxField/GalleryCheckboxField.tsx b/src/ui/components/Gallery/GalleryCheckboxField/GalleryCheckboxField.tsx index 422de80f..61b4c238 100644 --- a/src/ui/components/Gallery/GalleryCheckboxField/GalleryCheckboxField.tsx +++ b/src/ui/components/Gallery/GalleryCheckboxField/GalleryCheckboxField.tsx @@ -3,7 +3,7 @@ import type { GalleryCheckboxFieldProps } from './GalleryCheckboxField.types' const GalleryCheckboxField = ({ payload }: GalleryCheckboxFieldProps) => { return ( -
+
{payload}
) diff --git a/src/ui/components/Gallery/GalleryDateField/GalleryDateField.tsx b/src/ui/components/Gallery/GalleryDateField/GalleryDateField.tsx index bb8f4188..10ef514f 100644 --- a/src/ui/components/Gallery/GalleryDateField/GalleryDateField.tsx +++ b/src/ui/components/Gallery/GalleryDateField/GalleryDateField.tsx @@ -1,9 +1,23 @@ import React from 'react' import type { GalleryDateFieldProps } from './DateField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + padding: '8px 10px', + display: 'flex', + alignItems: 'center', + fontSize: '12px', + whiteSpace: 'nowrap', + }, +}) const GalleryDateField = ({ payload }: GalleryDateFieldProps) => { return ( -
+
{payload?.start}
) diff --git a/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.tsx b/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.tsx index 3682d7d7..5884d789 100644 --- a/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.tsx +++ b/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.tsx @@ -1,31 +1,106 @@ import React from 'react' import type { GalleryMultiSelectFieldProps } from './GalleryMultiSelectField.types' +import Stylex from '@stylexjs/stylex' +import { tokens, colors, link } from '../../tokens.stylex' +import LinkedTagIfLinked from './LinkedTag' -const GalleryMultiSelectField = ({ payload, path, link }: GalleryMultiSelectFieldProps) => { - const LinkedTag = (name: string) => { - const href = `${path}tags/${encodeURIComponent(name)}` - if (link) { - const Link = link - return ( - <> - - {name} - - - ) - } - return ( - - {name} - - ) +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + padding: '8px 10px', + display: 'flex', + alignItems: 'center', + fontSize: '12px', + whiteSpace: 'nowrap', + }, + link: { + textDecoration: link.textDecoration, + color: 'inherit', + cursor: link.cursor, + padding: '2px 10px', + }, + ul: { + listStyleType: 'none', + display: 'flex', + flexShrink: 0, + alignItems: 'center', + padding: '0 0 8px', + margin: '0 0 0 7px', + overflow: 'hidden', + textOverflow: 'ellipsis', + }, + li: { + fontSize: '.75rem', + display: 'flex', + alignItems: 'center', + flexShrink: 0, + minWidth: 0, + borderRadius: '3px', + padding: 0, + color: 'rgb(24, 51, 71)', + background: 'rgb(211, 229, 239) none repeat scroll 0% 0%', + margin: '0 6px 0 0', + cursor: 'pointer', + }, + default: { + color: colors.default, + backgroundColor: colors.bgDefault, + }, + gray: { + color: colors.gray, + backgroundColor: colors.bgGray, + }, + brown: { + color: colors.brown, + backgroundColor: colors.bgBrown, + }, + orange: { + color: colors.orange, + backgroundColor: colors.bgOrange, + }, + yellow: { + color: colors.yellow, + backgroundColor: colors.bgYellow, + }, + green: { + color: colors.green, + backgroundColor: colors.bgGreen, + }, + blue: { + color: colors.blue, + backgroundColor: colors.bgBlue, + }, + purple: { + color: colors.purple, + backgroundColor: colors.bgPurple, + }, + pink: { + color: colors.orange, + backgroundColor: colors.bgOrange, + }, + red: { + color: colors.red, + backgroundColor: colors.bgRed, + }, +}) + +const GalleryMultiSelectField = ({ payload, path, link, query }: GalleryMultiSelectFieldProps) => { + const { multi_select } = payload + + const liClassName = (color: string) => { + // @ts-ignore + const s = Stylex(style[color]) + return `rotion-gallery-multiselect-li rotion-select-${color} ${Stylex(style.li)} ${s}` } return ( -
    - {payload.multi_select.map(f => ( -
  • - {LinkedTag(f.name)} +
      + {multi_select.map(v => ( +
    • + + {v.name} +
    • ))}
    diff --git a/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.types.ts b/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.types.ts index a64e1cec..134d51ac 100644 --- a/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.types.ts +++ b/src/ui/components/Gallery/GalleryMultiSelectField/GalleryMultiSelectField.types.ts @@ -1,3 +1,4 @@ +import type { ParsedUrlQueryInput } from 'node:querystring' import type { MultiSelectPropertyItemObjectResponse } from '../../../../exporter' import type { Link } from '../../types' @@ -5,4 +6,5 @@ export interface GalleryMultiSelectFieldProps { payload: MultiSelectPropertyItemObjectResponse path: string link?: Link + query?: ParsedUrlQueryInput } diff --git a/src/ui/components/Gallery/GalleryMultiSelectField/LinkedTag.tsx b/src/ui/components/Gallery/GalleryMultiSelectField/LinkedTag.tsx new file mode 100644 index 00000000..77b79669 --- /dev/null +++ b/src/ui/components/Gallery/GalleryMultiSelectField/LinkedTag.tsx @@ -0,0 +1,43 @@ +import React from 'react' +import type { LinkedTagIfLinkedProps } from './LinkedTag.types' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + textDecoration: link.textDecoration, + color: 'inherit', + cursor: link.cursor, + padding: '2px 10px', + }, +}) + +const LinkedTagIfLinked = ({ pathname, link, query, children }: LinkedTagIfLinkedProps) => { + const href = query ? { pathname, query } : pathname + + if (href === '') { + return ( + + {children} + + ) + } + + if (link) { + const Link = link + return ( + + {children} + + ) + } + + return ( + + {children} + + ) +} + +export default LinkedTagIfLinked diff --git a/src/ui/components/Gallery/GalleryMultiSelectField/LinkedTag.types.ts b/src/ui/components/Gallery/GalleryMultiSelectField/LinkedTag.types.ts new file mode 100644 index 00000000..5c0532fd --- /dev/null +++ b/src/ui/components/Gallery/GalleryMultiSelectField/LinkedTag.types.ts @@ -0,0 +1,10 @@ +import type { ParsedUrlQueryInput } from 'node:querystring' +import type { ReactNode } from 'react' +import type { Link } from '../../types' + +export interface LinkedTagIfLinkedProps { + pathname: string + link?: Link + query?: ParsedUrlQueryInput + children?: ReactNode +} diff --git a/src/ui/components/Gallery/GalleryNumberField/GalleryNumberField.tsx b/src/ui/components/Gallery/GalleryNumberField/GalleryNumberField.tsx index 957d8e22..d8e1e0bd 100644 --- a/src/ui/components/Gallery/GalleryNumberField/GalleryNumberField.tsx +++ b/src/ui/components/Gallery/GalleryNumberField/GalleryNumberField.tsx @@ -1,9 +1,23 @@ import React from 'react' import type { GalleryNumberFieldProps } from './GalleryNumberField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + padding: '0 10px 8px', + display: 'flex', + alignItems: 'center', + fontSize: '12px', + whiteSpace: 'nowrap', + }, +}) const GalleryNumberField = ({ payload }: GalleryNumberFieldProps) => { return ( -
    +
    {payload.number}
    ) diff --git a/src/ui/components/Gallery/GalleryRichTextField/RichTextField.tsx b/src/ui/components/Gallery/GalleryRichTextField/RichTextField.tsx index e3c74bf8..ab2a895e 100644 --- a/src/ui/components/Gallery/GalleryRichTextField/RichTextField.tsx +++ b/src/ui/components/Gallery/GalleryRichTextField/RichTextField.tsx @@ -1,11 +1,34 @@ import React from 'react' -import TextBlock from '../../Page/TextBlock/TextBlock' +import { RichText } from '../../Page/RichText' import type { GalleryRichTextFieldProps } from './RichTextField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' -const GalleryRichTextField = ({ payload }: GalleryRichTextFieldProps) => { +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + padding: '0 10px 8px', + display: 'block', + fontSize: '13px', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + }, + small: { + width: '180px', + }, + medium: { + width: '260px', + }, + large: { + width: '320px', + }, +}) + +const GalleryRichTextField = ({ payload, size }: GalleryRichTextFieldProps) => { return ( -
    - +
    +
    ) } diff --git a/src/ui/components/Gallery/GalleryRichTextField/RichTextField.types.ts b/src/ui/components/Gallery/GalleryRichTextField/RichTextField.types.ts index 1bf89d38..c0e1deee 100644 --- a/src/ui/components/Gallery/GalleryRichTextField/RichTextField.types.ts +++ b/src/ui/components/Gallery/GalleryRichTextField/RichTextField.types.ts @@ -2,4 +2,5 @@ import type { RichTextPropertyItemObjectResponse } from '../../../../exporter' export interface GalleryRichTextFieldProps { payload: RichTextPropertyItemObjectResponse + size?: 'small' | 'medium' | 'large' } diff --git a/src/ui/components/Gallery/GalleryTitleField/GalleryTitleField.tsx b/src/ui/components/Gallery/GalleryTitleField/GalleryTitleField.tsx index 9fe2b735..3a172087 100644 --- a/src/ui/components/Gallery/GalleryTitleField/GalleryTitleField.tsx +++ b/src/ui/components/Gallery/GalleryTitleField/GalleryTitleField.tsx @@ -1,5 +1,16 @@ import React from 'react' import type { GalleryTitleFieldProps } from './GalleryTitleField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + fontSize: '.9rem', + width: '100%', + padding: '10px 10px 0', + } +}) const GalleryTitleField = ({ payload }: GalleryTitleFieldProps) => { const title = payload.map(v => { @@ -15,7 +26,7 @@ const GalleryTitleField = ({ payload }: GalleryTitleFieldProps) => { }).join(',') return ( -
    +
    {title}
    ) diff --git a/src/ui/components/Gallery/GalleryUrlField/GalleryUrlField.tsx b/src/ui/components/Gallery/GalleryUrlField/GalleryUrlField.tsx index e2e66a38..673c2329 100644 --- a/src/ui/components/Gallery/GalleryUrlField/GalleryUrlField.tsx +++ b/src/ui/components/Gallery/GalleryUrlField/GalleryUrlField.tsx @@ -1,25 +1,68 @@ import React from 'react' import type { GalleryUrlFieldProps } from './GalleryUrlField.types' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + display: 'flex', + whiteSpace: 'nowrap', + margin: '0 7px', + }, + link: { + display: 'block', + textDecoration: link.textDecoration, + cursor: link.cursor, + color: { + default: link.color, + ':hover': link.colorHover, + }, + background: { + default: 'inherit', + ':hover': 'rgb(227, 226, 224) none repeat scroll 0% 0%', + }, + marginBottom: '2px', + borderRadius: tokens.borderRadius, + }, + chain: { + display: 'inline', + width: '12px', + height: '12px', + marginRight: '4px', + verticalAlign: 'middle', + }, + address: { + display: 'inline', + fontSize: '.7rem', + lineHeight: 1.2, + whiteSpace: 'nowrap', + backgroundImage: 'linear-gradient(to right, rgba(55, 53, 47, 0.16) 0%, rgba(55, 53, 47, 0.16) 100%)', + backgroundRepeat: 'repeat-x', + backgroundPosition: '0 100%', + backgroundSize: '100% 1px', + }, +}) const GalleryUrlField = ({ payload }: GalleryUrlFieldProps) => { - if (payload === null) { - return (<>) + if (!payload) { + return <> } const regex = /https?:\/\/([0-9A-z.-]+)/ const result = payload.match(regex) - if (result === null) { - return (<>) + if (!result) { + return <> } - const domain = result[1] + return ( -
    - - +
    + + - + {domain} diff --git a/src/ui/components/List/Column.tsx b/src/ui/components/List/Column.tsx new file mode 100644 index 00000000..bc2ee859 --- /dev/null +++ b/src/ui/components/List/Column.tsx @@ -0,0 +1,43 @@ +import React from 'react' +import ListHandler from './ListHandler' +import { getLinkPathAndLinkKey } from '../lib' +import type { GetPageResponse } from '../../../exporter' +import type { ColumnProps } from './Column.types' + +function getSlug (key: string, page: GetPageResponse) { + if (!('properties' in page)) { + return 'not-found-properties' + } + if (key === 'id') { + return page.id + } + if (!(key in page.properties)) { + return 'not-found-key-in-page-properties' + } + const p = page.properties[key] + if (!('rich_text' in p)) { + return 'not-found-richtext-in-key' + } + // @ts-ignore + return p.rich_text.map(v => v.text.content).join(',') +} + +const Column = ({ name, page, href, link, query }: ColumnProps) => { + const [path, slugKey] = getLinkPathAndLinkKey(href) + + if (name === 'spacer' || name === 'dashed' || !('property_items' in page) || !('properties' in page)) { + return <> + } + let propertyId = '' + for (const [k, v] of Object.entries(page.properties)) { + if (k === name) { + propertyId = v.id + } + } + const items = page.property_items.find(v => ((v.object === 'property_item' && v.id === propertyId) || (v.object === 'list' && v.property_item.id === propertyId))) + const slug = getSlug(slugKey, page) + + return +} + +export default Column diff --git a/src/ui/components/List/Column.types.ts b/src/ui/components/List/Column.types.ts new file mode 100644 index 00000000..251006bb --- /dev/null +++ b/src/ui/components/List/Column.types.ts @@ -0,0 +1,11 @@ +import type { PageObjectResponseEx } from '../../../exporter' +import type { ParsedUrlQueryInput } from 'node:querystring' +import type { Link } from '../types' + +export interface ColumnProps { + name: string + page: PageObjectResponseEx + href: string + link?: Link + query?: ParsedUrlQueryInput +} diff --git a/src/ui/components/List/List.stories.tsx b/src/ui/components/List/List.stories.tsx new file mode 100644 index 00000000..fb0a67a4 --- /dev/null +++ b/src/ui/components/List/List.stories.tsx @@ -0,0 +1,30 @@ +import type { Meta, StoryObj } from '@storybook/react' +import type { FetchDatabaseRes } from '../../../exporter' +import List from './List' +import response from '../../fixtures/fetch_database_response.json' + +const meta = { + title: 'Database/List', + component: List, + args: { + keys: ['Name', 'spacer', 'Note', 'Published', 'Tags', 'Url', 'Born', 'Date'], + db: response as FetchDatabaseRes, + href: '/blog/[id]', + link: undefined, + query: undefined, + }, + tags: ['autodocs'], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const Dashed: Story = { + args: { + keys: ['Name', 'Note', 'dashed', 'Published', 'Tags', 'Url', 'Born', 'Date'], + db: response as FetchDatabaseRes, + href: '/blog/[id]', + } +} diff --git a/src/ui/components/List/List.tsx b/src/ui/components/List/List.tsx index 68b01342..b62f5c32 100644 --- a/src/ui/components/List/List.tsx +++ b/src/ui/components/List/List.tsx @@ -1,57 +1,80 @@ import React from 'react' -import type { - GetPageResponse, - PageObjectResponseEx, -} from '../../../exporter' +import Column from './Column' +import type { PageObjectResponseEx } from '../../../exporter' import type { ListProps } from './List.types' -import ListHandler from './ListHandler' -import { getLinkPathAndLinkKey } from '../lib' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../tokens.stylex' -const List: React.FC = ({ keys, db, href, link, query }) => { - const getSlug = (key: string, page: GetPageResponse): string => { - if (!('properties' in page)) { - return 'not-found-properties' - } - if (key === 'id') { - return page.id - } - if (!(key in page.properties)) { - return 'not-found-key-in-page-properties' - } - const p = page.properties[key] - if (!('rich_text' in p)) { - return 'not-found-richtext-in-key' - } - // @ts-ignore - return p.rich_text.map(v => v.text.content).join(',') - } - - const [path, slugKey] = getLinkPathAndLinkKey(href) - - const dbf = (name: string, page: PageObjectResponseEx) => { - if (name === 'spacer' || !('property_items' in page) || !('properties' in page)) { - return <> - } - let propertyId = '' - for (const [k, v] of Object.entries(page.properties)) { - if (k === name) { - propertyId = v.id - } - } - const items = page.property_items.find(v => ((v.object === 'property_item' && v.id === propertyId) || (v.object === 'list' && v.property_item.id === propertyId))) - const slug = getSlug(slugKey, page) +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + margin: 0, + padding: 0, + overflowX: 'scroll', + }, + inner: { + margin: 0, + padding: '0 0 .8rem', + maxWidth: '100%', + minWidth: '1200px', + }, + line: { + display: 'flex', + margin: '4px 0', + padding: '4px 0', + userSelect: 'none', + transition: 'background 20ms ease-in 0s', + width: '100%', + alignItems: 'center', + justifyContent: 'flex-start', + backgroundColor: { + default: link.backgroundColor, + ':hover': link.backgroundColorHover, + }, + }, + spacer: { + width: '100%', + flexShrink: 10, + display: 'block', + marginLeft: '14px', + }, + dashed: { + width: '100%', + flexShrink: 10, + display: 'block', + marginLeft: '14px', + borderTop: '1px dashed #999', + }, +}) - return ListHandler({ name, items, path, slug, link, query }) +function columnClassName (name: string, i: number) { + const classArray = [`rotion-list-column${i}`] + switch (name) { + case 'spacer': + classArray.push('rotion-list-spacer') + classArray.push(Stylex(style.spacer)) + break + case 'dashed': + classArray.push('rotion-list-dashed') + classArray.push(Stylex(style.dashed)) + break } + return classArray.join(' ') +} + +export interface ListHeaderProps { + keys: string[] +} +const List = ({ keys, db, href, link, query }: ListProps) => { return ( -
    -
    - {db.results.map((v) => ( -
    +
    +
    + {db.results.map((v: PageObjectResponseEx) => ( +
    {keys.map((name, i) => ( -
    - {dbf(name, v as PageObjectResponseEx)} +
    +
    ))}
    diff --git a/src/ui/components/List/ListCheckboxField/ListCheckboxField.tsx b/src/ui/components/List/ListCheckboxField/ListCheckboxField.tsx index 1529f8da..559bd06f 100644 --- a/src/ui/components/List/ListCheckboxField/ListCheckboxField.tsx +++ b/src/ui/components/List/ListCheckboxField/ListCheckboxField.tsx @@ -1,9 +1,17 @@ import React from 'react' import type { ListCheckboxFieldProps } from './ListCheckboxField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + }, +}) const ListCheckboxField = ({ payload }: ListCheckboxFieldProps) => { return ( -
    +
    {payload}
    ) diff --git a/src/ui/components/List/ListDateField/ListDateField.tsx b/src/ui/components/List/ListDateField/ListDateField.tsx index 5569e64a..f2265b50 100644 --- a/src/ui/components/List/ListDateField/ListDateField.tsx +++ b/src/ui/components/List/ListDateField/ListDateField.tsx @@ -1,9 +1,24 @@ import React from 'react' import type { ListDateFieldProps } from './ListDateField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + whiteSpace: 'nowrap', + fontSize: '.85rem', + display: 'flex', + alignItems: 'center', + margin: '0 7px', + minWidth: '20px', + color: '#999', + }, +}) const ListDateField = ({ payload }: ListDateFieldProps) => { return ( -
    +
    {payload?.start}
    ) diff --git a/src/ui/components/List/ListHandler.tsx b/src/ui/components/List/ListHandler.tsx index 0dd59676..4ab5d9ad 100644 --- a/src/ui/components/List/ListHandler.tsx +++ b/src/ui/components/List/ListHandler.tsx @@ -24,10 +24,10 @@ const ListHandler = ({ name, items, path, slug, link, query }: ListHandlerProps) switch (target.type) { case 'title': { // Skip: Unexpected lexical declaration in case block. const payload = items.results as Array - return ListTitleField({ payload, path, slug, link, query }) + return } case 'rich_text': - return ListRichTextField({ payload: target }) + return case 'people': case 'relation': case 'rollup': @@ -38,17 +38,17 @@ const ListHandler = ({ name, items, path, slug, link, query }: ListHandlerProps) } else { switch (items.type) { case 'date': - return ListDateField({ payload: items.date }) + return case 'rich_text': - return ListRichTextField({ payload: items }) + return case 'multi_select': - return ListMultiSelectField({ payload: items, path }) + return case 'url': - return ListUrlField({ payload: items.url }) + return case 'checkbox': - return ListCheckboxField({ payload: items.checkbox }) + return case 'number': - return ListNumberField({ payload: items }) + return case 'select': case 'status': case 'email': diff --git a/src/ui/components/List/ListMultiSelectField/LinkedTagIfLinked.tsx b/src/ui/components/List/ListMultiSelectField/LinkedTagIfLinked.tsx new file mode 100644 index 00000000..e088b886 --- /dev/null +++ b/src/ui/components/List/ListMultiSelectField/LinkedTagIfLinked.tsx @@ -0,0 +1,90 @@ +import React from 'react' +import type { LinkedTagIfLinkedProps } from './LinkedTagIfLinked.types' +import Stylex from '@stylexjs/stylex' +import { tokens, colors, link } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + textDecoration: link.textDecoration, + color: 'inherit', + cursor: link.cursor, + padding: '2px 10px', + borderRadius: tokens.borderRadius, + }, + default: { + color: colors.default, + backgroundColor: colors.bgDefault, + }, + gray: { + color: colors.gray, + backgroundColor: colors.bgGray, + }, + brown: { + color: colors.brown, + backgroundColor: colors.bgBrown, + }, + orange: { + color: colors.orange, + backgroundColor: colors.bgOrange, + }, + yellow: { + color: colors.yellow, + backgroundColor: colors.bgYellow, + }, + green: { + color: colors.green, + backgroundColor: colors.bgGreen, + }, + blue: { + color: colors.blue, + backgroundColor: colors.bgBlue, + }, + purple: { + color: colors.purple, + backgroundColor: colors.bgPurple, + }, + pink: { + color: colors.orange, + backgroundColor: colors.bgOrange, + }, + red: { + color: colors.red, + backgroundColor: colors.bgRed, + }, +}) + +const LinkedTagIfLinked = ({ color, pathname, link, query, children }: LinkedTagIfLinkedProps) => { + const href = query ? { pathname, query } : pathname + + const className = (color: string) => { + // @ts-ignore + const s = Stylex(style[color]) + return `rotion-list-multiselect-link rotion-list-select-${color} ${Stylex(style.wrapper)} ${s}` + } + + if (href === '') { + return ( + + {children} + + ) + } + + if (link) { + const Link = link + return ( + + {children} + + ) + } + + return ( + + {children} + + ) +} + +export default LinkedTagIfLinked diff --git a/src/ui/components/List/ListMultiSelectField/LinkedTagIfLinked.types.ts b/src/ui/components/List/ListMultiSelectField/LinkedTagIfLinked.types.ts new file mode 100644 index 00000000..680487c0 --- /dev/null +++ b/src/ui/components/List/ListMultiSelectField/LinkedTagIfLinked.types.ts @@ -0,0 +1,11 @@ +import type { ReactNode } from 'react' +import type { ParsedUrlQueryInput } from 'node:querystring' +import type { Link } from '../../types' + +export interface LinkedTagIfLinkedProps { + pathname: string + color: string + link?: Link + query?: ParsedUrlQueryInput + children?: ReactNode +} diff --git a/src/ui/components/List/ListMultiSelectField/ListMultiSelectField.tsx b/src/ui/components/List/ListMultiSelectField/ListMultiSelectField.tsx index b3b1595a..bd40e6a4 100644 --- a/src/ui/components/List/ListMultiSelectField/ListMultiSelectField.tsx +++ b/src/ui/components/List/ListMultiSelectField/ListMultiSelectField.tsx @@ -1,40 +1,43 @@ import React from 'react' import type { ListMultiSelectFieldProps } from './ListMultiSelectField.types' +import LinkedTagIfLinked from './LinkedTagIfLinked' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + listStyleType: 'none', + display: 'flex', + flexShrink: 0, + alignItems: 'center', + padding: 0, + margin: '0 7px', + maxWidth: '400px', + overflow: 'hidden', + textOverflow: 'ellipsis', + }, + li: { + fontSize: '.75rem', + display: 'flex', + alignItems: 'center', + flexShrink: 0, + minWidth: 0, + padding: 0, + margin: '0 6px 0 0', + }, +}) const ListMultiSelectField = ({ payload, path, link, query }: ListMultiSelectFieldProps) => { - const LinkedTag = (name: string) => { - const href = `${path}tags/${encodeURIComponent(name)}` - if (link && query) { - const Link = link - return ( - <> - - {name} - - - ) - } else if (link) { - const Link = link - return ( - <> - - {name} - - - ) - } - return ( - - {name} - - ) - } + const { multi_select } = payload return ( -
      - {payload.multi_select.map(f => ( -
    • - {LinkedTag(f.name)} +
        + {multi_select.map(v => ( +
      • + + {v.name} +
      • ))}
      diff --git a/src/ui/components/List/ListNumberField/ListNumberField.tsx b/src/ui/components/List/ListNumberField/ListNumberField.tsx index c57984ce..32fe8698 100644 --- a/src/ui/components/List/ListNumberField/ListNumberField.tsx +++ b/src/ui/components/List/ListNumberField/ListNumberField.tsx @@ -1,9 +1,23 @@ import React from 'react' import type { ListNumberFieldProps } from './ListNumberField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + whiteSpace: 'nowrap', + fontSize: '.85rem', + display: 'flex', + alignItems: 'center', + margin: '0 7px', + minWidth: '20px', + }, +}) const ListNumberField = ({ payload }: ListNumberFieldProps) => { return ( -
      +
      {payload.number}
      ) diff --git a/src/ui/components/List/ListRichTextField/ListRichTextField.tsx b/src/ui/components/List/ListRichTextField/ListRichTextField.tsx index ff0460fd..3d7096e4 100644 --- a/src/ui/components/List/ListRichTextField/ListRichTextField.tsx +++ b/src/ui/components/List/ListRichTextField/ListRichTextField.tsx @@ -1,11 +1,28 @@ import React from 'react' -import TextBlock from '../../Page/TextBlock/TextBlock' +import { RichText } from '../../Page/RichText' import type { ListRichTextFieldProps } from './ListRichTextField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + fontSize: '.85rem', + whiteSpace: 'nowrap', + display: 'block', + margin: '0 .5rem', + padding: '0 .5rem', + maxWidth: '25rem', + color: '#777', + textOverflow: 'ellipsis', + overflow: 'hidden', + }, +}) const ListRichTextField = ({ payload }: ListRichTextFieldProps) => { return ( -
      - +
      +
      ) } diff --git a/src/ui/components/List/ListTitleField/LinkedTitle.tsx b/src/ui/components/List/ListTitleField/LinkedTitle.tsx new file mode 100644 index 00000000..e07f2e33 --- /dev/null +++ b/src/ui/components/List/ListTitleField/LinkedTitle.tsx @@ -0,0 +1,40 @@ +import React from 'react' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' +import type { LinkedTitleProps } from './LinkedTitle.types' + +const style = Stylex.create({ + link: { + fontFamily: tokens.fontFamily, + textDecoration: link.textDecoration, + borderBottom: link.borderBottom, + color: 'inherit', + cursor: link.cursor, + }, +}) + +const LinkedTitle = ({ title, href, link, query }: LinkedTitleProps) => { + if (link && query) { + const Link = link + return ( + + {title} + + ) + } else if (link) { + const Link = link + return ( + + {title} + + ) + } + + return ( + + {title} + + ) +} + +export default LinkedTitle diff --git a/src/ui/components/List/ListTitleField/LinkedTitle.types.ts b/src/ui/components/List/ListTitleField/LinkedTitle.types.ts new file mode 100644 index 00000000..653381c9 --- /dev/null +++ b/src/ui/components/List/ListTitleField/LinkedTitle.types.ts @@ -0,0 +1,9 @@ +import type { ParsedUrlQueryInput } from 'node:querystring' +import type { Link } from '../../types' + +export interface LinkedTitleProps { + title: string + href: string + link?: Link + query?: ParsedUrlQueryInput +} diff --git a/src/ui/components/List/ListTitleField/ListTitleField.tsx b/src/ui/components/List/ListTitleField/ListTitleField.tsx index 49ae3786..0c47cd0c 100644 --- a/src/ui/components/List/ListTitleField/ListTitleField.tsx +++ b/src/ui/components/List/ListTitleField/ListTitleField.tsx @@ -1,5 +1,21 @@ import React from 'react' import type { ListTitleFieldProps } from './ListTitleField.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' +import LinkedTitle from './LinkedTitle' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + whiteSpace: 'nowrap', + display: 'block', + maxWidth: '500px', + overflow: 'hidden', + textOverflow: 'ellipsis', + lineHeight: 1.4, + margin: '0 7px', + }, +}) const ListTitleField = ({ payload, path, slug, link, query }: ListTitleFieldProps) => { const title = payload.map(v => { @@ -13,39 +29,12 @@ const ListTitleField = ({ payload, path, slug, link, query }: ListTitleFieldProp return richtext.equation.expression } }).join(',') - const href = `${path}${slug}` - const LinkedTitle = () => { - if (link && query) { - const Link = link - return ( - <> - - {title} - - - ) - } else if (link) { - const Link = link - return ( - <> - - {title} - - - ) - } - - return ( - - {title} - - ) - } + const href = `${path}${slug}` return ( -
      - {LinkedTitle()} +
      +
      ) } diff --git a/src/ui/components/List/ListUrlField/ListUrlField.tsx b/src/ui/components/List/ListUrlField/ListUrlField.tsx index 2a37a6b0..243f80bd 100644 --- a/src/ui/components/List/ListUrlField/ListUrlField.tsx +++ b/src/ui/components/List/ListUrlField/ListUrlField.tsx @@ -1,25 +1,68 @@ import React from 'react' import type { ListUrlFieldProps } from './ListUrlField.types' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + display: 'flex', + whiteSpace: 'nowrap', + margin: '0 7px', + }, + link: { + display: 'block', + textDecoration: link.textDecoration, + cursor: link.cursor, + padding: '0 5px 4px', + color: { + default: link.color, + ':hover': link.colorHover, + }, + background: { + default: 'inherit', + ':hover': 'rgb(227, 226, 224) none repeat scroll 0% 0%', + }, + borderRadius: tokens.borderRadius, + }, + chain: { + display: 'inline', + width: '12px', + height: '12px', + marginRight: '4px', + verticalAlign: 'middle', + }, + address: { + display: 'inline', + fontSize: '.7rem', + lineHeight: 1.2, + whiteSpace: 'nowrap', + backgroundImage: 'linear-gradient(to right, rgba(55, 53, 47, 0.16) 0%, rgba(55, 53, 47, 0.16) 100%)', + backgroundRepeat: 'repeat-x', + backgroundPosition: '0 100%', + backgroundSize: '100% 1px', + }, +}) const ListUrlField = ({ payload }: ListUrlFieldProps) => { - if (payload === null) { - return (<>) + if (!payload) { + return <> } const regex = /https?:\/\/([0-9A-z.-]+)/ const result = payload.match(regex) - if (result === null) { - return (<>) + if (!result) { + return <> } const domain = result[1] return ( -
      - - +
      + + - + {domain} diff --git a/src/ui/components/Page/BookmarkBlock/BookmarkBlock.stories.tsx b/src/ui/components/Page/BookmarkBlock/BookmarkBlock.stories.tsx new file mode 100644 index 00000000..430d62da --- /dev/null +++ b/src/ui/components/Page/BookmarkBlock/BookmarkBlock.stories.tsx @@ -0,0 +1,59 @@ +import type { Meta, StoryObj } from '@storybook/react' +import type { BookmarkBlockObjectResponseEx } from '../../../../exporter' +import BookmarkBlock from './BookmarkBlock' + +const block: BookmarkBlockObjectResponseEx = { + object: 'block', + id: '12345678-1234-1234-1234-1234567890ab', + type: 'bookmark', + parent: { + type: 'page_id', + page_id: '12345678-1234-1234-1234-1234567890ab', + }, + bookmark: { + url: 'https://github.com', + caption: [], + site: { + title: 'GitHub: Let’s build from here', + desc: 'GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...', + image: 'https://github.githubassets.com/assets/campaign-social-031d6161fa10.png', + icon: 'https://github.com/fluidicon.png', + } + }, + created_time: '2024-01-07T01:52:00.000Z', + last_edited_time: '2024-01-07T01:52:00.000Z', + created_by: { + object: 'user', + id: '12345678-1234-1234-1234-1234567890ab' + }, + last_edited_by: { + object: 'user', + id: '12345678-1234-1234-1234-1234567890ab' + }, + has_children: false, + archived: false, +} + +const meta = { + title: 'Page/BookmarkBlock', + component: BookmarkBlock, + args: { + block, + }, + tags: ['autodocs'], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +const emptyBookmark = structuredClone(block) +emptyBookmark.bookmark.site.title = '' +emptyBookmark.bookmark.site.desc = '' +emptyBookmark.bookmark.site.image = '' +export const Empty: Story = { + args: { + block: emptyBookmark, + }, +} diff --git a/src/ui/components/Page/BookmarkBlock/BookmarkBlock.tsx b/src/ui/components/Page/BookmarkBlock/BookmarkBlock.tsx index 54c57bf2..2309afdb 100644 --- a/src/ui/components/Page/BookmarkBlock/BookmarkBlock.tsx +++ b/src/ui/components/Page/BookmarkBlock/BookmarkBlock.tsx @@ -1,37 +1,154 @@ import React from 'react' -import TextBlock from '../TextBlock/TextBlock' +import { RichText } from '../RichText' import type { BookmarkBlockProps } from './BookmarkBlock.types' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' + +const style = Stylex.create({ + bookmark: { + fontFamily: tokens.fontFamily, + padding: '.5rem 0', + lineHeight: 1, + marginTop: '.4rem', + }, + box: { + border: '1px solid #EEE', + borderRadius: tokens.borderRadius, + fontSize: '.75rem', + padding: 0, + display: { + default: 'flex', + '@media (max-width: 580px)': 'block', + }, + cursor: 'pointer', + position: 'relative', + backgroundColor: { + default: link.backgroundColor, + ':hover': link.backgroundColorHover, + }, + overflow: 'hidden', + }, + text: { + flex: '4 1 180px', + padding: '.7rem 1rem 0', + lineHeight: 1.7, + alignSelf: 'start', + overflow: 'hidden', + }, + image: { + flex: '1 1 180px', + margin: 0, + padding: 0, + lineHeight: 1, + overflow: 'hidden', + height: '108px', + display: { + default: 'block', + '@media (max-width: 580px)': 'none', + }, + }, + img: { + display: 'block', + objectFit: 'cover', + borderRadius: '1px', + background: 'rgb(25, 25, 25)', + width: '100%', + height: '100%', + }, + title: { + fontSize: '.9rem', + width: '100%', + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + display: 'block', + marginBottom: '2px', + }, + desc: { + color: '#999', + lineHeight: '16px', + fontSize: '12px', + height: '32px', + overflow: 'hidden', + }, + url: { + fontSize: '12px', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + marginTop: '8px', + position: { + default: 'relative', + '@media (max-width: 580px)': 'static', + }, + padding: { + default: 0, + '@media (max-width: 580px)': '1rem 0 .85rem', + }, + }, + favicon: { + display: 'inline', + verticalAlign: 'bottom', + marginRight: '10px', + marginBottom: '1px', + }, + caption: { + margin: '.3rem .3rem 0', + textAlign: 'left', + color: '#888', + fontSize: '.8rem', + }, +}) const BookmarkBlock = ({ block }: BookmarkBlockProps) => { if (!block.bookmark) { return <> } - const jump = () => window.open(block.bookmark?.url, '_blank', 'noreferrer') const { title, desc, icon, image } = block.bookmark.site + const jump = () => window.open(block.bookmark?.url, '_blank', 'noreferrer') const url = block.bookmark.url + if (title === '' && desc === '' && image === '') { + return ( +
      +
      +
      +
      + {url.substring(url.lastIndexOf('/') + 1)} +
      +
      + {url} +
      +
      +
      +
      + ) + } + return ( -
      -
      -
      -
      +
      +
      +
      +
      {title}
      -
      +
      {desc}
      -
      - {icon !== '' && icon} +
      + {icon !== '' && icon} {url}
      -
      - {image !== '' && image} +
      + {image !== '' && image}
      -
      - +
      + {block.bookmark.caption.map((v, i) => ( + + ))}
      ) diff --git a/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.stories.tsx b/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.stories.tsx index 55bbdc7f..facaa456 100644 --- a/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.stories.tsx +++ b/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.stories.tsx @@ -1,110 +1,23 @@ import type { Meta, StoryObj } from '@storybook/react' import type { BreadcrumbBlockObjectResponseEx } from '../../../../exporter' import BreadcrumbBlock from './BreadcrumbBlock' -import '../../../styles/base.css' -import '../../../styles/page.css' - -/* Link Preview -{ - "object": "block", - "id": "9997c8f3-cac4-4d90-928b-f0709e0cbd4b", - "parent": { - "type": "page_id", - "page_id": "23740912-d6ac-4018-ab76-c64e772a342a" - }, - "created_time": "2022-08-06T13:42:00.000Z", - "last_edited_time": "2024-01-09T10:10:00.000Z", - "created_by": { - "object": "user", - "id": "c1400938-a445-438b-be9c-2734e5dc90a6" - }, - "last_edited_by": { - "object": "user", - "id": "a025d50d-8534-48a9-8897-8880be9aa4b8" - }, - "has_children": false, - "archived": false, - "type": "link_preview", - "link_preview": { - "url": "https://www.figma.com/file/GfHZFRpWGd0QXsRg9igdw8/Google-Material-Design?node-id=0%3A1" - } -}, -*/ - -/* File(PDF) -still a not supported component: file { - object: 'block', - id: '8b386055-5a2d-4339-812e-5d959f83f07d', - parent: { type: 'page_id', page_id: '23740912-d6ac-4018-ab76-c64e772a342a' }, - created_time: '2024-01-07T02:00:00.000Z', - last_edited_time: '2024-01-07T02:00:00.000Z', - created_by: { object: 'user', id: 'c1400938-a445-438b-be9c-2734e5dc90a6' }, - last_edited_by: { object: 'user', id: 'c1400938-a445-438b-be9c-2734e5dc90a6' }, - has_children: false, - archived: false, - type: 'file', - file: { - caption: [], - type: 'file', - file: { - url: 'https://prod-files-secure.s3.us-west-2.amazonaws.com/9c5c8bd8-2326-4257-98e7-557d511c9d37/2c85f471-2d8c-4979-8b38-8a37fca0dd2b/sample.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20240108%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20240108T130424Z&X-Amz-Expires=3600&X-Amz-Signature=c080de70c7fc07ba8683c97fa54f04dd143e0024d307327a497810ca6c07b2f9&X-Amz-SignedHeaders=host&x-id=GetObject', - expiry_time: '2024-01-08T14:04:24.851Z' - }, - name: 'sample.pdf' - } -} -*/ - -/* Synced Block -still a not supported component: synced_block { - object: 'block', - id: '59c258ad-832b-40ae-b823-86c6ba589121', - parent: { type: 'page_id', page_id: '23740912-d6ac-4018-ab76-c64e772a342a' }, - created_time: '2024-01-07T01:40:00.000Z', - last_edited_time: '2024-01-07T01:40:00.000Z', - created_by: { object: 'user', id: 'c1400938-a445-438b-be9c-2734e5dc90a6' }, - last_edited_by: { object: 'user', id: 'c1400938-a445-438b-be9c-2734e5dc90a6' }, - has_children: true, - archived: false, - type: 'synced_block', - synced_block: { synced_from: null } -} -still a not supported component: synced_block { - object: 'block', - id: '78d88e3e-188a-41e3-86c4-2a576f6ed8bd', - parent: { type: 'page_id', page_id: '23740912-d6ac-4018-ab76-c64e772a342a' }, - created_time: '2024-01-07T01:40:00.000Z', - last_edited_time: '2024-01-07T01:40:00.000Z', - created_by: { object: 'user', id: 'c1400938-a445-438b-be9c-2734e5dc90a6' }, - last_edited_by: { object: 'user', id: 'c1400938-a445-438b-be9c-2734e5dc90a6' }, - has_children: true, - archived: false, - type: 'synced_block', - synced_block: { - synced_from: { - type: 'block_id', - block_id: '59c258ad-832b-40ae-b823-86c6ba589121' - } - } -} -*/ const block: BreadcrumbBlockObjectResponseEx = { object: 'block', - id: '', + id: '12345678-1234-1234-1234-1234567890ab', parent: { type: 'page_id', - page_id: '' + page_id: '12345678-1234-1234-1234-1234567890ab' }, created_time: '2024-01-07T01:52:00.000Z', last_edited_time: '2024-01-07T01:52:00.000Z', created_by: { object: 'user', - id: '' + id: '12345678-1234-1234-1234-1234567890ab' }, last_edited_by: { object: 'user', - id: '' + id: '12345678-1234-1234-1234-1234567890ab' }, has_children: false, archived: false, @@ -112,7 +25,7 @@ const block: BreadcrumbBlockObjectResponseEx = { breadcrumb: {}, list: [ { - id: 'aaaaaaaaaaaaaaa', + id: '12345678-1234-1234-1234-1234567890ab', name: 'Foo Bar', icon: { type: 'external', @@ -121,7 +34,7 @@ const block: BreadcrumbBlockObjectResponseEx = { }, }, { - id: 'bbbbbbbbbbbbbbbb', + id: '12345678-1234-1234-1234-1234567890ab', name: 'Alice', icon: { type: 'external', diff --git a/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.tsx b/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.tsx index fe89375b..00fadbb7 100644 --- a/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.tsx +++ b/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.tsx @@ -1,72 +1,6 @@ import React from 'react' -import { getLinkPathAndLinkKey, queryToString } from '../../lib' -import type { Breadcrumb } from '../../../../exporter' -import type { BreadcrumbBlockProps, BreadcrumbLinkProps, BreadcrumbsProps } from './BreadcrumbBlock.types' - -function buildPathname (id: string, name: string, href?: string) { - if (href === '/') { - return href - } - - const [path, slugKey] = getLinkPathAndLinkKey(href || '') - let file = '' - - if (slugKey === 'id') { - file = id - } else { - file = encodeURIComponent(name.toLowerCase()).replace(/%20/g, '-') - } - - return `${path}${file}` -} - -const BreadcrumbLink = ({ breadcrumb, link, href, query, children }: BreadcrumbLinkProps) => { - const { id, name } = breadcrumb - const pathname = buildPathname(id, name, href) - - if (link && href) { - const Link = link - return ( - - {children} - - ) - } - - if (href) { - return ( - - {children} - - ) - } - - return ( - - {children} - - ) -} - -export const Breadcrumbs = ({ list, link, hrefs, query }: BreadcrumbsProps) => { - const max = list.length - return ( -
      - {list.map((v: Breadcrumb, i: number) => ( - - - {v.icon.type === 'emoji' && {v.icon.emoji}} - {v.icon.type !== 'emoji' && {v.name}} - - {v.name} - - - {i + 1 < max && /} - - ))} -
      - ) -} +import Breadcrumbs from './Breadcrumbs' +import type { BreadcrumbBlockProps } from './BreadcrumbBlock.types' const BreadcrumbBlock = ({ block, link, hrefs, query }: BreadcrumbBlockProps) => { return diff --git a/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.types.ts b/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.types.ts index a35f8bb9..9088be4f 100644 --- a/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.types.ts +++ b/src/ui/components/Page/BreadcrumbBlock/BreadcrumbBlock.types.ts @@ -1,22 +1,6 @@ -import type { ReactNode } from 'react' import type { ParsedUrlQueryInput } from 'node:querystring' import type { Link } from '../../types' -import type { Breadcrumb, BreadcrumbBlockObjectResponseEx } from '../../../../exporter' - -export interface BreadcrumbLinkProps { - breadcrumb: Breadcrumb - link?: Link - href?: string - query?: ParsedUrlQueryInput - children?: ReactNode -} - -export interface BreadcrumbsProps { - list: Breadcrumb[] - link?: Link - hrefs?: string[] - query?: ParsedUrlQueryInput -} +import type { BreadcrumbBlockObjectResponseEx } from '../../../../exporter' export interface BreadcrumbBlockProps { block: BreadcrumbBlockObjectResponseEx diff --git a/src/ui/components/Page/BreadcrumbBlock/Breadcrumbs.tsx b/src/ui/components/Page/BreadcrumbBlock/Breadcrumbs.tsx new file mode 100644 index 00000000..f186b3f7 --- /dev/null +++ b/src/ui/components/Page/BreadcrumbBlock/Breadcrumbs.tsx @@ -0,0 +1,47 @@ +import React from 'react' +import LinkedBreadcrumbIfLinked from './LinkedBreadcrumbIfLinked' +import type { Breadcrumb } from '../../../../exporter' +import type { BreadcrumbsProps } from './Breadcrumbs.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + }, + icon: { + verticalAlign: 'middle', + paddingRight: '.4rem', + paddingBottom: '.2rem', + }, + slash: { + fontSize: '.9rem', + opacity: '.5', + padding: '0 .3rem', + }, + title: { + }, +}) + +// Note: This omponent cut out from BreadcrumbBlock. To call the breadcrumb list from other than Page. So, Don't integrate. +const Breadcrumbs = ({ list, link, hrefs, query }: BreadcrumbsProps) => { + const max = list.length + return ( +
      + {list.map((v: Breadcrumb, i: number) => ( + + + {v.icon.type === 'emoji' && {v.icon.emoji}} + {v.icon.type !== 'emoji' && {v.name}} + + {v.name} + + + {i + 1 < max && /} + + ))} +
      + ) +} + +export default Breadcrumbs diff --git a/src/ui/components/Page/BreadcrumbBlock/Breadcrumbs.types.ts b/src/ui/components/Page/BreadcrumbBlock/Breadcrumbs.types.ts new file mode 100644 index 00000000..4db1e4f7 --- /dev/null +++ b/src/ui/components/Page/BreadcrumbBlock/Breadcrumbs.types.ts @@ -0,0 +1,10 @@ +import type { ParsedUrlQueryInput } from 'node:querystring' +import type { Link } from '../../types' +import type { Breadcrumb } from '../../../../exporter' + +export interface BreadcrumbsProps { + list: Breadcrumb[] + link?: Link + hrefs?: string[] + query?: ParsedUrlQueryInput +} diff --git a/src/ui/components/Page/BreadcrumbBlock/LinkedBreadcrumbIfLinked.tsx b/src/ui/components/Page/BreadcrumbBlock/LinkedBreadcrumbIfLinked.tsx new file mode 100644 index 00000000..22c184c6 --- /dev/null +++ b/src/ui/components/Page/BreadcrumbBlock/LinkedBreadcrumbIfLinked.tsx @@ -0,0 +1,71 @@ +import React from 'react' +import { getLinkPathAndLinkKey, queryToString } from '../../lib' +import type { LinkedBreadcrumbIfLinkedProps } from './LinkedBreadcrumbIfLinked.types' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' + +const style = Stylex.create({ + link: { + fontSize: '.9rem', + padding: '.2rem .3rem', + fontFamily: tokens.fontFamily, + borderRadius: tokens.borderRadius, + backgroundColor: { + default: link.backgroundColor, + ':hover': link.backgroundColorHover, + }, + cursor: link.cursor, + textDecoration: link.textDecoration, + color: { + default: link.color, + ':hover': link.colorHover, + }, + }, +}) + +function buildPathname (id: string, name: string, href?: string) { + if (href === '/') { + return href + } + + const [path, slugKey] = getLinkPathAndLinkKey(href || '') + let file = '' + + if (slugKey === 'id') { + file = id + } else { + file = encodeURIComponent(name.toLowerCase()).replace(/%20/g, '-') + } + + return `${path}${file}` +} + +const LinkedBreadcrumbIfLinked = ({ breadcrumb, link, href, query, children }: LinkedBreadcrumbIfLinkedProps) => { + const { id, name } = breadcrumb + const pathname = buildPathname(id, name, href) + + if (link && href) { + const Link = link + return ( + + {children} + + ) + } + + if (href) { + return ( + + {children} + + ) + } + + return ( + + {children} + + ) +} + +export default LinkedBreadcrumbIfLinked diff --git a/src/ui/components/Page/BreadcrumbBlock/LinkedBreadcrumbIfLinked.types.ts b/src/ui/components/Page/BreadcrumbBlock/LinkedBreadcrumbIfLinked.types.ts new file mode 100644 index 00000000..d84a9762 --- /dev/null +++ b/src/ui/components/Page/BreadcrumbBlock/LinkedBreadcrumbIfLinked.types.ts @@ -0,0 +1,12 @@ +import type { ReactNode } from 'react' +import type { ParsedUrlQueryInput } from 'node:querystring' +import type { Link } from '../../types' +import type { Breadcrumb } from '../../../../exporter' + +export interface LinkedBreadcrumbIfLinkedProps { + breadcrumb: Breadcrumb + link?: Link + href?: string + query?: ParsedUrlQueryInput + children?: ReactNode +} diff --git a/src/ui/components/Page/BreadcrumbBlock/index.ts b/src/ui/components/Page/BreadcrumbBlock/index.ts index a6fd312f..4ab622bd 100644 --- a/src/ui/components/Page/BreadcrumbBlock/index.ts +++ b/src/ui/components/Page/BreadcrumbBlock/index.ts @@ -1,2 +1,3 @@ -import BreadcrumbBlock, { Breadcrumbs } from './BreadcrumbBlock' +import BreadcrumbBlock from './BreadcrumbBlock' +import Breadcrumbs from './Breadcrumbs' export { BreadcrumbBlock, Breadcrumbs } diff --git a/src/ui/components/Page/BulletedListBlock/BulletedListBlock.tsx b/src/ui/components/Page/BulletedListBlock/BulletedListBlock.tsx new file mode 100644 index 00000000..2ec4c4b0 --- /dev/null +++ b/src/ui/components/Page/BulletedListBlock/BulletedListBlock.tsx @@ -0,0 +1,44 @@ +import React from 'react' +import type { BulletedListBlockProps } from './BulletedListBlock.types' +import { RichText } from '../RichText' +import { blockType } from '../PageHandler' +import Page from '../Page' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + lineHeight: 1.5, + padding: '.2rem 0 .2rem .3rem', + margin: 0, + }, +}) + +const BulletedListBlock = ({ block, href, link, query }: BulletedListBlockProps) => { + const CustomTag = blockType[block.type] as keyof JSX.IntrinsicElements + + // @ts-ignore + const text = block[block.type]?.rich_text + + if (block.has_children && block.children !== undefined) { + return ( + + {text.map((v, i) => ( + + ))} + + + ) + } + + return ( + + {text.map((v, i) => ( + + ))} + + ) +} + +export default BulletedListBlock diff --git a/src/ui/components/Page/BulletedListBlocks/BulletedListBlocks.types.ts b/src/ui/components/Page/BulletedListBlock/BulletedListBlock.types.ts similarity index 87% rename from src/ui/components/Page/BulletedListBlocks/BulletedListBlocks.types.ts rename to src/ui/components/Page/BulletedListBlock/BulletedListBlock.types.ts index b237f415..2925ca4b 100644 --- a/src/ui/components/Page/BulletedListBlocks/BulletedListBlocks.types.ts +++ b/src/ui/components/Page/BulletedListBlock/BulletedListBlock.types.ts @@ -2,7 +2,7 @@ import type { BulletedListItemBlockObjectResponseEx } from '../../../../exporter import type { ParsedUrlQueryInput } from 'node:querystring' import type { Link } from '../../types' -export interface BulletedListBlocksProps { +export interface BulletedListBlockProps { block: BulletedListItemBlockObjectResponseEx href?: string link?: Link diff --git a/src/ui/components/Page/BulletedListBlock/index.ts b/src/ui/components/Page/BulletedListBlock/index.ts new file mode 100644 index 00000000..a86e4793 --- /dev/null +++ b/src/ui/components/Page/BulletedListBlock/index.ts @@ -0,0 +1,2 @@ +import BulletedListBlock from './BulletedListBlock' +export { BulletedListBlock } diff --git a/src/ui/components/Page/BulletedListBlocks/BulletedListBlocks.tsx b/src/ui/components/Page/BulletedListBlocks/BulletedListBlocks.tsx deleted file mode 100644 index d2af51b0..00000000 --- a/src/ui/components/Page/BulletedListBlocks/BulletedListBlocks.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import type { BlockObjectResponse } from '../../../../exporter' -import type { BulletedListBlocksProps } from './BulletedListBlocks.types' -import TextBlock from '../TextBlock/TextBlock' -import PageHandler, { blockType } from '../PageHandler' - -const BulletedListBlocks = ({ block, href, link, query }: BulletedListBlocksProps) => { - const tag = blockType[block.type] as keyof JSX.IntrinsicElements - - // @ts-ignore - const text = block[block.type]?.rich_text - - if (block.has_children && block.children !== undefined) { - return ( -
      - - {block.children.results.map((bb) => ( - PageHandler({ block: (bb as BlockObjectResponse), href, link, query }) - ))} -
      - ) - } - - return -} - -export default BulletedListBlocks diff --git a/src/ui/components/Page/BulletedListBlocks/index.ts b/src/ui/components/Page/BulletedListBlocks/index.ts deleted file mode 100644 index 6dced7fe..00000000 --- a/src/ui/components/Page/BulletedListBlocks/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -import BulletedListBlocks from './BulletedListBlocks' -export { BulletedListBlocks } diff --git a/src/ui/components/Page/CalloutBlock/CalloutBlock.stories.tsx b/src/ui/components/Page/CalloutBlock/CalloutBlock.stories.tsx index b5010c70..dcff37c4 100644 --- a/src/ui/components/Page/CalloutBlock/CalloutBlock.stories.tsx +++ b/src/ui/components/Page/CalloutBlock/CalloutBlock.stories.tsx @@ -1,8 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react' import type { CalloutBlockObjectResponseEx, RichTextItemResponse } from '../../../../exporter' import CalloutBlock from './CalloutBlock' -import '../../../styles/base.css' -import '../../../styles/page.css' const richText: RichTextItemResponse = { type: 'text', @@ -24,20 +22,20 @@ const richText: RichTextItemResponse = { const block: CalloutBlockObjectResponseEx = { object: 'block', - id: '', + id: '12345678-1234-1234-1234-1234567890ab', parent: { type: 'page_id', - page_id: '', + page_id: '12345678-1234-1234-1234-1234567890ab', }, - created_time: '', - last_edited_time: '', + created_time: '2020-02-22T22:22:22.000Z', + last_edited_time: '2020-02-22T22:22:22.000Z', created_by: { object: 'user', - id: '', + id: '12345678-1234-1234-1234-1234567890ab', }, last_edited_by: { object: 'user', - id: '', + id: '12345678-1234-1234-1234-1234567890ab', }, has_children: false, archived: false, @@ -70,12 +68,174 @@ const icon = structuredClone(block) icon.callout.icon! = { type: 'external', external: { - url: 'https://www.notion.so/icons/light-bulb_blue.svg?mode=light', + url: 'https://www.notion.so/icons/light-bulb_default.svg?mode=light', }, - src: 'https://www.notion.so/icons/light-bulb_blue.svg?mode=light', + src: 'https://www.notion.so/icons/light-bulb_gray.svg?mode=light', } export const Icon: Story = { args: { block: icon } } + +/* GRAY */ +const gray = structuredClone(icon) +gray.callout.color = 'gray' +// @ts-ignore +gray.callout.icon.src = 'https://www.notion.so/icons/light-bulb_lightgray.svg' +export const Gray: Story = { + args: { + block: gray + } +} +const bgGray = structuredClone(gray) +bgGray.callout.color = 'gray_background' +export const BgGray: Story = { + args: { + block: bgGray + } +} + +/* BROWN */ +const brown = structuredClone(icon) +brown.callout.color = 'brown' +// @ts-ignore +brown.callout.icon.src = 'https://www.notion.so/icons/light-bulb_brown.svg' +export const Brown: Story = { + args: { + block: brown + } +} +const bgBrown = structuredClone(brown) +bgBrown.callout.color = 'brown_background' +export const BgBrown: Story = { + args: { + block: bgBrown + } +} + +/* ORANGE */ +const orange = structuredClone(icon) +orange.callout.color = 'orange' +// @ts-ignore +orange.callout.icon.src = 'https://www.notion.so/icons/light-bulb_orange.svg' +export const Orange: Story = { + args: { + block: orange + } +} +const bgOrange = structuredClone(orange) +bgOrange.callout.color = 'orange_background' +export const BgOrange: Story = { + args: { + block: bgOrange + } +} + +/* YELLOW */ +const yellow = structuredClone(icon) +yellow.callout.color = 'yellow' +// @ts-ignore +yellow.callout.icon.src = 'https://www.notion.so/icons/light-bulb_yellow.svg' +export const Yellow: Story = { + args: { + block: yellow + } +} +const bgYellow = structuredClone(yellow) +bgYellow.callout.color = 'yellow_background' +export const BgYellow: Story = { + args: { + block: bgYellow + } +} + +/* GREEN */ +const green = structuredClone(icon) +green.callout.color = 'green' +// @ts-ignore +green.callout.icon.src = 'https://www.notion.so/icons/light-bulb_green.svg' +export const Green: Story = { + args: { + block: green + } +} +const bgGreen = structuredClone(green) +bgGreen.callout.color = 'green_background' +export const BgGreen: Story = { + args: { + block: bgGreen + } +} + +/* BLUE */ +const blue = structuredClone(icon) +blue.callout.color = 'blue' +// @ts-ignore +blue.callout.icon.src = 'https://www.notion.so/icons/light-bulb_blue.svg' +export const Blue: Story = { + args: { + block: blue + } +} +const bgBlue = structuredClone(blue) +bgBlue.callout.color = 'blue_background' +export const BgBlue: Story = { + args: { + block: bgBlue + } +} + +/* PURPLE */ +const purple = structuredClone(icon) +purple.callout.color = 'purple' +// @ts-ignore +purple.callout.icon.src = 'https://www.notion.so/icons/light-bulb_purple.svg' +export const Purple: Story = { + args: { + block: purple + } +} +const bgPurple = structuredClone(purple) +bgPurple.callout.color = 'purple_background' +export const BgPurple: Story = { + args: { + block: bgPurple + } +} + +/* PINK */ +const pink = structuredClone(icon) +pink.callout.color = 'pink' +// @ts-ignore +pink.callout.icon.src = 'https://www.notion.so/icons/light-bulb_pink.svg' +export const Pink: Story = { + args: { + block: pink + } +} +const bgPink = structuredClone(pink) +bgPink.callout.color = 'pink_background' +export const BgPink: Story = { + args: { + block: bgPink + } +} + +/* RED */ +const red = structuredClone(icon) +red.callout.color = 'red' +// @ts-ignore +red.callout.icon.src = 'https://www.notion.so/icons/light-bulb_red.svg' +export const Red: Story = { + args: { + block: red + } +} +const bgRed = structuredClone(red) +bgRed.callout.color = 'red_background' +export const BgRed: Story = { + args: { + block: bgRed + } +} diff --git a/src/ui/components/Page/CalloutBlock/CalloutBlock.tsx b/src/ui/components/Page/CalloutBlock/CalloutBlock.tsx index 2ffddd3a..ff55c574 100644 --- a/src/ui/components/Page/CalloutBlock/CalloutBlock.tsx +++ b/src/ui/components/Page/CalloutBlock/CalloutBlock.tsx @@ -1,10 +1,104 @@ import React from 'react' -import TextBlock from '../TextBlock/TextBlock' +import { RichText } from '../RichText' import type { CalloutBlockProps } from './CalloutBlock.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + display: 'flex', + padding: '1.2rem', + paddingLeft: '1rem', + width: 'calc(100% - 2.4rem)', + borderRadius: '4px', + marginTop: '.6rem', + }, + icon: { + width: '24px', + height: '24px', + }, + text: { + marginLeft: '.6rem', + marginTop: '.15rem', + }, + default: { + color: 'rgb(55, 53, 47)', + backgroundColor: 'rgb(241, 241, 239)', + }, + default_background: { + color: 'rgb(55, 53, 47)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + gray: { + color: 'rgb(120, 119, 116)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + gray_background: { + backgroundColor: 'rgb(241, 241, 239)', + }, + brown: { + color: 'rgb(159, 107, 83)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + brown_background: { + backgroundColor: 'rgb(244, 238, 238)', + }, + orange: { + color: 'rgb(217, 115, 13)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + orange_background: { + backgroundColor: 'rgb(251, 236, 221)', + }, + yellow: { + color: 'rgb(203, 145, 47)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + yellow_background: { + backgroundColor: 'rgb(251, 243, 219)', + }, + green: { + color: 'rgb(68, 131, 97)', + border: '1px solid rgba(55, 53, 47, 0.16)', + backgroundColor: 'inherit', + }, + green_background: { + backgroundColor: 'rgb(237, 243, 236)', + }, + blue: { + color: 'rgb(51, 126, 169)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + blue_background: { + backgroundColor: 'rgb(231, 243, 248)', + }, + purple: { + color: 'rgb(144, 101, 176)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + purple_background: { + backgroundColor: 'rgba(244, 240, 247, 0.8)', + }, + pink: { + color: 'rgb(193, 76, 138)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + pink_background: { + backgroundColor: 'rgba(249, 238, 243, 0.8)', + }, + red: { + color: 'rgb(212, 76, 71)', + border: '1px solid rgba(55, 53, 47, 0.16)', + }, + red_background: { + backgroundColor: 'rgb(253, 235, 236)', + }, +}) const Icon = ({ block }: CalloutBlockProps) => { - if (block.callout.icon === null) { - return <> + if (!block.callout.icon) { + return <> } const { type } = block.callout.icon @@ -15,20 +109,22 @@ const Icon = ({ block }: CalloutBlockProps) => { case 'file': return Icon default: - return <> + return <> } } const CalloutBlock = ({ block }: CalloutBlockProps) => { - const { rich_text } = block.callout + const { color, rich_text } = block.callout return ( -
      -
      - {} +
      +
      +
      -
      - +
      + {rich_text.map((v, i) => ( + + ))}
      ) diff --git a/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.stories.tsx b/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.stories.tsx index 62b70dc9..b7fc5cf8 100644 --- a/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.stories.tsx +++ b/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.stories.tsx @@ -1,8 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react' import type { ChildDatabaseBlockObjectResponseEx, GetDatabaseResponseEx, RichTextItemResponse } from '../../../../exporter' import ChildDatabaseBlock from './ChildDatabaseBlock' -import '../../../styles/base.css' -import '../../../styles/page.css' const richtext: RichTextItemResponse[] = [{ type: 'text', diff --git a/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.tsx b/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.tsx index 7a355a44..6f2d8c17 100644 --- a/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.tsx +++ b/src/ui/components/Page/ChildDatabaseBlock/ChildDatabaseBlock.tsx @@ -1,6 +1,41 @@ import React from 'react' import type { ChildDatabaseBlockProps, ChildDatabaseLinkProps } from './ChildDatabaseBlock.types' import { getLinkPathAndLinkKey, queryToString } from '../../lib' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + }, + link: { + display: 'grid', + gridTemplate: 'repeat(1, 1fr) / 1.5rem 1fr', + gap: '.4rem', + margin: '.2rem 0 0', + padding: '.6rem .3rem', + textDecoration: link.textDecoration, + color: { + default: link.color, + ':hover': link.colorHover, + }, + alignItems: 'top', + backgroundColor: { + default: link.backgroundColor, + ':hover': link.backgroundColorHover, + }, + borderRadius: tokens.borderRadius, + }, + title: { + borderBottom: '1px solid #ddd', + verticalAlign: 'top', + }, + icon: { + height: '24px', + overflow: 'hidden', + }, +}) const ChildDatabaseLink = ({ block, href, link, query, children }: ChildDatabaseLinkProps) => { const title = block.child_database.title @@ -9,7 +44,7 @@ const ChildDatabaseLink = ({ block, href, link, query, children }: ChildDatabase if (!href) { return ( -
      +
      {children}
      ) @@ -20,14 +55,14 @@ const ChildDatabaseLink = ({ block, href, link, query, children }: ChildDatabase query = {} } return ( - + {children} ) } return ( - + {children} ) @@ -41,13 +76,13 @@ const ChildDatabaseBlock = ({ block, href, link, query }: ChildDatabaseBlockProp const title = block.child_database.title if (block.database === null || block.database.icon === undefined || block.database.icon === null) { return ( -
      +
      - + {'️-'}
      - + {title}
      @@ -58,13 +93,13 @@ const ChildDatabaseBlock = ({ block, href, link, query }: ChildDatabaseBlockProp if (block.database.icon.type === 'emoji') { return ( -
      +
      - + {block.database.icon.emoji}
      - + {title}
      @@ -75,13 +110,13 @@ const ChildDatabaseBlock = ({ block, href, link, query }: ChildDatabaseBlockProp // type external or file return ( -
      +
      - - Icon + + Icon
      - + {title}
      diff --git a/src/ui/components/Page/ChildPageBlock/ChildPageBlock.stories.tsx b/src/ui/components/Page/ChildPageBlock/ChildPageBlock.stories.tsx index 1fd59b11..3a8c6d08 100644 --- a/src/ui/components/Page/ChildPageBlock/ChildPageBlock.stories.tsx +++ b/src/ui/components/Page/ChildPageBlock/ChildPageBlock.stories.tsx @@ -1,9 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react' import type { ChildPageBlockObjectResponseEx, GetPageResponseEx, ListBlockChildrenResponseEx } from '../../../../exporter' import ChildPageBlock from './ChildPageBlock' -import '../../../styles/notionate-dark.css' -import '../../../styles/base.css' -import '../../../styles/page.css' /* Next is Database { diff --git a/src/ui/components/Page/ChildPageBlock/ChildPageBlock.tsx b/src/ui/components/Page/ChildPageBlock/ChildPageBlock.tsx index a01c21e7..4d457667 100644 --- a/src/ui/components/Page/ChildPageBlock/ChildPageBlock.tsx +++ b/src/ui/components/Page/ChildPageBlock/ChildPageBlock.tsx @@ -1,6 +1,41 @@ import React from 'react' import type { ChildPageBlockProps, ChildPageLinkProps } from './ChildPageBlock.types' import { getLinkPathAndLinkKey, queryToString } from '../../lib' +import Stylex from '@stylexjs/stylex' +import { tokens, link } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + }, + link: { + display: 'grid', + gridTemplate: 'repeat(1, 1fr) / 1.5rem 1fr', + gap: '.4rem', + margin: '.2rem 0 0', + padding: '.6rem .3rem', + textDecoration: link.textDecoration, + color: { + default: link.color, + ':hover': link.colorHover, + }, + alignItems: 'top', + backgroundColor: { + default: link.backgroundColor, + ':hover': link.backgroundColorHover, + }, + borderRadius: tokens.borderRadius, + }, + title: { + borderBottom: '1px solid #ddd', + verticalAlign: 'top', + }, + icon: { + height: '24px', + overflow: 'hidden', + }, +}) const ChildPageLink = ({ block, href, link, query, children }: ChildPageLinkProps) => { const title = block.child_page.title @@ -9,7 +44,7 @@ const ChildPageLink = ({ block, href, link, query, children }: ChildPageLinkProp if (!href) { return ( -
      +
      {children}
      ) @@ -20,13 +55,13 @@ const ChildPageLink = ({ block, href, link, query, children }: ChildPageLinkProp query = {} } return ( - + {children} ) } return ( - + {children} ) @@ -40,13 +75,13 @@ const ChildPageBlock = ({ block, href, link, query }: ChildPageBlockProps) => { const title = block.child_page.title if (block.page === null || block.page.icon === undefined || block.page.icon === null) { return ( -
      +
      - + {'️-'}
      - + {title}
      @@ -57,13 +92,13 @@ const ChildPageBlock = ({ block, href, link, query }: ChildPageBlockProps) => { if (block.page.icon.type === 'emoji') { return ( -
      +
      - + {block.page.icon.emoji}
      - + {title}
      @@ -74,13 +109,13 @@ const ChildPageBlock = ({ block, href, link, query }: ChildPageBlockProps) => { // type external or file return ( -
      +
      - - Icon + + Icon
      - + {title}
      diff --git a/src/ui/components/Page/CodeBlock/Code/Code.tsx b/src/ui/components/Page/CodeBlock/Code/Code.tsx index 373447c5..71b6c853 100644 --- a/src/ui/components/Page/CodeBlock/Code/Code.tsx +++ b/src/ui/components/Page/CodeBlock/Code/Code.tsx @@ -1,16 +1,39 @@ import React, { useEffect, useState } from 'react' import type { CodeProps } from './Code.types' +import Stylex from '@stylexjs/stylex' +import mermaid from 'mermaid' +import prism from 'prismjs' -const Code = ({ children, language = 'text', modules }: CodeProps) => { +const style = Stylex.create({ + wrapper: { + borderRadius: '4px', + padding: '.6rem 1rem', + backgroundColor: '#f5f2f0', + margin: '1rem 0', + fontSize: '.8rem', + position: 'relative', + top: 0, + left: 0, + }, + lang: { + position: 'absolute', + top: '.5rem', + left: '.8rem', + color: '#999', + fontSize: '.75rem', + textTransform: 'capitalize', + display: 'block', + }, +}) + +const Code = ({ children, language = 'text' }: CodeProps) => { const codeRef = React.createRef() const highlight = async (language: string) => { if (codeRef.current) { - if (language === 'mermaid' && modules?.mermaid) { - modules.mermaid.init(undefined, codeRef.current as HTMLPreElement) - } else if (modules?.prism) { - modules.prism.highlightElement(codeRef.current as Element) + if (language === 'mermaid') { + mermaid.init(undefined, codeRef.current as HTMLPreElement) } else { - console.log('block component require prismjs or mermaidjs modules argument') + prism.highlightElement(codeRef.current as Element) } } } @@ -25,8 +48,8 @@ const Code = ({ children, language = 'text', modules }: CodeProps) => { }, [language, '']) return ( -
      - {show &&
      +
      + {show &&
      {language}
      }
      diff --git a/src/ui/components/Page/CodeBlock/Code/Code.types.ts b/src/ui/components/Page/CodeBlock/Code/Code.types.ts
      index a8b7c14f..48ca30f7 100644
      --- a/src/ui/components/Page/CodeBlock/Code/Code.types.ts
      +++ b/src/ui/components/Page/CodeBlock/Code/Code.types.ts
      @@ -1,8 +1,6 @@
       import type { ReactNode } from 'react'
      -import type { ExternalModules } from '../../../types'
       
       export interface CodeProps {
         language: string
      -  modules?: ExternalModules
         children?: ReactNode
       }
      diff --git a/src/ui/components/Page/CodeBlock/CodeBlock.stories.tsx b/src/ui/components/Page/CodeBlock/CodeBlock.stories.tsx
      new file mode 100644
      index 00000000..414b2617
      --- /dev/null
      +++ b/src/ui/components/Page/CodeBlock/CodeBlock.stories.tsx
      @@ -0,0 +1,142 @@
      +import type { Meta, StoryObj } from '@storybook/react'
      +import type { CodeBlockObjectResponse, RichTextItemResponse } from '../../../../exporter'
      +import CodeBlock from './CodeBlock'
      +
      +import 'prismjs/components/prism-bash'
      +import 'prismjs/components/prism-go'
      +import 'prismjs/components/prism-typescript'
      +import 'prismjs/components/prism-sql'
      +import 'prismjs/themes/prism.min.css'
      +
      +const examples = {
      +  typescript: `type Text = {
      +  href: string
      +  anotaion: {
      +    color: string
      +    bold: boolean
      +  }
      +}`,
      +  bash: `$ hostname
      +notion
      +$ ps auxf
      +...`,
      +  go: `func main() {
      +    v := "world"
      +    fmt.Printf("hello %s!", v)
      +}`,
      +  sql: 'select id, created_at from users where username = "notion";',
      +  mermaid: `sequenceDiagram
      +  participant Alice
      +  participant Bob
      +  Alice->>John: Hello John, how are you?
      +  loop Healthcheck
      +      John->>John: Fight against hypochondria
      +  end
      +  Note right of John: Rational thoughts 
      prevail! + John-->>Alice: Great! + John->>Bob: How about you? + Bob-->>John: Jolly good!` +} + +const richText: RichTextItemResponse = { + type: 'text', + text: { + content: examples.bash, + link: null, + }, + annotations: { + bold: true, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: examples.bash, + href: null, +} + +const block: CodeBlockObjectResponse = { + object: 'block', + id: '12345678-1234-1234-1234-1234567890ab', + type: 'code', + parent: { + type: 'page_id', + page_id: '12345678-1234-1234-1234-1234567890ab', + }, + code: { + rich_text: [richText], + caption: [], + language: 'bash', + }, + created_time: '2024-01-07T01:52:00.000Z', + last_edited_time: '2024-01-07T01:52:00.000Z', + created_by: { + object: 'user', + id: '12345678-1234-1234-1234-1234567890ab' + }, + last_edited_by: { + object: 'user', + id: '12345678-1234-1234-1234-1234567890ab' + }, + has_children: false, + archived: false, +} + +const meta = { + title: 'Page/CodeBlock', + component: CodeBlock, + args: { + block, + }, + tags: ['autodocs'], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Bash: Story = {} + +const go = structuredClone(block) +// @ts-ignore +go.code.rich_text[0].text.content = examples.go +go.code.rich_text[0].plain_text = examples.go +go.code.language = 'go' +export const Go: Story = { + args: { + block: go + } +} + +const ts = structuredClone(block) +// @ts-ignore +ts.code.rich_text[0].text.content = examples.typescript +ts.code.rich_text[0].plain_text = examples.typescript +ts.code.language = 'typescript' +export const TypeScript: Story = { + args: { + block: ts + } +} + +const sql = structuredClone(block) +// @ts-ignore +sql.code.rich_text[0].text.content = examples.sql +sql.code.rich_text[0].plain_text = examples.sql +sql.code.language = 'sql' +export const SQL: Story = { + args: { + block: sql + } +} + +const mermaid = structuredClone(block) +// @ts-ignore +mermaid.code.rich_text[0].text.content = examples.mermaid +mermaid.code.rich_text[0].plain_text = examples.mermaid +mermaid.code.language = 'mermaid' +export const Mermaid: Story = { + args: { + block: mermaid + } +} diff --git a/src/ui/components/Page/CodeBlock/CodeBlock.tsx b/src/ui/components/Page/CodeBlock/CodeBlock.tsx index 5cee04cf..d7e248df 100644 --- a/src/ui/components/Page/CodeBlock/CodeBlock.tsx +++ b/src/ui/components/Page/CodeBlock/CodeBlock.tsx @@ -7,12 +7,27 @@ import type { import RichText from '../RichText/RichText' import type { CodeBlockProps } from './CodeBlock.types' import Code from './Code/Code' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' -const CodeBlock = ({ block, modules }: CodeBlockProps) => { +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + }, + caption: { + margin: '.3rem .3rem 0', + textAlign: 'left', + color: '#888', + fontSize: '.95rem', + }, +}) + +const CodeBlock = ({ block }: CodeBlockProps) => { const els = block.code?.rich_text.map((textObject: RichTextItemResponse, i) => { const text = textObject as TextRichTextItemResponse return ( - + {text.text.content} ) @@ -25,12 +40,12 @@ const CodeBlock = ({ block, modules }: CodeBlockProps) => { }) return ( - <> +
      {els} -
      +
      {captions}
      - +
      ) } diff --git a/src/ui/components/Page/CodeBlock/CodeBlock.types.ts b/src/ui/components/Page/CodeBlock/CodeBlock.types.ts index 01b0b2b1..7a082b0e 100644 --- a/src/ui/components/Page/CodeBlock/CodeBlock.types.ts +++ b/src/ui/components/Page/CodeBlock/CodeBlock.types.ts @@ -1,7 +1,5 @@ import type { CodeBlockObjectResponse } from '../../../../exporter' -import type { ExternalModules } from '../../types' export interface CodeBlockProps { block: CodeBlockObjectResponse - modules?: ExternalModules } diff --git a/src/ui/components/Page/ColumnListBlock/ColumnListBlock.stories.tsx b/src/ui/components/Page/ColumnListBlock/ColumnListBlock.stories.tsx new file mode 100644 index 00000000..c14ae5b3 --- /dev/null +++ b/src/ui/components/Page/ColumnListBlock/ColumnListBlock.stories.tsx @@ -0,0 +1,397 @@ +import type { Meta, StoryObj } from '@storybook/react' +import type { ColumnListBlockObjectResponseEx } from '../../../../exporter' +import ColumnListBlock from './ColumnListBlock' + +const block: ColumnListBlockObjectResponseEx = { + object: 'block', + id: '12345678-1234-1234-1234-1234567890ab', + type: 'column_list', + parent: { + type: 'page_id', + page_id: '12345678-1234-1234-1234-1234567890ab', + }, + column_list: {}, + children: { + object: 'list', + results: [ + { + object: 'block', + id: '12345678-1234-1234-1234-1234567890ab', + parent: { + type: 'page_id', + page_id: '12345678-1234-1234-1234-1234567890ab', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + archived: false, + has_children: true, + type: 'column', + column: {}, + }, + { + object: 'block', + id: '12345678-1234-1234-1234-1234567890ab', + parent: { + type: 'page_id', + page_id: '12345678-1234-1234-1234-1234567890ab', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + archived: false, + has_children: true, + type: 'column', + column: {}, + }, + { + object: 'block', + id: '12345678-1234-1234-1234-1234567890ab', + parent: { + type: 'page_id', + page_id: '12345678-1234-1234-1234-1234567890ab', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + archived: false, + has_children: true, + type: 'column', + column: {}, + }, + ], + next_cursor: null, + has_more: false, + type: 'block', + block: {}, + last_edited_time: '2024-01-07T01:52:00.000Z', + }, + columns: [ + { + object: 'list', + results: [ + { + object: 'block', + id: '', + parent: { + type: 'block_id', + block_id: '', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + has_children: false, + archived: false, + type: 'heading_1', + heading_1: { + rich_text: [{ + type: 'text', + text: { + content: 'Bali', + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: 'Bali', + href: null, + }], + is_toggleable: false, + color: 'default', + }, + }, + { + object: 'block', + id: '', + parent: { + type: 'block_id', + block_id: '', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + has_children: false, + archived: false, + type: 'paragraph', + paragraph: { + rich_text: [{ + type: 'text', + text: { + content: 'Bali is predominantly a Hindu country. Bali is known for its elaborate, traditional dancing. The dancing is inspired by its Hindi beliefs. Most of the dancing portrays tales of good versus evil. To watch the dancing is a breathtaking experience. Lombok has some impressive points of interest.', + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: 'Bali is predominantly a Hindu country. Bali is known for its elaborate, traditional dancing. The dancing is inspired by its Hindi beliefs. Most of the dancing portrays tales of good versus evil. To watch the dancing is a breathtaking experience. Lombok has some impressive points of interest.', + href: null, + }], + color: 'default', + }, + }, + ], + next_cursor: null, + has_more: false, + type: 'block', + block: {}, + last_edited_time: '2024-01-07T01:48:00.000Z', + }, + { + object: 'list', + results: [ + { + object: 'block', + id: '', + parent: { + type: 'block_id', + block_id: '', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + has_children: false, + archived: false, + type: 'heading_1', + heading_1: { + rich_text: [{ + type: 'text', + text: { + content: 'Racial Equality', + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: 'Racial Equality', + href: null, + }], + is_toggleable: false, + color: 'default', + }, + }, + { + object: 'block', + id: '', + parent: { + type: 'block_id', + block_id: '', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + has_children: false, + archived: false, + type: 'paragraph', + paragraph: { + rich_text: [{ + type: 'text', + text: { + content: 'Martin Luther King Jr. led many demonstrations against racism. He delivered his message in a non-violent manner. Some members of his movement later engaged in less peaceful protests. Luther King was detained several times. The longest jail sentence he received was four months.', + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: 'Martin Luther King Jr. led many demonstrations against racism. He delivered his message in a non-violent manner. Some members of his movement later engaged in less peaceful protests. Luther King was detained several times. The longest jail sentence he received was four months.', + href: null, + }], + color: 'default', + }, + }, + ], + next_cursor: null, + has_more: false, + type: 'block', + block: {}, + last_edited_time: '2024-01-07T01:48:00.000Z', + }, + { + object: 'list', + results: [ + { + object: 'block', + id: '', + parent: { + type: 'block_id', + block_id: '', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + has_children: false, + archived: false, + type: 'heading_1', + heading_1: { + rich_text: [{ + type: 'text', + text: { + content: 'Possible Solution', + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: 'Possible Solution', + href: null, + }], + is_toggleable: false, + color: 'default', + }, + }, + { + object: 'block', + id: '', + parent: { + type: 'block_id', + block_id: '', + }, + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + has_children: false, + archived: false, + type: 'paragraph', + paragraph: { + rich_text: [{ + type: 'text', + text: { + content: 'Nelson Mandela and Martin Luther King Jr. both fought for racial equality. Although Luther King was an American citizen and Mandela a native South African, their dreams were the same. The intolerance of white people towards black co-inhabitants was the catalyst for years of activism.', + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: 'Nelson Mandela and Martin Luther King Jr. both fought for racial equality. Although Luther King was an American citizen and Mandela a native South African, their dreams were the same. The intolerance of white people towards black co-inhabitants was the catalyst for years of activism.', + href: null, + }], + color: 'default', + }, + }, + ], + next_cursor: null, + has_more: false, + type: 'block', + block: {}, + last_edited_time: '2024-01-07T01:48:00.000Z', + }, + ], + created_time: '2024-01-07T01:52:00.000Z', + last_edited_time: '2024-01-07T01:52:00.000Z', + created_by: { + object: 'user', + id: '' + }, + last_edited_by: { + object: 'user', + id: '' + }, + has_children: false, + archived: false, +} + +const meta = { + title: 'Page/ColumnListBlock', + component: ColumnListBlock, + args: { + block, + }, + tags: ['autodocs'], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} diff --git a/src/ui/components/Page/ColumnListBlock/ColumnListBlock.tsx b/src/ui/components/Page/ColumnListBlock/ColumnListBlock.tsx index f3c038d2..f7d14503 100644 --- a/src/ui/components/Page/ColumnListBlock/ColumnListBlock.tsx +++ b/src/ui/components/Page/ColumnListBlock/ColumnListBlock.tsx @@ -1,22 +1,41 @@ import React from 'react' import Page from '../Page' import type { ColumnListBlockProps } from './ColumnListBlock.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' + +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + margin: '1rem 0', + display: { + default: 'grid', + '@media (max-width: 580px)': 'block', + }, + gap: '5%', + }, + column: { + margin: '0 0 1rem', + }, +}) const ColumnListBlock = ({ block, href, link, query }: ColumnListBlockProps) => { const columns = block.columns.map((v, i) => { return ( -
      - {Page({ blocks: v, href, link, query })} +
      +
      ) }) + const l = columns.length const columnlistStyle = { gridTemplate: `repeat(1, 1fr) / repeat(${l}, 1fr)`, } return ( -
      +
      {columns}
      ) diff --git a/src/ui/components/Page/EmbedBlock/EmbedBlock.stories.tsx b/src/ui/components/Page/EmbedBlock/EmbedBlock.stories.tsx new file mode 100644 index 00000000..589be59a --- /dev/null +++ b/src/ui/components/Page/EmbedBlock/EmbedBlock.stories.tsx @@ -0,0 +1,71 @@ +import type { Meta, StoryObj } from '@storybook/react' +import type { EmbedBlockObjectResponseEx } from '../../../../exporter' +import EmbedBlock from './EmbedBlock' + +const block: EmbedBlockObjectResponseEx = { + object: 'block', + id: '12345678-1234-1234-1234-1234567890ab', + created_time: '', + last_edited_time: '', + created_by: { + object: 'user', + id: '12345678-1234-1234-1234-1234567890ab', + }, + last_edited_by: { + object: 'user', + id: '12345678-1234-1234-1234-1234567890ab', + }, + has_children: false, + archived: false, + type: 'embed', + parent: { + type: 'page_id', + page_id: '12345678-1234-1234-1234-1234567890ab', + }, + embed: { + caption: [ + { + type: 'text', + text: { + content: 'Nice', + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: 'default', + }, + plain_text: 'Nice', + href: null, + }, + ], + url: 'https://twitter.com/jack/status/1247616214769086465', + html: '\n\n\n', + }, +} + +const meta = { + title: 'Page/EmbedBlock', + component: EmbedBlock, + args: { + block, + }, + tags: ['autodocs'], +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Twitter: Story = {} + +const sd = structuredClone(block) +sd.embed.url = 'https://speakerdeck.com/lara/designing-for-performance' +sd.embed.html = '\n' +export const Speakerdeck: Story = { + args: { + block: sd, + }, +} diff --git a/src/ui/components/Page/EmbedBlock/EmbedBlock.tsx b/src/ui/components/Page/EmbedBlock/EmbedBlock.tsx index 21797b22..b224be76 100644 --- a/src/ui/components/Page/EmbedBlock/EmbedBlock.tsx +++ b/src/ui/components/Page/EmbedBlock/EmbedBlock.tsx @@ -1,21 +1,72 @@ import React, { useEffect } from 'react' -import TextBlock from '../TextBlock/TextBlock' +import { RichText } from '../RichText' import type { EmbedBlockProps } from './EmbedBlock.types' +import Stylex from '@stylexjs/stylex' +import { tokens } from '../../tokens.stylex' -const TwitterBlock = ({ block }: EmbedBlockProps) => { +const style = Stylex.create({ + wrapper: { + fontFamily: tokens.fontFamily, + width: '100%', + textAlign: 'center', + }, + html: { + width: '100%', + textAlign: 'center', + }, + caption: { + margin: '.3rem .3rem 0', + textAlign: 'left', + color: '#888', + fontSize: '.95rem', + }, + twitter: { + maxWidth: '550px', + margin: '0 auto', + }, + speakerdeck: { + maxWidth: '710px', + margin: '0 auto', + paddingBottom: '56.25%', /* 16:9 */ + position: 'relative', + height: 0, + }, +}) + +const Twitter = ({ block }: EmbedBlockProps) => { const htmlWithRemovedScript = block.embed.html.replace(/