diff --git a/cli/package.json b/cli/package.json index e9dd53df..00ea85b2 100644 --- a/cli/package.json +++ b/cli/package.json @@ -36,6 +36,9 @@ "dotenv": "^16.0.0", "fs-extra": "^10.1.0", "got": "11.8.5", + "ink": "^3.2.0", + "ink-tab": "^4.2.0", + "ink-text-input": "^4.0.3", "inquirer": "^8.2.2", "lodash": "^4.17.21", "node-plop": "^0.26.3", @@ -44,7 +47,9 @@ "p-series": "2.1.0", "plop": "^3.0.5", "pretty-ms": "7.0.1", + "react": "17.0.2", "tailchat-server-sdk": "^0.0.12", + "tailchat-shared": "workspace:*", "yargs": "^17.4.0" }, "devDependencies": { @@ -52,6 +57,7 @@ "@types/inquirer": "^8.2.1", "@types/lodash": "^4.14.170", "@types/node": "16.11.7", + "@types/react": "^17.0.39", "@types/yargs": "^17.0.10", "ts-node": "^10.7.0", "typescript": "^4.6.3" diff --git a/cli/src/app/App.tsx b/cli/src/app/App.tsx new file mode 100644 index 00000000..5e61b17b --- /dev/null +++ b/cli/src/app/App.tsx @@ -0,0 +1,45 @@ +import React, { useLayoutEffect, useState } from 'react'; +import { Box, Text, useStdout } from 'ink'; +import { Tabs, Tab } from 'ink-tab'; +import TextInput from 'ink-text-input'; +import { useScreenSize } from './hooks/useScreenSize'; + +export const App: React.FC = React.memo(() => { + const [text, setText] = useState(''); + const { height, width } = useScreenSize(); + const { stdout } = useStdout(); + + useLayoutEffect(() => { + stdout?.write('\x1b[?1049h'); + + return () => { + stdout?.write('\x1b[?1049l'); + }; + }, [stdout]); + + return ( + + + + + + + {}}> + + Foo + + + Bar + + + + + ); +}); +App.displayName = 'App'; diff --git a/cli/src/app/hooks/useScreenSize.ts b/cli/src/app/hooks/useScreenSize.ts new file mode 100644 index 00000000..bb83e29a --- /dev/null +++ b/cli/src/app/hooks/useScreenSize.ts @@ -0,0 +1,25 @@ +import { useCallback, useEffect, useState } from 'react'; +import { useStdout } from 'ink'; + +export function useScreenSize() { + const { stdout } = useStdout(); + const getSize = useCallback( + () => ({ + height: stdout?.rows ?? 0, + width: stdout?.columns ?? 0, + }), + [stdout] + ); + const [size, setSize] = useState(getSize); + + useEffect(() => { + const onResize = () => setSize(getSize()); + stdout?.on('resize', onResize); + + return () => { + stdout?.off('resize', onResize); + }; + }, [stdout, getSize]); + + return size; +} diff --git a/cli/src/app/index.tsx b/cli/src/app/index.tsx new file mode 100644 index 00000000..d06ed2c4 --- /dev/null +++ b/cli/src/app/index.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { App } from './App'; +import { render } from 'ink'; + +export function run() { + const ins = render(); + + return ins; +} diff --git a/cli/src/commands/app.ts b/cli/src/commands/app.ts new file mode 100644 index 00000000..2452604a --- /dev/null +++ b/cli/src/commands/app.ts @@ -0,0 +1,11 @@ +import { CommandModule } from 'yargs'; +import { run } from '../app'; + +export const appCommand: CommandModule = { + command: 'app', + describe: 'Tailchat cli 版本', + builder: undefined, + async handler() { + await run(); + }, +}; diff --git a/cli/src/index.ts b/cli/src/index.ts index 381cf943..57e2df79 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -1,6 +1,7 @@ import yargs from 'yargs'; import { createCommand } from './commands/create'; import { connectCommand } from './commands/connect'; +import { appCommand } from './commands/app'; import { declarationCommand } from './commands/declaration'; import { benchCommand } from './commands/bench'; @@ -8,6 +9,7 @@ yargs .demandCommand() .command(createCommand) .command(connectCommand) + .command(appCommand) .command(benchCommand) .command(declarationCommand) .alias('h', 'help') diff --git a/cli/tsconfig.json b/cli/tsconfig.json index fa3e4906..b0425a31 100644 --- a/cli/tsconfig.json +++ b/cli/tsconfig.json @@ -4,6 +4,7 @@ "module": "commonjs", "rootDir": "src", "outDir": "lib", + "jsx": "react", "allowSyntheticDefaultImports": true, "strict": true, "esModuleInterop": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08603d7d..a918db1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,11 +62,14 @@ importers: '@types/inquirer': ^8.2.1 '@types/lodash': ^4.14.170 '@types/node': 16.11.7 - '@types/pretty-hrtime': ^1.0.1 + '@types/react': ^17.0.39 '@types/yargs': ^17.0.10 dotenv: ^16.0.0 fs-extra: ^10.1.0 got: 11.8.5 + ink: ^3.2.0 + ink-tab: ^4.2.0 + ink-text-input: ^4.0.3 inquirer: ^8.2.2 lodash: ^4.17.21 node-plop: ^0.26.3 @@ -75,7 +78,9 @@ importers: p-series: 2.1.0 plop: ^3.0.5 pretty-ms: 7.0.1 + react: 17.0.2 tailchat-server-sdk: ^0.0.12 + tailchat-shared: workspace:* ts-node: ^10.7.0 typescript: ^4.6.3 yargs: ^17.4.0 @@ -83,6 +88,9 @@ importers: dotenv: 16.0.2 fs-extra: 10.1.0 got: 11.8.5 + ink: 3.2.0_skqlhrap4das3cz5b6iqdn2lqi + ink-tab: 4.2.0_ink@3.2.0+react@17.0.2 + ink-text-input: 4.0.3_ink@3.2.0+react@17.0.2 inquirer: 8.2.4 lodash: 4.17.21 node-plop: 0.26.3 @@ -91,14 +99,16 @@ importers: p-series: 2.1.0 plop: 3.1.1 pretty-ms: 7.0.1 + react: 17.0.2 tailchat-server-sdk: link:../server/packages/sdk + tailchat-shared: link:../client/shared yargs: 17.5.1 devDependencies: '@types/fs-extra': 9.0.13 '@types/inquirer': 8.2.3 '@types/lodash': 4.14.184 '@types/node': 16.11.7 - '@types/pretty-hrtime': 1.0.1 + '@types/react': 17.0.48 '@types/yargs': 17.0.12 ts-node: 10.9.1_rk33jgomelnuriwr3foeinccb4 typescript: 4.8.2 @@ -2944,7 +2954,7 @@ packages: react-dom: '*' dependencies: '@docusaurus/types': 2.0.0-beta.18 - '@types/react': 18.0.17 + '@types/react': 18.0.20 '@types/react-router-config': 5.0.6 '@types/react-router-dom': 5.3.3 react: 17.0.2 @@ -2966,7 +2976,7 @@ packages: '@docusaurus/react-loadable': 5.5.2_react@17.0.2 '@docusaurus/types': 2.0.1_sfoxds7t5ydpegc3knd667wn6m '@types/history': 4.7.11 - '@types/react': 18.0.17 + '@types/react': 18.0.20 '@types/react-router-config': 5.0.6 '@types/react-router-dom': 5.3.3 react: 17.0.2 @@ -3256,7 +3266,7 @@ packages: peerDependencies: react: '*' dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 prop-types: 15.8.1 react: 17.0.2 @@ -3411,7 +3421,7 @@ packages: react-dom: ^16.8.4 || ^17.0.0 dependencies: '@types/history': 4.7.11 - '@types/react': 18.0.17 + '@types/react': 18.0.20 commander: 5.1.0 joi: 17.6.0 react: 17.0.2 @@ -5866,7 +5876,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.18.9 - '@types/react': 18.0.17 + '@types/react': 18.0.20 '@types/react-dom': 17.0.17 '@types/react-test-renderer': 18.0.0 react: 17.0.2 @@ -6098,7 +6108,7 @@ packages: /@types/emoji-mart/3.0.9: resolution: {integrity: sha512-qdBo/2Y8MXaJ/2spKjDZocuq79GpnOhkwMHnK2GnVFa8WYFgfA+ei6sil3aeWQPCreOKIx9ogPpR5+7MaOqYAA==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 dev: true /@types/eslint-scope/3.7.4: @@ -6180,7 +6190,7 @@ packages: /@types/hoist-non-react-statics/3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 hoist-non-react-statics: 3.3.2 /@types/html-minifier-terser/5.1.2: @@ -6328,7 +6338,7 @@ packages: /@types/loadable__component/5.13.4: resolution: {integrity: sha512-YhoCCxyuvP2XeZNbHbi8Wb9EMaUJuA2VGHxJffcQYrJKIKSkymJrhbzsf9y4zpTmr5pExAAEh5hbF628PAZ8Dg==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 dev: true /@types/lodash/4.14.184: @@ -6476,7 +6486,7 @@ packages: /@types/react-helmet/6.1.5: resolution: {integrity: sha512-/ICuy7OHZxR0YCAZLNg9r7I9aijWUWvxaPR6uTuyxe8tAj5RL4Sw1+R6NhXUtOsarkGYPmaHdBDvuXh2DIN/uA==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 dev: true /@types/react-highlight/0.12.5: @@ -6488,7 +6498,7 @@ packages: /@types/react-mentions/4.1.6: resolution: {integrity: sha512-f4/BdnjlMxT47q+WqlcYYwFABbBMVQrDoFFeMeljtFC5nnR9/x8TOFmN18BJKgNuWMgivy9uE5EKtsjlay751w==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 dev: true /@types/react-redux/7.1.24: @@ -6503,14 +6513,14 @@ packages: resolution: {integrity: sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.0.17 + '@types/react': 18.0.20 '@types/react-router': 5.1.18 /@types/react-router-dom/5.3.3: resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.0.17 + '@types/react': 18.0.20 '@types/react-router': 5.1.18 /@types/react-router/5.1.18: @@ -6522,19 +6532,19 @@ packages: /@types/react-test-renderer/18.0.0: resolution: {integrity: sha512-C7/5FBJ3g3sqUahguGi03O79b8afNeSD6T8/GU50oQrJCU0bVCCGQHaGKUbg2Ce8VQEEqTw8/HiS6lXHHdgkdQ==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 dev: true /@types/react-transition-group/4.4.5: resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 dev: true /@types/react-virtualized-auto-sizer/1.0.1: resolution: {integrity: sha512-GH8sAnBEM5GV9LTeiz56r4ZhMOUSrP43tAQNSRVxNexDjcNKLCEtnxusAItg1owFUFE6k0NslV26gqVClVvong==} dependencies: - '@types/react': 18.0.17 + '@types/react': 18.0.20 dev: true /@types/react-virtualized/9.21.21: @@ -6558,6 +6568,13 @@ packages: '@types/scheduler': 0.16.2 csstype: 3.1.0 + /@types/react/18.0.20: + resolution: {integrity: sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.0 + /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: @@ -6738,6 +6755,10 @@ packages: '@types/yargs-parser': 21.0.0 dev: true + /@types/yoga-layout/1.9.2: + resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} + dev: false + /@typescript-eslint/eslint-plugin/5.35.1_4kgehhvxgrxdvptdn2db7re534: resolution: {integrity: sha512-RBZZXZlI4XCY4Wzgy64vB+0slT9+yAPQRjj/HSaRwUot33xbDjF1oN9BLwOLTewoOI0jothIltZRe9uJCHf8gg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7865,6 +7886,11 @@ packages: hasBin: true dev: true + /auto-bind/4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: false + /autoprefixer/10.4.8_postcss@8.4.16: resolution: {integrity: sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==} engines: {node: ^10 || ^12 || >=14} @@ -9129,7 +9155,6 @@ packages: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 - dev: true /cli-truncate/3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} @@ -9240,6 +9265,13 @@ packages: chalk: 2.4.2 q: 1.5.1 + /code-excerpt/3.0.0: + resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} + engines: {node: '>=10'} + dependencies: + convert-to-spaces: 1.0.2 + dev: false + /collapse-white-space/1.0.6: resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} @@ -9727,6 +9759,11 @@ packages: dependencies: safe-buffer: 5.1.2 + /convert-to-spaces/1.0.2: + resolution: {integrity: sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==} + engines: {node: '>= 4'} + dev: false + /convert-units/3.0.0-beta.4: resolution: {integrity: sha512-n/hYi+a2bj5PU0PJRn96Nv2wnJozXlWsVCpWTfbc2Yrl3M293u9Z/2NI5LelYpfyWpGTZaouZkOzHpBFGdk/UQ==} dev: true @@ -11759,7 +11796,6 @@ packages: /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - dev: true /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} @@ -14189,6 +14225,70 @@ packages: engines: {node: '>=10'} dev: false + /ink-tab/4.2.0_ink@3.2.0+react@17.0.2: + resolution: {integrity: sha512-KrvNWrebGCXWbGf74QE0XYKYGUCa0dEgHGa3B4VJK3PQh8+wXycQeGnl1s/kq3OokWOmMyfkc/BTPgulxjXspQ==} + peerDependencies: + ink: ^3.0.0 + react: ^16.8.0 + dependencies: + ink: 3.2.0_skqlhrap4das3cz5b6iqdn2lqi + prop-types: 15.8.1 + react: 17.0.2 + dev: false + + /ink-text-input/4.0.3_ink@3.2.0+react@17.0.2: + resolution: {integrity: sha512-eQD01ik9ltmNoHmkeQ2t8LszYkv2XwuPSUz3ie/85qer6Ll/j0QSlSaLNl6ENHZakBHdCBVZY04iOXcLLXA0PQ==} + engines: {node: '>=10'} + peerDependencies: + ink: ^3.0.0-3 + react: ^16.5.2 || ^17.0.0 + dependencies: + chalk: 4.1.2 + ink: 3.2.0_skqlhrap4das3cz5b6iqdn2lqi + react: 17.0.2 + type-fest: 0.15.1 + dev: false + + /ink/3.2.0_skqlhrap4das3cz5b6iqdn2lqi: + resolution: {integrity: sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '>=16.8.0' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.48 + ansi-escapes: 4.3.2 + auto-bind: 4.0.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + cli-cursor: 3.1.0 + cli-truncate: 2.1.0 + code-excerpt: 3.0.0 + indent-string: 4.0.0 + is-ci: 2.0.0 + lodash: 4.17.21 + patch-console: 1.0.0 + react: 17.0.2 + react-devtools-core: 4.25.0 + react-reconciler: 0.26.2_react@17.0.2 + scheduler: 0.20.2 + signal-exit: 3.0.7 + slice-ansi: 3.0.0 + stack-utils: 2.0.5 + string-width: 4.2.3 + type-fest: 0.12.0 + widest-line: 3.1.0 + wrap-ansi: 6.2.0 + ws: 7.5.9 + yoga-layout-prebuilt: 1.10.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /inline-style-parser/0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -15098,7 +15198,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1_bqee57coj3oib6dw4m24wknwqe + ts-node: 10.9.1_t4lrjbt3sxauai4t5o275zsepa transitivePeerDependencies: - bufferutil - canvas @@ -18491,6 +18591,11 @@ packages: dev: false optional: true + /patch-console/1.0.0: + resolution: {integrity: sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==} + engines: {node: '>=10'} + dev: false + /path-browserify/0.0.1: resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} dev: true @@ -20457,6 +20562,16 @@ packages: - vue-template-compiler dev: false + /react-devtools-core/4.25.0: + resolution: {integrity: sha512-iewRrnu0ZnmfL+jJayKphXj04CFh6i3ezVnpCtcnZbTPSQgN09XqHAzXbKbqNDl7aTg9QLNkQRP6M3DvdrinWA==} + dependencies: + shell-quote: 1.7.3 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /react-docgen-typescript/2.2.2_typescript@4.7.4: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: @@ -20722,6 +20837,18 @@ packages: react: 17.0.2 dev: false + /react-reconciler/0.26.2_react@17.0.2: + resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^17.0.2 + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react: 17.0.2 + scheduler: 0.20.2 + dev: false + /react-redux/7.2.8_react@17.0.2: resolution: {integrity: sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==} peerDependencies: @@ -22108,7 +22235,6 @@ packages: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true /slice-ansi/4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} @@ -22475,7 +22601,6 @@ packages: engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 - dev: true /stackframe/1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -23679,7 +23804,6 @@ packages: typescript: 4.7.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false /ts-pnp/1.2.0_typescript@4.7.4: resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} @@ -23775,6 +23899,16 @@ packages: engines: {node: '>=4'} dev: true + /type-fest/0.12.0: + resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} + engines: {node: '>=10'} + dev: false + + /type-fest/0.15.1: + resolution: {integrity: sha512-n+UXrN8i5ioo7kqT/nF8xsEzLaqFra7k32SEsSPwvXVGyAcRgV/FUQN/sgfptJTR1oRmmq7z4IXMFSM7im7C9A==} + engines: {node: '>=10'} + dev: false + /type-fest/0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} @@ -25313,7 +25447,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -25550,6 +25683,13 @@ packages: engines: {node: '>=4'} dev: false + /yoga-layout-prebuilt/1.10.0: + resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==} + engines: {node: '>=8'} + dependencies: + '@types/yoga-layout': 1.9.2 + dev: false + /yup/0.32.11: resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==} engines: {node: '>=10'}